UNPKG

@ngx-dropzone/material

Version:

Dropzone with Material Design implementation.

1 lines 9.31 kB
{"version":3,"file":"ngx-dropzone-material.mjs","sources":["../../../projects/material/src/lib/mat-dropzone/mat-dropzone.component.ts","../../../projects/material/src/public-api.ts","../../../projects/material/src/ngx-dropzone-material.ts"],"sourcesContent":["import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n HostBinding,\n inject,\n Input,\n QueryList,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport { MatChipRow } from '@angular/material/chips';\nimport { MatFormField, MatFormFieldControl } from '@angular/material/form-field';\nimport {\n AcceptService,\n coerceBoolean,\n DropzoneComponent,\n DropzoneService,\n FileInputDirective,\n FileInputValue,\n} from '@ngx-dropzone/cdk';\nimport { merge, Observable, Subject, takeUntil, tap } from 'rxjs';\n\n@Component({\n selector: 'ngx-mat-dropzone',\n exportAs: 'matDropzone',\n imports: [MatFormField, MatChipRow, FileInputDirective, DropzoneComponent],\n providers: [\n DropzoneService,\n AcceptService,\n {\n provide: MatFormFieldControl,\n useExisting: MatDropzone,\n },\n ],\n template: `\n <ng-content select=\"[fileInput]\"></ng-content>\n\n <div class=\"mat-chip-grid\" [class.filled-and-float]=\"filled && shouldLabelFloat\">\n <ng-content select=\"mat-chip-row\"></ng-content>\n </div>\n `,\n styles: [\n `\n ngx-mat-dropzone {\n display: flex;\n position: relative;\n z-index: 10;\n min-height: 56px;\n margin: 0 -16px;\n color: currentcolor;\n outline: none;\n cursor: pointer;\n font: inherit;\n }\n\n .mat-chip-grid {\n display: flex;\n flex-flow: wrap;\n margin: 8px;\n\n &.filled-and-float {\n padding-top: 16px;\n }\n\n & > .mdc-evolution-chip {\n margin: 4px 0 4px 8px;\n }\n }\n `,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatDropzone\n extends DropzoneComponent\n implements MatFormFieldControl<FileInputValue>, AfterContentInit, AfterContentChecked\n{\n static nextId = 0;\n\n private _elementRef = inject(ElementRef);\n private _formField = inject(MatFormField);\n\n @HostBinding()\n id = `mat-dropzone-component-${MatDropzone.nextId++}`;\n\n controlType = 'ngx-mat-dropzone';\n\n @ContentChildren(MatChipRow)\n readonly _matChips!: QueryList<MatChipRow>;\n\n // The file input is never autofilled\n autofilled = false;\n\n stateChanges = new Subject<void>();\n ngControl = this.fileInputDirective?.ngControl ?? null;\n\n @Input('aria-describedby')\n userAriaDescribedBy?: string | undefined;\n\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n private _placeholder = '';\n\n @Input()\n get required(): boolean {\n const controlRequired = this.ngControl?.control?.hasValidator(Validators.required);\n return this._required || controlRequired || false;\n }\n set required(value: boolean) {\n this._required = coerceBoolean(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n get filled() {\n return this._formField?.appearance === 'fill';\n }\n\n get empty() {\n return this.fileInputDirective?.empty || true;\n }\n\n get shouldLabelFloat() {\n return this._matChips.length > 0;\n }\n\n @HostBinding('attr.aria-invalid')\n get ariaInvalid() {\n return this.empty && this.required ? null : this.errorState;\n }\n\n @HostBinding('attr.aria-required')\n get ariaRequired() {\n // Accessibility guidelines say that the attribute should be omitted when false,\n // so we return null instead of false to remove it from the DOM.\n return this.required || null;\n }\n\n ngAfterContentInit() {\n super.ngAfterContentInit();\n\n // Forward the stateChanges from the fileInputDirective to the MatFormFieldControl\n const stateEvents: Observable<unknown>[] = [this.dragover$];\n if (this.fileInputDirective) stateEvents.push(this.fileInputDirective.stateChanges);\n\n merge(...stateEvents)\n .pipe(\n tap(() => this.stateChanges.next()),\n takeUntil(this._destroy$)\n )\n .subscribe();\n }\n\n ngAfterContentChecked() {\n // Set the dropzone to cover the whole form field\n const formField = this._formField?._elementRef?.nativeElement as HTMLElement;\n this._elementRef.nativeElement.style.width = `${formField?.offsetWidth ?? 0}px`;\n\n // Set the dropzone height depending on the form field appearance\n this._elementRef.nativeElement.style.marginTop = `-${this.filled ? 24 : 16}px`;\n this._elementRef.nativeElement.style.marginBottom = `-${this.filled ? 8 : 16}px`;\n }\n\n onContainerClick() {\n this.openFilePicker();\n }\n\n setDescribedByIds(ids: string[]) {\n if (ids.length) {\n this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n } else {\n this._elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n }\n}\n","/*\n * Public API Surface of material\n */\n\nexport * from './lib/mat-dropzone';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}