@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.
- package/esm2020/file-input/enigmatry-entry-components-file-input.mjs +5 -0
- package/esm2020/file-input/entry-file-input.component.mjs +154 -0
- package/esm2020/file-input/entry-file-input.module.mjs +40 -0
- package/esm2020/file-input/public-api.mjs +3 -0
- package/esm2020/public-api.mjs +2 -3
- package/fesm2015/enigmatry-entry-components-file-input.mjs +197 -0
- package/fesm2015/enigmatry-entry-components-file-input.mjs.map +1 -0
- package/fesm2015/enigmatry-entry-components.mjs +1 -2
- package/fesm2015/enigmatry-entry-components.mjs.map +1 -1
- package/fesm2020/enigmatry-entry-components-file-input.mjs +197 -0
- package/fesm2020/enigmatry-entry-components-file-input.mjs.map +1 -0
- package/fesm2020/enigmatry-entry-components.mjs +1 -2
- package/fesm2020/enigmatry-entry-components.mjs.map +1 -1
- package/file-input/README.md +71 -0
- package/file-input/entry-file-input.component.d.ts +63 -0
- package/file-input/entry-file-input.module.d.ts +12 -0
- package/{header → file-input}/index.d.ts +1 -1
- package/file-input/public-api.d.ts +2 -0
- package/package.json +8 -16
- package/public-api.d.ts +1 -2
- package/styles/_generator.scss +0 -2
- package/styles/modules/_default-theme.scss +0 -5
- package/styles/partials/core/components/_index.scss +0 -1
- package/styles/partials/generator-test.scss +1 -6
- package/esm2020/header/enigmatry-entry-components-header.mjs +0 -5
- package/esm2020/header/entry-header.component.mjs +0 -13
- package/esm2020/header/entry-header.module.mjs +0 -24
- package/esm2020/header/public-api.mjs +0 -3
- package/esm2020/toolbar/enigmatry-entry-components-toolbar.mjs +0 -5
- package/esm2020/toolbar/entry-toolbar.component.mjs +0 -43
- package/esm2020/toolbar/entry-toolbar.module.mjs +0 -24
- package/esm2020/toolbar/public-api.mjs +0 -3
- package/fesm2015/enigmatry-entry-components-header.mjs +0 -41
- package/fesm2015/enigmatry-entry-components-header.mjs.map +0 -1
- package/fesm2015/enigmatry-entry-components-toolbar.mjs +0 -71
- package/fesm2015/enigmatry-entry-components-toolbar.mjs.map +0 -1
- package/fesm2020/enigmatry-entry-components-header.mjs +0 -41
- package/fesm2020/enigmatry-entry-components-header.mjs.map +0 -1
- package/fesm2020/enigmatry-entry-components-toolbar.mjs +0 -71
- package/fesm2020/enigmatry-entry-components-toolbar.mjs.map +0 -1
- package/header/README.md +0 -41
- package/header/entry-header.component.d.ts +0 -6
- package/header/entry-header.module.d.ts +0 -8
- package/header/public-api.d.ts +0 -2
- package/styles/modules/components/headers/_generator.scss +0 -12
- package/styles/partials/core/components/headers/_general.scss +0 -7
- package/toolbar/README.md +0 -39
- package/toolbar/entry-toolbar.component.d.ts +0 -28
- package/toolbar/entry-toolbar.module.d.ts +0 -8
- package/toolbar/index.d.ts +0 -5
- 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/
|
|
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
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enigmatry/entry-components",
|
|
3
|
-
"version": "1.15.1-preview.
|
|
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
|
-
"./
|
|
62
|
-
"types": "./
|
|
63
|
-
"esm2020": "./esm2020/
|
|
64
|
-
"es2020": "./fesm2020/enigmatry-entry-components-
|
|
65
|
-
"es2015": "./fesm2015/enigmatry-entry-components-
|
|
66
|
-
"node": "./fesm2015/enigmatry-entry-components-
|
|
67
|
-
"default": "./fesm2020/enigmatry-entry-components-
|
|
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';
|
package/styles/_generator.scss
CHANGED
|
@@ -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
|
}
|
|
@@ -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
|