@enigmatry/entry-components 1.15.1-preview.25 → 1.15.1-preview.27

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 (51) hide show
  1. package/esm2020/file-input/enigmatry-entry-components-file-input.mjs +5 -0
  2. package/esm2020/file-input/entry-file-input.component.mjs +154 -0
  3. package/esm2020/file-input/entry-file-input.module.mjs +40 -0
  4. package/esm2020/file-input/public-api.mjs +3 -0
  5. package/esm2020/public-api.mjs +2 -3
  6. package/fesm2015/enigmatry-entry-components-file-input.mjs +197 -0
  7. package/fesm2015/enigmatry-entry-components-file-input.mjs.map +1 -0
  8. package/fesm2015/enigmatry-entry-components.mjs +1 -2
  9. package/fesm2015/enigmatry-entry-components.mjs.map +1 -1
  10. package/fesm2020/enigmatry-entry-components-file-input.mjs +197 -0
  11. package/fesm2020/enigmatry-entry-components-file-input.mjs.map +1 -0
  12. package/fesm2020/enigmatry-entry-components.mjs +1 -2
  13. package/fesm2020/enigmatry-entry-components.mjs.map +1 -1
  14. package/file-input/README.md +71 -0
  15. package/file-input/entry-file-input.component.d.ts +63 -0
  16. package/file-input/entry-file-input.module.d.ts +12 -0
  17. package/{header → file-input}/index.d.ts +1 -1
  18. package/file-input/public-api.d.ts +2 -0
  19. package/package.json +8 -16
  20. package/public-api.d.ts +1 -2
  21. package/styles/_generator.scss +0 -2
  22. package/styles/modules/_default-theme.scss +0 -5
  23. package/styles/partials/core/components/_index.scss +0 -1
  24. package/styles/partials/generator-test.scss +1 -6
  25. package/esm2020/header/enigmatry-entry-components-header.mjs +0 -5
  26. package/esm2020/header/entry-header.component.mjs +0 -13
  27. package/esm2020/header/entry-header.module.mjs +0 -24
  28. package/esm2020/header/public-api.mjs +0 -3
  29. package/esm2020/toolbar/enigmatry-entry-components-toolbar.mjs +0 -5
  30. package/esm2020/toolbar/entry-toolbar.component.mjs +0 -43
  31. package/esm2020/toolbar/entry-toolbar.module.mjs +0 -24
  32. package/esm2020/toolbar/public-api.mjs +0 -3
  33. package/fesm2015/enigmatry-entry-components-header.mjs +0 -41
  34. package/fesm2015/enigmatry-entry-components-header.mjs.map +0 -1
  35. package/fesm2015/enigmatry-entry-components-toolbar.mjs +0 -71
  36. package/fesm2015/enigmatry-entry-components-toolbar.mjs.map +0 -1
  37. package/fesm2020/enigmatry-entry-components-header.mjs +0 -41
  38. package/fesm2020/enigmatry-entry-components-header.mjs.map +0 -1
  39. package/fesm2020/enigmatry-entry-components-toolbar.mjs +0 -71
  40. package/fesm2020/enigmatry-entry-components-toolbar.mjs.map +0 -1
  41. package/header/README.md +0 -41
  42. package/header/entry-header.component.d.ts +0 -6
  43. package/header/entry-header.module.d.ts +0 -8
  44. package/header/public-api.d.ts +0 -2
  45. package/styles/modules/components/headers/_generator.scss +0 -12
  46. package/styles/partials/core/components/headers/_general.scss +0 -7
  47. package/toolbar/README.md +0 -39
  48. package/toolbar/entry-toolbar.component.d.ts +0 -28
  49. package/toolbar/entry-toolbar.module.d.ts +0 -8
  50. package/toolbar/index.d.ts +0 -5
  51. package/toolbar/public-api.d.ts +0 -2
@@ -0,0 +1,197 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, forwardRef, ElementRef, Component, ChangeDetectionStrategy, Input, Output, ViewChild, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
6
+ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
7
+ import { Subject, fromEvent } from 'rxjs';
8
+ import { takeUntil } from 'rxjs/operators';
9
+ import * as i2 from '@angular/material/icon';
10
+ import { MatIconModule } from '@angular/material/icon';
11
+ import * as i3 from '@angular/material/button';
12
+ import { MatButtonModule } from '@angular/material/button';
13
+ import * as i4 from '@enigmatry/entry-components/button';
14
+ import { EntryButtonModule } from '@enigmatry/entry-components/button';
15
+
16
+ /* eslint-disable @typescript-eslint/member-ordering */
17
+ class EntryFileInputComponent {
18
+ /**
19
+ * Same as 'multiple' attribute in <input/> element.
20
+ */
21
+ set multiple(multiple) {
22
+ this._multiple = coerceBooleanProperty(multiple);
23
+ }
24
+ get multiple() {
25
+ return this._multiple;
26
+ }
27
+ /**
28
+ * Same as 'disabled' attribute in <input/> element.
29
+ */
30
+ set disabled(disabled) {
31
+ this._disabled = coerceBooleanProperty(disabled);
32
+ }
33
+ get disabled() {
34
+ return this._disabled;
35
+ }
36
+ /**
37
+ * Same as 'readonly' attribute in <input/> element.
38
+ */
39
+ set readonly(readonly) {
40
+ this._readonly = coerceBooleanProperty(readonly);
41
+ }
42
+ get readonly() {
43
+ return this._readonly;
44
+ }
45
+ constructor(_ngZone, _renderer) {
46
+ this._ngZone = _ngZone;
47
+ this._renderer = _renderer;
48
+ /**
49
+ * Label for the select file button. Defaults to 'Choose file...'
50
+ */
51
+ this.label = 'Choose file...';
52
+ /**
53
+ * MatIcon for the select file button. Defaults to 'insert_drive_file' (optional)
54
+ */
55
+ this.matIcon = 'insert_drive_file';
56
+ this._multiple = false;
57
+ this._disabled = false;
58
+ this._readonly = false;
59
+ /**
60
+ * Event emitted when a file is selected. Emits a [File | FileList] object.
61
+ */
62
+ this.selectedFile = new EventEmitter();
63
+ this._destroy$ = new Subject();
64
+ // ControlValueAccessor methods
65
+ this.onChange = (_) => { };
66
+ this.onTouched = () => { };
67
+ }
68
+ get fileNames() {
69
+ if (this.value instanceof File) {
70
+ return this.value.name;
71
+ }
72
+ if (this.value instanceof FileList) {
73
+ return `${this.value.length} files`;
74
+ }
75
+ return '';
76
+ }
77
+ ngOnInit() {
78
+ // Handle click event on custom file button and trigger click on native file input
79
+ this._ngZone.runOutsideAngular(() => {
80
+ fromEvent(this._fileButton.nativeElement, 'click')
81
+ .pipe(takeUntil(this._destroy$))
82
+ .subscribe(() => {
83
+ this._fileInput.nativeElement.click();
84
+ });
85
+ });
86
+ }
87
+ ngOnDestroy() {
88
+ this._destroy$.next();
89
+ }
90
+ onFileSelect(event) {
91
+ const fileInputEl = event.target;
92
+ const files = fileInputEl.files;
93
+ const value = this._multiple
94
+ ? files?.length > 1 ? files : files[0]
95
+ : files[0];
96
+ this.value = value;
97
+ this.onChange(value);
98
+ this.onTouched();
99
+ if (value) {
100
+ this.selectedFile.emit(value);
101
+ }
102
+ }
103
+ clear() {
104
+ this.value = undefined;
105
+ this.onChange(undefined);
106
+ this._renderer.setProperty(this._fileInput.nativeElement, 'value', '');
107
+ }
108
+ writeValue(value) {
109
+ this.value = value;
110
+ }
111
+ registerOnChange(fn) {
112
+ this.onChange = fn;
113
+ }
114
+ registerOnTouched(fn) {
115
+ this.onTouched = fn;
116
+ }
117
+ setDisabledState(isDisabled) {
118
+ this._disabled = isDisabled;
119
+ }
120
+ }
121
+ EntryFileInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryFileInputComponent, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
122
+ EntryFileInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EntryFileInputComponent, selector: "entry-file-input", inputs: { label: "label", matIcon: "matIcon", accept: "accept", multiple: "multiple", disabled: "disabled", readonly: "readonly" }, outputs: { selectedFile: "selectedFile" }, providers: [
123
+ {
124
+ provide: NG_VALUE_ACCESSOR,
125
+ useExisting: forwardRef(() => EntryFileInputComponent),
126
+ multi: true,
127
+ },
128
+ ], viewQueries: [{ propertyName: "_fileButton", first: true, predicate: ["fileButton"], descendants: true, read: ElementRef, static: true }, { propertyName: "_fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: "<button \r\n #fileButton \r\n mat-button \r\n entry-submit-button \r\n type=\"button\" \r\n [disabled]=\"disabled || readonly\">\r\n <mat-icon *ngIf=\"matIcon\">{{matIcon}}</mat-icon>\r\n <span>{{label}}</span>\r\n</button>\r\n<ng-container *ngIf=\"value\">\r\n {{fileNames}}\r\n</ng-container>\r\n<input\r\n #fileInput\r\n type=\"file\"\r\n class=\"file-input-hidden\"\r\n [accept]=\"accept\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (change)=\"onFileSelect($event)\"\r\n/>", styles: [".file-input-hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4.EntryButtonDirective, selector: "[mat-button][entry-submit-button],[mat-button][entry-cancel-button]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryFileInputComponent, decorators: [{
130
+ type: Component,
131
+ args: [{ selector: 'entry-file-input', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
132
+ {
133
+ provide: NG_VALUE_ACCESSOR,
134
+ useExisting: forwardRef(() => EntryFileInputComponent),
135
+ multi: true,
136
+ },
137
+ ], template: "<button \r\n #fileButton \r\n mat-button \r\n entry-submit-button \r\n type=\"button\" \r\n [disabled]=\"disabled || readonly\">\r\n <mat-icon *ngIf=\"matIcon\">{{matIcon}}</mat-icon>\r\n <span>{{label}}</span>\r\n</button>\r\n<ng-container *ngIf=\"value\">\r\n {{fileNames}}\r\n</ng-container>\r\n<input\r\n #fileInput\r\n type=\"file\"\r\n class=\"file-input-hidden\"\r\n [accept]=\"accept\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (change)=\"onFileSelect($event)\"\r\n/>", styles: [".file-input-hidden{display:none}\n"] }]
138
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { label: [{
139
+ type: Input
140
+ }], matIcon: [{
141
+ type: Input
142
+ }], accept: [{
143
+ type: Input
144
+ }], multiple: [{
145
+ type: Input
146
+ }], disabled: [{
147
+ type: Input
148
+ }], readonly: [{
149
+ type: Input
150
+ }], selectedFile: [{
151
+ type: Output
152
+ }], _fileButton: [{
153
+ type: ViewChild,
154
+ args: ['fileButton', { static: true, read: ElementRef }]
155
+ }], _fileInput: [{
156
+ type: ViewChild,
157
+ args: ['fileInput', { static: true }]
158
+ }] } });
159
+
160
+ class EntryFileInputModule {
161
+ }
162
+ EntryFileInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryFileInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
163
+ EntryFileInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: EntryFileInputModule, declarations: [EntryFileInputComponent], imports: [CommonModule,
164
+ FormsModule,
165
+ MatIconModule,
166
+ MatButtonModule,
167
+ EntryButtonModule], exports: [EntryFileInputComponent] });
168
+ EntryFileInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryFileInputModule, imports: [CommonModule,
169
+ FormsModule,
170
+ MatIconModule,
171
+ MatButtonModule,
172
+ EntryButtonModule] });
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryFileInputModule, decorators: [{
174
+ type: NgModule,
175
+ args: [{
176
+ declarations: [
177
+ EntryFileInputComponent
178
+ ],
179
+ imports: [
180
+ CommonModule,
181
+ FormsModule,
182
+ MatIconModule,
183
+ MatButtonModule,
184
+ EntryButtonModule
185
+ ],
186
+ exports: [
187
+ EntryFileInputComponent
188
+ ]
189
+ }]
190
+ }] });
191
+
192
+ /**
193
+ * Generated bundle index. Do not edit.
194
+ */
195
+
196
+ export { EntryFileInputComponent, EntryFileInputModule };
197
+ //# sourceMappingURL=enigmatry-entry-components-file-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enigmatry-entry-components-file-input.mjs","sources":["../../../../libs/entry-components/file-input/entry-file-input.component.ts","../../../../libs/entry-components/file-input/entry-file-input.component.html","../../../../libs/entry-components/file-input/entry-file-input.module.ts","../../../../libs/entry-components/file-input/enigmatry-entry-components-file-input.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/member-ordering */\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component, ElementRef, EventEmitter, Input, NgZone,\n OnDestroy, OnInit, Output, Renderer2, ViewChild, forwardRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'entry-file-input',\n templateUrl: './entry-file-input.component.html',\n styleUrls: ['./entry-file-input.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EntryFileInputComponent),\n multi: true,\n },\n ],\n})\nexport class EntryFileInputComponent implements\n OnInit, OnDestroy, ControlValueAccessor {\n\n /**\n * Label for the select file button. Defaults to 'Choose file...'\n */\n @Input() label = 'Choose file...';\n\n /**\n * MatIcon for the select file button. Defaults to 'insert_drive_file' (optional)\n */\n @Input() matIcon?= 'insert_drive_file';\n\n /**\n * Same as 'accept' attribute in <input/> element.\n */\n @Input() accept?: string;\n\n /**\n * Same as 'multiple' attribute in <input/> element.\n */\n @Input()\n set multiple(multiple: BooleanInput) {\n this._multiple = coerceBooleanProperty(multiple);\n }\n get multiple(): boolean {\n return this._multiple;\n }\n private _multiple = false;\n\n /**\n * Same as 'disabled' attribute in <input/> element.\n */\n @Input()\n set disabled(disabled: BooleanInput) {\n this._disabled = coerceBooleanProperty(disabled);\n }\n get disabled(): boolean {\n return this._disabled;\n }\n private _disabled = false;\n\n /**\n * Same as 'readonly' attribute in <input/> element.\n */\n @Input()\n set readonly(readonly: BooleanInput) {\n this._readonly = coerceBooleanProperty(readonly);\n }\n get readonly(): boolean {\n return this._readonly;\n }\n private _readonly = false;\n\n /**\n * Current selected [File | FileList] object.\n */\n value: File | FileList | undefined;\n\n /**\n * Event emitted when a file is selected. Emits a [File | FileList] object.\n */\n @Output() selectedFile = new EventEmitter<File | FileList>();\n\n\n @ViewChild('fileButton', { static: true, read: ElementRef })\n _fileButton!: ElementRef<HTMLElement>;\n\n @ViewChild('fileInput', { static: true })\n _fileInput!: ElementRef<HTMLInputElement>;\n\n private _destroy$ = new Subject<void>();\n\n constructor(\n private readonly _ngZone: NgZone,\n private readonly _renderer: Renderer2) {\n }\n\n get fileNames(): string {\n if (this.value instanceof File) {\n return this.value.name;\n }\n if (this.value instanceof FileList) {\n return `${this.value.length} files`;\n }\n return '';\n }\n\n ngOnInit(): void {\n // Handle click event on custom file button and trigger click on native file input\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._fileButton.nativeElement, 'click')\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._fileInput.nativeElement.click();\n });\n });\n }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n }\n\n onFileSelect(event: Event): void {\n const fileInputEl = event.target as HTMLInputElement;\n const files: FileList = fileInputEl.files;\n\n const value = this._multiple\n ? files?.length > 1 ? files : files[0]\n : files[0];\n\n this.value = value;\n this.onChange(value);\n this.onTouched();\n\n if (value) {\n this.selectedFile.emit(value);\n }\n }\n\n clear(): void {\n this.value = undefined;\n this.onChange(undefined);\n this._renderer.setProperty(this._fileInput.nativeElement, 'value', '');\n }\n\n // ControlValueAccessor methods\n\n onChange = (_: any) => { };\n\n onTouched = () => { };\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this._disabled = isDisabled;\n }\n}\n","<button \r\n #fileButton \r\n mat-button \r\n entry-submit-button \r\n type=\"button\" \r\n [disabled]=\"disabled || readonly\">\r\n <mat-icon *ngIf=\"matIcon\">{{matIcon}}</mat-icon>\r\n <span>{{label}}</span>\r\n</button>\r\n<ng-container *ngIf=\"value\">\r\n {{fileNames}}\r\n</ng-container>\r\n<input\r\n #fileInput\r\n type=\"file\"\r\n class=\"file-input-hidden\"\r\n [accept]=\"accept\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (change)=\"onFileSelect($event)\"\r\n/>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EntryFileInputComponent } from './entry-file-input.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { FormsModule } from '@angular/forms';\nimport { EntryButtonModule } from '@enigmatry/entry-components/button';\n\n@NgModule({\n declarations: [\n EntryFileInputComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MatIconModule,\n MatButtonModule,\n EntryButtonModule\n ],\n exports: [\n EntryFileInputComponent\n ]\n})\nexport class EntryFileInputModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,8 @@
1
- export * from '@enigmatry/entry-components/header';
2
1
  export * from '@enigmatry/entry-components/dialog';
3
2
  export * from '@enigmatry/entry-components/search-filter';
4
- export * from '@enigmatry/entry-components/toolbar';
5
3
  export * from '@enigmatry/entry-components/validation';
6
4
  export * from '@enigmatry/entry-components/button';
5
+ export * from '@enigmatry/entry-components/file-input';
7
6
 
8
7
  /*
9
8
  * Public API Surface of entry-components
@@ -1 +1 @@
1
- {"version":3,"file":"enigmatry-entry-components.mjs","sources":["../../../../libs/entry-components/public-api.ts","../../../../libs/entry-components/enigmatry-entry-components.ts"],"sourcesContent":["/*\n * Public API Surface of entry-components\n */\n\nexport * from '@enigmatry/entry-components/header';\nexport * from '@enigmatry/entry-components/dialog';\nexport * from '@enigmatry/entry-components/search-filter';\nexport * from '@enigmatry/entry-components/toolbar';\nexport * from '@enigmatry/entry-components/validation';\nexport * from '@enigmatry/entry-components/button';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAAA;;AAEG;;ACFH;;AAEG"}
1
+ {"version":3,"file":"enigmatry-entry-components.mjs","sources":["../../../../libs/entry-components/public-api.ts","../../../../libs/entry-components/enigmatry-entry-components.ts"],"sourcesContent":["/*\n * Public API Surface of entry-components\n */\n\nexport * from '@enigmatry/entry-components/dialog';\nexport * from '@enigmatry/entry-components/search-filter';\nexport * from '@enigmatry/entry-components/validation';\nexport * from '@enigmatry/entry-components/button';\nexport * from '@enigmatry/entry-components/file-input';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAAA;;AAEG;;ACFH;;AAEG"}
@@ -0,0 +1,71 @@
1
+ # Entry File Input
2
+
3
+ `EntryFileInputComponent` is an Angular component that provides a custom file input button with additional functionality
4
+
5
+ ## Setup
6
+
7
+ Import the [EntryFileInputModule] in your NgModule:
8
+
9
+ ```typescript
10
+ import { EntryFileInputModule } from '@enigmatry/entry-components/file-input';
11
+ @NgModule({
12
+ imports: [
13
+ EntryFileInputModule,
14
+ ...
15
+ ],
16
+ ...
17
+ })
18
+ export class MyModule {}
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ Use the entry-file-input component in your template:
24
+
25
+ ```html
26
+ <entry-file-input
27
+ [label]="'Choose a file...'"
28
+ [matIcon]="'attachment'"
29
+ [accept]="'image/*'"
30
+ [multiple]="false"
31
+ [disabled]="false"
32
+ [(ngModel)]="files"
33
+ (selectedFile)="selectEvent($event)">
34
+ </entry-file-input>
35
+ ```
36
+
37
+ ```typescript
38
+ export class Sample {
39
+
40
+ files: File | FileList;
41
+
42
+ selectEvent(files: FileList | File): void {
43
+ if (files instanceof FileList) {
44
+ ...
45
+ } else {
46
+ ...
47
+ }
48
+ };
49
+ }
50
+ ```
51
+
52
+ ## API Summary
53
+
54
+ #### Inputs
55
+ - matIcon: string
56
+ - MatIcon for the select file button. Defaults to 'insert_drive_file' (optional).
57
+ - multiple: boolean
58
+ - Sets if multiple files can be selected at once in.
59
+ - accept: string
60
+ - Sets files accepted when opening the file browser dialog. Same as "accept" attribute in `<input/>` element.
61
+ - disabled: boolean
62
+ - Disables input and clears selected files.
63
+
64
+ #### Events
65
+
66
+ - selectedFile: function($event)
67
+ - Emits a [File or FileList] object.
68
+
69
+ #### Styling
70
+
71
+ Button type and color can be styled by providing entry-button configuration.
@@ -0,0 +1,63 @@
1
+ import { BooleanInput } from '@angular/cdk/coercion';
2
+ import { ElementRef, EventEmitter, NgZone, OnDestroy, OnInit, Renderer2 } from '@angular/core';
3
+ import { ControlValueAccessor } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ export declare class EntryFileInputComponent implements OnInit, OnDestroy, ControlValueAccessor {
6
+ private readonly _ngZone;
7
+ private readonly _renderer;
8
+ /**
9
+ * Label for the select file button. Defaults to 'Choose file...'
10
+ */
11
+ label: string;
12
+ /**
13
+ * MatIcon for the select file button. Defaults to 'insert_drive_file' (optional)
14
+ */
15
+ matIcon?: string;
16
+ /**
17
+ * Same as 'accept' attribute in <input/> element.
18
+ */
19
+ accept?: string;
20
+ /**
21
+ * Same as 'multiple' attribute in <input/> element.
22
+ */
23
+ set multiple(multiple: BooleanInput);
24
+ get multiple(): boolean;
25
+ private _multiple;
26
+ /**
27
+ * Same as 'disabled' attribute in <input/> element.
28
+ */
29
+ set disabled(disabled: BooleanInput);
30
+ get disabled(): boolean;
31
+ private _disabled;
32
+ /**
33
+ * Same as 'readonly' attribute in <input/> element.
34
+ */
35
+ set readonly(readonly: BooleanInput);
36
+ get readonly(): boolean;
37
+ private _readonly;
38
+ /**
39
+ * Current selected [File | FileList] object.
40
+ */
41
+ value: File | FileList | undefined;
42
+ /**
43
+ * Event emitted when a file is selected. Emits a [File | FileList] object.
44
+ */
45
+ selectedFile: EventEmitter<File | FileList>;
46
+ _fileButton: ElementRef<HTMLElement>;
47
+ _fileInput: ElementRef<HTMLInputElement>;
48
+ private _destroy$;
49
+ constructor(_ngZone: NgZone, _renderer: Renderer2);
50
+ get fileNames(): string;
51
+ ngOnInit(): void;
52
+ ngOnDestroy(): void;
53
+ onFileSelect(event: Event): void;
54
+ clear(): void;
55
+ onChange: (_: any) => void;
56
+ onTouched: () => void;
57
+ writeValue(value: any): void;
58
+ registerOnChange(fn: any): void;
59
+ registerOnTouched(fn: any): void;
60
+ setDisabledState?(isDisabled: boolean): void;
61
+ static ɵfac: i0.ɵɵFactoryDeclaration<EntryFileInputComponent, never>;
62
+ static ɵcmp: i0.ɵɵComponentDeclaration<EntryFileInputComponent, "entry-file-input", never, { "label": "label"; "matIcon": "matIcon"; "accept": "accept"; "multiple": "multiple"; "disabled": "disabled"; "readonly": "readonly"; }, { "selectedFile": "selectedFile"; }, never, never, false, never>;
63
+ }
@@ -0,0 +1,12 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./entry-file-input.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "@angular/forms";
5
+ import * as i4 from "@angular/material/icon";
6
+ import * as i5 from "@angular/material/button";
7
+ import * as i6 from "@enigmatry/entry-components/button";
8
+ export declare class EntryFileInputModule {
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<EntryFileInputModule, never>;
10
+ static ɵmod: i0.ɵɵNgModuleDeclaration<EntryFileInputModule, [typeof i1.EntryFileInputComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i4.MatIconModule, typeof i5.MatButtonModule, typeof i6.EntryButtonModule], [typeof i1.EntryFileInputComponent]>;
11
+ static ɵinj: i0.ɵɵInjectorDeclaration<EntryFileInputModule>;
12
+ }
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
- /// <amd-module name="@enigmatry/entry-components/header" />
4
+ /// <amd-module name="@enigmatry/entry-components/file-input" />
5
5
  export * from './public-api';
@@ -0,0 +1,2 @@
1
+ export { EntryFileInputModule } from './entry-file-input.module';
2
+ export { EntryFileInputComponent } from './entry-file-input.component';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enigmatry/entry-components",
3
- "version": "1.15.1-preview.25",
3
+ "version": "1.15.1-preview.27",
4
4
  "author": "Enigmatry",
5
5
  "description": "Enigmatry entry angular material components",
6
6
  "homepage": "https://github.com/enigmatry/entry-angular-building-blocks/tree/master/libs/entry-components#readme",
@@ -58,13 +58,13 @@
58
58
  "node": "./fesm2015/enigmatry-entry-components-dialog.mjs",
59
59
  "default": "./fesm2020/enigmatry-entry-components-dialog.mjs"
60
60
  },
61
- "./header": {
62
- "types": "./header/index.d.ts",
63
- "esm2020": "./esm2020/header/enigmatry-entry-components-header.mjs",
64
- "es2020": "./fesm2020/enigmatry-entry-components-header.mjs",
65
- "es2015": "./fesm2015/enigmatry-entry-components-header.mjs",
66
- "node": "./fesm2015/enigmatry-entry-components-header.mjs",
67
- "default": "./fesm2020/enigmatry-entry-components-header.mjs"
61
+ "./file-input": {
62
+ "types": "./file-input/index.d.ts",
63
+ "esm2020": "./esm2020/file-input/enigmatry-entry-components-file-input.mjs",
64
+ "es2020": "./fesm2020/enigmatry-entry-components-file-input.mjs",
65
+ "es2015": "./fesm2015/enigmatry-entry-components-file-input.mjs",
66
+ "node": "./fesm2015/enigmatry-entry-components-file-input.mjs",
67
+ "default": "./fesm2020/enigmatry-entry-components-file-input.mjs"
68
68
  },
69
69
  "./search-filter": {
70
70
  "types": "./search-filter/index.d.ts",
@@ -74,14 +74,6 @@
74
74
  "node": "./fesm2015/enigmatry-entry-components-search-filter.mjs",
75
75
  "default": "./fesm2020/enigmatry-entry-components-search-filter.mjs"
76
76
  },
77
- "./toolbar": {
78
- "types": "./toolbar/index.d.ts",
79
- "esm2020": "./esm2020/toolbar/enigmatry-entry-components-toolbar.mjs",
80
- "es2020": "./fesm2020/enigmatry-entry-components-toolbar.mjs",
81
- "es2015": "./fesm2015/enigmatry-entry-components-toolbar.mjs",
82
- "node": "./fesm2015/enigmatry-entry-components-toolbar.mjs",
83
- "default": "./fesm2020/enigmatry-entry-components-toolbar.mjs"
84
- },
85
77
  "./validation": {
86
78
  "types": "./validation/index.d.ts",
87
79
  "esm2020": "./esm2020/validation/enigmatry-entry-components-validation.mjs",
package/public-api.d.ts CHANGED
@@ -1,6 +1,5 @@
1
- export * from '@enigmatry/entry-components/header';
2
1
  export * from '@enigmatry/entry-components/dialog';
3
2
  export * from '@enigmatry/entry-components/search-filter';
4
- export * from '@enigmatry/entry-components/toolbar';
5
3
  export * from '@enigmatry/entry-components/validation';
6
4
  export * from '@enigmatry/entry-components/button';
5
+ export * from '@enigmatry/entry-components/file-input';
@@ -1,7 +1,6 @@
1
1
  @use 'modules/components/dialogs/generator' as dialog;
2
2
  @use 'modules/components/forms/generator' as forms;
3
3
  @use 'modules/components/search-filter/generator' as search-filter;
4
- @use 'modules/components/headers/generator' as header;
5
4
  @use 'modules/components/tables/generator' as table;
6
5
  @use 'modules/default-theme' as default;
7
6
  @use 'modules/vendors/angular-material/generator' as material-theme;
@@ -16,5 +15,4 @@
16
15
  @include forms.generate-from($merged-theme);
17
16
  @include search-filter.generate-from($merged-theme);
18
17
  @include dialog.generate-from($merged-theme);
19
- @include header.generate-from($merged-theme);
20
18
  }
@@ -50,11 +50,6 @@ $theme: (
50
50
  )
51
51
  )
52
52
  ),
53
- headers: (
54
- title: (
55
- size: 32px
56
- )
57
- ),
58
53
  dialogs: (
59
54
  title: (
60
55
  size: 20px
@@ -1,5 +1,4 @@
1
1
  @use 'dialogs/general' as dialogs;
2
- @use 'headers/general' as headers;
3
2
  @use 'tables/general' as tables;
4
3
  @use 'forms/general' as forms;
5
4
  @use 'search-filter/general' as search-filter;
@@ -16,12 +16,7 @@ $custom-theme: (
16
16
  cells: (
17
17
  first-cell-padding-left: 11px
18
18
  )
19
- ),
20
- headers: (
21
- title: (
22
- size: 41px
23
- )
24
- ),
19
+ )
25
20
  );
26
21
 
27
22
  @include generator.generate-from($custom-theme);
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5pZ21hdHJ5LWVudHJ5LWNvbXBvbmVudHMtaGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9lbnRyeS1jb21wb25lbnRzL2hlYWRlci9lbmlnbWF0cnktZW50cnktY29tcG9uZW50cy1oZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,13 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class EntryHeaderComponent {
4
- }
5
- EntryHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
- EntryHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EntryHeaderComponent, selector: "entry-header", inputs: { title: "title" }, ngImport: i0, template: "<header class=\"entry-header\">\n <div class=\"space-between\">\n <h1 class=\"title item\">{{title}}</h1>\n <ng-content select=\"[buttons]\"></ng-content>\n </div>\n <div class=\"row content\">\n <ng-content select=\"[content]\"></ng-content>\n </div>\n</header>", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryHeaderComponent, decorators: [{
8
- type: Component,
9
- args: [{ selector: 'entry-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"entry-header\">\n <div class=\"space-between\">\n <h1 class=\"title item\">{{title}}</h1>\n <ng-content select=\"[buttons]\"></ng-content>\n </div>\n <div class=\"row content\">\n <ng-content select=\"[content]\"></ng-content>\n </div>\n</header>" }]
10
- }], propDecorators: { title: [{
11
- type: Input
12
- }] } });
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9oZWFkZXIvZW50cnktaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9oZWFkZXIvZW50cnktaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVExRSxNQUFNLE9BQU8sb0JBQW9COztpSEFBcEIsb0JBQW9CO3FHQUFwQixvQkFBb0IsZ0ZDUmpDLHFSQVFTOzJGREFJLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VudHJ5LWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRyeS1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbnRyeS1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRW50cnlIZWFkZXJDb21wb25lbnQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xufVxuIiwiPGhlYWRlciBjbGFzcz1cImVudHJ5LWhlYWRlclwiPlxuICA8ZGl2IGNsYXNzPVwic3BhY2UtYmV0d2VlblwiPlxuICAgIDxoMSBjbGFzcz1cInRpdGxlIGl0ZW1cIj57e3RpdGxlfX08L2gxPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltidXR0b25zXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJyb3cgY29udGVudFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2hlYWRlcj4iXX0=
@@ -1,24 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { EntryHeaderComponent } from './entry-header.component';
4
- import * as i0 from "@angular/core";
5
- export class EntryHeaderModule {
6
- }
7
- EntryHeaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- EntryHeaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: EntryHeaderModule, declarations: [EntryHeaderComponent], imports: [CommonModule], exports: [EntryHeaderComponent] });
9
- EntryHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryHeaderModule, imports: [CommonModule] });
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryHeaderModule, decorators: [{
11
- type: NgModule,
12
- args: [{
13
- declarations: [
14
- EntryHeaderComponent
15
- ],
16
- imports: [
17
- CommonModule
18
- ],
19
- exports: [
20
- EntryHeaderComponent
21
- ]
22
- }]
23
- }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktaGVhZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9oZWFkZXIvZW50cnktaGVhZGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFhaEUsTUFBTSxPQUFPLGlCQUFpQjs7OEdBQWpCLGlCQUFpQjsrR0FBakIsaUJBQWlCLGlCQVQxQixvQkFBb0IsYUFHcEIsWUFBWSxhQUdaLG9CQUFvQjsrR0FHWCxpQkFBaUIsWUFOMUIsWUFBWTsyRkFNSCxpQkFBaUI7a0JBWDdCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLG9CQUFvQjtxQkFDckI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG9CQUFvQjtxQkFDckI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVudHJ5SGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9lbnRyeS1oZWFkZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgRW50cnlIZWFkZXJDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRW50cnlIZWFkZXJDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFbnRyeUhlYWRlck1vZHVsZSB7IH1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- export { EntryHeaderComponent } from './entry-header.component';
2
- export { EntryHeaderModule } from './entry-header.module';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9oZWFkZXIvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IHsgRW50cnlIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2VudHJ5LWhlYWRlci5jb21wb25lbnQnO1xuZXhwb3J0IHsgRW50cnlIZWFkZXJNb2R1bGUgfSBmcm9tICcuL2VudHJ5LWhlYWRlci5tb2R1bGUnO1xuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5pZ21hdHJ5LWVudHJ5LWNvbXBvbmVudHMtdG9vbGJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy90b29sYmFyL2VuaWdtYXRyeS1lbnRyeS1jb21wb25lbnRzLXRvb2xiYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,43 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- /**
5
- * Toolbar component (`<entry-toolbar>`) is used to render header section in the applications containing menu items as a content.
6
- * It offers build in support for toolbar title or logo, while other elements need to be provided via content projection.
7
- * On smaller screens (mobile/tablet) it switches to compact view containing menu icon button used to toggle content visibility.
8
- *
9
- * @example
10
- * ```html
11
- * <entry-toolbar
12
- * titleUri="http://www.enigmatry.com"
13
- * titleLogoSrc="assets/enigmatry-logo.png">
14
- * <!-- SOME CUSTOM HTML CODE THAT RENDERS MENU ITEMS -->
15
- * </entry-toolbar>
16
- * ```
17
- */
18
- export class EntryToolbarComponent {
19
- constructor() {
20
- /** Url to be redirected to if user click on the title (default value '/') */
21
- this.titleUri = '/';
22
- /** If provided, it replaces string title and renders logo image instead */
23
- this.titleLogoSrc = undefined;
24
- /** Used to hide the title section if not required (default value false) */
25
- this.hideTitle = false;
26
- this.menuOpened = false;
27
- }
28
- }
29
- EntryToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
- EntryToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EntryToolbarComponent, selector: "entry-toolbar", inputs: { title: "title", titleUri: "titleUri", titleLogoSrc: "titleLogoSrc", hideTitle: "hideTitle" }, ngImport: i0, template: "<header class=\"entry-toolbar\">\n <nav class=\"entry-toolbar-nav\">\n <div class=\"entry-toolbar-data\">\n <div class=\"entry-toolbar-logo\">\n <a *ngIf=\"!hideTitle\" [href]=\"titleUri\">\n <span *ngIf=\"!titleLogoSrc\">{{title}}</span>\n <img *ngIf=\"titleLogoSrc\" [src]=\"titleLogoSrc\"/>\n </a>\n </div>\n\n <div class=\"entry-toolbar-nav-toggle\"\n (click)=\"menuOpened = !menuOpened\"\n [ngClass]=\"{'show-toolbar-icon': menuOpened === true}\">\n <i class=\"nav-toggle-menu\">\n <span class=\"icon-menu\"></span>\n </i>\n <i class=\"nav-toggle-close\">\n <span class=\"icon-close\"></span>\n </i>\n </div>\n </div>\n <span class=\"entry-toolbar-content\"\n [ngClass]=\"{'show-toolbar-content': menuOpened === true}\">\n <ng-content></ng-content>\n </span>\n </nav>\n</header>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EntryToolbarComponent, decorators: [{
32
- type: Component,
33
- args: [{ selector: 'entry-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"entry-toolbar\">\n <nav class=\"entry-toolbar-nav\">\n <div class=\"entry-toolbar-data\">\n <div class=\"entry-toolbar-logo\">\n <a *ngIf=\"!hideTitle\" [href]=\"titleUri\">\n <span *ngIf=\"!titleLogoSrc\">{{title}}</span>\n <img *ngIf=\"titleLogoSrc\" [src]=\"titleLogoSrc\"/>\n </a>\n </div>\n\n <div class=\"entry-toolbar-nav-toggle\"\n (click)=\"menuOpened = !menuOpened\"\n [ngClass]=\"{'show-toolbar-icon': menuOpened === true}\">\n <i class=\"nav-toggle-menu\">\n <span class=\"icon-menu\"></span>\n </i>\n <i class=\"nav-toggle-close\">\n <span class=\"icon-close\"></span>\n </i>\n </div>\n </div>\n <span class=\"entry-toolbar-content\"\n [ngClass]=\"{'show-toolbar-content': menuOpened === true}\">\n <ng-content></ng-content>\n </span>\n </nav>\n</header>" }]
34
- }], propDecorators: { title: [{
35
- type: Input
36
- }], titleUri: [{
37
- type: Input
38
- }], titleLogoSrc: [{
39
- type: Input
40
- }], hideTitle: [{
41
- type: Input
42
- }] } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2VudHJ5LWNvbXBvbmVudHMvdG9vbGJhci9lbnRyeS10b29sYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy90b29sYmFyL2VudHJ5LXRvb2xiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUUxRTs7Ozs7Ozs7Ozs7OztHQWFHO0FBT0gsTUFBTSxPQUFPLHFCQUFxQjtJQU5sQztRQVNFLDZFQUE2RTtRQUNwRSxhQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLDJFQUEyRTtRQUNsRSxpQkFBWSxHQUF1QixTQUFTLENBQUM7UUFDdEQsMkVBQTJFO1FBQ2xFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFM0IsZUFBVSxHQUFHLEtBQUssQ0FBQztLQUNwQjs7a0hBWFkscUJBQXFCO3NHQUFyQixxQkFBcUIsNkpDdEJsQyx5akNBMEJTOzJGREpJLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU07OEJBSXRDLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVG9vbGJhciBjb21wb25lbnQgKGA8ZW50cnktdG9vbGJhcj5gKSBpcyB1c2VkIHRvIHJlbmRlciBoZWFkZXIgc2VjdGlvbiBpbiB0aGUgYXBwbGljYXRpb25zIGNvbnRhaW5pbmcgbWVudSBpdGVtcyBhcyBhIGNvbnRlbnQuXG4gKiBJdCBvZmZlcnMgYnVpbGQgaW4gc3VwcG9ydCBmb3IgdG9vbGJhciB0aXRsZSBvciBsb2dvLCB3aGlsZSBvdGhlciBlbGVtZW50cyBuZWVkIHRvIGJlIHByb3ZpZGVkIHZpYSBjb250ZW50IHByb2plY3Rpb24uXG4gKiBPbiBzbWFsbGVyIHNjcmVlbnMgKG1vYmlsZS90YWJsZXQpIGl0IHN3aXRjaGVzIHRvIGNvbXBhY3QgdmlldyBjb250YWluaW5nIG1lbnUgaWNvbiBidXR0b24gdXNlZCB0byB0b2dnbGUgY29udGVudCB2aXNpYmlsaXR5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8ZW50cnktdG9vbGJhclxuICogICAgdGl0bGVVcmk9XCJodHRwOi8vd3d3LmVuaWdtYXRyeS5jb21cIlxuICogICAgdGl0bGVMb2dvU3JjPVwiYXNzZXRzL2VuaWdtYXRyeS1sb2dvLnBuZ1wiPlxuICogICAgPCEtLSBTT01FIENVU1RPTSBIVE1MIENPREUgVEhBVCBSRU5ERVJTIE1FTlUgSVRFTVMgLS0+XG4gKiA8L2VudHJ5LXRvb2xiYXI+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW50cnktdG9vbGJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRyeS10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZW50cnktdG9vbGJhci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBFbnRyeVRvb2xiYXJDb21wb25lbnQge1xuICAvKiogVG9vbGJhciB0aXRsZSBwb3NpdGlvbmVkIGluIHRoZSBsZWZ0IHNpZGUgKi9cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgLyoqIFVybCB0byBiZSByZWRpcmVjdGVkIHRvIGlmIHVzZXIgY2xpY2sgb24gdGhlIHRpdGxlIChkZWZhdWx0IHZhbHVlICcvJykgKi9cbiAgQElucHV0KCkgdGl0bGVVcmkgPSAnLyc7XG4gIC8qKiBJZiBwcm92aWRlZCwgaXQgcmVwbGFjZXMgc3RyaW5nIHRpdGxlIGFuZCByZW5kZXJzIGxvZ28gaW1hZ2UgaW5zdGVhZCAqL1xuICBASW5wdXQoKSB0aXRsZUxvZ29TcmM6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgLyoqIFVzZWQgdG8gaGlkZSB0aGUgdGl0bGUgc2VjdGlvbiBpZiBub3QgcmVxdWlyZWQgKGRlZmF1bHQgdmFsdWUgZmFsc2UpICovXG4gIEBJbnB1dCgpIGhpZGVUaXRsZSA9IGZhbHNlO1xuXG4gIG1lbnVPcGVuZWQgPSBmYWxzZTtcbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJlbnRyeS10b29sYmFyXCI+XG4gICAgPG5hdiBjbGFzcz1cImVudHJ5LXRvb2xiYXItbmF2XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbnRyeS10b29sYmFyLWRhdGFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbnRyeS10b29sYmFyLWxvZ29cIj5cbiAgICAgICAgICAgICAgICA8YSAqbmdJZj1cIiFoaWRlVGl0bGVcIiBbaHJlZl09XCJ0aXRsZVVyaVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0aXRsZUxvZ29TcmNcIj57e3RpdGxlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJ0aXRsZUxvZ29TcmNcIiBbc3JjXT1cInRpdGxlTG9nb1NyY1wiLz5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVudHJ5LXRvb2xiYXItbmF2LXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnVPcGVuZWQgPSAhbWVudU9wZW5lZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzaG93LXRvb2xiYXItaWNvbic6IG1lbnVPcGVuZWQgPT09IHRydWV9XCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJuYXYtdG9nZ2xlLW1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLW1lbnVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibmF2LXRvZ2dsZS1jbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tY2xvc2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImVudHJ5LXRvb2xiYXItY29udGVudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J3Nob3ctdG9vbGJhci1jb250ZW50JzogbWVudU9wZW5lZCA9PT0gdHJ1ZX1cIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvbmF2PlxuPC9oZWFkZXI+Il19