UNPKG

@ngx-dropzone/material

Version:

Dropzone with Material Design implementation.

1 lines 9.4 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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"}