@joster-dev/chaos-control 0.1.0

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 (54) hide show
  1. package/README.md +86 -0
  2. package/esm2022/joster-dev-chaos-control.mjs +5 -0
  3. package/esm2022/lib/chaos-control.module.mjs +67 -0
  4. package/esm2022/lib/chaos-control.service.mjs +14 -0
  5. package/esm2022/lib/components/choice/choice.component.mjs +52 -0
  6. package/esm2022/lib/components/color/color.component.mjs +77 -0
  7. package/esm2022/lib/components/file/file.component.mjs +131 -0
  8. package/esm2022/lib/components/index.mjs +8 -0
  9. package/esm2022/lib/components/number/number.component.mjs +134 -0
  10. package/esm2022/lib/components/readonly/readonly.component.mjs +14 -0
  11. package/esm2022/lib/components/select/select.component.mjs +69 -0
  12. package/esm2022/lib/components/text/text.component.mjs +162 -0
  13. package/esm2022/lib/directives/border-radius.directive.mjs +41 -0
  14. package/esm2022/lib/directives/control.directive.mjs +46 -0
  15. package/esm2022/lib/directives/index.mjs +4 -0
  16. package/esm2022/lib/directives/item.directive.mjs +115 -0
  17. package/esm2022/lib/models/index.mjs +7 -0
  18. package/esm2022/lib/models/is-item.function.mjs +8 -0
  19. package/esm2022/lib/models/is-items.function.mjs +5 -0
  20. package/esm2022/lib/models/is-number.function.mjs +5 -0
  21. package/esm2022/lib/models/is-primitive.function.mjs +7 -0
  22. package/esm2022/lib/models/item.interface.mjs +2 -0
  23. package/esm2022/lib/models/primitive.type.mjs +2 -0
  24. package/esm2022/public-api.mjs +6 -0
  25. package/fesm2022/joster-dev-chaos-control.mjs +894 -0
  26. package/fesm2022/joster-dev-chaos-control.mjs.map +1 -0
  27. package/index.d.ts +5 -0
  28. package/lib/LICENSE +9 -0
  29. package/lib/chaos-control.module.d.ts +20 -0
  30. package/lib/chaos-control.service.d.ts +6 -0
  31. package/lib/components/choice/choice.component.d.ts +15 -0
  32. package/lib/components/color/color.component.d.ts +22 -0
  33. package/lib/components/file/file.component.d.ts +31 -0
  34. package/lib/components/index.d.ts +7 -0
  35. package/lib/components/number/number.component.d.ts +33 -0
  36. package/lib/components/readonly/readonly.component.d.ts +8 -0
  37. package/lib/components/select/select.component.d.ts +23 -0
  38. package/lib/components/text/text.component.d.ts +41 -0
  39. package/lib/directives/border-radius.directive.d.ts +12 -0
  40. package/lib/directives/control.directive.d.ts +18 -0
  41. package/lib/directives/index.d.ts +3 -0
  42. package/lib/directives/item.directive.d.ts +35 -0
  43. package/lib/models/index.d.ts +6 -0
  44. package/lib/models/is-item.function.d.ts +2 -0
  45. package/lib/models/is-items.function.d.ts +2 -0
  46. package/lib/models/is-number.function.d.ts +1 -0
  47. package/lib/models/is-primitive.function.d.ts +2 -0
  48. package/lib/models/item.interface.d.ts +6 -0
  49. package/lib/models/primitive.type.d.ts +1 -0
  50. package/package.json +57 -0
  51. package/public-api.d.ts +4 -0
  52. package/src/lib/atomic.scss +87 -0
  53. package/src/lib/styles.scss +83 -0
  54. package/src/lib/variables.scss +3 -0
@@ -0,0 +1,134 @@
1
+ import { Component, Input, Self } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { ControlDirective } from '../../directives';
4
+ import { isNumber } from '../../models';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ import * as i2 from "@joster-dev/icon";
8
+ export class NumberComponent extends ControlDirective {
9
+ get min() {
10
+ return this._min;
11
+ }
12
+ set min(value) {
13
+ if (!isNumber(value))
14
+ throw new Error('[min] expects: number');
15
+ this._min = value;
16
+ this.validation.next();
17
+ }
18
+ get max() {
19
+ return this._max;
20
+ }
21
+ set max(value) {
22
+ if (!isNumber(value))
23
+ throw new Error('[max] expects: number');
24
+ this._max = value;
25
+ this.validation.next();
26
+ }
27
+ get step() {
28
+ return this._step;
29
+ }
30
+ set step(value) {
31
+ if (!isNumber(value))
32
+ throw new Error('[step] expects: number');
33
+ this._step = value;
34
+ this.mustBeInteger = Number.isInteger(this._step);
35
+ }
36
+ constructor(ngControl) {
37
+ super();
38
+ this.ngControl = ngControl;
39
+ this._min = 0;
40
+ this._max = 9;
41
+ this._step = 1;
42
+ this.mustBeInteger = true;
43
+ this.sizePadding = 5;
44
+ this._model = null;
45
+ this.validation.subscribe(() => this.validate());
46
+ this.validation.next();
47
+ ngControl.valueAccessor = this;
48
+ }
49
+ get model() {
50
+ return this._model;
51
+ }
52
+ set model(value) {
53
+ this._model = value;
54
+ this.onChange(this._model);
55
+ }
56
+ get isDisabledAdd() {
57
+ return this.isDisabled === true
58
+ || this.model !== null
59
+ && this.model + this.step > this.max;
60
+ }
61
+ get isDisabledSubtract() {
62
+ return this.isDisabled === true
63
+ || this._model !== null
64
+ && this._model - this.step < this.min;
65
+ }
66
+ get maxDigitSize() {
67
+ return Math.max(this._step.toString().length, this._max.toString().length, this._min.toString().length);
68
+ }
69
+ onBeforeinput(e) {
70
+ const event = e;
71
+ if (event.data === null)
72
+ return;
73
+ const isDigit = /\d/.test(event.data);
74
+ const isMinus = event.data === '-';
75
+ const isMinusAllowed = this.min < 0;
76
+ const isBlockedNonDigit = !isDigit && !(isMinus && isMinusAllowed);
77
+ const isPastMax = Number((this._model || '') + event.data) > this.max;
78
+ if (isBlockedNonDigit || isPastMax)
79
+ event.preventDefault();
80
+ }
81
+ add(e) {
82
+ if (this.model === null) {
83
+ this.model = this.max;
84
+ return;
85
+ }
86
+ e.stepUp();
87
+ this.model = e.valueAsNumber;
88
+ }
89
+ subtract(e) {
90
+ if (this.model === null) {
91
+ this.model = this.min;
92
+ return;
93
+ }
94
+ e.stepDown();
95
+ this.model = e.valueAsNumber;
96
+ }
97
+ onChange(_model) { }
98
+ registerOnChange(fn) {
99
+ this.onChange = fn;
100
+ }
101
+ writeValue(value) {
102
+ if (value === undefined)
103
+ value = null;
104
+ if (typeof value === 'string')
105
+ value = parseFloat(value);
106
+ if (value === null || isNumber(value))
107
+ this._model = value;
108
+ }
109
+ validate() {
110
+ const validators = [
111
+ Validators.min(this.min),
112
+ Validators.max(this.max)
113
+ ];
114
+ if (this.required === true)
115
+ validators.push(Validators.required);
116
+ this.ngControl.control?.setValidators(validators);
117
+ this.ngControl.control?.updateValueAndValidity();
118
+ }
119
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: NumberComponent, deps: [{ token: i1.NgControl, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: NumberComponent, selector: "jo-number", inputs: { min: "min", max: "max", step: "step" }, usesInheritance: true, ngImport: i0, template: "<label [class.required]=\"required\">\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex align-items-stretch\">\r\n <input\r\n [(ngModel)]=\"model\"\r\n #numberInput\r\n class=\"d-flex align-items-center\"\r\n type=\"number\"\r\n [size]=\"maxDigitSize + sizePadding\"\r\n [class.active]=\"_model !== null\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n (beforeinput)=\"onBeforeinput($event)\"\r\n />\r\n <button\r\n class=\"d-flex align-items-center\"\r\n title=\"Subtract\"\r\n type=\"button\"\r\n [disabled]=\"isDisabledSubtract\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n (blur)=\"onTouched()\"\r\n (click)=\"subtract(numberInput)\"\r\n >\r\n <icon\r\n type=\"minus\"\r\n size=\"1em\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </button>\r\n <button\r\n class=\"d-flex align-items-center\"\r\n title=\"Add\"\r\n type=\"button\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [disabled]=\"isDisabledAdd\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n (blur)=\"onTouched()\"\r\n (click)=\"add(numberInput)\"\r\n >\r\n <icon\r\n type=\"plus\"\r\n size=\"1em\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </button>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['min']\">\r\n minimum number is {{min}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['max']\">\r\n maximum number is {{max}}\r\n </li>\r\n</ul> -->", styles: ["input[type=number]{-moz-appearance:textfield}input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}:host>div>input{border-right:0}:host>div>button:not(:last-child){border-right:0;border-left:0}:host>div>button:last-child{border-left:0}\n", ".d-flex{display:flex}.align-items-start{align-items:flex-start}.align-items-center{align-items:center}.align-items-stretch{align-items:stretch}.justify-content-between{justify-content:space-between}.flex-wrap{flex-wrap:wrap}.flex-column{flex-direction:column}.flex-1{flex:1}.flex-2{flex:2}.flex-3{flex:3}.align-self-center{align-self:center}.margin-right-1{margin-right:.5em}.margin-right-2{margin-right:1em}.margin-left-1{margin-left:.5em}.margin-left-2{margin-left:1em}.border-radius-right{border-top-right-radius:.5em;border-bottom-right-radius:.5em}.border-radius-left{border-top-left-radius:.5em;border-bottom-left-radius:.5em}.white-space-nowrap{white-space:nowrap}.text-right{text-align:right}.text-left{text-align:left}.text-center{text-align:center}\n", "label{display:block;padding-bottom:.5em;font-weight:700}label:empty{display:none}label.required:after{content:\"*\"}ul{list-style:none;margin:0;padding:0}ul>li{padding-top:.25em}a:not(.jo-ignore),button:not(.jo-ignore),.button,input,textarea{color:inherit;background:transparent;border-width:.15em;border-style:outset;border-color:currentColor;padding:.5em;margin:0;font-size:1em;line-height:1em}a:not(.jo-ignore):active,a:not(.jo-ignore).active,button:not(.jo-ignore):active,button:not(.jo-ignore).active,.button:active,.button.active,input:active,input.active,textarea:active,textarea.active{border-style:inset}a:not(.jo-ignore):disabled,a:not(.jo-ignore).disabled,button:not(.jo-ignore):disabled,button:not(.jo-ignore).disabled,.button:disabled,.button.disabled,input:disabled,input.disabled,textarea:disabled,textarea.disabled{cursor:not-allowed;border-style:solid;box-shadow:none;opacity:.5}a,button,.button{cursor:pointer}@keyframes invalid-border{0%,to{border-style:inset}50%{border-style:outset}}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.IconComponent, selector: "icon[type]", inputs: ["type", "fill", "fillRotate", "fillOpacity", "stroke", "strokeRotate", "spin"] }] }); }
121
+ }
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: NumberComponent, decorators: [{
123
+ type: Component,
124
+ args: [{ selector: 'jo-number', template: "<label [class.required]=\"required\">\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex align-items-stretch\">\r\n <input\r\n [(ngModel)]=\"model\"\r\n #numberInput\r\n class=\"d-flex align-items-center\"\r\n type=\"number\"\r\n [size]=\"maxDigitSize + sizePadding\"\r\n [class.active]=\"_model !== null\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n (beforeinput)=\"onBeforeinput($event)\"\r\n />\r\n <button\r\n class=\"d-flex align-items-center\"\r\n title=\"Subtract\"\r\n type=\"button\"\r\n [disabled]=\"isDisabledSubtract\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n (blur)=\"onTouched()\"\r\n (click)=\"subtract(numberInput)\"\r\n >\r\n <icon\r\n type=\"minus\"\r\n size=\"1em\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </button>\r\n <button\r\n class=\"d-flex align-items-center\"\r\n title=\"Add\"\r\n type=\"button\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [disabled]=\"isDisabledAdd\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n (blur)=\"onTouched()\"\r\n (click)=\"add(numberInput)\"\r\n >\r\n <icon\r\n type=\"plus\"\r\n size=\"1em\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </button>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['min']\">\r\n minimum number is {{min}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['max']\">\r\n maximum number is {{max}}\r\n </li>\r\n</ul> -->", styles: ["input[type=number]{-moz-appearance:textfield}input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}:host>div>input{border-right:0}:host>div>button:not(:last-child){border-right:0;border-left:0}:host>div>button:last-child{border-left:0}\n", ".d-flex{display:flex}.align-items-start{align-items:flex-start}.align-items-center{align-items:center}.align-items-stretch{align-items:stretch}.justify-content-between{justify-content:space-between}.flex-wrap{flex-wrap:wrap}.flex-column{flex-direction:column}.flex-1{flex:1}.flex-2{flex:2}.flex-3{flex:3}.align-self-center{align-self:center}.margin-right-1{margin-right:.5em}.margin-right-2{margin-right:1em}.margin-left-1{margin-left:.5em}.margin-left-2{margin-left:1em}.border-radius-right{border-top-right-radius:.5em;border-bottom-right-radius:.5em}.border-radius-left{border-top-left-radius:.5em;border-bottom-left-radius:.5em}.white-space-nowrap{white-space:nowrap}.text-right{text-align:right}.text-left{text-align:left}.text-center{text-align:center}\n", "label{display:block;padding-bottom:.5em;font-weight:700}label:empty{display:none}label.required:after{content:\"*\"}ul{list-style:none;margin:0;padding:0}ul>li{padding-top:.25em}a:not(.jo-ignore),button:not(.jo-ignore),.button,input,textarea{color:inherit;background:transparent;border-width:.15em;border-style:outset;border-color:currentColor;padding:.5em;margin:0;font-size:1em;line-height:1em}a:not(.jo-ignore):active,a:not(.jo-ignore).active,button:not(.jo-ignore):active,button:not(.jo-ignore).active,.button:active,.button.active,input:active,input.active,textarea:active,textarea.active{border-style:inset}a:not(.jo-ignore):disabled,a:not(.jo-ignore).disabled,button:not(.jo-ignore):disabled,button:not(.jo-ignore).disabled,.button:disabled,.button.disabled,input:disabled,input.disabled,textarea:disabled,textarea.disabled{cursor:not-allowed;border-style:solid;box-shadow:none;opacity:.5}a,button,.button{cursor:pointer}@keyframes invalid-border{0%,to{border-style:inset}50%{border-style:outset}}\n"] }]
125
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
126
+ type: Self
127
+ }] }], propDecorators: { min: [{
128
+ type: Input
129
+ }], max: [{
130
+ type: Input
131
+ }], step: [{
132
+ type: Input
133
+ }] } });
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYW9zLWNvbnRyb2wvc3JjL2xpYi9jb21wb25lbnRzL251bWJlci9udW1iZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NvbXBvbmVudHMvbnVtYmVyL251bWJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUE4RixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBV3hDLE1BQU0sT0FBTyxlQUFnQixTQUFRLGdCQUFnQjtJQUNuRCxJQUNJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUdELElBQ0ksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixD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SSxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxRQUFRO1FBQ2QsTUFBTSxVQUFVLEdBQWtCO1lBQ2hDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN4QixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDekIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJO1lBQ3hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0lBQ25ELENBQUM7OEdBMUlVLGVBQWU7a0dBQWYsZUFBZSwwSENkNUIsc3VEQTZEUzs7MkZEL0NJLGVBQWU7a0JBVDNCLFNBQVM7K0JBQ0UsV0FBVzs7MEJBaURsQixJQUFJO3lDQXZDSCxHQUFHO3NCQUROLEtBQUs7Z0JBYUYsR0FBRztzQkFETixLQUFLO2dCQWFGLElBQUk7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3IsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnam8tbnVtYmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbnVtYmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL251bWJlci5jb21wb25lbnQuc2NzcycsXHJcbiAgICAnLi4vLi4vYXRvbWljLnNjc3MnLFxyXG4gICAgJy4uLy4uL3N0eWxlcy5zY3NzJyxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOdW1iZXJDb21wb25lbnQgZXh0ZW5kcyBDb250cm9sRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG1pbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9taW47XHJcbiAgfVxyXG4gIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKCFpc051bWJlcih2YWx1ZSkpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignW21pbl0gZXhwZWN0czogbnVtYmVyJyk7XHJcbiAgICB0aGlzLl9taW4gPSB2YWx1ZTtcclxuICAgIHRoaXMudmFsaWRhdGlvbi5uZXh0KCk7XHJcbiAgfVxyXG4gIF9taW4gPSAwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBtYXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xyXG4gIH1cclxuICBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICghaXNOdW1iZXIodmFsdWUpKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ttYXhdIGV4cGVjdHM6IG51bWJlcicpO1xyXG4gICAgdGhpcy5fbWF4ID0gdmFsdWU7XHJcbiAgICB0aGlzLnZhbGlkYXRpb24ubmV4dCgpO1xyXG4gIH1cclxuICBfbWF4ID0gOTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgc3RlcCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGVwO1xyXG4gIH1cclxuICBzZXQgc3RlcCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbc3RlcF0gZXhwZWN0czogbnVtYmVyJyk7XHJcbiAgICB0aGlzLl9zdGVwID0gdmFsdWU7XHJcbiAgICB0aGlzLm11c3RCZUludGVnZXIgPSBOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuX3N0ZXApO1xyXG4gIH1cclxuICBfc3RlcCA9IDE7XHJcblxyXG4gIG11c3RCZUludGVnZXIgPSB0cnVlO1xyXG4gIHJlYWRvbmx5IHNpemVQYWRkaW5nID0gNTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRpb24uc3Vic2NyaWJlKCgpID0+IHRoaXMudmFsaWRhdGUoKSk7XHJcbiAgICB0aGlzLnZhbGlkYXRpb24ubmV4dCgpO1xyXG4gICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gIH1cclxuXHJcbiAgX21vZGVsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBnZXQgbW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XHJcbiAgfVxyXG4gIHNldCBtb2RlbCh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRGlzYWJsZWRBZGQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkID09PSB0cnVlXHJcbiAgICAgIHx8IHRoaXMubW9kZWwgIT09IG51bGxcclxuICAgICAgJiYgdGhpcy5tb2RlbCArIHRoaXMuc3RlcCA+IHRoaXMubWF4O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRGlzYWJsZWRTdWJ0cmFjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQgPT09IHRydWVcclxuICAgICAgfHwgdGhpcy5fbW9kZWwgIT09IG51bGxcclxuICAgICAgJiYgdGhpcy5fbW9kZWwgLSB0aGlzLnN0ZXAgPCB0aGlzLm1pbjtcclxuICB9XHJcblxyXG4gIGdldCBtYXhEaWdpdFNpemUoKSB7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoXHJcbiAgICAgIHRoaXMuX3N0ZXAudG9TdHJpbmcoKS5sZW5ndGgsXHJcbiAgICAgIHRoaXMuX21heC50b1N0cmluZygpLmxlbmd0aCxcclxuICAgICAgdGhpcy5fbWluLnRvU3RyaW5nKCkubGVuZ3RoXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25CZWZvcmVpbnB1dChlOiBFdmVudCkge1xyXG4gICAgY29uc3QgZXZlbnQgPSBlIGFzIElucHV0RXZlbnQ7XHJcbiAgICBpZiAoZXZlbnQuZGF0YSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgaXNEaWdpdCA9IC9cXGQvLnRlc3QoZXZlbnQuZGF0YSk7XHJcbiAgICBjb25zdCBpc01pbnVzID0gZXZlbnQuZGF0YSA9PT0gJy0nO1xyXG4gICAgY29uc3QgaXNNaW51c0FsbG93ZWQgPSB0aGlzLm1pbiA8IDA7XHJcbiAgICBjb25zdCBpc0Jsb2NrZWROb25EaWdpdCA9ICFpc0RpZ2l0ICYmICEoaXNNaW51cyAmJiBpc01pbnVzQWxsb3dlZClcclxuICAgIGNvbnN0IGlzUGFzdE1heCA9IE51bWJlcigodGhpcy5fbW9kZWwgfHwgJycpICsgZXZlbnQuZGF0YSkgPiB0aGlzLm1heDtcclxuICAgIGlmIChpc0Jsb2NrZWROb25EaWdpdCB8fCBpc1Bhc3RNYXgpXHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBhZGQoZTogSFRNTElucHV0RWxlbWVudCkge1xyXG4gICAgaWYgKHRoaXMubW9kZWwgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMubWF4O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZS5zdGVwVXAoKTtcclxuICAgIHRoaXMubW9kZWwgPSBlLnZhbHVlQXNOdW1iZXI7XHJcbiAgfVxyXG5cclxuICBzdWJ0cmFjdChlOiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICBpZiAodGhpcy5tb2RlbCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5taW47XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlLnN0ZXBEb3duKCk7XHJcbiAgICB0aGlzLm1vZGVsID0gZS52YWx1ZUFzTnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoX21vZGVsOiBudW1iZXIgfCBudWxsKSB7IH1cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgdmFsdWUgPSBudWxsO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKVxyXG4gICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCBpc051bWJlcih2YWx1ZSkpXHJcbiAgICAgIHRoaXMuX21vZGVsID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlKCkge1xyXG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtcclxuICAgICAgVmFsaWRhdG9ycy5taW4odGhpcy5taW4pLFxyXG4gICAgICBWYWxpZGF0b3JzLm1heCh0aGlzLm1heClcclxuICAgIF07XHJcblxyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgPT09IHRydWUpXHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sPy5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cInJlcXVpcmVkXCI+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2xhYmVsPlxyXG5cclxuPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdHJldGNoXCI+XHJcbiAgPGlucHV0XHJcbiAgICBbKG5nTW9kZWwpXT1cIm1vZGVsXCJcclxuICAgICNudW1iZXJJbnB1dFxyXG4gICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgW3NpemVdPVwibWF4RGlnaXRTaXplICsgc2l6ZVBhZGRpbmdcIlxyXG4gICAgW2NsYXNzLmFjdGl2ZV09XCJfbW9kZWwgIT09IG51bGxcIlxyXG4gICAgW2NsYXNzLmJvcmRlci1yYWRpdXMtbGVmdF09XCJib3JkZXJSYWRpdXNMZWZ0XCJcclxuICAgIFtjbGFzcy5pbnZhbGlkXT1cIm5nQ29udHJvbC5jb250cm9sPy5pbnZhbGlkXCJcclxuICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgIFttaW5dPVwibWluXCJcclxuICAgIFttYXhdPVwibWF4XCJcclxuICAgIChiZWZvcmVpbnB1dCk9XCJvbkJlZm9yZWlucHV0KCRldmVudClcIlxyXG4gIC8+XHJcbiAgPGJ1dHRvblxyXG4gICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgIHRpdGxlPVwiU3VidHJhY3RcIlxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFN1YnRyYWN0XCJcclxuICAgIFtjbGFzcy5pbnZhbGlkXT1cIm5nQ29udHJvbC5jb250cm9sPy5pbnZhbGlkXCJcclxuICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcclxuICAgIChjbGljayk9XCJzdWJ0cmFjdChudW1iZXJJbnB1dClcIlxyXG4gID5cclxuICAgIDxpY29uXHJcbiAgICAgIHR5cGU9XCJtaW51c1wiXHJcbiAgICAgIHNpemU9XCIxZW1cIlxyXG4gICAgICBbZmlsbF09XCJbbnVsbCwgJ2N1cnJlbnQnXVwiXHJcbiAgICAgIGZpbGxSb3RhdGU9XCI5MFwiXHJcbiAgICA+PC9pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxidXR0b25cclxuICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICB0aXRsZT1cIkFkZFwiXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIFtjbGFzcy5ib3JkZXItcmFkaXVzLXJpZ2h0XT1cImJvcmRlclJhZGl1c1JpZ2h0XCJcclxuICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQWRkXCJcclxuICAgIFtjbGFzcy5pbnZhbGlkXT1cIm5nQ29udHJvbC5jb250cm9sPy5pbnZhbGlkXCJcclxuICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcclxuICAgIChjbGljayk9XCJhZGQobnVtYmVySW5wdXQpXCJcclxuICA+XHJcbiAgICA8aWNvblxyXG4gICAgICB0eXBlPVwicGx1c1wiXHJcbiAgICAgIHNpemU9XCIxZW1cIlxyXG4gICAgICBbZmlsbF09XCJbbnVsbCwgJ2N1cnJlbnQnXVwiXHJcbiAgICAgIGZpbGxSb3RhdGU9XCI5MFwiXHJcbiAgICA+PC9pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPHVsICpuZ0lmPVwibmdDb250cm9sLmNvbnRyb2w/LmVycm9yc1wiPlxyXG4gIDxsaSAqbmdJZj1cIm5nQ29udHJvbC5jb250cm9sPy5lcnJvcnM/LlsnbWluJ11cIj5cclxuICAgIG1pbmltdW0gbnVtYmVyIGlzIHt7bWlufX1cclxuICA8L2xpPlxyXG4gIDxsaSAqbmdJZj1cIm5nQ29udHJvbC5jb250cm9sPy5lcnJvcnM/LlsnbWF4J11cIj5cclxuICAgIG1heGltdW0gbnVtYmVyIGlzIHt7bWF4fX1cclxuICA8L2xpPlxyXG48L3VsPiAtLT4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ReadonlyComponent {
4
+ constructor() { }
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ReadonlyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: ReadonlyComponent, selector: "jo-readonly", inputs: { model: "model" }, ngImport: i0, template: "<label>\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"readonly\">\r\n {{model}}\r\n</div>\r\n", styles: [":host>div{color:inherit;background:transparent;border-width:.15em;border-color:transparent;border-style:solid;padding:.5em}\n", "label{display:block;padding-bottom:.5em;font-weight:700}label:empty{display:none}label.required:after{content:\"*\"}ul{list-style:none;margin:0;padding:0}ul>li{padding-top:.25em}a:not(.jo-ignore),button:not(.jo-ignore),.button,input,textarea{color:inherit;background:transparent;border-width:.15em;border-style:outset;border-color:currentColor;padding:.5em;margin:0;font-size:1em;line-height:1em}a:not(.jo-ignore):active,a:not(.jo-ignore).active,button:not(.jo-ignore):active,button:not(.jo-ignore).active,.button:active,.button.active,input:active,input.active,textarea:active,textarea.active{border-style:inset}a:not(.jo-ignore):disabled,a:not(.jo-ignore).disabled,button:not(.jo-ignore):disabled,button:not(.jo-ignore).disabled,.button:disabled,.button.disabled,input:disabled,input.disabled,textarea:disabled,textarea.disabled{cursor:not-allowed;border-style:solid;box-shadow:none;opacity:.5}a,button,.button{cursor:pointer}@keyframes invalid-border{0%,to{border-style:inset}50%{border-style:outset}}\n"] }); }
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ReadonlyComponent, decorators: [{
9
+ type: Component,
10
+ args: [{ selector: 'jo-readonly', template: "<label>\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"readonly\">\r\n {{model}}\r\n</div>\r\n", styles: [":host>div{color:inherit;background:transparent;border-width:.15em;border-color:transparent;border-style:solid;padding:.5em}\n", "label{display:block;padding-bottom:.5em;font-weight:700}label:empty{display:none}label.required:after{content:\"*\"}ul{list-style:none;margin:0;padding:0}ul>li{padding-top:.25em}a:not(.jo-ignore),button:not(.jo-ignore),.button,input,textarea{color:inherit;background:transparent;border-width:.15em;border-style:outset;border-color:currentColor;padding:.5em;margin:0;font-size:1em;line-height:1em}a:not(.jo-ignore):active,a:not(.jo-ignore).active,button:not(.jo-ignore):active,button:not(.jo-ignore).active,.button:active,.button.active,input:active,input.active,textarea:active,textarea.active{border-style:inset}a:not(.jo-ignore):disabled,a:not(.jo-ignore).disabled,button:not(.jo-ignore):disabled,button:not(.jo-ignore).disabled,.button:disabled,.button.disabled,input:disabled,input.disabled,textarea:disabled,textarea.disabled{cursor:not-allowed;border-style:solid;box-shadow:none;opacity:.5}a,button,.button{cursor:pointer}@keyframes invalid-border{0%,to{border-style:inset}50%{border-style:outset}}\n"] }]
11
+ }], ctorParameters: () => [], propDecorators: { model: [{
12
+ type: Input
13
+ }] } });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NvbXBvbmVudHMvcmVhZG9ubHkvcmVhZG9ubHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NvbXBvbmVudHMvcmVhZG9ubHkvcmVhZG9ubHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBV2pELE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsZ0JBQWdCLENBQUM7OEdBSE4saUJBQWlCO2tHQUFqQixpQkFBaUIsK0VDWDlCLGlIQU9BOzsyRkRJYSxpQkFBaUI7a0JBUjdCLFNBQVM7K0JBQ0UsYUFBYTt3REFRZCxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHByaW1pdGl2ZSB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2pvLXJlYWRvbmx5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVhZG9ubHkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vcmVhZG9ubHkuY29tcG9uZW50LnNjc3MnLFxyXG4gICAgJy4uLy4uL3N0eWxlcy5zY3NzJyxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWFkb25seUNvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgbW9kZWw/OiBwcmltaXRpdmU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbn1cclxuIiwiPGxhYmVsPlxyXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuPC9sYWJlbD5cclxuXHJcbjxkaXYgY2xhc3M9XCJyZWFkb25seVwiPlxyXG4gIHt7bW9kZWx9fVxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,69 @@
1
+ import { Component, HostListener, Input, Self } from '@angular/core';
2
+ import { ItemDirective } from '../../directives';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@joster-dev/icon";
7
+ import * as i4 from "../text/text.component";
8
+ export class SelectComponent extends ItemDirective {
9
+ set searchTerm(value) {
10
+ this._searchTerm = value;
11
+ }
12
+ get showDropdown() {
13
+ return this._showDropdown;
14
+ }
15
+ set showDropdown(value) {
16
+ this._showDropdown = value;
17
+ if (this._showDropdown === false)
18
+ return;
19
+ const hostBoundingRect = this.hostElement.nativeElement.getBoundingClientRect();
20
+ this.isDropdownCloseToBottom = window.innerHeight < hostBoundingRect.bottom + parseInt(this.dropdownMaxHeight, 10);
21
+ }
22
+ constructor(ngControl, hostElement) {
23
+ super(ngControl);
24
+ this.ngControl = ngControl;
25
+ this.hostElement = hostElement;
26
+ this.dropdownMaxHeight = '200px';
27
+ this._searchTerm = '';
28
+ this._showDropdown = false;
29
+ this.isDropdownCloseToBottom = false;
30
+ }
31
+ onGlobalClick(event) {
32
+ if (!this.hostElement.nativeElement.contains(event.target))
33
+ this._showDropdown = false;
34
+ }
35
+ onClickSearch() {
36
+ this.showDropdown = !this.showDropdown;
37
+ }
38
+ onFocusSearch() {
39
+ this.showDropdown = !this.showDropdown;
40
+ }
41
+ onClick(item) {
42
+ this._model = this._model.filter(key => this._items.map(item => item.key).includes(key));
43
+ if (this._model.includes(item.key)) {
44
+ if (this.required === true && this._model.length === 1)
45
+ return;
46
+ this.model = this._model.filter(key => key !== item.key);
47
+ return;
48
+ }
49
+ if (!this.isMultiple && this._model.length === 1) {
50
+ this.model = [item.key];
51
+ return;
52
+ }
53
+ this.model = [...this._model, item.key];
54
+ }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: SelectComponent, deps: [{ token: i1.NgControl, self: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: SelectComponent, selector: "jo-select", inputs: { dropdownMaxHeight: "dropdownMaxHeight" }, host: { listeners: { "document:mousedown": "onGlobalClick($event)" } }, usesInheritance: true, ngImport: i0, template: "<label>\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex align-items-stretch\">\r\n <jo-text\r\n [borderRadiusLeft]=\"borderRadiusLeft\"\r\n [borderRadiusRight]=\"false\"\r\n [(ngModel)]=\"searchTerm\"\r\n [isGrow]=\"false\"\r\n class=\"flex-1\"\r\n (onFocus)=\"onFocusSearch()\"\r\n ></jo-text>\r\n <button\r\n class=\"d-flex\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"onClickSearch()\"\r\n >\r\n <icon\r\n size=\"1em\"\r\n type=\"chevron\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n [stroke]=\"['current']\"\r\n ></icon>\r\n </button>\r\n</div>\r\n\r\n<div\r\n class=\"drop {{isDropdownCloseToBottom ? 'up' : 'down'}}\"\r\n [hidden]=\"!showDropdown\"\r\n [style.max-height]=\"dropdownMaxHeight\"\r\n>\r\n <!-- <jo-button *ngIf=\"items.length === 0\">\r\n No Results\r\n </jo-button> -->\r\n <button\r\n *ngFor=\"let item of items; let idx = index\"\r\n class=\"d-flex\"\r\n [class.active]=\"_model.includes(item.key)\"\r\n [disabled]=\"isDisabled\"\r\n [class.invalid]=\"!ngControl.control?.invalid\"\r\n [class.border-radius-right]=\"borderRadiusRight && idx === items.length - 1\"\r\n [class.border-radius-left]=\"borderRadiusLeft && idx === 0\"\r\n (click)=\"onClick(item)\"\r\n (blur)=\"onTouched()\"\r\n >\r\n <icon-stack\r\n class=\"margin-right-1\"\r\n size=\"1em\"\r\n >\r\n <icon [type]=\"isMultiple ? 'squircle' : 'circle'\"></icon>\r\n <icon\r\n *ngIf=\"_model.includes(item.key)\"\r\n [type]=\"isMultiple ? 'check' : 'dot'\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </icon-stack>\r\n {{item.value}}\r\n </button>\r\n</div>", styles: [":host{position:relative;display:block}.drop{max-height:200px;overflow-y:auto}.drop.down{top:100%}.drop.up{bottom:100%}icon[type=chevron]{transform:rotate(180deg)}\n", "label{display:block;padding-bottom:.5em;font-weight:700}label:empty{display:none}label.required:after{content:\"*\"}ul{list-style:none;margin:0;padding:0}ul>li{padding-top:.25em}a:not(.jo-ignore),button:not(.jo-ignore),.button,input,textarea{color:inherit;background:transparent;border-width:.15em;border-style:outset;border-color:currentColor;padding:.5em;margin:0;font-size:1em;line-height:1em}a:not(.jo-ignore):active,a:not(.jo-ignore).active,button:not(.jo-ignore):active,button:not(.jo-ignore).active,.button:active,.button.active,input:active,input.active,textarea:active,textarea.active{border-style:inset}a:not(.jo-ignore):disabled,a:not(.jo-ignore).disabled,button:not(.jo-ignore):disabled,button:not(.jo-ignore).disabled,.button:disabled,.button.disabled,input:disabled,input.disabled,textarea:disabled,textarea.disabled{cursor:not-allowed;border-style:solid;box-shadow:none;opacity:.5}a,button,.button{cursor:pointer}@keyframes invalid-border{0%,to{border-style:inset}50%{border-style:outset}}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.IconComponent, selector: "icon[type]", inputs: ["type", "fill", "fillRotate", "fillOpacity", "stroke", "strokeRotate", "spin"] }, { kind: "component", type: i3.IconStackComponent, selector: "icon-stack" }, { kind: "component", type: i4.TextComponent, selector: "jo-text", inputs: ["placeholder", "minLength", "maxLength", "isSpellCheck", "isGrow", "rows"], outputs: ["onBlur", "onFocus"] }] }); }
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: SelectComponent, decorators: [{
59
+ type: Component,
60
+ args: [{ selector: 'jo-select', template: "<label>\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex align-items-stretch\">\r\n <jo-text\r\n [borderRadiusLeft]=\"borderRadiusLeft\"\r\n [borderRadiusRight]=\"false\"\r\n [(ngModel)]=\"searchTerm\"\r\n [isGrow]=\"false\"\r\n class=\"flex-1\"\r\n (onFocus)=\"onFocusSearch()\"\r\n ></jo-text>\r\n <button\r\n class=\"d-flex\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"onClickSearch()\"\r\n >\r\n <icon\r\n size=\"1em\"\r\n type=\"chevron\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n [stroke]=\"['current']\"\r\n ></icon>\r\n </button>\r\n</div>\r\n\r\n<div\r\n class=\"drop {{isDropdownCloseToBottom ? 'up' : 'down'}}\"\r\n [hidden]=\"!showDropdown\"\r\n [style.max-height]=\"dropdownMaxHeight\"\r\n>\r\n <!-- <jo-button *ngIf=\"items.length === 0\">\r\n No Results\r\n </jo-button> -->\r\n <button\r\n *ngFor=\"let item of items; let idx = index\"\r\n class=\"d-flex\"\r\n [class.active]=\"_model.includes(item.key)\"\r\n [disabled]=\"isDisabled\"\r\n [class.invalid]=\"!ngControl.control?.invalid\"\r\n [class.border-radius-right]=\"borderRadiusRight && idx === items.length - 1\"\r\n [class.border-radius-left]=\"borderRadiusLeft && idx === 0\"\r\n (click)=\"onClick(item)\"\r\n (blur)=\"onTouched()\"\r\n >\r\n <icon-stack\r\n class=\"margin-right-1\"\r\n size=\"1em\"\r\n >\r\n <icon [type]=\"isMultiple ? 'squircle' : 'circle'\"></icon>\r\n <icon\r\n *ngIf=\"_model.includes(item.key)\"\r\n [type]=\"isMultiple ? 'check' : 'dot'\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </icon-stack>\r\n {{item.value}}\r\n </button>\r\n</div>", styles: [":host{position:relative;display:block}.drop{max-height:200px;overflow-y:auto}.drop.down{top:100%}.drop.up{bottom:100%}icon[type=chevron]{transform:rotate(180deg)}\n", "label{display:block;padding-bottom:.5em;font-weight:700}label:empty{display:none}label.required:after{content:\"*\"}ul{list-style:none;margin:0;padding:0}ul>li{padding-top:.25em}a:not(.jo-ignore),button:not(.jo-ignore),.button,input,textarea{color:inherit;background:transparent;border-width:.15em;border-style:outset;border-color:currentColor;padding:.5em;margin:0;font-size:1em;line-height:1em}a:not(.jo-ignore):active,a:not(.jo-ignore).active,button:not(.jo-ignore):active,button:not(.jo-ignore).active,.button:active,.button.active,input:active,input.active,textarea:active,textarea.active{border-style:inset}a:not(.jo-ignore):disabled,a:not(.jo-ignore).disabled,button:not(.jo-ignore):disabled,button:not(.jo-ignore).disabled,.button:disabled,.button.disabled,input:disabled,input.disabled,textarea:disabled,textarea.disabled{cursor:not-allowed;border-style:solid;box-shadow:none;opacity:.5}a,button,.button{cursor:pointer}@keyframes invalid-border{0%,to{border-style:inset}50%{border-style:outset}}\n"] }]
61
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
62
+ type: Self
63
+ }] }, { type: i0.ElementRef }], propDecorators: { dropdownMaxHeight: [{
64
+ type: Input
65
+ }], onGlobalClick: [{
66
+ type: HostListener,
67
+ args: ['document:mousedown', ['$event']]
68
+ }] } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYW9zLWNvbnRyb2wvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7O0FBV2pELE1BQU0sT0FBTyxlQUFnQixTQUFRLGFBQWE7SUFJaEQsSUFBSSxVQUFVLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBR0QsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLO1lBQzlCLE9BQU87UUFDVCxNQUFNLGdCQUFnQixHQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekYsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUtELFlBQzBCLFNBQW9CLEVBQ3BDLFdBQXVCO1FBRS9CLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUhPLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUF2QnhCLHNCQUFpQixHQUFHLE9BQU8sQ0FBQztRQUtyQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQVlqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0Qiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFPaEMsQ0FBQztJQUdELGFBQWEsQ0FBQyxLQUFpQjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUN6QyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBVTtRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFFeEYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQ3BELE9BQU87WUFFVCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6RCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDOzhHQTdEVSxlQUFlO2tHQUFmLGVBQWUsb01DYjVCLCt1REE2RE07OzJGRGhETyxlQUFlO2tCQVIzQixTQUFTOytCQUNFLFdBQVc7OzBCQStCbEIsSUFBSTtrRUF0QkUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQTZCTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnam8tc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL3NlbGVjdC5jb21wb25lbnQuc2NzcycsXHJcbiAgICAnLi4vLi4vc3R5bGVzLnNjc3MnLFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEl0ZW1EaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIEBJbnB1dCgpIGRyb3Bkb3duTWF4SGVpZ2h0ID0gJzIwMHB4JztcclxuXHJcbiAgc2V0IHNlYXJjaFRlcm0odmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc2VhcmNoVGVybSA9IHZhbHVlO1xyXG4gIH1cclxuICBfc2VhcmNoVGVybSA9ICcnO1xyXG5cclxuICBnZXQgc2hvd0Ryb3Bkb3duKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dEcm9wZG93bjtcclxuICB9XHJcbiAgc2V0IHNob3dEcm9wZG93bih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2hvd0Ryb3Bkb3duID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fc2hvd0Ryb3Bkb3duID09PSBmYWxzZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgaG9zdEJvdW5kaW5nUmVjdDogRE9NUmVjdCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIHRoaXMuaXNEcm9wZG93bkNsb3NlVG9Cb3R0b20gPSB3aW5kb3cuaW5uZXJIZWlnaHQgPCBob3N0Qm91bmRpbmdSZWN0LmJvdHRvbSArIHBhcnNlSW50KHRoaXMuZHJvcGRvd25NYXhIZWlnaHQsIDEwKTtcclxuICB9XHJcbiAgX3Nob3dEcm9wZG93biA9IGZhbHNlO1xyXG5cclxuICBpc0Ryb3Bkb3duQ2xvc2VUb0JvdHRvbSA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBTZWxmKCkgcHVibGljIG92ZXJyaWRlIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcclxuICApIHtcclxuICAgIHN1cGVyKG5nQ29udHJvbCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uR2xvYmFsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpXHJcbiAgICAgIHRoaXMuX3Nob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlYXJjaCgpIHtcclxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gIXRoaXMuc2hvd0Ryb3Bkb3duO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1c1NlYXJjaCgpIHtcclxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gIXRoaXMuc2hvd0Ryb3Bkb3duO1xyXG4gIH1cclxuXHJcbiAgb25DbGljayhpdGVtOiBJdGVtKSB7XHJcbiAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihrZXkgPT4gdGhpcy5faXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5rZXkpLmluY2x1ZGVzKGtleSkpXHJcblxyXG4gICAgaWYgKHRoaXMuX21vZGVsLmluY2x1ZGVzKGl0ZW0ua2V5KSkge1xyXG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCA9PT0gdHJ1ZSAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihrZXkgPT4ga2V5ICE9PSBpdGVtLmtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNNdWx0aXBsZSAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5tb2RlbCA9IFtpdGVtLmtleV07XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZGVsID0gWy4uLnRoaXMuX21vZGVsLCBpdGVtLmtleV07XHJcbiAgfVxyXG59XHJcbiIsIjxsYWJlbD5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvbGFiZWw+XHJcblxyXG48ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0cmV0Y2hcIj5cclxuICA8am8tdGV4dFxyXG4gICAgW2JvcmRlclJhZGl1c0xlZnRdPVwiYm9yZGVyUmFkaXVzTGVmdFwiXHJcbiAgICBbYm9yZGVyUmFkaXVzUmlnaHRdPVwiZmFsc2VcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcclxuICAgIFtpc0dyb3ddPVwiZmFsc2VcIlxyXG4gICAgY2xhc3M9XCJmbGV4LTFcIlxyXG4gICAgKG9uRm9jdXMpPVwib25Gb2N1c1NlYXJjaCgpXCJcclxuICA+PC9qby10ZXh0PlxyXG4gIDxidXR0b25cclxuICAgIGNsYXNzPVwiZC1mbGV4XCJcclxuICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgIChjbGljayk9XCJvbkNsaWNrU2VhcmNoKClcIlxyXG4gID5cclxuICAgIDxpY29uXHJcbiAgICAgIHNpemU9XCIxZW1cIlxyXG4gICAgICB0eXBlPVwiY2hldnJvblwiXHJcbiAgICAgIFtmaWxsXT1cIltudWxsLCAnY3VycmVudCddXCJcclxuICAgICAgZmlsbFJvdGF0ZT1cIjkwXCJcclxuICAgICAgW3N0cm9rZV09XCJbJ2N1cnJlbnQnXVwiXHJcbiAgICA+PC9pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjxkaXZcclxuICBjbGFzcz1cImRyb3Age3tpc0Ryb3Bkb3duQ2xvc2VUb0JvdHRvbSA/ICd1cCcgOiAnZG93bid9fVwiXHJcbiAgW2hpZGRlbl09XCIhc2hvd0Ryb3Bkb3duXCJcclxuICBbc3R5bGUubWF4LWhlaWdodF09XCJkcm9wZG93bk1heEhlaWdodFwiXHJcbj5cclxuICA8IS0tIDxqby1idXR0b24gKm5nSWY9XCJpdGVtcy5sZW5ndGggPT09IDBcIj5cclxuICAgIE5vIFJlc3VsdHNcclxuICA8L2pvLWJ1dHRvbj4gLS0+XHJcbiAgPGJ1dHRvblxyXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpZHggPSBpbmRleFwiXHJcbiAgICBjbGFzcz1cImQtZmxleFwiXHJcbiAgICBbY2xhc3MuYWN0aXZlXT1cIl9tb2RlbC5pbmNsdWRlcyhpdGVtLmtleSlcIlxyXG4gICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgW2NsYXNzLmludmFsaWRdPVwiIW5nQ29udHJvbC5jb250cm9sPy5pbnZhbGlkXCJcclxuICAgIFtjbGFzcy5ib3JkZXItcmFkaXVzLXJpZ2h0XT1cImJvcmRlclJhZGl1c1JpZ2h0ICYmIGlkeCA9PT0gaXRlbXMubGVuZ3RoIC0gMVwiXHJcbiAgICBbY2xhc3MuYm9yZGVyLXJhZGl1cy1sZWZ0XT1cImJvcmRlclJhZGl1c0xlZnQgJiYgaWR4ID09PSAwXCJcclxuICAgIChjbGljayk9XCJvbkNsaWNrKGl0ZW0pXCJcclxuICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcclxuICA+XHJcbiAgICA8aWNvbi1zdGFja1xyXG4gICAgICBjbGFzcz1cIm1hcmdpbi1yaWdodC0xXCJcclxuICAgICAgc2l6ZT1cIjFlbVwiXHJcbiAgICA+XHJcbiAgICAgIDxpY29uIFt0eXBlXT1cImlzTXVsdGlwbGUgPyAnc3F1aXJjbGUnIDogJ2NpcmNsZSdcIj48L2ljb24+XHJcbiAgICAgIDxpY29uXHJcbiAgICAgICAgKm5nSWY9XCJfbW9kZWwuaW5jbHVkZXMoaXRlbS5rZXkpXCJcclxuICAgICAgICBbdHlwZV09XCJpc011bHRpcGxlID8gJ2NoZWNrJyA6ICdkb3QnXCJcclxuICAgICAgICBbZmlsbF09XCJbbnVsbCwgJ2N1cnJlbnQnXVwiXHJcbiAgICAgICAgZmlsbFJvdGF0ZT1cIjkwXCJcclxuICAgICAgPjwvaWNvbj5cclxuICAgIDwvaWNvbi1zdGFjaz5cclxuICAgIHt7aXRlbS52YWx1ZX19XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PiJdfQ==
@@ -0,0 +1,162 @@
1
+ import { Component, HostListener, Input, Output, Self, ViewChild, EventEmitter } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { Subject } from 'rxjs';
4
+ import { debounceTime } from 'rxjs/operators';
5
+ import { ControlDirective } from '../../directives';
6
+ import { isNumber } from '../../models';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/forms";
9
+ import * as i2 from "@angular/common";
10
+ export class TextComponent extends ControlDirective {
11
+ get placeholder() {
12
+ return this._placeholder;
13
+ }
14
+ set placeholder(v) {
15
+ const value = v;
16
+ if (typeof value !== 'string')
17
+ throw new Error('[placeholder] expects: string');
18
+ this._placeholder = value;
19
+ }
20
+ get minLength() {
21
+ return this._minLength;
22
+ }
23
+ set minLength(value) {
24
+ if (typeof value === 'string')
25
+ value = parseInt(value, 10);
26
+ if (value === undefined)
27
+ value = null;
28
+ if (!isNumber(value) || value < 0 || !Number.isInteger(value) || value === null)
29
+ throw new Error('[minLength] expects: positive integer');
30
+ this._minLength = value;
31
+ this.validation.next();
32
+ }
33
+ get maxLength() {
34
+ return this._maxLength;
35
+ }
36
+ set maxLength(value) {
37
+ if (typeof value === 'string')
38
+ value = parseInt(value, 10);
39
+ if (value === undefined)
40
+ value = null;
41
+ if (!isNumber(value) || value < 0 || !Number.isInteger(value) || value === null)
42
+ throw new Error('[maxLength] expects: positive integer');
43
+ this._maxLength = value;
44
+ this.validation.next();
45
+ }
46
+ set isGrow(value) {
47
+ if (value === '')
48
+ value = true;
49
+ if (value == null)
50
+ value = false;
51
+ if (typeof value !== 'boolean')
52
+ throw new Error('[isGrow] expects: boolean');
53
+ this._isGrow = value;
54
+ }
55
+ get model() {
56
+ return this._model;
57
+ }
58
+ set model(value) {
59
+ if (value === '')
60
+ value = null;
61
+ this._model = value;
62
+ this.onChange(this._model);
63
+ setTimeout(() => this.setTextareaHeight());
64
+ }
65
+ constructor(ngControl, renderer) {
66
+ super();
67
+ this.ngControl = ngControl;
68
+ this.renderer = renderer;
69
+ this._placeholder = '';
70
+ this._minLength = null;
71
+ this._maxLength = null;
72
+ this.isSpellCheck = false;
73
+ this._isGrow = false;
74
+ this.rows = 3;
75
+ this.onBlur = new EventEmitter();
76
+ this.onFocus = new EventEmitter();
77
+ this._model = null;
78
+ this.id = `_${Math.random().toString(36).substring(2, 11)}`;
79
+ this.resizeSubject = new Subject();
80
+ this.validation.subscribe(() => this.validate());
81
+ ngControl.valueAccessor = this;
82
+ this.resizeSubject
83
+ .pipe(debounceTime(300))
84
+ .subscribe(() => this._isGrow && this.setTextareaHeight());
85
+ }
86
+ ngOnDestroy() {
87
+ super.ngOnDestroy();
88
+ this.resizeSubject.complete();
89
+ }
90
+ onWindowResize() {
91
+ this.resizeSubject.next();
92
+ }
93
+ setTextareaHeight() {
94
+ if (!this.textareaElement || !this.textareaHiddenElement)
95
+ return;
96
+ const textarea = this.textareaElement.nativeElement;
97
+ const textareaHidden = this.textareaHiddenElement.nativeElement;
98
+ this.renderer.setStyle(textareaHidden, 'width', `calc(${textarea.scrollWidth}px - 1em)`);
99
+ this.renderer.setStyle(textareaHidden, 'height', 'auto');
100
+ this.renderer.setStyle(textarea, 'height', `${textareaHidden.scrollHeight}px`);
101
+ }
102
+ onChange(_model) { }
103
+ registerOnChange(fn) {
104
+ this.onChange = fn;
105
+ }
106
+ writeValue(v) {
107
+ let value = v;
108
+ if (value === '' || value === undefined)
109
+ value = null;
110
+ if (isNumber(value))
111
+ value = value.toString();
112
+ if (value === null || typeof value === 'string') {
113
+ this._model = value;
114
+ setTimeout(() => this.setTextareaHeight());
115
+ }
116
+ }
117
+ validate() {
118
+ const validators = [];
119
+ if (this._minLength != null)
120
+ validators.push(Validators.minLength(this._minLength));
121
+ if (this._maxLength != null)
122
+ validators.push(Validators.maxLength(this._maxLength));
123
+ if (this.required === true)
124
+ validators.push(Validators.required);
125
+ this.ngControl.control?.setValidators(validators);
126
+ this.ngControl.control?.updateValueAndValidity();
127
+ }
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: TextComponent, deps: [{ token: i1.NgControl, self: true }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
129
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: TextComponent, selector: "jo-text", inputs: { placeholder: "placeholder", minLength: "minLength", maxLength: "maxLength", isSpellCheck: "isSpellCheck", isGrow: "isGrow", rows: "rows" }, outputs: { onBlur: "onBlur", onFocus: "onFocus" }, host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "textareaElement", first: true, predicate: ["textarea"], descendants: true }, { propertyName: "textareaHiddenElement", first: true, predicate: ["textareaHidden"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<label\r\n [for]=\"id\"\r\n [class.required]=\"required\"\r\n>\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex\">\r\n <input\r\n *ngIf=\"!_isGrow\"\r\n type=\"text\"\r\n [(ngModel)]=\"model\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n class=\"flex-1\"\r\n [minlength]=\"_minLength\"\r\n [maxlength]=\"_maxLength\"\r\n [class.active]=\"_model !== null\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [id]=\"id\"\r\n [spellcheck]=\"isSpellCheck\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouched(); onBlur.emit($event)\"\r\n (focus)=\"onFocus.emit($event)\"\r\n />\r\n <textarea\r\n *ngIf=\"_isGrow\"\r\n #textarea\r\n [(ngModel)]=\"model\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n class=\"flex-1\"\r\n [rows]=\"rows\"\r\n [minlength]=\"_minLength\"\r\n [maxlength]=\"_maxLength\"\r\n [class.active]=\"_model !== null\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [id]=\"id\"\r\n [spellcheck]=\"isSpellCheck\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouched(); onBlur.emit($event)\"\r\n (focus)=\"onFocus.emit($event)\"\r\n ></textarea>\r\n</div>\r\n\r\n<div\r\n *ngIf=\"_isGrow\"\r\n class=\"d-flex\"\r\n>\r\n <textarea\r\n #textareaHidden\r\n [ngModel]=\"model\"\r\n class=\"hidden flex-1\"\r\n [rows]=\"rows\"\r\n ></textarea>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['minlength']\">\r\n minimum length is {{minLength}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['maxLength']\">\r\n maximum length is {{maxLength}}\r\n </li>\r\n</ul> -->", styles: [":host{display:block}textarea{font-family:inherit;cursor:text;overflow:hidden;resize:none;width:100%}textarea.hidden{padding:0;position:absolute;visibility:hidden;transition:none}input[type=text]{font-family:inherit;width:100%}\n", ".d-flex{display:flex}.align-items-start{align-items:flex-start}.align-items-center{align-items:center}.align-items-stretch{align-items:stretch}.justify-content-between{justify-content:space-between}.flex-wrap{flex-wrap:wrap}.flex-column{flex-direction:column}.flex-1{flex:1}.flex-2{flex:2}.flex-3{flex:3}.align-self-center{align-self:center}.margin-right-1{margin-right:.5em}.margin-right-2{margin-right:1em}.margin-left-1{margin-left:.5em}.margin-left-2{margin-left:1em}.border-radius-right{border-top-right-radius:.5em;border-bottom-right-radius:.5em}.border-radius-left{border-top-left-radius:.5em;border-bottom-left-radius:.5em}.white-space-nowrap{white-space:nowrap}.text-right{text-align:right}.text-left{text-align:left}.text-center{text-align:center}\n", "label{display:block;padding-bottom:.5em;font-weight:700}label:empty{display:none}label.required:after{content:\"*\"}ul{list-style:none;margin:0;padding:0}ul>li{padding-top:.25em}a:not(.jo-ignore),button:not(.jo-ignore),.button,input,textarea{color:inherit;background:transparent;border-width:.15em;border-style:outset;border-color:currentColor;padding:.5em;margin:0;font-size:1em;line-height:1em}a:not(.jo-ignore):active,a:not(.jo-ignore).active,button:not(.jo-ignore):active,button:not(.jo-ignore).active,.button:active,.button.active,input:active,input.active,textarea:active,textarea.active{border-style:inset}a:not(.jo-ignore):disabled,a:not(.jo-ignore).disabled,button:not(.jo-ignore):disabled,button:not(.jo-ignore).disabled,.button:disabled,.button.disabled,input:disabled,input.disabled,textarea:disabled,textarea.disabled{cursor:not-allowed;border-style:solid;box-shadow:none;opacity:.5}a,button,.button{cursor:pointer}@keyframes invalid-border{0%,to{border-style:inset}50%{border-style:outset}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
130
+ }
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: TextComponent, decorators: [{
132
+ type: Component,
133
+ args: [{ selector: 'jo-text', template: "<label\r\n [for]=\"id\"\r\n [class.required]=\"required\"\r\n>\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex\">\r\n <input\r\n *ngIf=\"!_isGrow\"\r\n type=\"text\"\r\n [(ngModel)]=\"model\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n class=\"flex-1\"\r\n [minlength]=\"_minLength\"\r\n [maxlength]=\"_maxLength\"\r\n [class.active]=\"_model !== null\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [id]=\"id\"\r\n [spellcheck]=\"isSpellCheck\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouched(); onBlur.emit($event)\"\r\n (focus)=\"onFocus.emit($event)\"\r\n />\r\n <textarea\r\n *ngIf=\"_isGrow\"\r\n #textarea\r\n [(ngModel)]=\"model\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n class=\"flex-1\"\r\n [rows]=\"rows\"\r\n [minlength]=\"_minLength\"\r\n [maxlength]=\"_maxLength\"\r\n [class.active]=\"_model !== null\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [id]=\"id\"\r\n [spellcheck]=\"isSpellCheck\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouched(); onBlur.emit($event)\"\r\n (focus)=\"onFocus.emit($event)\"\r\n ></textarea>\r\n</div>\r\n\r\n<div\r\n *ngIf=\"_isGrow\"\r\n class=\"d-flex\"\r\n>\r\n <textarea\r\n #textareaHidden\r\n [ngModel]=\"model\"\r\n class=\"hidden flex-1\"\r\n [rows]=\"rows\"\r\n ></textarea>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['minlength']\">\r\n minimum length is {{minLength}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['maxLength']\">\r\n maximum length is {{maxLength}}\r\n </li>\r\n</ul> -->", styles: [":host{display:block}textarea{font-family:inherit;cursor:text;overflow:hidden;resize:none;width:100%}textarea.hidden{padding:0;position:absolute;visibility:hidden;transition:none}input[type=text]{font-family:inherit;width:100%}\n", ".d-flex{display:flex}.align-items-start{align-items:flex-start}.align-items-center{align-items:center}.align-items-stretch{align-items:stretch}.justify-content-between{justify-content:space-between}.flex-wrap{flex-wrap:wrap}.flex-column{flex-direction:column}.flex-1{flex:1}.flex-2{flex:2}.flex-3{flex:3}.align-self-center{align-self:center}.margin-right-1{margin-right:.5em}.margin-right-2{margin-right:1em}.margin-left-1{margin-left:.5em}.margin-left-2{margin-left:1em}.border-radius-right{border-top-right-radius:.5em;border-bottom-right-radius:.5em}.border-radius-left{border-top-left-radius:.5em;border-bottom-left-radius:.5em}.white-space-nowrap{white-space:nowrap}.text-right{text-align:right}.text-left{text-align:left}.text-center{text-align:center}\n", "label{display:block;padding-bottom:.5em;font-weight:700}label:empty{display:none}label.required:after{content:\"*\"}ul{list-style:none;margin:0;padding:0}ul>li{padding-top:.25em}a:not(.jo-ignore),button:not(.jo-ignore),.button,input,textarea{color:inherit;background:transparent;border-width:.15em;border-style:outset;border-color:currentColor;padding:.5em;margin:0;font-size:1em;line-height:1em}a:not(.jo-ignore):active,a:not(.jo-ignore).active,button:not(.jo-ignore):active,button:not(.jo-ignore).active,.button:active,.button.active,input:active,input.active,textarea:active,textarea.active{border-style:inset}a:not(.jo-ignore):disabled,a:not(.jo-ignore).disabled,button:not(.jo-ignore):disabled,button:not(.jo-ignore).disabled,.button:disabled,.button.disabled,input:disabled,input.disabled,textarea:disabled,textarea.disabled{cursor:not-allowed;border-style:solid;box-shadow:none;opacity:.5}a,button,.button{cursor:pointer}@keyframes invalid-border{0%,to{border-style:inset}50%{border-style:outset}}\n"] }]
134
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
135
+ type: Self
136
+ }] }, { type: i0.Renderer2 }], propDecorators: { placeholder: [{
137
+ type: Input
138
+ }], minLength: [{
139
+ type: Input
140
+ }], maxLength: [{
141
+ type: Input
142
+ }], isSpellCheck: [{
143
+ type: Input
144
+ }], isGrow: [{
145
+ type: Input
146
+ }], rows: [{
147
+ type: Input
148
+ }], onBlur: [{
149
+ type: Output
150
+ }], onFocus: [{
151
+ type: Output
152
+ }], textareaElement: [{
153
+ type: ViewChild,
154
+ args: ['textarea']
155
+ }], textareaHiddenElement: [{
156
+ type: ViewChild,
157
+ args: ['textareaHidden']
158
+ }], onWindowResize: [{
159
+ type: HostListener,
160
+ args: ['window:resize']
161
+ }] } });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGFvcy1jb250cm9sL3NyYy9saWIvY29tcG9uZW50cy90ZXh0L3RleHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NvbXBvbmVudHMvdGV4dC90ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWEsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFnRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBV3hDLE1BQU0sT0FBTyxhQUFjLFNBQVEsZ0JBQWdCO0lBQ2pELElBQ0ksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsQ0FBUztRQUN2QixNQUFNLEtBQUssR0FBRyxDQUFZLENBQUM7UUFDM0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBR0QsSUFDSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENB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LFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztJQUNuRCxDQUFDOzhHQXBKVSxhQUFhO2tHQUFiLGFBQWEsb2lCQ2pCMUIsKzJEQWtFUzs7MkZEakRJLGFBQWE7a0JBVHpCLFNBQVM7K0JBQ0UsU0FBUzs7MEJBOEZoQixJQUFJO2lFQXBGSCxXQUFXO3NCQURkLEtBQUs7Z0JBYUYsU0FBUztzQkFEWixLQUFLO2dCQWlCRixTQUFTO3NCQURaLEtBQUs7Z0JBaUJOLFlBQVk7c0JBRFgsS0FBSztnQkFJRixNQUFNO3NCQURULEtBQUs7Z0JBWUcsSUFBSTtzQkFBWixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUVnQixlQUFlO3NCQUFyQyxTQUFTO3VCQUFDLFVBQVU7Z0JBQ1EscUJBQXFCO3NCQUFqRCxTQUFTO3VCQUFDLGdCQUFnQjtnQkFxQzNCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCwgUmVuZGVyZXIyLCBTZWxmLCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnam8tdGV4dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vdGV4dC5jb21wb25lbnQuc2NzcycsXHJcbiAgICAnLi4vLi4vYXRvbWljLnNjc3MnLFxyXG4gICAgJy4uLy4uL3N0eWxlcy5zY3NzJyxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXh0Q29tcG9uZW50IGV4dGVuZHMgQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xyXG4gIH1cclxuICBzZXQgcGxhY2Vob2xkZXIodjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHYgYXMgdW5rbm93bjtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1twbGFjZWhvbGRlcl0gZXhwZWN0czogc3RyaW5nJyk7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xyXG4gIH1cclxuICBfcGxhY2Vob2xkZXIgPSAnJztcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgbWluTGVuZ3RoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkxlbmd0aDtcclxuICB9XHJcbiAgc2V0IG1pbkxlbmd0aCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICB2YWx1ZSA9IG51bGw7XHJcbiAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSB8fCB2YWx1ZSA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlID09PSBudWxsKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ttaW5MZW5ndGhdIGV4cGVjdHM6IHBvc2l0aXZlIGludGVnZXInKTtcclxuICAgIHRoaXMuX21pbkxlbmd0aCA9IHZhbHVlO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uLm5leHQoKTtcclxuICB9XHJcbiAgX21pbkxlbmd0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG1heExlbmd0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXhMZW5ndGg7XHJcbiAgfVxyXG4gIHNldCBtYXhMZW5ndGgodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKVxyXG4gICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgdmFsdWUgPSBudWxsO1xyXG4gICAgaWYgKCFpc051bWJlcih2YWx1ZSkgfHwgdmFsdWUgPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA9PT0gbnVsbClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbbWF4TGVuZ3RoXSBleHBlY3RzOiBwb3NpdGl2ZSBpbnRlZ2VyJyk7XHJcbiAgICB0aGlzLl9tYXhMZW5ndGggPSB2YWx1ZTtcclxuICAgIHRoaXMudmFsaWRhdGlvbi5uZXh0KCk7XHJcbiAgfVxyXG4gIF9tYXhMZW5ndGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGlzU3BlbGxDaGVjayA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc0dyb3codmFsdWU6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgaWYgKHZhbHVlID09PSAnJylcclxuICAgICAgdmFsdWUgPSB0cnVlO1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpXHJcbiAgICAgIHZhbHVlID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignW2lzR3Jvd10gZXhwZWN0czogYm9vbGVhbicpO1xyXG4gICAgdGhpcy5faXNHcm93ID0gdmFsdWU7XHJcbiAgfVxyXG4gIF9pc0dyb3cgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcm93cyA9IDM7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RleHRhcmVhJykgdGV4dGFyZWFFbGVtZW50PzogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd0ZXh0YXJlYUhpZGRlbicpIHRleHRhcmVhSGlkZGVuRWxlbWVudD86IEVsZW1lbnRSZWY7XHJcblxyXG4gIGdldCBtb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlbDtcclxuICB9XHJcbiAgc2V0IG1vZGVsKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBpZiAodmFsdWUgPT09ICcnKVxyXG4gICAgICB2YWx1ZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX21vZGVsKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRUZXh0YXJlYUhlaWdodCgpKTtcclxuICB9XHJcbiAgX21vZGVsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaWQgPSBgXyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDExKX1gO1xyXG4gIHJlc2l6ZVN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMudmFsaWRhdGlvbi5zdWJzY3JpYmUoKCkgPT4gdGhpcy52YWxpZGF0ZSgpKTtcclxuICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIHRoaXMucmVzaXplU3ViamVjdFxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9pc0dyb3cgJiYgdGhpcy5zZXRUZXh0YXJlYUhlaWdodCgpKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgIHRoaXMucmVzaXplU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcbiAgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZVN1YmplY3QubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGV4dGFyZWFIZWlnaHQoKSB7XHJcbiAgICBpZiAoIXRoaXMudGV4dGFyZWFFbGVtZW50IHx8ICF0aGlzLnRleHRhcmVhSGlkZGVuRWxlbWVudClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLnRleHRhcmVhRWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgdGV4dGFyZWFIaWRkZW4gPSB0aGlzLnRleHRhcmVhSGlkZGVuRWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZXh0YXJlYUhpZGRlbiwgJ3dpZHRoJywgYGNhbGMoJHt0ZXh0YXJlYS5zY3JvbGxXaWR0aH1weCAtIDFlbSlgKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGV4dGFyZWFIaWRkZW4sICdoZWlnaHQnLCAnYXV0bycpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZXh0YXJlYSwgJ2hlaWdodCcsIGAke3RleHRhcmVhSGlkZGVuLnNjcm9sbEhlaWdodH1weGApO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoX21vZGVsOiBzdHJpbmcgfCBudWxsKSB7IH1cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHY6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIGxldCB2YWx1ZSA9IHYgYXMgdW5rbm93bjtcclxuICAgIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgdmFsdWUgPSBudWxsO1xyXG4gICAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcclxuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldFRleHRhcmVhSGVpZ2h0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZSgpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5fbWluTGVuZ3RoICE9IG51bGwpXHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLl9taW5MZW5ndGgpKTtcclxuXHJcbiAgICBpZiAodGhpcy5fbWF4TGVuZ3RoICE9IG51bGwpXHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLl9tYXhMZW5ndGgpKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZXF1aXJlZCA9PT0gdHJ1ZSlcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxsYWJlbFxyXG4gIFtmb3JdPVwiaWRcIlxyXG4gIFtjbGFzcy5yZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbj5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvbGFiZWw+XHJcblxyXG48ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgPGlucHV0XHJcbiAgICAqbmdJZj1cIiFfaXNHcm93XCJcclxuICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgIFsobmdNb2RlbCldPVwibW9kZWxcIlxyXG4gICAgW2NsYXNzLmJvcmRlci1yYWRpdXMtcmlnaHRdPVwiYm9yZGVyUmFkaXVzUmlnaHRcIlxyXG4gICAgW2NsYXNzLmJvcmRlci1yYWRpdXMtbGVmdF09XCJib3JkZXJSYWRpdXNMZWZ0XCJcclxuICAgIGNsYXNzPVwiZmxleC0xXCJcclxuICAgIFttaW5sZW5ndGhdPVwiX21pbkxlbmd0aFwiXHJcbiAgICBbbWF4bGVuZ3RoXT1cIl9tYXhMZW5ndGhcIlxyXG4gICAgW2NsYXNzLmFjdGl2ZV09XCJfbW9kZWwgIT09IG51bGxcIlxyXG4gICAgW2NsYXNzLmludmFsaWRdPVwibmdDb250cm9sLmNvbnRyb2w/LmludmFsaWRcIlxyXG4gICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgW2lkXT1cImlkXCJcclxuICAgIFtzcGVsbGNoZWNrXT1cImlzU3BlbGxDaGVja1wiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgKGJsdXIpPVwib25Ub3VjaGVkKCk7IG9uQmx1ci5lbWl0KCRldmVudClcIlxyXG4gICAgKGZvY3VzKT1cIm9uRm9jdXMuZW1pdCgkZXZlbnQpXCJcclxuICAvPlxyXG4gIDx0ZXh0YXJlYVxyXG4gICAgKm5nSWY9XCJfaXNHcm93XCJcclxuICAgICN0ZXh0YXJlYVxyXG4gICAgWyhuZ01vZGVsKV09XCJtb2RlbFwiXHJcbiAgICBbY2xhc3MuYm9yZGVyLXJhZGl1cy1yaWdodF09XCJib3JkZXJSYWRpdXNSaWdodFwiXHJcbiAgICBbY2xhc3MuYm9yZGVyLXJhZGl1cy1sZWZ0XT1cImJvcmRlclJhZGl1c0xlZnRcIlxyXG4gICAgY2xhc3M9XCJmbGV4LTFcIlxyXG4gICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICBbbWlubGVuZ3RoXT1cIl9taW5MZW5ndGhcIlxyXG4gICAgW21heGxlbmd0aF09XCJfbWF4TGVuZ3RoXCJcclxuICAgIFtjbGFzcy5hY3RpdmVdPVwiX21vZGVsICE9PSBudWxsXCJcclxuICAgIFtjbGFzcy5pbnZhbGlkXT1cIm5nQ29udHJvbC5jb250cm9sPy5pbnZhbGlkXCJcclxuICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgIFtpZF09XCJpZFwiXHJcbiAgICBbc3BlbGxjaGVja109XCJpc1NwZWxsQ2hlY2tcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgIChibHVyKT1cIm9uVG91Y2hlZCgpOyBvbkJsdXIuZW1pdCgkZXZlbnQpXCJcclxuICAgIChmb2N1cyk9XCJvbkZvY3VzLmVtaXQoJGV2ZW50KVwiXHJcbiAgPjwvdGV4dGFyZWE+XHJcbjwvZGl2PlxyXG5cclxuPGRpdlxyXG4gICpuZ0lmPVwiX2lzR3Jvd1wiXHJcbiAgY2xhc3M9XCJkLWZsZXhcIlxyXG4+XHJcbiAgPHRleHRhcmVhXHJcbiAgICAjdGV4dGFyZWFIaWRkZW5cclxuICAgIFtuZ01vZGVsXT1cIm1vZGVsXCJcclxuICAgIGNsYXNzPVwiaGlkZGVuIGZsZXgtMVwiXHJcbiAgICBbcm93c109XCJyb3dzXCJcclxuICA+PC90ZXh0YXJlYT5cclxuPC9kaXY+XHJcblxyXG48IS0tIDx1bCAqbmdJZj1cIm5nQ29udHJvbC5jb250cm9sPy5lcnJvcnNcIj5cclxuICA8bGkgKm5nSWY9XCJuZ0NvbnRyb2wuY29udHJvbD8uZXJyb3JzPy5bJ21pbmxlbmd0aCddXCI+XHJcbiAgICBtaW5pbXVtIGxlbmd0aCBpcyB7e21pbkxlbmd0aH19XHJcbiAgPC9saT5cclxuICA8bGkgKm5nSWY9XCJuZ0NvbnRyb2wuY29udHJvbD8uZXJyb3JzPy5bJ21heExlbmd0aCddXCI+XHJcbiAgICBtYXhpbXVtIGxlbmd0aCBpcyB7e21heExlbmd0aH19XHJcbiAgPC9saT5cclxuPC91bD4gLS0+Il19
@@ -0,0 +1,41 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class BorderRadiusDirective {
4
+ get borderRadiusRight() {
5
+ return this._borderRadiusRight;
6
+ }
7
+ set borderRadiusRight(value) {
8
+ if (value === '')
9
+ value = true;
10
+ if (value == null)
11
+ value = false;
12
+ this._borderRadiusRight = value;
13
+ }
14
+ get borderRadiusLeft() {
15
+ return this._borderRadiusLeft;
16
+ }
17
+ set borderRadiusLeft(value) {
18
+ if (value === '')
19
+ value = true;
20
+ if (value == null)
21
+ value = false;
22
+ this._borderRadiusLeft = value;
23
+ }
24
+ constructor() {
25
+ this._borderRadiusRight = true;
26
+ this._borderRadiusLeft = true;
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: BorderRadiusDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.5", type: BorderRadiusDirective, selector: "[joBorderRadius]", inputs: { borderRadiusRight: "borderRadiusRight", borderRadiusLeft: "borderRadiusLeft" }, ngImport: i0 }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: BorderRadiusDirective, decorators: [{
32
+ type: Directive,
33
+ args: [{
34
+ selector: '[joBorderRadius]'
35
+ }]
36
+ }], ctorParameters: () => [], propDecorators: { borderRadiusRight: [{
37
+ type: Input
38
+ }], borderRadiusLeft: [{
39
+ type: Input
40
+ }] } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9yZGVyLXJhZGl1cy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGFvcy1jb250cm9sL3NyYy9saWIvZGlyZWN0aXZlcy9ib3JkZXItcmFkaXVzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxJQUNJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxLQUFtQjtRQUN2QyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ2QsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksS0FBSyxJQUFJLElBQUk7WUFDZixLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUdELElBQ0ksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLGdCQUFnQixDQUFDLEtBQW1CO1FBQ3RDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxLQUFLLElBQUksSUFBSTtZQUNmLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBR0Q7UUFmQSx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFhMUIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO0lBRVQsQ0FBQzs4R0E1Qk4scUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7d0RBSUssaUJBQWlCO3NCQURwQixLQUFLO2dCQWNGLGdCQUFnQjtzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2pvQm9yZGVyUmFkaXVzXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEJvcmRlclJhZGl1c0RpcmVjdGl2ZSB7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGJvcmRlclJhZGl1c1JpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JvcmRlclJhZGl1c1JpZ2h0O1xyXG4gIH1cclxuICBzZXQgYm9yZGVyUmFkaXVzUmlnaHQodmFsdWU6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgaWYgKHZhbHVlID09PSAnJylcclxuICAgICAgdmFsdWUgPSB0cnVlO1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpXHJcbiAgICAgIHZhbHVlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9ib3JkZXJSYWRpdXNSaWdodCA9IHZhbHVlO1xyXG4gIH1cclxuICBfYm9yZGVyUmFkaXVzUmlnaHQgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBib3JkZXJSYWRpdXNMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JvcmRlclJhZGl1c0xlZnQ7XHJcbiAgfVxyXG4gIHNldCBib3JkZXJSYWRpdXNMZWZ0KHZhbHVlOiBib29sZWFuIHwgJycpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gJycpXHJcbiAgICAgIHZhbHVlID0gdHJ1ZTtcclxuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxyXG4gICAgICB2YWx1ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fYm9yZGVyUmFkaXVzTGVmdCA9IHZhbHVlO1xyXG4gIH1cclxuICBfYm9yZGVyUmFkaXVzTGVmdCA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,46 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { BorderRadiusDirective } from './border-radius.directive';
4
+ import * as i0 from "@angular/core";
5
+ export class ControlDirective extends BorderRadiusDirective {
6
+ get required() {
7
+ return this._required;
8
+ }
9
+ set required(value) {
10
+ if (value === '')
11
+ value = true;
12
+ if (value == null)
13
+ value = false;
14
+ if (typeof value !== 'boolean')
15
+ throw new Error('required input must be: boolean');
16
+ this._required = value;
17
+ this.validation.next();
18
+ }
19
+ constructor() {
20
+ super();
21
+ this._required = false;
22
+ this.isDisabled = false;
23
+ this.validation = new Subject();
24
+ }
25
+ ngOnDestroy() {
26
+ this.validation.complete();
27
+ }
28
+ onTouched() { }
29
+ registerOnTouched(fn) {
30
+ this.onTouched = fn;
31
+ }
32
+ setDisabledState(isDisabled) {
33
+ this.isDisabled = isDisabled;
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
36
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.5", type: ControlDirective, selector: "[joControl]", inputs: { required: "required" }, usesInheritance: true, ngImport: i0 }); }
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ControlDirective, decorators: [{
39
+ type: Directive,
40
+ args: [{
41
+ selector: '[joControl]'
42
+ }]
43
+ }], ctorParameters: () => [], propDecorators: { required: [{
44
+ type: Input
45
+ }] } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGFvcy1jb250cm9sL3NyYy9saWIvZGlyZWN0aXZlcy9jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUtsRSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEscUJBQXFCO0lBQ3pELElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBbUI7UUFDOUIsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUNkLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDZixJQUFJLEtBQUssSUFBSSxJQUFJO1lBQ2YsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNoQixJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQU1EO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFOVixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFJakMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxTQUFTLEtBQUssQ0FBQztJQUNmLGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7OEdBbkNVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUg1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO2lCQUN4Qjt3REFHSyxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCb3JkZXJSYWRpdXNEaXJlY3RpdmUgfSBmcm9tICcuL2JvcmRlci1yYWRpdXMuZGlyZWN0aXZlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2pvQ29udHJvbF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sRGlyZWN0aXZlIGV4dGVuZHMgQm9yZGVyUmFkaXVzRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuIHwgJycpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gJycpXHJcbiAgICAgIHZhbHVlID0gdHJ1ZTtcclxuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxyXG4gICAgICB2YWx1ZSA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkIGlucHV0IG11c3QgYmU6IGJvb2xlYW4nKTtcclxuICAgIHRoaXMuX3JlcXVpcmVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnZhbGlkYXRpb24ubmV4dCgpO1xyXG4gIH1cclxuICBfcmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gIHZhbGlkYXRpb24gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsaWRhdGlvbi5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25Ub3VjaGVkKCkgeyB9XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './border-radius.directive';
2
+ export * from './control.directive';
3
+ export * from './item.directive';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGFvcy1jb250cm9sL3NyYy9saWIvZGlyZWN0aXZlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9yZGVyLXJhZGl1cy5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyb2wuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9pdGVtLmRpcmVjdGl2ZSc7XHJcbiJdfQ==