@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.
- package/README.md +86 -0
- package/esm2022/joster-dev-chaos-control.mjs +5 -0
- package/esm2022/lib/chaos-control.module.mjs +67 -0
- package/esm2022/lib/chaos-control.service.mjs +14 -0
- package/esm2022/lib/components/choice/choice.component.mjs +52 -0
- package/esm2022/lib/components/color/color.component.mjs +77 -0
- package/esm2022/lib/components/file/file.component.mjs +131 -0
- package/esm2022/lib/components/index.mjs +8 -0
- package/esm2022/lib/components/number/number.component.mjs +134 -0
- package/esm2022/lib/components/readonly/readonly.component.mjs +14 -0
- package/esm2022/lib/components/select/select.component.mjs +69 -0
- package/esm2022/lib/components/text/text.component.mjs +162 -0
- package/esm2022/lib/directives/border-radius.directive.mjs +41 -0
- package/esm2022/lib/directives/control.directive.mjs +46 -0
- package/esm2022/lib/directives/index.mjs +4 -0
- package/esm2022/lib/directives/item.directive.mjs +115 -0
- package/esm2022/lib/models/index.mjs +7 -0
- package/esm2022/lib/models/is-item.function.mjs +8 -0
- package/esm2022/lib/models/is-items.function.mjs +5 -0
- package/esm2022/lib/models/is-number.function.mjs +5 -0
- package/esm2022/lib/models/is-primitive.function.mjs +7 -0
- package/esm2022/lib/models/item.interface.mjs +2 -0
- package/esm2022/lib/models/primitive.type.mjs +2 -0
- package/esm2022/public-api.mjs +6 -0
- package/fesm2022/joster-dev-chaos-control.mjs +894 -0
- package/fesm2022/joster-dev-chaos-control.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/LICENSE +9 -0
- package/lib/chaos-control.module.d.ts +20 -0
- package/lib/chaos-control.service.d.ts +6 -0
- package/lib/components/choice/choice.component.d.ts +15 -0
- package/lib/components/color/color.component.d.ts +22 -0
- package/lib/components/file/file.component.d.ts +31 -0
- package/lib/components/index.d.ts +7 -0
- package/lib/components/number/number.component.d.ts +33 -0
- package/lib/components/readonly/readonly.component.d.ts +8 -0
- package/lib/components/select/select.component.d.ts +23 -0
- package/lib/components/text/text.component.d.ts +41 -0
- package/lib/directives/border-radius.directive.d.ts +12 -0
- package/lib/directives/control.directive.d.ts +18 -0
- package/lib/directives/index.d.ts +3 -0
- package/lib/directives/item.directive.d.ts +35 -0
- package/lib/models/index.d.ts +6 -0
- package/lib/models/is-item.function.d.ts +2 -0
- package/lib/models/is-items.function.d.ts +2 -0
- package/lib/models/is-number.function.d.ts +1 -0
- package/lib/models/is-primitive.function.d.ts +2 -0
- package/lib/models/item.interface.d.ts +6 -0
- package/lib/models/primitive.type.d.ts +1 -0
- package/package.json +57 -0
- package/public-api.d.ts +4 -0
- package/src/lib/atomic.scss +87 -0
- package/src/lib/styles.scss +83 -0
- package/src/lib/variables.scss +3 -0
package/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Chaos Control Library
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.0.0.
|
|
4
|
+
<!-- - provide accessible components to
|
|
5
|
+
- visual indication for validity
|
|
6
|
+
- visual and utility components
|
|
7
|
+
- consistent style -->
|
|
8
|
+
<!-- - styled print view -->
|
|
9
|
+
<!-- - readonly -->
|
|
10
|
+
|
|
11
|
+
> [Repository](https://github.com/joster-dev/chaos-control)
|
|
12
|
+
|
|
13
|
+
> [Github Package](https://github.com/joster-dev/chaos-control/packages/TODO)
|
|
14
|
+
|
|
15
|
+
> [Demo](https://joster-dev.github.io/chaos-control/)
|
|
16
|
+
|
|
17
|
+
## Getting Started
|
|
18
|
+
update your `package.json`
|
|
19
|
+
```bash
|
|
20
|
+
npm install @joster-dev/chaos-control --save
|
|
21
|
+
```
|
|
22
|
+
import the module
|
|
23
|
+
```diff
|
|
24
|
+
+ import { FormControlModule } from '@joster-dev/form-control';
|
|
25
|
+
|
|
26
|
+
@NgModule({
|
|
27
|
+
imports: [
|
|
28
|
+
+ FormControlModule
|
|
29
|
+
],
|
|
30
|
+
})
|
|
31
|
+
```
|
|
32
|
+
## `fc-button` utility component
|
|
33
|
+
to handle click events in an accessible manner
|
|
34
|
+
- style: outset border
|
|
35
|
+
### inputs
|
|
36
|
+
- `isActive: boolean = false`
|
|
37
|
+
- style: inset border
|
|
38
|
+
- `isDisabled: boolean = false`
|
|
39
|
+
- style: solid border
|
|
40
|
+
- when disabled, button will not be tab indexable
|
|
41
|
+
- `isValid: boolean = true`
|
|
42
|
+
- `type: 'button' | 'submit' = 'button'`
|
|
43
|
+
- `borderRadiusLeft: boolean = true`
|
|
44
|
+
- `borderRadiusRight: boolean = true`
|
|
45
|
+
### outputs
|
|
46
|
+
- `onBlur` emits `FocusEvent`
|
|
47
|
+
- `onClick` emits `MouseEvent`
|
|
48
|
+
## `fc-readonly` utility component
|
|
49
|
+
to display information alongside controls
|
|
50
|
+
### inputs
|
|
51
|
+
- `model: string`
|
|
52
|
+
## `fc-text` control component
|
|
53
|
+
result will be `string | null`
|
|
54
|
+
- if line break or overflow
|
|
55
|
+
- height increases
|
|
56
|
+
- if cleared by the user or form
|
|
57
|
+
- height resets
|
|
58
|
+
## `fc-number` control component
|
|
59
|
+
result will be `number | null`
|
|
60
|
+
- if user enters `e` character
|
|
61
|
+
- will not change
|
|
62
|
+
- if user enters `.` character
|
|
63
|
+
- if `[step]` is `>= 1`
|
|
64
|
+
- will not change
|
|
65
|
+
## `fc-choice` control component
|
|
66
|
+
to ask the user to choose from a few items
|
|
67
|
+
|
|
68
|
+
result will be `<item-key>[] | <item-key> | null`
|
|
69
|
+
- where `<item-key>` is the `key` property of the `items` input
|
|
70
|
+
### inputs
|
|
71
|
+
- `isMultiple: boolean = false`
|
|
72
|
+
- `items: { key: boolean | number | string, value: string }[] = []`
|
|
73
|
+
## `fc-color` control component
|
|
74
|
+
result will be `string | null`
|
|
75
|
+
- `string` result matches [`/^[0-9a-fA-F]{6}$/`](https://regexper.com/#%2F%5E%5B0-9a-fA-F%5D%7B6%7D%24%2F)
|
|
76
|
+
## `fc-file` control component
|
|
77
|
+
result will be `FileList | null`
|
|
78
|
+
|
|
79
|
+
## `fc-select` control component
|
|
80
|
+
to ask the user to choose from many items
|
|
81
|
+
- `items: { key: boolean | number | string, value: string }[] = []`
|
|
82
|
+
<!-- ## `fc-select` component -->
|
|
83
|
+
<!-- ## `fc-multi-select` component -->
|
|
84
|
+
<!-- ## `fc-date` component -->
|
|
85
|
+
<!-- ## `fc-date-time` component -->
|
|
86
|
+
<!-- ## `fc-time` component -->
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9zdGVyLWRldi1jaGFvcy1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvam9zdGVyLWRldi1jaGFvcy1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { RouterModule } from '@angular/router';
|
|
5
|
+
import { IconModule } from '@joster-dev/icon';
|
|
6
|
+
import { ReadonlyComponent, ChoiceComponent, ColorComponent, FileComponent, NumberComponent, TextComponent, SelectComponent, } from './components';
|
|
7
|
+
import { BorderRadiusDirective, ControlDirective, ItemDirective, } from './directives';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class ChaosControlModule {
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ChaosControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
11
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.5", ngImport: i0, type: ChaosControlModule, declarations: [ReadonlyComponent,
|
|
12
|
+
ChoiceComponent,
|
|
13
|
+
ColorComponent,
|
|
14
|
+
FileComponent,
|
|
15
|
+
NumberComponent,
|
|
16
|
+
TextComponent,
|
|
17
|
+
ControlDirective,
|
|
18
|
+
ItemDirective,
|
|
19
|
+
SelectComponent,
|
|
20
|
+
BorderRadiusDirective], imports: [CommonModule,
|
|
21
|
+
FormsModule,
|
|
22
|
+
IconModule,
|
|
23
|
+
RouterModule], exports: [ReadonlyComponent,
|
|
24
|
+
ChoiceComponent,
|
|
25
|
+
ColorComponent,
|
|
26
|
+
FileComponent,
|
|
27
|
+
NumberComponent,
|
|
28
|
+
TextComponent,
|
|
29
|
+
SelectComponent] }); }
|
|
30
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ChaosControlModule, imports: [CommonModule,
|
|
31
|
+
FormsModule,
|
|
32
|
+
IconModule,
|
|
33
|
+
RouterModule] }); }
|
|
34
|
+
}
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ChaosControlModule, decorators: [{
|
|
36
|
+
type: NgModule,
|
|
37
|
+
args: [{
|
|
38
|
+
declarations: [
|
|
39
|
+
ReadonlyComponent,
|
|
40
|
+
ChoiceComponent,
|
|
41
|
+
ColorComponent,
|
|
42
|
+
FileComponent,
|
|
43
|
+
NumberComponent,
|
|
44
|
+
TextComponent,
|
|
45
|
+
ControlDirective,
|
|
46
|
+
ItemDirective,
|
|
47
|
+
SelectComponent,
|
|
48
|
+
BorderRadiusDirective,
|
|
49
|
+
],
|
|
50
|
+
imports: [
|
|
51
|
+
CommonModule,
|
|
52
|
+
FormsModule,
|
|
53
|
+
IconModule,
|
|
54
|
+
RouterModule,
|
|
55
|
+
],
|
|
56
|
+
exports: [
|
|
57
|
+
ReadonlyComponent,
|
|
58
|
+
ChoiceComponent,
|
|
59
|
+
ColorComponent,
|
|
60
|
+
FileComponent,
|
|
61
|
+
NumberComponent,
|
|
62
|
+
TextComponent,
|
|
63
|
+
SelectComponent,
|
|
64
|
+
]
|
|
65
|
+
}]
|
|
66
|
+
}] });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhb3MtY29udHJvbC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGFvcy1jb250cm9sL3NyYy9saWIvY2hhb3MtY29udHJvbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsY0FBYyxFQUNkLGFBQWEsRUFDYixlQUFlLEVBQ2YsYUFBYSxFQUNiLGVBQWUsR0FDaEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsYUFBYSxHQUNkLE1BQU0sY0FBYyxDQUFDOztBQStCdEIsTUFBTSxPQUFPLGtCQUFrQjs4R0FBbEIsa0JBQWtCOytHQUFsQixrQkFBa0IsaUJBM0IzQixpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGNBQWM7WUFDZCxhQUFhO1lBQ2IsZUFBZTtZQUNmLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsYUFBYTtZQUNiLGVBQWU7WUFDZixxQkFBcUIsYUFHckIsWUFBWTtZQUNaLFdBQVc7WUFDWCxVQUFVO1lBQ1YsWUFBWSxhQUdaLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2YsY0FBYztZQUNkLGFBQWE7WUFDYixlQUFlO1lBQ2YsYUFBYTtZQUNiLGVBQWU7K0dBR04sa0JBQWtCLFlBZjNCLFlBQVk7WUFDWixXQUFXO1lBQ1gsVUFBVTtZQUNWLFlBQVk7OzJGQVlILGtCQUFrQjtrQkE3QjlCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixlQUFlO3dCQUNmLHFCQUFxQjtxQkFDdEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxVQUFVO3dCQUNWLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEljb25Nb2R1bGUgfSBmcm9tICdAam9zdGVyLWRldi9pY29uJztcclxuXHJcbmltcG9ydCB7XHJcbiAgUmVhZG9ubHlDb21wb25lbnQsXHJcbiAgQ2hvaWNlQ29tcG9uZW50LFxyXG4gIENvbG9yQ29tcG9uZW50LFxyXG4gIEZpbGVDb21wb25lbnQsXHJcbiAgTnVtYmVyQ29tcG9uZW50LFxyXG4gIFRleHRDb21wb25lbnQsXHJcbiAgU2VsZWN0Q29tcG9uZW50LFxyXG59IGZyb20gJy4vY29tcG9uZW50cyc7XHJcbmltcG9ydCB7XHJcbiAgQm9yZGVyUmFkaXVzRGlyZWN0aXZlLFxyXG4gIENvbnRyb2xEaXJlY3RpdmUsXHJcbiAgSXRlbURpcmVjdGl2ZSxcclxufSBmcm9tICcuL2RpcmVjdGl2ZXMnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFJlYWRvbmx5Q29tcG9uZW50LFxyXG4gICAgQ2hvaWNlQ29tcG9uZW50LFxyXG4gICAgQ29sb3JDb21wb25lbnQsXHJcbiAgICBGaWxlQ29tcG9uZW50LFxyXG4gICAgTnVtYmVyQ29tcG9uZW50LFxyXG4gICAgVGV4dENvbXBvbmVudCxcclxuICAgIENvbnRyb2xEaXJlY3RpdmUsXHJcbiAgICBJdGVtRGlyZWN0aXZlLFxyXG4gICAgU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgQm9yZGVyUmFkaXVzRGlyZWN0aXZlLFxyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBJY29uTW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgUmVhZG9ubHlDb21wb25lbnQsXHJcbiAgICBDaG9pY2VDb21wb25lbnQsXHJcbiAgICBDb2xvckNvbXBvbmVudCxcclxuICAgIEZpbGVDb21wb25lbnQsXHJcbiAgICBOdW1iZXJDb21wb25lbnQsXHJcbiAgICBUZXh0Q29tcG9uZW50LFxyXG4gICAgU2VsZWN0Q29tcG9uZW50LFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENoYW9zQ29udHJvbE1vZHVsZSB7IH1cclxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class ChaosControlService {
|
|
4
|
+
constructor() { }
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ChaosControlService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ChaosControlService, providedIn: 'root' }); }
|
|
7
|
+
}
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ChaosControlService, decorators: [{
|
|
9
|
+
type: Injectable,
|
|
10
|
+
args: [{
|
|
11
|
+
providedIn: 'root'
|
|
12
|
+
}]
|
|
13
|
+
}], ctorParameters: () => [] });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhb3MtY29udHJvbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NoYW9zLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sbUJBQW1CO0lBRTlCLGdCQUFnQixDQUFDOzhHQUZOLG1CQUFtQjtrSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGFvc0NvbnRyb2xTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Component, 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
|
+
export class ChoiceComponent extends ItemDirective {
|
|
8
|
+
constructor(ngControl) {
|
|
9
|
+
super(ngControl);
|
|
10
|
+
this.ngControl = ngControl;
|
|
11
|
+
this._isColumn = false;
|
|
12
|
+
this.id = `${Math.random().toString(36).substr(2, 9)}`;
|
|
13
|
+
}
|
|
14
|
+
get isColumn() {
|
|
15
|
+
return this._isColumn;
|
|
16
|
+
}
|
|
17
|
+
set isColumn(value) {
|
|
18
|
+
if (value === '')
|
|
19
|
+
value = true;
|
|
20
|
+
if (value == null)
|
|
21
|
+
value = false;
|
|
22
|
+
if (typeof value !== 'boolean')
|
|
23
|
+
throw new Error('isColumn expects: boolean');
|
|
24
|
+
this._isColumn = value;
|
|
25
|
+
}
|
|
26
|
+
onClick(item) {
|
|
27
|
+
this._model = this._model
|
|
28
|
+
.filter(key => this._items.map(item => item.key).includes(key));
|
|
29
|
+
if (this._model.includes(item.key)) {
|
|
30
|
+
if (this.required === true && this._model.length === 1)
|
|
31
|
+
return;
|
|
32
|
+
this.model = this._model.filter(key => key !== item.key);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (!this.isMultiple && this._model.length === 1) {
|
|
36
|
+
this.model = [item.key];
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.model = [...this._model, item.key];
|
|
40
|
+
}
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ChoiceComponent, deps: [{ token: i1.NgControl, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: ChoiceComponent, selector: "jo-choice", inputs: { isColumn: "isColumn" }, usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex justify-content-between\">\r\n <label\r\n id=\"choice_{{id}}\"\r\n [class.required]=\"required\"\r\n >\r\n <ng-content></ng-content>\r\n </label>\r\n <div>\r\n <ng-content select=\"[rightAligned]\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<div\r\n class=\"d-flex flex-wrap align-items-start\"\r\n role=\"group\"\r\n attr.aria-labelledby=\"choice_{{id}}\"\r\n [class.flex-column]=\"isColumn\"\r\n>\r\n <button\r\n *ngFor=\"let item of items; let idx = index\"\r\n type=\"button\"\r\n class=\"d-flex align-items-center text-left\"\r\n role=\"menuitemcheckbox\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n (click)=\"onClick(item)\"\r\n (blur)=\"onTouched()\"\r\n >\r\n <div\r\n class=\"button margin-right-1 {{isMultiple ? 'br-20' : 'br-50'}}\"\r\n [class.active]=\"_model.includes(item.key)\"\r\n [class.disabled]=\"isDisabled\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n >\r\n <icon\r\n *ngIf=\"_model.includes(item.key)\"\r\n size=\"1em\"\r\n [type]=\"isMultiple ? 'check' : 'dot'\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </div>\r\n {{item.value}}\r\n </button>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\r\n invalid model\r\n </li>\r\n</ul> -->", styles: [":host{display:block}:host>.d-flex>button{border-color:transparent;border-width:.075em}:host>.d-flex>button>.button{position:relative;text-align:left}:host>.d-flex>button>.button>icon{position:absolute;top:0;left:0}.br-20{border-radius:20%}.br-50{border-radius:50%}\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", ".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"], 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: "component", type: i3.IconComponent, selector: "icon[type]", inputs: ["type", "fill", "fillRotate", "fillOpacity", "stroke", "strokeRotate", "spin"] }] }); }
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ChoiceComponent, decorators: [{
|
|
45
|
+
type: Component,
|
|
46
|
+
args: [{ selector: 'jo-choice', template: "<div class=\"d-flex justify-content-between\">\r\n <label\r\n id=\"choice_{{id}}\"\r\n [class.required]=\"required\"\r\n >\r\n <ng-content></ng-content>\r\n </label>\r\n <div>\r\n <ng-content select=\"[rightAligned]\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<div\r\n class=\"d-flex flex-wrap align-items-start\"\r\n role=\"group\"\r\n attr.aria-labelledby=\"choice_{{id}}\"\r\n [class.flex-column]=\"isColumn\"\r\n>\r\n <button\r\n *ngFor=\"let item of items; let idx = index\"\r\n type=\"button\"\r\n class=\"d-flex align-items-center text-left\"\r\n role=\"menuitemcheckbox\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n (click)=\"onClick(item)\"\r\n (blur)=\"onTouched()\"\r\n >\r\n <div\r\n class=\"button margin-right-1 {{isMultiple ? 'br-20' : 'br-50'}}\"\r\n [class.active]=\"_model.includes(item.key)\"\r\n [class.disabled]=\"isDisabled\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n >\r\n <icon\r\n *ngIf=\"_model.includes(item.key)\"\r\n size=\"1em\"\r\n [type]=\"isMultiple ? 'check' : 'dot'\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </div>\r\n {{item.value}}\r\n </button>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\r\n invalid model\r\n </li>\r\n</ul> -->", styles: [":host{display:block}:host>.d-flex>button{border-color:transparent;border-width:.075em}:host>.d-flex>button>.button{position:relative;text-align:left}:host>.d-flex>button>.button>icon{position:absolute;top:0;left:0}.br-20{border-radius:20%}.br-50{border-radius:50%}\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", ".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"] }]
|
|
47
|
+
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
48
|
+
type: Self
|
|
49
|
+
}] }], propDecorators: { isColumn: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}] } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvaWNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYW9zLWNvbnRyb2wvc3JjL2xpYi9jb21wb25lbnRzL2Nob2ljZS9jaG9pY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NvbXBvbmVudHMvY2hvaWNlL2Nob2ljZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQVlqRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxhQUFhO0lBQ2hELFlBQzBCLFNBQW9CO1FBRTVDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUZPLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFrQjlDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsT0FBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFqQmxELENBQUM7SUFFRCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQW1CO1FBQzlCLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxLQUFLLElBQUksSUFBSTtZQUNmLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDaEIsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBS0QsT0FBTyxDQUFDLElBQVU7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTthQUN0QixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUVqRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDcEQsT0FBTztZQUVULElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7OEdBMUNVLGVBQWU7a0dBQWYsZUFBZSwwR0NmNUIsKzhDQWtEUzs7MkZEbkNJLGVBQWU7a0JBVDNCLFNBQVM7K0JBQ0UsV0FBVzs7MEJBVWxCLElBQUk7eUNBTUgsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnam8tY2hvaWNlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hvaWNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2Nob2ljZS5jb21wb25lbnQuc2NzcycsXHJcbiAgICAnLi4vLi4vc3R5bGVzLnNjc3MnLFxyXG4gICAgJy4uLy4uL2F0b21pYy5zY3NzJyxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaG9pY2VDb21wb25lbnQgZXh0ZW5kcyBJdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQFNlbGYoKSBwdWJsaWMgb3ZlcnJpZGUgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgKSB7XHJcbiAgICBzdXBlcihuZ0NvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgaXNDb2x1bW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNDb2x1bW47XHJcbiAgfVxyXG4gIHNldCBpc0NvbHVtbih2YWx1ZTogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICBpZiAodmFsdWUgPT09ICcnKVxyXG4gICAgICB2YWx1ZSA9IHRydWU7XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcclxuICAgICAgdmFsdWUgPSBmYWxzZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJylcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpc0NvbHVtbiBleHBlY3RzOiBib29sZWFuJylcclxuICAgIHRoaXMuX2lzQ29sdW1uID0gdmFsdWU7XHJcbiAgfVxyXG4gIF9pc0NvbHVtbiA9IGZhbHNlO1xyXG5cclxuICBpZCA9IGAke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gO1xyXG5cclxuICBvbkNsaWNrKGl0ZW06IEl0ZW0pIHtcclxuICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWxcclxuICAgICAgLmZpbHRlcihrZXkgPT4gdGhpcy5faXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5rZXkpLmluY2x1ZGVzKGtleSkpXHJcblxyXG4gICAgaWYgKHRoaXMuX21vZGVsLmluY2x1ZGVzKGl0ZW0ua2V5KSkge1xyXG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCA9PT0gdHJ1ZSAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihrZXkgPT4ga2V5ICE9PSBpdGVtLmtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNNdWx0aXBsZSAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5tb2RlbCA9IFtpdGVtLmtleV07XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZGVsID0gWy4uLnRoaXMuX21vZGVsLCBpdGVtLmtleV07XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICA8bGFiZWxcclxuICAgIGlkPVwiY2hvaWNlX3t7aWR9fVwiXHJcbiAgICBbY2xhc3MucmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gID5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L2xhYmVsPlxyXG4gIDxkaXY+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcmlnaHRBbGlnbmVkXVwiPjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2XHJcbiAgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGFsaWduLWl0ZW1zLXN0YXJ0XCJcclxuICByb2xlPVwiZ3JvdXBcIlxyXG4gIGF0dHIuYXJpYS1sYWJlbGxlZGJ5PVwiY2hvaWNlX3t7aWR9fVwiXHJcbiAgW2NsYXNzLmZsZXgtY29sdW1uXT1cImlzQ29sdW1uXCJcclxuPlxyXG4gIDxidXR0b25cclxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaWR4ID0gaW5kZXhcIlxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1sZWZ0XCJcclxuICAgIHJvbGU9XCJtZW51aXRlbWNoZWNrYm94XCJcclxuICAgIFtjbGFzcy5ib3JkZXItcmFkaXVzLXJpZ2h0XT1cImJvcmRlclJhZGl1c1JpZ2h0XCJcclxuICAgIFtjbGFzcy5ib3JkZXItcmFkaXVzLWxlZnRdPVwiYm9yZGVyUmFkaXVzTGVmdFwiXHJcbiAgICAoY2xpY2spPVwib25DbGljayhpdGVtKVwiXHJcbiAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXHJcbiAgPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImJ1dHRvbiBtYXJnaW4tcmlnaHQtMSB7e2lzTXVsdGlwbGUgPyAnYnItMjAnIDogJ2JyLTUwJ319XCJcclxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJfbW9kZWwuaW5jbHVkZXMoaXRlbS5rZXkpXCJcclxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICBbY2xhc3MuaW52YWxpZF09XCJuZ0NvbnRyb2wuY29udHJvbD8uaW52YWxpZFwiXHJcbiAgICA+XHJcbiAgICAgIDxpY29uXHJcbiAgICAgICAgKm5nSWY9XCJfbW9kZWwuaW5jbHVkZXMoaXRlbS5rZXkpXCJcclxuICAgICAgICBzaXplPVwiMWVtXCJcclxuICAgICAgICBbdHlwZV09XCJpc011bHRpcGxlID8gJ2NoZWNrJyA6ICdkb3QnXCJcclxuICAgICAgICBbZmlsbF09XCJbbnVsbCwgJ2N1cnJlbnQnXVwiXHJcbiAgICAgICAgZmlsbFJvdGF0ZT1cIjkwXCJcclxuICAgICAgPjwvaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gICAge3tpdGVtLnZhbHVlfX1cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcblxyXG48IS0tIDx1bCAqbmdJZj1cIm5nQ29udHJvbC5jb250cm9sPy5lcnJvcnNcIj5cclxuICA8bGkgKm5nSWY9XCJuZ0NvbnRyb2wuY29udHJvbD8uZXJyb3JzPy5bJ2ludmFsaWQnXVwiPlxyXG4gICAgaW52YWxpZCBtb2RlbFxyXG4gIDwvbGk+XHJcbjwvdWw+IC0tPiJdfQ==
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Component, Self } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import { debounceTime } from 'rxjs/operators';
|
|
4
|
+
import { ControlDirective } from '../../directives';
|
|
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 ColorComponent extends ControlDirective {
|
|
9
|
+
get model() {
|
|
10
|
+
return this._model;
|
|
11
|
+
}
|
|
12
|
+
set model(value) {
|
|
13
|
+
this._model = value;
|
|
14
|
+
this.onChange(this._model !== null && this.fullHex.test(this._model)
|
|
15
|
+
? this._model
|
|
16
|
+
: null);
|
|
17
|
+
}
|
|
18
|
+
constructor(ngControl) {
|
|
19
|
+
super();
|
|
20
|
+
this.ngControl = ngControl;
|
|
21
|
+
this.partialHex = /^[0-9A-Fa-f]{1,6}$/;
|
|
22
|
+
this.fullHex = /^[0-9A-Fa-f]{6}$/;
|
|
23
|
+
this._model = null;
|
|
24
|
+
this.id = `_${Math.random().toString(36).substring(2, 11)}`;
|
|
25
|
+
this.validation
|
|
26
|
+
.pipe(debounceTime(100))
|
|
27
|
+
.subscribe(() => this.validate());
|
|
28
|
+
ngControl.valueAccessor = this;
|
|
29
|
+
}
|
|
30
|
+
onChangeColor(event) {
|
|
31
|
+
const ele = event.target;
|
|
32
|
+
this.model = ele.value.substring(1).toUpperCase();
|
|
33
|
+
}
|
|
34
|
+
onChange(_model) { }
|
|
35
|
+
registerOnChange(fn) {
|
|
36
|
+
this.onChange = fn;
|
|
37
|
+
}
|
|
38
|
+
onBeforeinput(e) {
|
|
39
|
+
const event = e;
|
|
40
|
+
if (event.data === null)
|
|
41
|
+
return;
|
|
42
|
+
const ele = event.target;
|
|
43
|
+
const tooLong = event.data.length + (ele.selectionStart || 0) > 6;
|
|
44
|
+
const valid = this.partialHex.test(event.data);
|
|
45
|
+
if (tooLong || !valid)
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
}
|
|
48
|
+
writeValue(value) {
|
|
49
|
+
if (value === undefined || typeof value !== 'string' || !this.partialHex.test(value))
|
|
50
|
+
value = null;
|
|
51
|
+
if (value === null || this.partialHex.test(value))
|
|
52
|
+
this._model = value;
|
|
53
|
+
}
|
|
54
|
+
invalidValidator() {
|
|
55
|
+
return (control) => control.value !== null && (typeof control.value !== 'string' || !this.fullHex.test(control.value))
|
|
56
|
+
? { invalid: control.value }
|
|
57
|
+
: null;
|
|
58
|
+
}
|
|
59
|
+
validate() {
|
|
60
|
+
const validators = [
|
|
61
|
+
this.invalidValidator()
|
|
62
|
+
];
|
|
63
|
+
if (this.required === true)
|
|
64
|
+
validators.push(Validators.required);
|
|
65
|
+
this.ngControl.control?.setValidators(validators);
|
|
66
|
+
this.ngControl.control?.updateValueAndValidity();
|
|
67
|
+
}
|
|
68
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ColorComponent, deps: [{ token: i1.NgControl, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
69
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: ColorComponent, selector: "jo-color", 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 align-items-stretch\">\r\n <button\r\n class=\"d-flex align-items-center\"\r\n title=\"Color\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"colorInput.click()\"\r\n >\r\n <icon\r\n size=\"1em\"\r\n type=\"square\"\r\n [fill]=\"fullHex.test(_model || '') ? _model : [null, 'current']\"\r\n fillRotate=\"90\"\r\n [stroke]=\"fullHex.test(_model || '') ? _model : ['current']\"\r\n ></icon>\r\n </button>\r\n <input\r\n [(ngModel)]=\"model\"\r\n spellcheck=\"false\"\r\n size=\"5\"\r\n type=\"text\"\r\n [class.active]=\"ngControl.control?.value !== null\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [id]=\"id\"\r\n (beforeinput)=\"onBeforeinput($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\r\n invalid model\r\n </li>\r\n</ul> -->\r\n\r\n<input\r\n #colorInput\r\n type=\"color\"\r\n (change)=\"onChangeColor($event)\"\r\n/>", styles: [":host{display:block}input[type=color]{margin-top:-2em;padding:0;position:absolute;visibility:hidden;transition:none}:host>div>input{border-left:0}:host>div>button{border-right: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.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: i2.IconComponent, selector: "icon[type]", inputs: ["type", "fill", "fillRotate", "fillOpacity", "stroke", "strokeRotate", "spin"] }] }); }
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ColorComponent, decorators: [{
|
|
72
|
+
type: Component,
|
|
73
|
+
args: [{ selector: 'jo-color', 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 align-items-stretch\">\r\n <button\r\n class=\"d-flex align-items-center\"\r\n title=\"Color\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"colorInput.click()\"\r\n >\r\n <icon\r\n size=\"1em\"\r\n type=\"square\"\r\n [fill]=\"fullHex.test(_model || '') ? _model : [null, 'current']\"\r\n fillRotate=\"90\"\r\n [stroke]=\"fullHex.test(_model || '') ? _model : ['current']\"\r\n ></icon>\r\n </button>\r\n <input\r\n [(ngModel)]=\"model\"\r\n spellcheck=\"false\"\r\n size=\"5\"\r\n type=\"text\"\r\n [class.active]=\"ngControl.control?.value !== null\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [id]=\"id\"\r\n (beforeinput)=\"onBeforeinput($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\r\n invalid model\r\n </li>\r\n</ul> -->\r\n\r\n<input\r\n #colorInput\r\n type=\"color\"\r\n (change)=\"onChangeColor($event)\"\r\n/>", styles: [":host{display:block}input[type=color]{margin-top:-2em;padding:0;position:absolute;visibility:hidden;transition:none}:host>div>input{border-left:0}:host>div>button{border-right: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"] }]
|
|
74
|
+
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
75
|
+
type: Self
|
|
76
|
+
}] }] });
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NvbXBvbmVudHMvY29sb3IvY29sb3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NvbXBvbmVudHMvY29sb3IvY29sb3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFtRixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFXcEQsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBZ0I7SUFJbEQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFvQjtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxDQUNYLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDcEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ2IsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUtELFlBQ2lCLFNBQW9CO1FBRW5DLEtBQUssRUFBRSxDQUFDO1FBRk8sY0FBUyxHQUFULFNBQVMsQ0FBVztRQW5CN0IsZUFBVSxHQUFHLG9CQUFvQixDQUFDO1FBQzFDLFlBQU8sR0FBRyxrQkFBa0IsQ0FB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QixxeUNBZ0RFOzsyRkRqQ1csY0FBYztrQkFUMUIsU0FBUzsrQkFDRSxVQUFVOzswQkE0QmpCLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqby1jb2xvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2NvbG9yLmNvbXBvbmVudC5zY3NzJyxcclxuICAgICcuLi8uLi9hdG9taWMuc2NzcycsXHJcbiAgICAnLi4vLi4vc3R5bGVzLnNjc3MnLFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbG9yQ29tcG9uZW50IGV4dGVuZHMgQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBwcml2YXRlIHBhcnRpYWxIZXggPSAvXlswLTlBLUZhLWZdezEsNn0kLztcclxuICBmdWxsSGV4ID0gL15bMC05QS1GYS1mXXs2fSQvO1xyXG5cclxuICBnZXQgbW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XHJcbiAgfVxyXG4gIHNldCBtb2RlbCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcclxuICAgIHRoaXMub25DaGFuZ2UoXHJcbiAgICAgIHRoaXMuX21vZGVsICE9PSBudWxsICYmIHRoaXMuZnVsbEhleC50ZXN0KHRoaXMuX21vZGVsKVxyXG4gICAgICAgID8gdGhpcy5fbW9kZWxcclxuICAgICAgICA6IG51bGxcclxuICAgICk7XHJcbiAgfVxyXG4gIF9tb2RlbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGlkID0gYF8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMSl9YDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25cclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy52YWxpZGF0ZSgpKTtcclxuICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlQ29sb3IoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIHRoaXMubW9kZWwgPSBlbGUudmFsdWUuc3Vic3RyaW5nKDEpLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShfbW9kZWw6IHN0cmluZyB8IG51bGwpIHsgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIG9uQmVmb3JlaW5wdXQoZTogRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGV2ZW50ID0gZSBhcyBJbnB1dEV2ZW50O1xyXG4gICAgaWYgKGV2ZW50LmRhdGEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGNvbnN0IGVsZSA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgdG9vTG9uZyA9IGV2ZW50LmRhdGEubGVuZ3RoICsgKGVsZS5zZWxlY3Rpb25TdGFydCB8fCAwKSA+IDY7XHJcbiAgICBjb25zdCB2YWxpZCA9IHRoaXMucGFydGlhbEhleC50ZXN0KGV2ZW50LmRhdGEpO1xyXG4gICAgaWYgKHRvb0xvbmcgfHwgIXZhbGlkKVxyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhdGhpcy5wYXJ0aWFsSGV4LnRlc3QodmFsdWUpKVxyXG4gICAgICB2YWx1ZSA9IG51bGw7XHJcblxyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHRoaXMucGFydGlhbEhleC50ZXN0KHZhbHVlKSlcclxuICAgICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52YWxpZFZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+XHJcbiAgICAgIGNvbnRyb2wudmFsdWUgIT09IG51bGwgJiYgKHR5cGVvZiBjb250cm9sLnZhbHVlICE9PSAnc3RyaW5nJyB8fCAhdGhpcy5mdWxsSGV4LnRlc3QoY29udHJvbC52YWx1ZSkpXHJcbiAgICAgICAgPyB7IGludmFsaWQ6IGNvbnRyb2wudmFsdWUgfVxyXG4gICAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGUoKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW1xyXG4gICAgICB0aGlzLmludmFsaWRWYWxpZGF0b3IoKVxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAodGhpcy5yZXF1aXJlZCA9PT0gdHJ1ZSlcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxsYWJlbFxyXG4gIFtmb3JdPVwiaWRcIlxyXG4gIFtjbGFzcy5yZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbj5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvbGFiZWw+XHJcblxyXG48ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0cmV0Y2hcIj5cclxuICA8YnV0dG9uXHJcbiAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgdGl0bGU9XCJDb2xvclwiXHJcbiAgICBbY2xhc3MuYm9yZGVyLXJhZGl1cy1sZWZ0XT1cImJvcmRlclJhZGl1c0xlZnRcIlxyXG4gICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgKGNsaWNrKT1cImNvbG9ySW5wdXQuY2xpY2soKVwiXHJcbiAgPlxyXG4gICAgPGljb25cclxuICAgICAgc2l6ZT1cIjFlbVwiXHJcbiAgICAgIHR5cGU9XCJzcXVhcmVcIlxyXG4gICAgICBbZmlsbF09XCJmdWxsSGV4LnRlc3QoX21vZGVsIHx8ICcnKSA/IF9tb2RlbCA6IFtudWxsLCAnY3VycmVudCddXCJcclxuICAgICAgZmlsbFJvdGF0ZT1cIjkwXCJcclxuICAgICAgW3N0cm9rZV09XCJmdWxsSGV4LnRlc3QoX21vZGVsIHx8ICcnKSA/IF9tb2RlbCA6IFsnY3VycmVudCddXCJcclxuICAgID48L2ljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgPGlucHV0XHJcbiAgICBbKG5nTW9kZWwpXT1cIm1vZGVsXCJcclxuICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICBzaXplPVwiNVwiXHJcbiAgICB0eXBlPVwidGV4dFwiXHJcbiAgICBbY2xhc3MuYWN0aXZlXT1cIm5nQ29udHJvbC5jb250cm9sPy52YWx1ZSAhPT0gbnVsbFwiXHJcbiAgICBbY2xhc3MuYm9yZGVyLXJhZGl1cy1yaWdodF09XCJib3JkZXJSYWRpdXNSaWdodFwiXHJcbiAgICBbY2xhc3MuaW52YWxpZF09XCJuZ0NvbnRyb2wuY29udHJvbD8uaW52YWxpZFwiXHJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICBbaWRdPVwiaWRcIlxyXG4gICAgKGJlZm9yZWlucHV0KT1cIm9uQmVmb3JlaW5wdXQoJGV2ZW50KVwiXHJcbiAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXHJcbiAgLz5cclxuPC9kaXY+XHJcblxyXG48IS0tIDx1bCAqbmdJZj1cIm5nQ29udHJvbC5jb250cm9sPy5lcnJvcnNcIj5cclxuICA8bGkgKm5nSWY9XCJuZ0NvbnRyb2wuY29udHJvbD8uZXJyb3JzPy5bJ2ludmFsaWQnXVwiPlxyXG4gICAgaW52YWxpZCBtb2RlbFxyXG4gIDwvbGk+XHJcbjwvdWw+IC0tPlxyXG5cclxuPGlucHV0XHJcbiAgI2NvbG9ySW5wdXRcclxuICB0eXBlPVwiY29sb3JcIlxyXG4gIChjaGFuZ2UpPVwib25DaGFuZ2VDb2xvcigkZXZlbnQpXCJcclxuLz4iXX0=
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Component, Input, Self } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import { debounceTime } from 'rxjs/operators';
|
|
4
|
+
import { ControlDirective } from '../../directives';
|
|
5
|
+
import { isNumber } from '../../models';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/forms";
|
|
8
|
+
import * as i2 from "@angular/common";
|
|
9
|
+
import * as i3 from "@joster-dev/icon";
|
|
10
|
+
export class FileComponent extends ControlDirective {
|
|
11
|
+
get acceptedTypes() {
|
|
12
|
+
return this._acceptedTypes;
|
|
13
|
+
}
|
|
14
|
+
set acceptedTypes(value) {
|
|
15
|
+
if (!Array.isArray(value) || !value.every(item => typeof item === 'string'))
|
|
16
|
+
throw new Error(`acceptedTypes expects: string[]`);
|
|
17
|
+
this._acceptedTypes = value;
|
|
18
|
+
this.validation.next();
|
|
19
|
+
}
|
|
20
|
+
get sizeLimitMb() {
|
|
21
|
+
return this._sizeLimitMb;
|
|
22
|
+
}
|
|
23
|
+
set sizeLimitMb(value) {
|
|
24
|
+
if (!isNumber(value) || value < 0)
|
|
25
|
+
throw new Error('sizeLimitMb expects: positive number');
|
|
26
|
+
this._sizeLimitMb = value;
|
|
27
|
+
this.validation.next();
|
|
28
|
+
}
|
|
29
|
+
get multiple() {
|
|
30
|
+
return this._multiple;
|
|
31
|
+
}
|
|
32
|
+
set multiple(value) {
|
|
33
|
+
this._multiple = value === true;
|
|
34
|
+
this.validation.next();
|
|
35
|
+
}
|
|
36
|
+
constructor(ngControl) {
|
|
37
|
+
super();
|
|
38
|
+
this.ngControl = ngControl;
|
|
39
|
+
this._acceptedTypes = [];
|
|
40
|
+
this._sizeLimitMb = 0;
|
|
41
|
+
this._multiple = false;
|
|
42
|
+
this.showSize = false;
|
|
43
|
+
this.model = null;
|
|
44
|
+
this.id = `${Math.random().toString(36).substr(2, 9)}`;
|
|
45
|
+
this.validation
|
|
46
|
+
.pipe(debounceTime(100))
|
|
47
|
+
.subscribe(() => this.validate());
|
|
48
|
+
ngControl.valueAccessor = this;
|
|
49
|
+
}
|
|
50
|
+
get fileNames() {
|
|
51
|
+
if (this.ngControl.value instanceof FileList)
|
|
52
|
+
return Object.values(this.ngControl.value).map(file => file.name).join(', ');
|
|
53
|
+
if (this.ngControl.value instanceof File)
|
|
54
|
+
return this.ngControl.value.name;
|
|
55
|
+
return '';
|
|
56
|
+
}
|
|
57
|
+
get sizeLimit() {
|
|
58
|
+
return this.sizeLimitMb < 1
|
|
59
|
+
? `${this.sizeLimitMb * 1000} KB`
|
|
60
|
+
: `${this.sizeLimitMb} MB`;
|
|
61
|
+
}
|
|
62
|
+
onFileChange(event) {
|
|
63
|
+
const target = event.target;
|
|
64
|
+
this.onChange(target.files?.length
|
|
65
|
+
? target.files
|
|
66
|
+
: null);
|
|
67
|
+
}
|
|
68
|
+
onChange(_model) { }
|
|
69
|
+
registerOnChange(fn) {
|
|
70
|
+
this.onChange = fn;
|
|
71
|
+
}
|
|
72
|
+
writeValue(value) {
|
|
73
|
+
if (value === undefined)
|
|
74
|
+
value = null;
|
|
75
|
+
if (value !== null && !(value instanceof FileList))
|
|
76
|
+
throw new Error('control value must be: File or null');
|
|
77
|
+
// todo
|
|
78
|
+
// this.model = value;
|
|
79
|
+
}
|
|
80
|
+
acceptedTypesValidator(acceptedTypes) {
|
|
81
|
+
return (control) => control.value !== null
|
|
82
|
+
&& control.value instanceof FileList
|
|
83
|
+
&& !Object.values(control.value).map(item => item.type.toLowerCase())
|
|
84
|
+
.every(type => acceptedTypes.includes(type.toLowerCase()))
|
|
85
|
+
? { acceptedTypes: { value: control.value } }
|
|
86
|
+
: null;
|
|
87
|
+
}
|
|
88
|
+
invalidValidator(multiple) {
|
|
89
|
+
return (control) => control.value !== null
|
|
90
|
+
&& (!(control.value instanceof FileList) || (control.value.length > 1 && !multiple))
|
|
91
|
+
? { invalid: { value: control.value } }
|
|
92
|
+
: null;
|
|
93
|
+
}
|
|
94
|
+
sizeLimitMbValidator(sizeLimitMb) {
|
|
95
|
+
return (control) => control.value instanceof FileList
|
|
96
|
+
&& Object.values(control.value).map(item => item.size / 1024 / 1024)
|
|
97
|
+
.reduce((acc, cur) => acc + cur, 0) > sizeLimitMb
|
|
98
|
+
? { sizeLimitMb: { value: control.value } }
|
|
99
|
+
: null;
|
|
100
|
+
}
|
|
101
|
+
validate() {
|
|
102
|
+
const validators = [
|
|
103
|
+
this.invalidValidator(this.multiple)
|
|
104
|
+
];
|
|
105
|
+
if (this.acceptedTypes.length > 0)
|
|
106
|
+
validators.push(this.acceptedTypesValidator(this.acceptedTypes));
|
|
107
|
+
if (this.sizeLimitMb > 0)
|
|
108
|
+
validators.push(this.sizeLimitMbValidator(this.sizeLimitMb));
|
|
109
|
+
if (this.required === true)
|
|
110
|
+
validators.push(Validators.required);
|
|
111
|
+
this.ngControl.control?.setValidators(validators);
|
|
112
|
+
this.ngControl.control?.updateValueAndValidity();
|
|
113
|
+
}
|
|
114
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FileComponent, deps: [{ token: i1.NgControl, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
115
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: FileComponent, selector: "jo-file", inputs: { acceptedTypes: "acceptedTypes", sizeLimitMb: "sizeLimitMb", multiple: "multiple", showSize: "showSize" }, 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-center\">\r\n <div>\r\n <button\r\n class=\"white-space-nowrap\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n [class.active]=\"ngControl.value !== null\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"fileInput.click()\"\r\n >\r\n <icon\r\n type=\"folder\"\r\n size=\"1em\"\r\n class=\"margin-right-1\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n Choose {{multiple ? 'Files' : 'File'}}\r\n </button>\r\n </div>\r\n <div\r\n *ngIf=\"ngControl.value\"\r\n id=\"filename\"\r\n >\r\n {{fileNames}}\r\n </div>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['acceptedTypes']\">\r\n valid types are {{acceptedTypes.join(', ')}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['sizeLimitMb']\">\r\n max file size is {{sizeLimit}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\r\n invalid model\r\n </li>\r\n</ul> -->\r\n\r\n<input\r\n [(ngModel)]=\"model\"\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedTypes.join()\"\r\n [multiple]=\"multiple\"\r\n [id]=\"id\"\r\n (change)=\"onFileChange($event)\"\r\n/>\r\n", styles: ["input[type=file]{display:none}#filename{margin-left:.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"], 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.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"] }] }); }
|
|
116
|
+
}
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FileComponent, decorators: [{
|
|
118
|
+
type: Component,
|
|
119
|
+
args: [{ selector: 'jo-file', template: "<label [class.required]=\"required\">\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex align-items-center\">\r\n <div>\r\n <button\r\n class=\"white-space-nowrap\"\r\n [class.border-radius-right]=\"borderRadiusRight\"\r\n [class.border-radius-left]=\"borderRadiusLeft\"\r\n [class.active]=\"ngControl.value !== null\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"fileInput.click()\"\r\n >\r\n <icon\r\n type=\"folder\"\r\n size=\"1em\"\r\n class=\"margin-right-1\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n Choose {{multiple ? 'Files' : 'File'}}\r\n </button>\r\n </div>\r\n <div\r\n *ngIf=\"ngControl.value\"\r\n id=\"filename\"\r\n >\r\n {{fileNames}}\r\n </div>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['acceptedTypes']\">\r\n valid types are {{acceptedTypes.join(', ')}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['sizeLimitMb']\">\r\n max file size is {{sizeLimit}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\r\n invalid model\r\n </li>\r\n</ul> -->\r\n\r\n<input\r\n [(ngModel)]=\"model\"\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedTypes.join()\"\r\n [multiple]=\"multiple\"\r\n [id]=\"id\"\r\n (change)=\"onFileChange($event)\"\r\n/>\r\n", styles: ["input[type=file]{display:none}#filename{margin-left:.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"] }]
|
|
120
|
+
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
121
|
+
type: Self
|
|
122
|
+
}] }], propDecorators: { acceptedTypes: [{
|
|
123
|
+
type: Input
|
|
124
|
+
}], sizeLimitMb: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], multiple: [{
|
|
127
|
+
type: Input
|
|
128
|
+
}], showSize: [{
|
|
129
|
+
type: Input
|
|
130
|
+
}] } });
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGFvcy1jb250cm9sL3NyYy9saWIvY29tcG9uZW50cy9maWxlL2ZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhb3MtY29udHJvbC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS9maWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQW1GLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7OztBQVV4QyxNQUFNLE9BQU8sYUFBYyxTQUFRLGdCQUFnQjtJQUNqRCxJQUFhLGFBQWE7UUFDeEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFJLGFBQWEsQ0FBQyxLQUFlO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQztZQUN6RSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBR0QsSUFBYSxXQUFXO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFHRCxJQUFhLFFBQVE7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFRRCxZQUNpQixTQUFvQjtRQUVuQyxLQUFLLEVBQUUsQ0FBQztRQUZPLGNBQVMsR0FBVCxTQUFTLENBQVc7UUE1QnJDLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBVzlCLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBU2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFVCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFVBQUssR0FBYyxJQUFJLENBQUM7UUFDeEIsT0FBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFNaEQsSUFBSSxDQUFDLFVBQVU7YUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssWUFBWSxRQUFRO1lBQzFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0UsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssWUFBWSxJQUFJO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBRW5DLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxLQUFLO1lBQ2pDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVk7UUFDdkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FDWCxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU07WUFDbEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ2QsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUF1QixJQUFJLENBQUM7SUFDckMsZ0JBQWdCLENBQUMsRUFBYztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxLQUFLLEtBQUssU0FBUztZQUNyQixLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWYsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksUUFBUSxDQUFDO1lBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RCxPQUFPO1FBQ1Asc0JBQXNCO0lBQ3hCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxhQUF1QjtRQUNwRCxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSTtlQUMvRSxPQUFPLENBQUMsS0FBSyxZQUFZLFFBQVE7ZUFDakMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUNsRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFpQjtRQUN4QyxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSTtlQUMvRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEYsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFdBQW1CO1FBQzlDLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssWUFBWSxRQUFRO2VBQzFGLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztpQkFDakUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxXQUFXO1lBQ25ELENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFFTyxRQUFRO1FBQ2QsTUFBTSxVQUFVLEdBQWtCO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3JDLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDL0IsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFbkUsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUM7WUFDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFL0QsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUk7WUFDeEIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLENBQUM7SUFDbkQsQ0FBQzs4R0EvSFUsYUFBYTtrR0FBYixhQUFhLDBMQ2QxQiw0NUNBcURBOzsyRkR2Q2EsYUFBYTtrQkFSekIsU0FBUzsrQkFDRSxTQUFTOzswQkE2Q2hCLElBQUk7eUNBckNNLGFBQWE7c0JBQXpCLEtBQUs7Z0JBV08sV0FBVztzQkFBdkIsS0FBSztnQkFXTyxRQUFRO3NCQUFwQixLQUFLO2dCQVNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2pvLWZpbGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2ZpbGUuY29tcG9uZW50LnNjc3MnLFxyXG4gICAgJy4uLy4uL3N0eWxlcy5zY3NzJyxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlQ29tcG9uZW50IGV4dGVuZHMgQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBASW5wdXQoKSBnZXQgYWNjZXB0ZWRUeXBlcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9hY2NlcHRlZFR5cGVzO1xyXG4gIH1cclxuICBzZXQgYWNjZXB0ZWRUeXBlcyh2YWx1ZTogc3RyaW5nW10pIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgIXZhbHVlLmV2ZXJ5KGl0ZW0gPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhY2NlcHRlZFR5cGVzIGV4cGVjdHM6IHN0cmluZ1tdYCk7XHJcbiAgICB0aGlzLl9hY2NlcHRlZFR5cGVzID0gdmFsdWU7XHJcbiAgICB0aGlzLnZhbGlkYXRpb24ubmV4dCgpO1xyXG4gIH1cclxuICBfYWNjZXB0ZWRUeXBlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgZ2V0IHNpemVMaW1pdE1iKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NpemVMaW1pdE1iO1xyXG4gIH1cclxuICBzZXQgc2l6ZUxpbWl0TWIodmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKCFpc051bWJlcih2YWx1ZSkgfHwgdmFsdWUgPCAwKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpemVMaW1pdE1iIGV4cGVjdHM6IHBvc2l0aXZlIG51bWJlcicpO1xyXG4gICAgdGhpcy5fc2l6ZUxpbWl0TWIgPSB2YWx1ZTtcclxuICAgIHRoaXMudmFsaWRhdGlvbi5uZXh0KCk7XHJcbiAgfVxyXG4gIF9zaXplTGltaXRNYiA9IDA7XHJcblxyXG4gIEBJbnB1dCgpIGdldCBtdWx0aXBsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcclxuICB9XHJcbiAgc2V0IG11bHRpcGxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9tdWx0aXBsZSA9IHZhbHVlID09PSB0cnVlO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uLm5leHQoKTtcclxuICB9XHJcbiAgX211bHRpcGxlID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dTaXplID0gZmFsc2U7XHJcblxyXG4gIG1vZGVsOiAnJyB8IG51bGwgPSBudWxsO1xyXG4gIGlkID0gYCR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMudmFsaWRhdGUoKSk7XHJcbiAgICBuZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsZU5hbWVzKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wudmFsdWUgaW5zdGFuY2VvZiBGaWxlTGlzdClcclxuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5uZ0NvbnRyb2wudmFsdWUpLm1hcChmaWxlID0+IGZpbGUubmFtZSkuam9pbignLCAnKTtcclxuXHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wudmFsdWUgaW5zdGFuY2VvZiBGaWxlKVxyXG4gICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wudmFsdWUubmFtZTtcclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBnZXQgc2l6ZUxpbWl0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplTGltaXRNYiA8IDFcclxuICAgICAgPyBgJHt0aGlzLnNpemVMaW1pdE1iICogMTAwMH0gS0JgXHJcbiAgICAgIDogYCR7dGhpcy5zaXplTGltaXRNYn0gTUJgO1xyXG4gIH1cclxuXHJcbiAgb25GaWxlQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKFxyXG4gICAgICB0YXJnZXQuZmlsZXM/Lmxlbmd0aFxyXG4gICAgICAgID8gdGFyZ2V0LmZpbGVzXHJcbiAgICAgICAgOiBudWxsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoX21vZGVsOiBGaWxlTGlzdCB8IG51bGwpIHsgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICB2YWx1ZSA9IG51bGw7XHJcblxyXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmICEodmFsdWUgaW5zdGFuY2VvZiBGaWxlTGlzdCkpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29udHJvbCB2YWx1ZSBtdXN0IGJlOiBGaWxlIG9yIG51bGwnKTtcclxuICAgIC8vIHRvZG9cclxuICAgIC8vIHRoaXMubW9kZWwgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWNjZXB0ZWRUeXBlc1ZhbGlkYXRvcihhY2NlcHRlZFR5cGVzOiBzdHJpbmdbXSk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4gY29udHJvbC52YWx1ZSAhPT0gbnVsbFxyXG4gICAgICAmJiBjb250cm9sLnZhbHVlIGluc3RhbmNlb2YgRmlsZUxpc3RcclxuICAgICAgJiYgIU9iamVjdC52YWx1ZXMoY29udHJvbC52YWx1ZSkubWFwKGl0ZW0gPT4gaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgLmV2ZXJ5KHR5cGUgPT4gYWNjZXB0ZWRUeXBlcy5pbmNsdWRlcyh0eXBlLnRvTG93ZXJDYXNlKCkpKVxyXG4gICAgICA/IHsgYWNjZXB0ZWRUeXBlczogeyB2YWx1ZTogY29udHJvbC52YWx1ZSB9IH1cclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZhbGlkVmFsaWRhdG9yKG11bHRpcGxlOiBib29sZWFuKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiBjb250cm9sLnZhbHVlICE9PSBudWxsXHJcbiAgICAgICYmICghKGNvbnRyb2wudmFsdWUgaW5zdGFuY2VvZiBGaWxlTGlzdCkgfHwgKGNvbnRyb2wudmFsdWUubGVuZ3RoID4gMSAmJiAhbXVsdGlwbGUpKVxyXG4gICAgICA/IHsgaW52YWxpZDogeyB2YWx1ZTogY29udHJvbC52YWx1ZSB9IH1cclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaXplTGltaXRNYlZhbGlkYXRvcihzaXplTGltaXRNYjogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiBjb250cm9sLnZhbHVlIGluc3RhbmNlb2YgRmlsZUxpc3RcclxuICAgICAgJiYgT2JqZWN0LnZhbHVlcyhjb250cm9sLnZhbHVlKS5tYXAoaXRlbSA9PiBpdGVtLnNpemUgLyAxMDI0IC8gMTAyNClcclxuICAgICAgICAucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLCAwKSA+IHNpemVMaW1pdE1iXHJcbiAgICAgID8geyBzaXplTGltaXRNYjogeyB2YWx1ZTogY29udHJvbC52YWx1ZSB9IH1cclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZSgpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXHJcbiAgICAgIHRoaXMuaW52YWxpZFZhbGlkYXRvcih0aGlzLm11bHRpcGxlKVxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAodGhpcy5hY2NlcHRlZFR5cGVzLmxlbmd0aCA+IDApXHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLmFjY2VwdGVkVHlwZXNWYWxpZGF0b3IodGhpcy5hY2NlcHRlZFR5cGVzKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2l6ZUxpbWl0TWIgPiAwKVxyXG4gICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5zaXplTGltaXRNYlZhbGlkYXRvcih0aGlzLnNpemVMaW1pdE1iKSk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgPT09IHRydWUpXHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sPy5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bGFiZWwgW2NsYXNzLnJlcXVpcmVkXT1cInJlcXVpcmVkXCI+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2xhYmVsPlxyXG5cclxuPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICA8ZGl2PlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cIndoaXRlLXNwYWNlLW5vd3JhcFwiXHJcbiAgICAgIFtjbGFzcy5ib3JkZXItcmFkaXVzLXJpZ2h0XT1cImJvcmRlclJhZGl1c1JpZ2h0XCJcclxuICAgICAgW2NsYXNzLmJvcmRlci1yYWRpdXMtbGVmdF09XCJib3JkZXJSYWRpdXNMZWZ0XCJcclxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJuZ0NvbnRyb2wudmFsdWUgIT09IG51bGxcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiXHJcbiAgICA+XHJcbiAgICAgIDxpY29uXHJcbiAgICAgICAgdHlwZT1cImZvbGRlclwiXHJcbiAgICAgICAgc2l6ZT1cIjFlbVwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXJnaW4tcmlnaHQtMVwiXHJcbiAgICAgICAgW2ZpbGxdPVwiW251bGwsICdjdXJyZW50J11cIlxyXG4gICAgICAgIGZpbGxSb3RhdGU9XCI5MFwiXHJcbiAgICAgID48L2ljb24+XHJcbiAgICAgIENob29zZSB7e211bHRpcGxlID8gJ0ZpbGVzJyA6ICdGaWxlJ319XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIm5nQ29udHJvbC52YWx1ZVwiXHJcbiAgICBpZD1cImZpbGVuYW1lXCJcclxuICA+XHJcbiAgICB7e2ZpbGVOYW1lc319XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSA8dWwgKm5nSWY9XCJuZ0NvbnRyb2wuY29udHJvbD8uZXJyb3JzXCI+XHJcbiAgPGxpICpuZ0lmPVwibmdDb250cm9sLmNvbnRyb2w/LmVycm9ycz8uWydhY2NlcHRlZFR5cGVzJ11cIj5cclxuICAgIHZhbGlkIHR5cGVzIGFyZSB7e2FjY2VwdGVkVHlwZXMuam9pbignLCAnKX19XHJcbiAgPC9saT5cclxuICA8bGkgKm5nSWY9XCJuZ0NvbnRyb2wuY29udHJvbD8uZXJyb3JzPy5bJ3NpemVMaW1pdE1iJ11cIj5cclxuICAgIG1heCBmaWxlIHNpemUgaXMge3tzaXplTGltaXR9fVxyXG4gIDwvbGk+XHJcbiAgPGxpICpuZ0lmPVwibmdDb250cm9sLmNvbnRyb2w/LmVycm9ycz8uWydpbnZhbGlkJ11cIj5cclxuICAgIGludmFsaWQgbW9kZWxcclxuICA8L2xpPlxyXG48L3VsPiAtLT5cclxuXHJcbjxpbnB1dFxyXG4gIFsobmdNb2RlbCldPVwibW9kZWxcIlxyXG4gICNmaWxlSW5wdXRcclxuICB0eXBlPVwiZmlsZVwiXHJcbiAgW2FjY2VwdF09XCJhY2NlcHRlZFR5cGVzLmpvaW4oKVwiXHJcbiAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcclxuICBbaWRdPVwiaWRcIlxyXG4gIChjaGFuZ2UpPVwib25GaWxlQ2hhbmdlKCRldmVudClcIlxyXG4vPlxyXG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './choice/choice.component';
|
|
2
|
+
export * from './color/color.component';
|
|
3
|
+
export * from './file/file.component';
|
|
4
|
+
export * from './number/number.component';
|
|
5
|
+
export * from './readonly/readonly.component';
|
|
6
|
+
export * from './text/text.component';
|
|
7
|
+
export * from './select/select.component';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGFvcy1jb250cm9sL3NyYy9saWIvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jaG9pY2UvY2hvaWNlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29sb3IvY29sb3IuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9maWxlL2ZpbGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9udW1iZXIvbnVtYmVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcmVhZG9ubHkvcmVhZG9ubHkuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi90ZXh0L3RleHQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudCc7XHJcbiJdfQ==
|