@bravura/ui 6.1.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.md +58 -57
  3. package/alert/index.d.ts +126 -3
  4. package/alert/testing/index.d.ts +28 -5
  5. package/behavior/index.d.ts +231 -3
  6. package/clip-note/index.d.ts +125 -3
  7. package/common/index.d.ts +24 -3
  8. package/currency-input/index.d.ts +69 -3
  9. package/decimal-input/index.d.ts +39 -3
  10. package/discrete-input/index.d.ts +139 -3
  11. package/fesm2022/bravura-ui-alert.mjs +18 -21
  12. package/fesm2022/bravura-ui-alert.mjs.map +1 -1
  13. package/fesm2022/bravura-ui-behavior.mjs +18 -18
  14. package/fesm2022/bravura-ui-behavior.mjs.map +1 -1
  15. package/fesm2022/bravura-ui-clip-note.mjs +10 -10
  16. package/fesm2022/bravura-ui-clip-note.mjs.map +1 -1
  17. package/fesm2022/bravura-ui-common.mjs +5 -6
  18. package/fesm2022/bravura-ui-common.mjs.map +1 -1
  19. package/fesm2022/bravura-ui-currency-input.mjs +7 -7
  20. package/fesm2022/bravura-ui-currency-input.mjs.map +1 -1
  21. package/fesm2022/bravura-ui-decimal-input.mjs +7 -7
  22. package/fesm2022/bravura-ui-decimal-input.mjs.map +1 -1
  23. package/fesm2022/bravura-ui-discrete-input.mjs +10 -11
  24. package/fesm2022/bravura-ui-discrete-input.mjs.map +1 -1
  25. package/fesm2022/bravura-ui-file-upload.mjs +18 -18
  26. package/fesm2022/bravura-ui-file-upload.mjs.map +1 -1
  27. package/fesm2022/bravura-ui-form-field.mjs +10 -10
  28. package/fesm2022/bravura-ui-form-field.mjs.map +1 -1
  29. package/fesm2022/bravura-ui-icon-font.mjs +7 -7
  30. package/fesm2022/bravura-ui-icon-font.mjs.map +1 -1
  31. package/fesm2022/bravura-ui-panel.mjs +16 -16
  32. package/fesm2022/bravura-ui-panel.mjs.map +1 -1
  33. package/fesm2022/bravura-ui-phone-number.mjs +13 -13
  34. package/fesm2022/bravura-ui-phone-number.mjs.map +1 -1
  35. package/fesm2022/bravura-ui-radio-panel.mjs +12 -14
  36. package/fesm2022/bravura-ui-radio-panel.mjs.map +1 -1
  37. package/fesm2022/bravura-ui-selection-panel.mjs +11 -11
  38. package/fesm2022/bravura-ui-selection-panel.mjs.map +1 -1
  39. package/fesm2022/bravura-ui-skeletons.mjs +10 -10
  40. package/fesm2022/bravura-ui-skeletons.mjs.map +1 -1
  41. package/fesm2022/bravura-ui-stepper.mjs +18 -18
  42. package/fesm2022/bravura-ui-stepper.mjs.map +1 -1
  43. package/fesm2022/bravura-ui-tooltip.mjs +13 -13
  44. package/fesm2022/bravura-ui-tooltip.mjs.map +1 -1
  45. package/file-upload/index.d.ts +200 -3
  46. package/form-field/index.d.ts +49 -3
  47. package/icon-font/index.d.ts +79 -3
  48. package/index.d.ts +3 -5
  49. package/package.json +24 -24
  50. package/panel/index.d.ts +107 -3
  51. package/phone-number/index.d.ts +108 -3
  52. package/radio-panel/index.d.ts +71 -3
  53. package/radio-panel/testing/index.d.ts +32 -5
  54. package/selection-panel/index.d.ts +149 -3
  55. package/skeletons/index.d.ts +79 -3
  56. package/stepper/index.d.ts +106 -3
  57. package/tooltip/index.d.ts +83 -3
  58. package/alert/alert-container.component.d.ts +0 -71
  59. package/alert/alert-message.component.d.ts +0 -47
  60. package/alert/alert.module.d.ts +0 -14
  61. package/alert/public-api.d.ts +0 -1
  62. package/alert/testing/test-api.d.ts +0 -24
  63. package/behavior/await.directive.d.ts +0 -71
  64. package/behavior/behavior.module.d.ts +0 -17
  65. package/behavior/observe-content-class.directive.d.ts +0 -29
  66. package/behavior/public-api.d.ts +0 -5
  67. package/behavior/sizing-monitor.directive.d.ts +0 -23
  68. package/behavior/sizing.directive.d.ts +0 -98
  69. package/clip-note/clip-note.component.d.ts +0 -45
  70. package/clip-note/clip-note.directive.d.ts +0 -69
  71. package/clip-note/clip-note.module.d.ts +0 -19
  72. package/clip-note/public-api.d.ts +0 -1
  73. package/common/common-utils.d.ts +0 -11
  74. package/common/common.module.d.ts +0 -11
  75. package/common/public-api.d.ts +0 -2
  76. package/currency-input/currency-input.directive.d.ts +0 -62
  77. package/currency-input/currency-input.module.d.ts +0 -10
  78. package/currency-input/public-api.d.ts +0 -1
  79. package/decimal-input/decimal-input.directive.d.ts +0 -32
  80. package/decimal-input/decimal-input.module.d.ts +0 -10
  81. package/decimal-input/public-api.d.ts +0 -1
  82. package/discrete-input/discrete-input.component.d.ts +0 -128
  83. package/discrete-input/discrete-input.module.d.ts +0 -11
  84. package/discrete-input/public-api.d.ts +0 -2
  85. package/file-upload/file-upload.component.d.ts +0 -148
  86. package/file-upload/file-upload.module.d.ts +0 -14
  87. package/file-upload/file-upload.service.d.ts +0 -42
  88. package/file-upload/public-api.d.ts +0 -6
  89. package/form-field/form-field.component.d.ts +0 -39
  90. package/form-field/form-field.module.d.ts +0 -13
  91. package/form-field/public-api.d.ts +0 -2
  92. package/icon-font/icon-font.module.d.ts +0 -12
  93. package/icon-font/icon.directive.d.ts +0 -46
  94. package/icon-font/public-api.d.ts +0 -3
  95. package/icon-font/utilities.d.ts +0 -20
  96. package/panel/panel-section.component.d.ts +0 -15
  97. package/panel/panel.component.d.ts +0 -60
  98. package/panel/panel.module.d.ts +0 -16
  99. package/panel/public-api.d.ts +0 -1
  100. package/panel/tinted.directive.d.ts +0 -26
  101. package/phone-number/phone-number.directive.d.ts +0 -66
  102. package/phone-number/phone-number.module.d.ts +0 -17
  103. package/phone-number/phone-number.pipe.d.ts +0 -13
  104. package/phone-number/phone-number.validator.d.ts +0 -31
  105. package/phone-number/public-api.d.ts +0 -1
  106. package/public-api.d.ts +0 -1
  107. package/radio-panel/public-api.d.ts +0 -3
  108. package/radio-panel/radio-panel-item.component.d.ts +0 -22
  109. package/radio-panel/radio-panel.component.d.ts +0 -38
  110. package/radio-panel/radio-panel.module.d.ts +0 -15
  111. package/radio-panel/testing/test-api.d.ts +0 -27
  112. package/selection-panel/public-api.d.ts +0 -3
  113. package/selection-panel/selection-panel-item.component.d.ts +0 -77
  114. package/selection-panel/selection-panel.directive.d.ts +0 -67
  115. package/selection-panel/selection-panel.module.d.ts +0 -13
  116. package/skeletons/public-api.d.ts +0 -3
  117. package/skeletons/skeleton-loader-presets.directive.d.ts +0 -23
  118. package/skeletons/skeleton-loader.component.d.ts +0 -44
  119. package/skeletons/skeletons.module.d.ts +0 -16
  120. package/stepper/public-api.d.ts +0 -3
  121. package/stepper/step-label-top.directive.d.ts +0 -17
  122. package/stepper/stepper-animation.d.ts +0 -6
  123. package/stepper/stepper.component.d.ts +0 -75
  124. package/stepper/stepper.module.d.ts +0 -17
  125. package/tooltip/public-api.d.ts +0 -3
  126. package/tooltip/tooltip.component.d.ts +0 -26
  127. package/tooltip/tooltip.directive.d.ts +0 -48
  128. package/tooltip/tooltip.module.d.ts +0 -13
@@ -1 +1 @@
1
- {"version":3,"file":"bravura-ui-discrete-input.mjs","sources":["../../../projects/ui/discrete-input/discrete-input.component.ts","../../../projects/ui/discrete-input/discrete-input.component.html","../../../projects/ui/discrete-input/discrete-input.module.ts","../../../projects/ui/discrete-input/bravura-ui-discrete-input.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n\tComponent,\n\tElementRef,\n\tInject,\n\tInput,\n\tOnDestroy,\n\tOptional,\n\tQueryList,\n\tSelf,\n\tViewChildren\n} from '@angular/core';\nimport {\n\tAbstractControl,\n\tControlValueAccessor,\n\tFormGroupDirective,\n\tNgControl,\n\tNgForm,\n\tUntypedFormArray,\n\tUntypedFormControl,\n\tUntypedFormGroup,\n\tValidators\n} from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MAT_FORM_FIELD, MatFormField, MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\n\n/**\n * Custom `MatFormFieldControl` with an individual input box for each character, suitable for fixed-length fields,\n * such as secondary PIN inputs, TFNs, or BSB code etc.\n *\n * Accessibility features are not yet fully implemented.\n *\n * Example:\n *\n * ```html\n * <mat-form-field>\n * <bui-discrete-input></bui-discrete-input>\n * </mat-form-field>\n * ```\n *\n */\n@Component({\n\tselector: 'bui-discrete-input',\n\ttemplateUrl: 'discrete-input.component.html',\n\tstyleUrls: ['discrete-input.component.scss'],\n\tproviders: [{ provide: MatFormFieldControl, useExisting: DiscreteInputComponent }],\n\thost: {\n\t\tclass: 'bui-discrete-input bui-host'\n\t},\n\tstandalone: false\n})\nexport class DiscreteInputComponent implements MatFormFieldControl<string>, ControlValueAccessor, OnDestroy {\n\t/** @ignore */\n\tstatic nextId = 0;\n\n\t/** @ignore */\n\tstatic ngAcceptInputType_disabled: boolean | string | null | undefined;\n\t/** @ignore */\n\tstatic ngAcceptInputType_required: boolean | string | null | undefined;\n\n\t/** @ignore */ parts: UntypedFormArray;\n\t/** @ignore */ group: UntypedFormGroup;\n\t/** Emits whenever the component state changes. */\n\tstateChanges = new Subject<void>();\n\t/** Whether the control is focused. */\n\tfocused: boolean;\n\n\t/** The type of input boxes */\n\t@Input()\n\ttype: 'text' | 'number' | 'password' = 'text';\n\n\t/** Input boxes are separated in groups. This specifies the characters displayed between two groups. */\n\t@Input()\n\tseparator = ' ';\n\n\t/**\n\t * A list of characters accepted in the inputs, for example `0-9`, `a-zA-Z0-9`\n\t * @example '0-9'\n\t */\n\t@Input()\n\taccept?: string;\n\n\t/** @ignore */ id = `bui-discrete-input-${DiscreteInputComponent.nextId++}`;\n\n\t/** Value of aria-describedby that should be merged with the described-by ids which are set by the form-field. */\n\t@Input('aria-describedby') userAriaDescribedBy?: string;\n\n\t@ViewChildren('part', { read: ElementRef }) private inputParts!: QueryList<ElementRef<HTMLInputElement>>;\n\n\t/**@ignore */\n\t_formField: MatFormField;\n\n\t/**@ignore */\n\tngControl: NgControl;\n\n\t@Input()\n\tautocomplete?: string = 'off';\n\n\tprivate _sizeSpec: number[] = [];\n\n\tprivate _required = false;\n\n\tprivate _placeholder?: string;\n\tprivate _disabled = false;\n\tprivate _separatorPos: number[] = [];\n\n\t/** @ignore */ onChange = (_: any) => {};\n\t/** @ignore */ onTouched = () => {};\n\n\t/** @ignore */\n\tget shouldLabelFloat() {\n\t\treturn true;\n\t}\n\n\t/** @ignore */\n\tget empty() {\n\t\treturn this.parts.controls.every(c => !c.value);\n\t}\n\n\t/**\n\t * Defines the length and grouping of the input.\n\t * @default [2, 2, 2]\n\t */\n\t@Input()\n\tget sizeSpec(): number[] {\n\t\treturn this._sizeSpec;\n\t}\n\tset sizeSpec(spec: number[]) {\n\t\tlet size = 0;\n\t\tthis._separatorPos = [];\n\t\tspec.forEach((n, i) => {\n\t\t\tsize += n;\n\t\t\tif (i < spec.length - 1) {\n\t\t\t\tthis._separatorPos.push(size);\n\t\t\t}\n\t\t});\n\t\tif (size !== this.parts.length) {\n\t\t\tconst v = this.value;\n\t\t\tthis.parts.clear({ emitEvent: false });\n\t\t\tfor (let i = 0; i < size; i++) {\n\t\t\t\tthis.parts.setControl(\n\t\t\t\t\ti,\n\t\t\t\t\tnew UntypedFormControl(null, [Validators.required, Validators.minLength(1), Validators.maxLength(1)])\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.value = v;\n\t\t\tthis._sizeSpec = spec;\n\t\t}\n\t}\n\n\t/** The placeholder for this control. */\n\t@Input()\n\tget placeholder(): string {\n\t\treturn this._placeholder!;\n\t}\n\tset placeholder(value: string) {\n\t\tthis._placeholder = value;\n\t\tthis.stateChanges.next();\n\t}\n\n\t/** Whether the control is required. */\n\t@Input()\n\tget required(): boolean {\n\t\treturn this._required;\n\t}\n\tset required(value: boolean) {\n\t\tthis._required = coerceBooleanProperty(value);\n\t\tthis.stateChanges.next();\n\t}\n\n\t/** Whether the control is disabled. */\n\t@Input()\n\tget disabled(): boolean {\n\t\treturn this._disabled;\n\t}\n\tset disabled(value: boolean) {\n\t\tthis._disabled = coerceBooleanProperty(value);\n\t\tthis._disabled ? this.parts.disable() : this.parts.enable();\n\t\tthis.stateChanges.next();\n\t}\n\n\t/** The value of the control. */\n\t@Input()\n\tget value(): string {\n\t\treturn this.parts.controls\n\t\t\t.map(c => c.value)\n\t\t\t.filter(c => c)\n\t\t\t.join('');\n\t}\n\tset value(v: string) {\n\t\tv = v || '';\n\t\tfor (let i = 0; i < this.parts.controls.length; i++) {\n\t\t\tthis.parts.controls[i]?.setValue(v[i]);\n\t\t}\n\t\tthis.stateChanges.next();\n\t}\n\n\t/** @ignore */\n\tget _colorSuffix(): string {\n\t\treturn this.errorState ? 'warn' : this._formField?.color || 'primary';\n\t}\n\n\tconstructor(\n\t\tprivate _focusMonitor: FocusMonitor,\n\t\tprivate _elementRef: ElementRef<HTMLElement>,\n\t\t@Optional() @Inject(MAT_FORM_FIELD) formField: MatFormField,\n\t\t@Optional() @Self() control: NgControl,\n\t\t@Optional() _parentForm: NgForm,\n\t\t@Optional() _parentFormGroup: FormGroupDirective,\n\t\t_defaultErrorStateMatcher: ErrorStateMatcher\n\t) {\n\t\tthis.parts = new UntypedFormArray([]);\n\t\tthis.group = new UntypedFormGroup({ parts: this.parts });\n\t\tthis.sizeSpec = [2, 2, 2];\n\t\tthis._formField = formField;\n\t\tthis.focused = false;\n\t\tthis.stateChanges = new Subject<void>();\n\n\t\tthis.ngControl = control;\n\t\tif (this.ngControl != null) {\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t}\n\n\t\tthis._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {\n\t\t\tif (this.focused && !origin) {\n\t\t\t\tthis.onTouched();\n\t\t\t}\n\t\t\tthis.focused = !!origin;\n\t\t\tthis.stateChanges.next();\n\t\t});\n\t}\n\n\t/** @ignore */ errorState = false;\n\t/** @ignore */ controlType?: string | undefined;\n\t/** @ignore */ autofilled?: boolean | undefined;\n\n\t/** @ignore */\n\tngOnDestroy() {\n\t\tthis.stateChanges.complete();\n\t\tthis._focusMonitor.stopMonitoring(this._elementRef);\n\t}\n\n\t/** @ignore */\n\tsetDescribedByIds(ids: string[]) {\n\t\tconst controlElement = this._elementRef.nativeElement.querySelector('.bui-discrete-input-container');\n\t\tcontrolElement!.setAttribute('aria-describedby', ids.join(' '));\n\t}\n\n\t/** @ignore */\n\tonContainerClick() {\n\t\tconst l = this.parts.controls.length;\n\t\tfor (let i = 0; i < l; i++) {\n\t\t\tif (this.parts.controls[i].invalid || i === l - 1) {\n\t\t\t\tthis._focusMonitor.focusVia(this.inputParts.get(i)!, 'program');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @ignore */\n\twriteValue(v: string): void {\n\t\tthis.value = v;\n\t}\n\n\t/** @ignore */\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\n\t/** @ignore */\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\t/** @ignore */\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t/** @ignore */\n\t_handleInput(control: AbstractControl, index: number, event: Event): void {\n\t\tlet v = control.value && control.value[0];\n\t\tconst rawValue = (event.target as HTMLInputElement).value;\n\t\tif (rawValue.length > 1) {\n\t\t\tthis._replaceText(rawValue, event);\n\t\t\treturn;\n\t\t}\n\t\tcontrol.setValue(v);\n\t\tconst nextElement = this.inputParts.get(index + 1);\n\t\tif (!control.errors && nextElement) {\n\t\t\tthis._focusPart(nextElement);\n\t\t}\n\n\t\tthis.onChange(this.value);\n\t}\n\n\t/** @ignore */\n\t_handleBeforeInput(index: number, event: InputEvent): void {\n\t\tconst v = event.data;\n\t\tif (this.accept && v && !new RegExp(`[${this.accept}]`).test(v)) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn;\n\t\t}\n\t\tconst inp = this.inputParts.get(index)!.nativeElement;\n\t\tif (v && inp.value) {\n\t\t\tinp.value = '';\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_focusPart(elemRef: ElementRef<HTMLInputElement>) {\n\t\tthis._focusMonitor.focusVia(elemRef, 'program');\n\t}\n\n\t/** @ignore */\n\t_consumeKey(event: Event) {\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n\n\t/** @ignore */\n\t_leftArrow(index: number, event: Event) {\n\t\tthis._consumeKey(event);\n\t\tconst prevElement = this.inputParts.get(index - 1);\n\t\tif (prevElement) {\n\t\t\tthis._focusPart(prevElement);\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_rightArrow(index: number, event: Event) {\n\t\tthis._consumeKey(event);\n\t\tconst nextElement = this.inputParts.get(index + 1);\n\t\tif (nextElement) {\n\t\t\tthis._focusPart(nextElement);\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_handleBackspace(control: AbstractControl, index: number): void {\n\t\tconst prevElement = index && this.inputParts.get(index - 1);\n\t\tif (!control.value && prevElement) {\n\t\t\tthis._focusMonitor.focusVia(prevElement, 'program');\n\t\t} else if (control.value) {\n\t\t\tcontrol.setValue('');\n\t\t\tthis.onChange(this.value);\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_onPaste(event: ClipboardEvent) {\n\t\tlet text = event.clipboardData?.getData('text');\n\t\tthis._replaceText(text, event);\n\t}\n\n\t/** @ignore */\n\t_separatorRequired(index: number) {\n\t\treturn this._separatorPos.includes(index + 1);\n\t}\n\n\t/** @ignore */\n\t_placeholderAt(index: number) {\n\t\treturn this._placeholder && this._placeholder[index];\n\t}\n\n\tprivate _replaceText(text: string | undefined, event: Event) {\n\t\tif (text) {\n\t\t\tif (this.accept) {\n\t\t\t\ttext = text.replace(new RegExp(`[^${this.accept}]`, 'gi'), '');\n\t\t\t}\n\t\t\tthis.value = text;\n\t\t\tthis.onChange(this.value);\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.onContainerClick();\n\t}\n}\n","<div\r\n\trole=\"group\"\r\n\tclass=\"bui-discrete-input-container\"\r\n\t[formGroup]=\"group\"\r\n\t[attr.aria-labelledby]=\"_formField?.getLabelId()\"\r\n>\r\n\t<ng-container [formArrayName]=\"'parts'\">\r\n\t\t<ng-template ngFor [ngForOf]=\"parts.controls\" let-p let-i=\"index\">\r\n\t\t\t<input\r\n\t\t\t\tclass=\"bui-discrete-input-element bui-outline-{{ _colorSuffix }}\"\r\n\t\t\t\t[formControlName]=\"i\"\r\n\t\t\t\t[attr.aria-label]=\"'character ' + (i + 1)\"\r\n\t\t\t\t(input)=\"_handleInput(p, i, $event)\"\r\n\t\t\t\t(beforeinput)=\"_handleBeforeInput(i, $event)\"\r\n\t\t\t\t(keydown.backspace)=\"_handleBackspace(p, i)\"\r\n\t\t\t\t(keydown.arrowup)=\"_consumeKey($event)\"\r\n\t\t\t\t(keydown.arrowdown)=\"_consumeKey($event)\"\r\n\t\t\t\t(keydown.arrowleft)=\"_leftArrow(i, $event)\"\r\n\t\t\t\t(keydown.arrowright)=\"_rightArrow(i, $event)\"\r\n\t\t\t\t[attr.placeholder]=\"_placeholderAt(i)\"\r\n\t\t\t\t#part\r\n\t\t\t\t(click)=\"$event.stopPropagation()\"\r\n\t\t\t\t(paste)=\"_onPaste($event)\"\r\n\t\t\t\t[type]=\"['text', 'number', 'password'].includes(type) ? type : 'text'\"\r\n\t\t\t\t[attr.inputmode]=\"type === 'number' ? 'decimal' : undefined\"\r\n\t\t\t\tautocapitalize=\"none\"\r\n\t\t\t/>\r\n\t\t\t<span *ngIf=\"_separatorRequired(i)\" class=\"bui-discrete-input-spacer\">{{ separator }}</span>\r\n\t\t</ng-template>\r\n\t</ng-container>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DiscreteInputComponent } from './discrete-input.component';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\n\r\n@NgModule({\r\n\tdeclarations: [DiscreteInputComponent],\r\n\timports: [CommonModule, MatFormFieldModule, ReactiveFormsModule, A11yModule],\r\n\texports: [DiscreteInputComponent]\r\n})\r\nexport class DiscreteInputModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bravura-ui-discrete-input.mjs","sources":["../../../projects/ui/discrete-input/discrete-input.component.ts","../../../projects/ui/discrete-input/discrete-input.component.html","../../../projects/ui/discrete-input/discrete-input.module.ts","../../../projects/ui/discrete-input/bravura-ui-discrete-input.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n\tComponent,\n\tElementRef,\n\tInject,\n\tInput,\n\tOnDestroy,\n\tOptional,\n\tQueryList,\n\tSelf,\n\tViewChildren\n} from '@angular/core';\nimport {\n\tAbstractControl,\n\tControlValueAccessor,\n\tFormGroupDirective,\n\tNgControl,\n\tNgForm,\n\tUntypedFormArray,\n\tUntypedFormControl,\n\tUntypedFormGroup,\n\tValidators\n} from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MAT_FORM_FIELD, MatFormField, MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\n\n/**\n * Custom `MatFormFieldControl` with an individual input box for each character, suitable for fixed-length fields,\n * such as secondary PIN inputs, TFNs, or BSB code etc.\n *\n * Accessibility features are not yet fully implemented.\n *\n * Example:\n *\n * ```html\n * <mat-form-field>\n * <bui-discrete-input></bui-discrete-input>\n * </mat-form-field>\n * ```\n *\n */\n@Component({\n\tselector: 'bui-discrete-input',\n\ttemplateUrl: 'discrete-input.component.html',\n\tstyleUrls: ['discrete-input.component.scss'],\n\tproviders: [{ provide: MatFormFieldControl, useExisting: DiscreteInputComponent }],\n\thost: {\n\t\tclass: 'bui-discrete-input bui-host'\n\t},\n\tstandalone: false\n})\nexport class DiscreteInputComponent implements MatFormFieldControl<string>, ControlValueAccessor, OnDestroy {\n\t/** @ignore */\n\tstatic nextId = 0;\n\n\t/** @ignore */\n\tstatic ngAcceptInputType_disabled: boolean | string | null | undefined;\n\t/** @ignore */\n\tstatic ngAcceptInputType_required: boolean | string | null | undefined;\n\n\t/** @ignore */ parts: UntypedFormArray;\n\t/** @ignore */ group: UntypedFormGroup;\n\t/** Emits whenever the component state changes. */\n\tstateChanges = new Subject<void>();\n\t/** Whether the control is focused. */\n\tfocused: boolean;\n\n\t/** The type of input boxes */\n\t@Input()\n\ttype: 'text' | 'number' | 'password' = 'text';\n\n\t/** Input boxes are separated in groups. This specifies the characters displayed between two groups. */\n\t@Input()\n\tseparator = ' ';\n\n\t/**\n\t * A list of characters accepted in the inputs, for example `0-9`, `a-zA-Z0-9`\n\t * @example '0-9'\n\t */\n\t@Input()\n\taccept?: string;\n\n\t/** @ignore */ id = `bui-discrete-input-${DiscreteInputComponent.nextId++}`;\n\n\t/** Value of aria-describedby that should be merged with the described-by ids which are set by the form-field. */\n\t@Input('aria-describedby') userAriaDescribedBy?: string;\n\n\t@ViewChildren('part', { read: ElementRef }) private inputParts!: QueryList<ElementRef<HTMLInputElement>>;\n\n\t/**@ignore */\n\t_formField: MatFormField;\n\n\t/**@ignore */\n\tngControl: NgControl;\n\n\t@Input()\n\tautocomplete?: string = 'off';\n\n\tprivate _sizeSpec: number[] = [];\n\n\tprivate _required = false;\n\n\tprivate _placeholder?: string;\n\tprivate _disabled = false;\n\tprivate _separatorPos: number[] = [];\n\n\t/** @ignore */ onChange = (_: any) => {};\n\t/** @ignore */ onTouched = () => {};\n\n\t/** @ignore */\n\tget shouldLabelFloat() {\n\t\treturn true;\n\t}\n\n\t/** @ignore */\n\tget empty() {\n\t\treturn this.parts.controls.every(c => !c.value);\n\t}\n\n\t/**\n\t * Defines the length and grouping of the input.\n\t * @default [2, 2, 2]\n\t */\n\t@Input()\n\tget sizeSpec(): number[] {\n\t\treturn this._sizeSpec;\n\t}\n\tset sizeSpec(spec: number[]) {\n\t\tlet size = 0;\n\t\tthis._separatorPos = [];\n\t\tspec.forEach((n, i) => {\n\t\t\tsize += n;\n\t\t\tif (i < spec.length - 1) {\n\t\t\t\tthis._separatorPos.push(size);\n\t\t\t}\n\t\t});\n\t\tif (size !== this.parts.length) {\n\t\t\tconst v = this.value;\n\t\t\tthis.parts.clear({ emitEvent: false });\n\t\t\tfor (let i = 0; i < size; i++) {\n\t\t\t\tthis.parts.setControl(\n\t\t\t\t\ti,\n\t\t\t\t\tnew UntypedFormControl(null, [Validators.required, Validators.minLength(1), Validators.maxLength(1)])\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.value = v;\n\t\t\tthis._sizeSpec = spec;\n\t\t}\n\t}\n\n\t/** The placeholder for this control. */\n\t@Input()\n\tget placeholder(): string {\n\t\treturn this._placeholder!;\n\t}\n\tset placeholder(value: string) {\n\t\tthis._placeholder = value;\n\t\tthis.stateChanges.next();\n\t}\n\n\t/** Whether the control is required. */\n\t@Input()\n\tget required(): boolean {\n\t\treturn this._required;\n\t}\n\tset required(value: boolean) {\n\t\tthis._required = coerceBooleanProperty(value);\n\t\tthis.stateChanges.next();\n\t}\n\n\t/** Whether the control is disabled. */\n\t@Input()\n\tget disabled(): boolean {\n\t\treturn this._disabled;\n\t}\n\tset disabled(value: boolean) {\n\t\tthis._disabled = coerceBooleanProperty(value);\n\t\tthis._disabled ? this.parts.disable() : this.parts.enable();\n\t\tthis.stateChanges.next();\n\t}\n\n\t/** The value of the control. */\n\t@Input()\n\tget value(): string {\n\t\treturn this.parts.controls\n\t\t\t.map(c => c.value)\n\t\t\t.filter(c => c)\n\t\t\t.join('');\n\t}\n\tset value(v: string) {\n\t\tv = v || '';\n\t\tfor (let i = 0; i < this.parts.controls.length; i++) {\n\t\t\tthis.parts.controls[i]?.setValue(v[i]);\n\t\t}\n\t\tthis.stateChanges.next();\n\t}\n\n\t/** @ignore */\n\tget _colorSuffix(): string {\n\t\treturn this.errorState ? 'warn' : this._formField?.color || 'primary';\n\t}\n\n\tconstructor(\n\t\tprivate _focusMonitor: FocusMonitor,\n\t\tprivate _elementRef: ElementRef<HTMLElement>,\n\t\t@Optional() @Inject(MAT_FORM_FIELD) formField: MatFormField,\n\t\t@Optional() @Self() control: NgControl,\n\t\t@Optional() _parentForm: NgForm,\n\t\t@Optional() _parentFormGroup: FormGroupDirective,\n\t\t_defaultErrorStateMatcher: ErrorStateMatcher\n\t) {\n\t\tthis.parts = new UntypedFormArray([]);\n\t\tthis.group = new UntypedFormGroup({ parts: this.parts });\n\t\tthis.sizeSpec = [2, 2, 2];\n\t\tthis._formField = formField;\n\t\tthis.focused = false;\n\t\tthis.stateChanges = new Subject<void>();\n\n\t\tthis.ngControl = control;\n\t\tif (this.ngControl != null) {\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t}\n\n\t\tthis._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {\n\t\t\tif (this.focused && !origin) {\n\t\t\t\tthis.onTouched();\n\t\t\t}\n\t\t\tthis.focused = !!origin;\n\t\t\tthis.stateChanges.next();\n\t\t});\n\t}\n\n\t/** @ignore */ errorState = false;\n\t/** @ignore */ controlType?: string | undefined;\n\t/** @ignore */ autofilled?: boolean | undefined;\n\n\t/** @ignore */\n\tngOnDestroy() {\n\t\tthis.stateChanges.complete();\n\t\tthis._focusMonitor.stopMonitoring(this._elementRef);\n\t}\n\n\t/** @ignore */\n\tsetDescribedByIds(ids: string[]) {\n\t\tconst controlElement = this._elementRef.nativeElement.querySelector('.bui-discrete-input-container');\n\t\tcontrolElement!.setAttribute('aria-describedby', ids.join(' '));\n\t}\n\n\t/** @ignore */\n\tonContainerClick() {\n\t\tconst l = this.parts.controls.length;\n\t\tfor (let i = 0; i < l; i++) {\n\t\t\tif (this.parts.controls[i].invalid || i === l - 1) {\n\t\t\t\tthis._focusMonitor.focusVia(this.inputParts.get(i)!, 'program');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @ignore */\n\twriteValue(v: string): void {\n\t\tthis.value = v;\n\t}\n\n\t/** @ignore */\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\n\t/** @ignore */\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\t/** @ignore */\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t/** @ignore */\n\t_handleInput(control: AbstractControl, index: number, event: Event): void {\n\t\tlet v = control.value && control.value[0];\n\t\tconst rawValue = (event.target as HTMLInputElement).value;\n\t\tif (rawValue.length > 1) {\n\t\t\tthis._replaceText(rawValue, event);\n\t\t\treturn;\n\t\t}\n\t\tcontrol.setValue(v);\n\t\tconst nextElement = this.inputParts.get(index + 1);\n\t\tif (!control.errors && nextElement) {\n\t\t\tthis._focusPart(nextElement);\n\t\t}\n\n\t\tthis.onChange(this.value);\n\t}\n\n\t/** @ignore */\n\t_handleBeforeInput(index: number, event: InputEvent): void {\n\t\tconst v = event.data;\n\t\tif (this.accept && v && !new RegExp(`[${this.accept}]`).test(v)) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn;\n\t\t}\n\t\tconst inp = this.inputParts.get(index)!.nativeElement;\n\t\tif (v && inp.value) {\n\t\t\tinp.value = '';\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_focusPart(elemRef: ElementRef<HTMLInputElement>) {\n\t\tthis._focusMonitor.focusVia(elemRef, 'program');\n\t}\n\n\t/** @ignore */\n\t_consumeKey(event: Event) {\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n\n\t/** @ignore */\n\t_leftArrow(index: number, event: Event) {\n\t\tthis._consumeKey(event);\n\t\tconst prevElement = this.inputParts.get(index - 1);\n\t\tif (prevElement) {\n\t\t\tthis._focusPart(prevElement);\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_rightArrow(index: number, event: Event) {\n\t\tthis._consumeKey(event);\n\t\tconst nextElement = this.inputParts.get(index + 1);\n\t\tif (nextElement) {\n\t\t\tthis._focusPart(nextElement);\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_handleBackspace(control: AbstractControl, index: number): void {\n\t\tconst prevElement = index && this.inputParts.get(index - 1);\n\t\tif (!control.value && prevElement) {\n\t\t\tthis._focusMonitor.focusVia(prevElement, 'program');\n\t\t} else if (control.value) {\n\t\t\tcontrol.setValue('');\n\t\t\tthis.onChange(this.value);\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_onPaste(event: ClipboardEvent) {\n\t\tlet text = event.clipboardData?.getData('text');\n\t\tthis._replaceText(text, event);\n\t}\n\n\t/** @ignore */\n\t_separatorRequired(index: number) {\n\t\treturn this._separatorPos.includes(index + 1);\n\t}\n\n\t/** @ignore */\n\t_placeholderAt(index: number) {\n\t\treturn this._placeholder && this._placeholder[index];\n\t}\n\n\tprivate _replaceText(text: string | undefined, event: Event) {\n\t\tif (text) {\n\t\t\tif (this.accept) {\n\t\t\t\ttext = text.replace(new RegExp(`[^${this.accept}]`, 'gi'), '');\n\t\t\t}\n\t\t\tthis.value = text;\n\t\t\tthis.onChange(this.value);\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.onContainerClick();\n\t}\n}\n","<div\n\trole=\"group\"\n\tclass=\"bui-discrete-input-container\"\n\t[formGroup]=\"group\"\n\t[attr.aria-labelledby]=\"_formField?.getLabelId()\"\n>\n\t<ng-container [formArrayName]=\"'parts'\">\n\t\t@for (p of parts.controls; track p; let i = $index) {\n\t\t\t<input\n\t\t\t\tclass=\"bui-discrete-input-element bui-outline-{{ _colorSuffix }}\"\n\t\t\t\t[formControlName]=\"i\"\n\t\t\t\t[attr.aria-label]=\"'character ' + (i + 1)\"\n\t\t\t\t(input)=\"_handleInput(p, i, $event)\"\n\t\t\t\t(beforeinput)=\"_handleBeforeInput(i, $event)\"\n\t\t\t\t(keydown.backspace)=\"_handleBackspace(p, i)\"\n\t\t\t\t(keydown.arrowup)=\"_consumeKey($event)\"\n\t\t\t\t(keydown.arrowdown)=\"_consumeKey($event)\"\n\t\t\t\t(keydown.arrowleft)=\"_leftArrow(i, $event)\"\n\t\t\t\t(keydown.arrowright)=\"_rightArrow(i, $event)\"\n\t\t\t\t[attr.placeholder]=\"_placeholderAt(i)\"\n\t\t\t\t#part\n\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t(paste)=\"_onPaste($event)\"\n\t\t\t\t[type]=\"['text', 'number', 'password'].includes(type) ? type : 'text'\"\n\t\t\t\t[attr.inputmode]=\"type === 'number' ? 'decimal' : undefined\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t/>\n\t\t\t@if (_separatorRequired(i)) {\n\t\t\t\t<span class=\"bui-discrete-input-spacer\">{{ separator }}</span>\n\t\t\t}\n\t\t}\n\t</ng-container>\n</div>\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DiscreteInputComponent } from './discrete-input.component';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\n\r\n@NgModule({\r\n\tdeclarations: [DiscreteInputComponent],\r\n\timports: [CommonModule, MatFormFieldModule, ReactiveFormsModule, A11yModule],\r\n\texports: [DiscreteInputComponent]\r\n})\r\nexport class DiscreteInputModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,22 +1,22 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, ElementRef, forwardRef, HostListener, ViewChild, Input, Component, NgModule } from '@angular/core';
3
- import * as i2 from '@angular/common';
3
+ import * as i8 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { trigger, transition, query, stagger, animate, style } from '@angular/animations';
6
6
  import { HttpEventType } from '@angular/common/http';
7
7
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
8
8
  import { Observable, of, Subject } from 'rxjs';
9
- import * as i3 from '@angular/material/icon';
9
+ import * as i2 from '@angular/material/icon';
10
10
  import { MatIconModule } from '@angular/material/icon';
11
- import * as i4 from '@bravura/ui/icon-font';
11
+ import * as i3 from '@bravura/ui/icon-font';
12
12
  import { IconFontModule } from '@bravura/ui/icon-font';
13
- import * as i5 from '@angular/material/progress-bar';
13
+ import * as i4 from '@angular/material/progress-bar';
14
14
  import { MatProgressBarModule } from '@angular/material/progress-bar';
15
- import * as i6 from '@angular/material/button';
15
+ import * as i5 from '@angular/material/button';
16
16
  import { MatButtonModule } from '@angular/material/button';
17
- import * as i7 from '@angular/material/divider';
17
+ import * as i6 from '@angular/material/divider';
18
18
  import { MatDividerModule } from '@angular/material/divider';
19
- import * as i8 from '@angular/material/tooltip';
19
+ import * as i7 from '@angular/material/tooltip';
20
20
  import { MatTooltipModule } from '@angular/material/tooltip';
21
21
 
22
22
  /**
@@ -39,10 +39,10 @@ class FileUploadItem {
39
39
  * Please extend this type and provide it in an injector at the same level, or ancestral to that, of the `FileUploadComponent`.
40
40
  */
41
41
  class FileUploadService {
42
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FileUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
43
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FileUploadService }); }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
43
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileUploadService }); }
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FileUploadService, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileUploadService, decorators: [{
46
46
  type: Injectable
47
47
  }] });
48
48
 
@@ -378,8 +378,8 @@ class FileUploadComponent {
378
378
  }
379
379
  this._onChange(completedIds);
380
380
  }
381
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FileUploadComponent, deps: [{ token: FileUploadService }], target: i0.ɵɵFactoryTarget.Component }); }
382
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FileUploadComponent, isStandalone: false, selector: "bui-file-upload", inputs: { uploadActionText: "uploadActionText", fileUploadedLabel: "fileUploadedLabel", dragHint: "dragHint", dropHint: "dropHint", limit: "limit", fileSize: "fileSize", types: "types" }, host: { listeners: { "dragenter": "onDragEnter($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDndDrop($event)" }, properties: { "class.bui-dnd-active": "_overFrame && remaining >= _numberOfFilesDragged", "class.bui-dnd-over": "_overDropZone && remaining >= _numberOfFilesDragged", "class.bui-dnd-invalid": "_invalidFilesDragged" }, classAttribute: "bui-host bui-file-upload" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => FileUploadComponent), multi: true }], viewQueries: [{ propertyName: "_fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div class=\"bui-file-upload-container\">\r\n\t<div\r\n\t\tclass=\"bui-file-upload-hint\"\r\n\t\t*ngIf=\"!_initialising && remaining > 0 && (!_itemAnimationInProgress || remaining > 1)\"\r\n\t>\r\n\t\t<ng-template [ngIf]=\"_invalidFilesDragged\" [ngIfElse]=\"validDnd\">\r\n\t\t\t<mat-icon [buiIcon]=\"'block'\" [size]=\"32\" color=\"warn\" variant=\"outlined\" style=\"opacity: 0.6\"></mat-icon>\r\n\t\t</ng-template>\r\n\t\t<ng-template #validDnd>\r\n\t\t\t<div *ngIf=\"!_overFrame && !_overDropZone\" class=\"bui-color-muted bui-upload-icon-link\" (click)=\"selectFiles()\">\r\n\t\t\t\t<mat-icon [buiIcon]=\"'fas fa-cloud-upload-alt'\" [size]=\"32\"></mat-icon>\r\n\t\t\t\t<a role=\"button\">{{ uploadActionText }}</a>\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"_overFrame && !_overDropZone\" class=\"bui-color-light\">{{ dragHint }}</div>\r\n\t\t\t<div *ngIf=\"_overDropZone\" class=\"bui-color-light\">{{ dropHint }}</div>\r\n\t\t</ng-template>\r\n\t</div>\r\n\t<div\r\n\t\tclass=\"bui-file-upload-list\"\r\n\t\t[@slideOut]=\"_uploadingItems.length\"\r\n\t\t(@slideOut.start)=\"_itemAnimationStart.next()\"\r\n\t\t(@slideOut.done)=\"_itemAnimationDone.next()\"\r\n\t\t*ngIf=\"_uploadingItems.length\"\r\n\t>\r\n\t\t<span class=\"bui-file-uploaded-label\">{{ fileUploadedLabel }}</span>\r\n\r\n\t\t<ng-container *ngFor=\"let item of _uploadingItems; let idx = index\">\r\n\t\t\t<div class=\"bui-file-upload-item\" [class.in-progress]=\"!item.done\" #itemDiv>\r\n\t\t\t\t<div class=\"bui-file-upload-item-name\">\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<mat-icon class=\"bui-color-muted\">description</mat-icon>\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\tclass=\"text\"\r\n\t\t\t\t\t\t\t*ngIf=\"item.done && !item.downloading; else staticName\"\r\n\t\t\t\t\t\t\thref=\"#{{ item.uploadedItem?.id }}\"\r\n\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); _openItem(item)\"\r\n\t\t\t\t\t\t\tcontextmenu=\"false\"\r\n\t\t\t\t\t\t\tmatTooltip=\"Download\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{{ item.name }}\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t<ng-template #staticName>\r\n\t\t\t\t\t\t\t<span class=\"text\">{{ item.name }}</span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<div class=\"bui-file-upload-item-progress\">\r\n\t\t\t\t\t\t<mat-progress-bar\r\n\t\t\t\t\t\t\tmode=\"determinate\"\r\n\t\t\t\t\t\t\t[class.upload-completed]=\"item.done\"\r\n\t\t\t\t\t\t\t*ngIf=\"!item.downloading\"\r\n\t\t\t\t\t\t\t[value]=\"item.done ? 100 : item.progress * 100\"\r\n\t\t\t\t\t\t></mat-progress-bar>\r\n\t\t\t\t\t\t<mat-progress-bar mode=\"buffer\" *ngIf=\"item.downloading\"></mat-progress-bar>\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t<ng-template [ngIf]=\"item.done\" [ngIfElse]=\"inprogress\"> 100% </ng-template>\r\n\t\t\t\t\t\t\t<ng-template #inprogress>\r\n\t\t\t\t\t\t\t\t{{ item.progress | percent }}\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bui-file-upload-item-action\">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t(click)=\"item.cancel()\"\r\n\t\t\t\t\t\t(mouseenter)=\"itemDiv.classList.add('bui-file-upload-item-deleting')\"\r\n\t\t\t\t\t\t(mouseleave)=\"itemDiv.classList.remove('bui-file-upload-item-deleting')\"\r\n\t\t\t\t\t\tmatTooltip=\"Delete\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<mat-icon [buiIcon]=\"'cancel'\" style=\"line-height: 0.9\"></mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<mat-divider *ngIf=\"idx < _uploadingItems.length - 1\"></mat-divider>\r\n\t\t</ng-container>\r\n\t</div>\r\n\t<input\r\n\t\ttype=\"file\"\r\n\t\t#fileInput\r\n\t\tstyle=\"display: none\"\r\n\t\taccept=\"{{ _accept }}\"\r\n\t\t(change)=\"_handleFileSelection()\"\r\n\t\t[multiple]=\"remaining > 1\"\r\n\t/>\r\n\r\n\t<div *ngIf=\"_fileSizeExceedMsg\" class=\"bui-color-warn bui-file-size-exceed\">\r\n\t\t<span> {{ _fileSizeExceedMsg }}</span> <mat-icon role=\"button\" (click)=\"_fileSizeExceedMsg = ''\">cancel</mat-icon>\r\n\t</div>\r\n</div>\r\n", styles: [":host:not([hidden]){display:block;border-style:dashed;border-width:1px;border-color:var(--bui-color-muted);transition:all .12s;padding:3px}:host:not([hidden]).bui-dnd-active,:host:not([hidden]).bui-dnd-over{padding:0;border-width:4px}:host:not([hidden]) .bui-file-size-exceed{display:flex;align-items:center;margin-bottom:1rem}:host:not([hidden]) .bui-file-size-exceed mat-icon{margin-left:.2rem}:host:not([hidden]).bui-dnd-invalid{cursor:no-drop}:host:not([hidden]) .bui-file-upload-hint{margin:.5rem;height:40px;justify-content:center;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container{min-height:4rem;display:flex;align-items:center;flex-direction:column;justify-content:center;transition:initial}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link{cursor:pointer;transition:color .1s cubic-bezier(.55,0,.55,.2);display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link:hover{color:var(--bui-color-light)!important}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link>*{margin:4px}:host:not([hidden]) .bui-file-upload-list{align-self:stretch;margin-top:calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-uploaded-label{display:block;font-size:smaller;margin:0 calc(1rem - 4px) .5rem calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item{display:flex;align-items:center;margin:0 calc(1rem - 4px);padding:.25rem 0;justify-content:space-between}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item:last-child{margin-bottom:calc(.5rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.in-progress .bui-file-upload-item-name{font-style:italic}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.bui-file-upload-item-deleting{background-color:#8080801a;transition:background-color .1s cubic-bezier(.55,0,.55,.2)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name{flex-grow:1;font-size:80%;display:flex;align-items:center;flex-wrap:wrap}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span{word-break:break-all;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span>mat-icon{width:20px;height:20px;font-size:20px}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name a{color:var(--bui-color-primary)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name .text{margin-left:.5rem;margin-right:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress{flex-grow:1;min-width:50%;display:flex;justify-content:flex-start;align-items:center;margin:12px 0;--mdc-linear-progress-track-height: 8px}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress .mat-mdc-progress-bar{border-radius:1rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress>span{margin-inline-start:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-action{display:flex;align-items:center;height:1em;width:1.75em}:host:not([hidden]) .bui-file-upload-list .mat-divider{margin:0 calc(1rem - 4px) 0 calc(1rem - 4px)}:host:not([hidden]) .upload-completed{animation:pulse 1s ease-in-out}@keyframes pulse{0%{transform:scaleY(1)}50%{transform:scaleY(1.5)}to{transform:scaleY(1)}}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.IconDirective, selector: "[buiIcon]", inputs: ["buiIcon", "size", "variant"] }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i2.PercentPipe, name: "percent" }], animations: [
381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileUploadComponent, deps: [{ token: FileUploadService }], target: i0.ɵɵFactoryTarget.Component }); }
382
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: FileUploadComponent, isStandalone: false, selector: "bui-file-upload", inputs: { uploadActionText: "uploadActionText", fileUploadedLabel: "fileUploadedLabel", dragHint: "dragHint", dropHint: "dropHint", limit: "limit", fileSize: "fileSize", types: "types" }, host: { listeners: { "dragenter": "onDragEnter($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDndDrop($event)" }, properties: { "class.bui-dnd-active": "_overFrame && remaining >= _numberOfFilesDragged", "class.bui-dnd-over": "_overDropZone && remaining >= _numberOfFilesDragged", "class.bui-dnd-invalid": "_invalidFilesDragged" }, classAttribute: "bui-host bui-file-upload" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => FileUploadComponent), multi: true }], viewQueries: [{ propertyName: "_fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div class=\"bui-file-upload-container\">\n\t@if (!_initialising && remaining > 0 && (!_itemAnimationInProgress || remaining > 1)) {\n\t\t<div class=\"bui-file-upload-hint\">\n\t\t\t@if (_invalidFilesDragged) {\n\t\t\t\t<mat-icon [buiIcon]=\"'block'\" [size]=\"32\" color=\"warn\" variant=\"outlined\" style=\"opacity: 0.6\"></mat-icon>\n\t\t\t} @else {\n\t\t\t\t@if (!_overFrame && !_overDropZone) {\n\t\t\t\t\t<div class=\"bui-color-muted bui-upload-icon-link\" (click)=\"selectFiles()\">\n\t\t\t\t\t\t<mat-icon [buiIcon]=\"'fas fa-cloud-upload-alt'\" [size]=\"32\"></mat-icon>\n\t\t\t\t\t\t<a role=\"button\">{{ uploadActionText }}</a>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (_overFrame && !_overDropZone) {\n\t\t\t\t\t<div class=\"bui-color-light\">{{ dragHint }}</div>\n\t\t\t\t}\n\t\t\t\t@if (_overDropZone) {\n\t\t\t\t\t<div class=\"bui-color-light\">{{ dropHint }}</div>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\t@if (_uploadingItems.length) {\n\t\t<div\n\t\t\tclass=\"bui-file-upload-list\"\n\t\t\t[@slideOut]=\"_uploadingItems.length\"\n\t\t\t(@slideOut.start)=\"_itemAnimationStart.next()\"\n\t\t\t(@slideOut.done)=\"_itemAnimationDone.next()\"\n\t\t>\n\t\t\t<span class=\"bui-file-uploaded-label\">{{ fileUploadedLabel }}</span>\n\t\t\t@for (item of _uploadingItems; track item; let idx = $index) {\n\t\t\t\t<div class=\"bui-file-upload-item\" [class.in-progress]=\"!item.done\" #itemDiv>\n\t\t\t\t\t<div class=\"bui-file-upload-item-name\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<mat-icon class=\"bui-color-muted\">description</mat-icon>\n\t\t\t\t\t\t\t@if (item.done && !item.downloading) {\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\tclass=\"text\"\n\t\t\t\t\t\t\t\t\thref=\"#{{ item.uploadedItem?.id }}\"\n\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); _openItem(item)\"\n\t\t\t\t\t\t\t\t\tcontextmenu=\"false\"\n\t\t\t\t\t\t\t\t\tmatTooltip=\"Download\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ item.name }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<span class=\"text\">{{ item.name }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<div class=\"bui-file-upload-item-progress\">\n\t\t\t\t\t\t\t@if (!item.downloading) {\n\t\t\t\t\t\t\t\t<mat-progress-bar\n\t\t\t\t\t\t\t\t\tmode=\"determinate\"\n\t\t\t\t\t\t\t\t\t[class.upload-completed]=\"item.done\"\n\t\t\t\t\t\t\t\t\t[value]=\"item.done ? 100 : item.progress * 100\"\n\t\t\t\t\t\t\t\t></mat-progress-bar>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (item.downloading) {\n\t\t\t\t\t\t\t\t<mat-progress-bar mode=\"buffer\"></mat-progress-bar>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t@if (item.done) {\n\t\t\t\t\t\t\t\t\t100%\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ item.progress | percent }}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"bui-file-upload-item-action\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\t\t\t(click)=\"item.cancel()\"\n\t\t\t\t\t\t\t(mouseenter)=\"itemDiv.classList.add('bui-file-upload-item-deleting')\"\n\t\t\t\t\t\t\t(mouseleave)=\"itemDiv.classList.remove('bui-file-upload-item-deleting')\"\n\t\t\t\t\t\t\tmatTooltip=\"Delete\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<mat-icon [buiIcon]=\"'cancel'\" style=\"line-height: 0.9\"></mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t@if (idx < _uploadingItems.length - 1) {\n\t\t\t\t\t<mat-divider></mat-divider>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\t<input\n\t\ttype=\"file\"\n\t\t#fileInput\n\t\tstyle=\"display: none\"\n\t\taccept=\"{{ _accept }}\"\n\t\t(change)=\"_handleFileSelection()\"\n\t\t[multiple]=\"remaining > 1\"\n\t/>\n\n\t@if (_fileSizeExceedMsg) {\n\t\t<div class=\"bui-color-warn bui-file-size-exceed\">\n\t\t\t<span> {{ _fileSizeExceedMsg }}</span> <mat-icon role=\"button\" (click)=\"_fileSizeExceedMsg = ''\">cancel</mat-icon>\n\t\t</div>\n\t}\n</div>\n", styles: [":host:not([hidden]){display:block;border-style:dashed;border-width:1px;border-color:var(--bui-color-muted);transition:all .12s;padding:3px}:host:not([hidden]).bui-dnd-active,:host:not([hidden]).bui-dnd-over{padding:0;border-width:4px}:host:not([hidden]) .bui-file-size-exceed{display:flex;align-items:center;margin-bottom:1rem}:host:not([hidden]) .bui-file-size-exceed mat-icon{margin-left:.2rem}:host:not([hidden]).bui-dnd-invalid{cursor:no-drop}:host:not([hidden]) .bui-file-upload-hint{margin:.5rem;height:40px;justify-content:center;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container{min-height:4rem;display:flex;align-items:center;flex-direction:column;justify-content:center;transition:initial}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link{cursor:pointer;transition:color .1s cubic-bezier(.55,0,.55,.2);display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link:hover{color:var(--bui-color-light)!important}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link>*{margin:4px}:host:not([hidden]) .bui-file-upload-list{align-self:stretch;margin-top:calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-uploaded-label{display:block;font-size:smaller;margin:0 calc(1rem - 4px) .5rem calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item{display:flex;align-items:center;margin:0 calc(1rem - 4px);padding:.25rem 0;justify-content:space-between}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item:last-child{margin-bottom:calc(.5rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.in-progress .bui-file-upload-item-name{font-style:italic}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.bui-file-upload-item-deleting{background-color:#8080801a;transition:background-color .1s cubic-bezier(.55,0,.55,.2)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name{flex-grow:1;font-size:80%;display:flex;align-items:center;flex-wrap:wrap}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span{word-break:break-all;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span>mat-icon{width:20px;height:20px;font-size:20px}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name a{color:var(--bui-color-primary)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name .text{margin-left:.5rem;margin-right:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress{flex-grow:1;min-width:50%;display:flex;justify-content:flex-start;align-items:center;margin:12px 0;--mat-progress-bar-track-height: 8px}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress .mat-mdc-progress-bar{border-radius:1rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress>span{margin-inline-start:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-action{display:flex;align-items:center;height:1em;width:1.75em}:host:not([hidden]) .bui-file-upload-list .mat-divider{margin:0 calc(1rem - 4px) 0 calc(1rem - 4px)}:host:not([hidden]) .upload-completed{animation:pulse 1s ease-in-out}@keyframes pulse{0%{transform:scaleY(1)}50%{transform:scaleY(1.5)}to{transform:scaleY(1)}}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "[buiIcon]", inputs: ["buiIcon", "size", "variant"] }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i8.PercentPipe, name: "percent" }], animations: [
383
383
  trigger('slideOut', [
384
384
  transition('* => *', [
385
385
  query(':leave', stagger(100, animate('0.25s', style({ height: 0, overflow: 'hidden' }))), { optional: true })
@@ -387,7 +387,7 @@ class FileUploadComponent {
387
387
  ])
388
388
  ] }); }
389
389
  }
390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FileUploadComponent, decorators: [{
390
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileUploadComponent, decorators: [{
391
391
  type: Component,
392
392
  args: [{ host: {
393
393
  class: 'bui-host bui-file-upload',
@@ -400,7 +400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
400
400
  query(':leave', stagger(100, animate('0.25s', style({ height: 0, overflow: 'hidden' }))), { optional: true })
401
401
  ])
402
402
  ])
403
- ], standalone: false, template: "<div class=\"bui-file-upload-container\">\r\n\t<div\r\n\t\tclass=\"bui-file-upload-hint\"\r\n\t\t*ngIf=\"!_initialising && remaining > 0 && (!_itemAnimationInProgress || remaining > 1)\"\r\n\t>\r\n\t\t<ng-template [ngIf]=\"_invalidFilesDragged\" [ngIfElse]=\"validDnd\">\r\n\t\t\t<mat-icon [buiIcon]=\"'block'\" [size]=\"32\" color=\"warn\" variant=\"outlined\" style=\"opacity: 0.6\"></mat-icon>\r\n\t\t</ng-template>\r\n\t\t<ng-template #validDnd>\r\n\t\t\t<div *ngIf=\"!_overFrame && !_overDropZone\" class=\"bui-color-muted bui-upload-icon-link\" (click)=\"selectFiles()\">\r\n\t\t\t\t<mat-icon [buiIcon]=\"'fas fa-cloud-upload-alt'\" [size]=\"32\"></mat-icon>\r\n\t\t\t\t<a role=\"button\">{{ uploadActionText }}</a>\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"_overFrame && !_overDropZone\" class=\"bui-color-light\">{{ dragHint }}</div>\r\n\t\t\t<div *ngIf=\"_overDropZone\" class=\"bui-color-light\">{{ dropHint }}</div>\r\n\t\t</ng-template>\r\n\t</div>\r\n\t<div\r\n\t\tclass=\"bui-file-upload-list\"\r\n\t\t[@slideOut]=\"_uploadingItems.length\"\r\n\t\t(@slideOut.start)=\"_itemAnimationStart.next()\"\r\n\t\t(@slideOut.done)=\"_itemAnimationDone.next()\"\r\n\t\t*ngIf=\"_uploadingItems.length\"\r\n\t>\r\n\t\t<span class=\"bui-file-uploaded-label\">{{ fileUploadedLabel }}</span>\r\n\r\n\t\t<ng-container *ngFor=\"let item of _uploadingItems; let idx = index\">\r\n\t\t\t<div class=\"bui-file-upload-item\" [class.in-progress]=\"!item.done\" #itemDiv>\r\n\t\t\t\t<div class=\"bui-file-upload-item-name\">\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<mat-icon class=\"bui-color-muted\">description</mat-icon>\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\tclass=\"text\"\r\n\t\t\t\t\t\t\t*ngIf=\"item.done && !item.downloading; else staticName\"\r\n\t\t\t\t\t\t\thref=\"#{{ item.uploadedItem?.id }}\"\r\n\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); _openItem(item)\"\r\n\t\t\t\t\t\t\tcontextmenu=\"false\"\r\n\t\t\t\t\t\t\tmatTooltip=\"Download\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{{ item.name }}\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t<ng-template #staticName>\r\n\t\t\t\t\t\t\t<span class=\"text\">{{ item.name }}</span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<div class=\"bui-file-upload-item-progress\">\r\n\t\t\t\t\t\t<mat-progress-bar\r\n\t\t\t\t\t\t\tmode=\"determinate\"\r\n\t\t\t\t\t\t\t[class.upload-completed]=\"item.done\"\r\n\t\t\t\t\t\t\t*ngIf=\"!item.downloading\"\r\n\t\t\t\t\t\t\t[value]=\"item.done ? 100 : item.progress * 100\"\r\n\t\t\t\t\t\t></mat-progress-bar>\r\n\t\t\t\t\t\t<mat-progress-bar mode=\"buffer\" *ngIf=\"item.downloading\"></mat-progress-bar>\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t<ng-template [ngIf]=\"item.done\" [ngIfElse]=\"inprogress\"> 100% </ng-template>\r\n\t\t\t\t\t\t\t<ng-template #inprogress>\r\n\t\t\t\t\t\t\t\t{{ item.progress | percent }}\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bui-file-upload-item-action\">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t(click)=\"item.cancel()\"\r\n\t\t\t\t\t\t(mouseenter)=\"itemDiv.classList.add('bui-file-upload-item-deleting')\"\r\n\t\t\t\t\t\t(mouseleave)=\"itemDiv.classList.remove('bui-file-upload-item-deleting')\"\r\n\t\t\t\t\t\tmatTooltip=\"Delete\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<mat-icon [buiIcon]=\"'cancel'\" style=\"line-height: 0.9\"></mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<mat-divider *ngIf=\"idx < _uploadingItems.length - 1\"></mat-divider>\r\n\t\t</ng-container>\r\n\t</div>\r\n\t<input\r\n\t\ttype=\"file\"\r\n\t\t#fileInput\r\n\t\tstyle=\"display: none\"\r\n\t\taccept=\"{{ _accept }}\"\r\n\t\t(change)=\"_handleFileSelection()\"\r\n\t\t[multiple]=\"remaining > 1\"\r\n\t/>\r\n\r\n\t<div *ngIf=\"_fileSizeExceedMsg\" class=\"bui-color-warn bui-file-size-exceed\">\r\n\t\t<span> {{ _fileSizeExceedMsg }}</span> <mat-icon role=\"button\" (click)=\"_fileSizeExceedMsg = ''\">cancel</mat-icon>\r\n\t</div>\r\n</div>\r\n", styles: [":host:not([hidden]){display:block;border-style:dashed;border-width:1px;border-color:var(--bui-color-muted);transition:all .12s;padding:3px}:host:not([hidden]).bui-dnd-active,:host:not([hidden]).bui-dnd-over{padding:0;border-width:4px}:host:not([hidden]) .bui-file-size-exceed{display:flex;align-items:center;margin-bottom:1rem}:host:not([hidden]) .bui-file-size-exceed mat-icon{margin-left:.2rem}:host:not([hidden]).bui-dnd-invalid{cursor:no-drop}:host:not([hidden]) .bui-file-upload-hint{margin:.5rem;height:40px;justify-content:center;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container{min-height:4rem;display:flex;align-items:center;flex-direction:column;justify-content:center;transition:initial}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link{cursor:pointer;transition:color .1s cubic-bezier(.55,0,.55,.2);display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link:hover{color:var(--bui-color-light)!important}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link>*{margin:4px}:host:not([hidden]) .bui-file-upload-list{align-self:stretch;margin-top:calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-uploaded-label{display:block;font-size:smaller;margin:0 calc(1rem - 4px) .5rem calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item{display:flex;align-items:center;margin:0 calc(1rem - 4px);padding:.25rem 0;justify-content:space-between}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item:last-child{margin-bottom:calc(.5rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.in-progress .bui-file-upload-item-name{font-style:italic}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.bui-file-upload-item-deleting{background-color:#8080801a;transition:background-color .1s cubic-bezier(.55,0,.55,.2)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name{flex-grow:1;font-size:80%;display:flex;align-items:center;flex-wrap:wrap}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span{word-break:break-all;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span>mat-icon{width:20px;height:20px;font-size:20px}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name a{color:var(--bui-color-primary)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name .text{margin-left:.5rem;margin-right:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress{flex-grow:1;min-width:50%;display:flex;justify-content:flex-start;align-items:center;margin:12px 0;--mdc-linear-progress-track-height: 8px}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress .mat-mdc-progress-bar{border-radius:1rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress>span{margin-inline-start:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-action{display:flex;align-items:center;height:1em;width:1.75em}:host:not([hidden]) .bui-file-upload-list .mat-divider{margin:0 calc(1rem - 4px) 0 calc(1rem - 4px)}:host:not([hidden]) .upload-completed{animation:pulse 1s ease-in-out}@keyframes pulse{0%{transform:scaleY(1)}50%{transform:scaleY(1.5)}to{transform:scaleY(1)}}\n"] }]
403
+ ], standalone: false, template: "<div class=\"bui-file-upload-container\">\n\t@if (!_initialising && remaining > 0 && (!_itemAnimationInProgress || remaining > 1)) {\n\t\t<div class=\"bui-file-upload-hint\">\n\t\t\t@if (_invalidFilesDragged) {\n\t\t\t\t<mat-icon [buiIcon]=\"'block'\" [size]=\"32\" color=\"warn\" variant=\"outlined\" style=\"opacity: 0.6\"></mat-icon>\n\t\t\t} @else {\n\t\t\t\t@if (!_overFrame && !_overDropZone) {\n\t\t\t\t\t<div class=\"bui-color-muted bui-upload-icon-link\" (click)=\"selectFiles()\">\n\t\t\t\t\t\t<mat-icon [buiIcon]=\"'fas fa-cloud-upload-alt'\" [size]=\"32\"></mat-icon>\n\t\t\t\t\t\t<a role=\"button\">{{ uploadActionText }}</a>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (_overFrame && !_overDropZone) {\n\t\t\t\t\t<div class=\"bui-color-light\">{{ dragHint }}</div>\n\t\t\t\t}\n\t\t\t\t@if (_overDropZone) {\n\t\t\t\t\t<div class=\"bui-color-light\">{{ dropHint }}</div>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\t@if (_uploadingItems.length) {\n\t\t<div\n\t\t\tclass=\"bui-file-upload-list\"\n\t\t\t[@slideOut]=\"_uploadingItems.length\"\n\t\t\t(@slideOut.start)=\"_itemAnimationStart.next()\"\n\t\t\t(@slideOut.done)=\"_itemAnimationDone.next()\"\n\t\t>\n\t\t\t<span class=\"bui-file-uploaded-label\">{{ fileUploadedLabel }}</span>\n\t\t\t@for (item of _uploadingItems; track item; let idx = $index) {\n\t\t\t\t<div class=\"bui-file-upload-item\" [class.in-progress]=\"!item.done\" #itemDiv>\n\t\t\t\t\t<div class=\"bui-file-upload-item-name\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<mat-icon class=\"bui-color-muted\">description</mat-icon>\n\t\t\t\t\t\t\t@if (item.done && !item.downloading) {\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\tclass=\"text\"\n\t\t\t\t\t\t\t\t\thref=\"#{{ item.uploadedItem?.id }}\"\n\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); _openItem(item)\"\n\t\t\t\t\t\t\t\t\tcontextmenu=\"false\"\n\t\t\t\t\t\t\t\t\tmatTooltip=\"Download\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ item.name }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<span class=\"text\">{{ item.name }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<div class=\"bui-file-upload-item-progress\">\n\t\t\t\t\t\t\t@if (!item.downloading) {\n\t\t\t\t\t\t\t\t<mat-progress-bar\n\t\t\t\t\t\t\t\t\tmode=\"determinate\"\n\t\t\t\t\t\t\t\t\t[class.upload-completed]=\"item.done\"\n\t\t\t\t\t\t\t\t\t[value]=\"item.done ? 100 : item.progress * 100\"\n\t\t\t\t\t\t\t\t></mat-progress-bar>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (item.downloading) {\n\t\t\t\t\t\t\t\t<mat-progress-bar mode=\"buffer\"></mat-progress-bar>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t@if (item.done) {\n\t\t\t\t\t\t\t\t\t100%\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ item.progress | percent }}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"bui-file-upload-item-action\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\t\t\t(click)=\"item.cancel()\"\n\t\t\t\t\t\t\t(mouseenter)=\"itemDiv.classList.add('bui-file-upload-item-deleting')\"\n\t\t\t\t\t\t\t(mouseleave)=\"itemDiv.classList.remove('bui-file-upload-item-deleting')\"\n\t\t\t\t\t\t\tmatTooltip=\"Delete\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<mat-icon [buiIcon]=\"'cancel'\" style=\"line-height: 0.9\"></mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t@if (idx < _uploadingItems.length - 1) {\n\t\t\t\t\t<mat-divider></mat-divider>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\t<input\n\t\ttype=\"file\"\n\t\t#fileInput\n\t\tstyle=\"display: none\"\n\t\taccept=\"{{ _accept }}\"\n\t\t(change)=\"_handleFileSelection()\"\n\t\t[multiple]=\"remaining > 1\"\n\t/>\n\n\t@if (_fileSizeExceedMsg) {\n\t\t<div class=\"bui-color-warn bui-file-size-exceed\">\n\t\t\t<span> {{ _fileSizeExceedMsg }}</span> <mat-icon role=\"button\" (click)=\"_fileSizeExceedMsg = ''\">cancel</mat-icon>\n\t\t</div>\n\t}\n</div>\n", styles: [":host:not([hidden]){display:block;border-style:dashed;border-width:1px;border-color:var(--bui-color-muted);transition:all .12s;padding:3px}:host:not([hidden]).bui-dnd-active,:host:not([hidden]).bui-dnd-over{padding:0;border-width:4px}:host:not([hidden]) .bui-file-size-exceed{display:flex;align-items:center;margin-bottom:1rem}:host:not([hidden]) .bui-file-size-exceed mat-icon{margin-left:.2rem}:host:not([hidden]).bui-dnd-invalid{cursor:no-drop}:host:not([hidden]) .bui-file-upload-hint{margin:.5rem;height:40px;justify-content:center;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container{min-height:4rem;display:flex;align-items:center;flex-direction:column;justify-content:center;transition:initial}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link{cursor:pointer;transition:color .1s cubic-bezier(.55,0,.55,.2);display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link:hover{color:var(--bui-color-light)!important}:host:not([hidden]) .bui-file-upload-container .bui-upload-icon-link>*{margin:4px}:host:not([hidden]) .bui-file-upload-list{align-self:stretch;margin-top:calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-uploaded-label{display:block;font-size:smaller;margin:0 calc(1rem - 4px) .5rem calc(1rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item{display:flex;align-items:center;margin:0 calc(1rem - 4px);padding:.25rem 0;justify-content:space-between}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item:last-child{margin-bottom:calc(.5rem - 4px)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.in-progress .bui-file-upload-item-name{font-style:italic}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item.bui-file-upload-item-deleting{background-color:#8080801a;transition:background-color .1s cubic-bezier(.55,0,.55,.2)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name{flex-grow:1;font-size:80%;display:flex;align-items:center;flex-wrap:wrap}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span{word-break:break-all;display:flex;align-items:center}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name>span>mat-icon{width:20px;height:20px;font-size:20px}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name a{color:var(--bui-color-primary)}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-name .text{margin-left:.5rem;margin-right:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress{flex-grow:1;min-width:50%;display:flex;justify-content:flex-start;align-items:center;margin:12px 0;--mat-progress-bar-track-height: 8px}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress .mat-mdc-progress-bar{border-radius:1rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-progress>span{margin-inline-start:.5rem}:host:not([hidden]) .bui-file-upload-list .bui-file-upload-item-action{display:flex;align-items:center;height:1em;width:1.75em}:host:not([hidden]) .bui-file-upload-list .mat-divider{margin:0 calc(1rem - 4px) 0 calc(1rem - 4px)}:host:not([hidden]) .upload-completed{animation:pulse 1s ease-in-out}@keyframes pulse{0%{transform:scaleY(1)}50%{transform:scaleY(1.5)}to{transform:scaleY(1)}}\n"] }]
404
404
  }], ctorParameters: () => [{ type: FileUploadService }], propDecorators: { uploadActionText: [{
405
405
  type: Input
406
406
  }], fileUploadedLabel: [{
@@ -433,15 +433,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
433
433
  }] } });
434
434
 
435
435
  class FileUploadModule {
436
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FileUploadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
437
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: FileUploadModule, declarations: [FileUploadComponent], imports: [CommonModule,
436
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileUploadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
437
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: FileUploadModule, declarations: [FileUploadComponent], imports: [CommonModule,
438
438
  MatIconModule,
439
439
  IconFontModule,
440
440
  MatProgressBarModule,
441
441
  MatButtonModule,
442
442
  MatDividerModule,
443
443
  MatTooltipModule], exports: [FileUploadComponent] }); }
444
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FileUploadModule, imports: [CommonModule,
444
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileUploadModule, imports: [CommonModule,
445
445
  MatIconModule,
446
446
  IconFontModule,
447
447
  MatProgressBarModule,
@@ -449,7 +449,7 @@ class FileUploadModule {
449
449
  MatDividerModule,
450
450
  MatTooltipModule] }); }
451
451
  }
452
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FileUploadModule, decorators: [{
452
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileUploadModule, decorators: [{
453
453
  type: NgModule,
454
454
  args: [{
455
455
  declarations: [FileUploadComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"bravura-ui-file-upload.mjs","sources":["../../../projects/ui/file-upload/file-upload.service.ts","../../../projects/ui/file-upload/file-upload.component.ts","../../../projects/ui/file-upload/file-upload.component.html","../../../projects/ui/file-upload/file-upload.module.ts","../../../projects/ui/file-upload/bravura-ui-file-upload.ts"],"sourcesContent":["import { HttpEvent } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * This type represents a file or form item that has been sent as part of a multipart/form-data POST request.\r\n */\r\nexport class FileUploadItem {\r\n\t/** The original filename in the client's filesystem, as provided by the browser. */\r\n\tname: string;\r\n\r\n\t/** The size of the file item. */\r\n\tsize: number;\r\n\r\n\t/** An alpha-numeric string that uniquely identifies the file item. */\r\n\tid: string;\r\n\r\n\t/** The content type (MIME type) of the file. */\r\n\ttype: string;\r\n\r\n\t/** @internal */\r\n\tconstructor(_id: string, _name: string, _size: number, _type: string) {\r\n\t\tthis.id = _id;\r\n\t\tthis.name = _name;\r\n\t\tthis.size = _size;\r\n\t\tthis.type = _type;\r\n\t}\r\n}\r\n\r\n/**\r\n * This is an API for processing file upload requests.\r\n *\r\n * A sub class of this type handles multiple file requests, sent using multipart/form-data encoding type, as specified by RFC 1867.\r\n *\r\n * Please extend this type and provide it in an injector at the same level, or ancestral to that, of the `FileUploadComponent`.\r\n */\r\n@Injectable()\r\nexport abstract class FileUploadService {\r\n\t/**\r\n\t * Upload a list of selected files from the browser. The returned `Observable` array provides the update of the uploading progress\r\n\t * through HTTP events.\r\n\t */\r\n\tabstract upload(files: File[]): Array<Observable<HttpEvent<FileUploadItem>>>;\r\n\r\n\t/** List all the uploaded file items in the current HTTP session. This list excludes the files still in the process of being uploaded*/\r\n\tabstract list(): Observable<FileUploadItem[]>;\r\n\r\n\t/** Get the content of an uploaded file item as a `Blob`. */\r\n\tabstract get(id: string): Observable<Blob>;\r\n\r\n\t/** Delete an uploaded file item from the server. */\r\n\tabstract delete(id: string): Observable<void>;\r\n\r\n\t/** Delete all uploaded file items in the current HTTP session. */\r\n\tabstract clear?(): Observable<void>;\r\n}\r\n","import { animate, query, stagger, style, transition, trigger } from '@angular/animations';\r\nimport { HttpEvent, HttpEventType } from '@angular/common/http';\r\nimport { Component, ElementRef, forwardRef, HostListener, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Observable, of, Subject, Subscription } from 'rxjs';\r\nimport { FileUploadItem, FileUploadService } from './file-upload.service';\r\n\r\n/** @ignore */\r\nclass UploadingItem {\r\n\tprogress = 0;\r\n\tuploadedItem: FileUploadItem | null | undefined;\r\n\tdownloadingSubs?: Subscription;\r\n\tprivate subscription: Subscription;\r\n\tprivate file?: File;\r\n\r\n\tconstructor(item: FileUploadItem, oncancel: (item: UploadingItem) => void);\r\n\tconstructor(\r\n\t\tevent$: Observable<HttpEvent<FileUploadItem>> | FileUploadItem,\r\n\t\tfile: File,\r\n\t\toncomplete: () => void,\r\n\t\toncancel: (item: UploadingItem) => void\r\n\t);\r\n\tconstructor(\r\n\t\tevent$: Observable<HttpEvent<FileUploadItem>> | FileUploadItem,\r\n\t\tfileOrOncancel?: File | ((item: UploadingItem) => void),\r\n\t\toncomplete?: () => void,\r\n\t\tprivate oncancel?: (item: UploadingItem) => void\r\n\t) {\r\n\t\tif (event$ instanceof Observable) {\r\n\t\t\tthis.file = fileOrOncancel as File;\r\n\t\t\tthis.subscription = event$.subscribe({\r\n\t\t\t\tnext: evt => {\r\n\t\t\t\t\tif (evt.type === HttpEventType.UploadProgress) {\r\n\t\t\t\t\t\tthis.progress = evt.loaded / (this.file as File).size;\r\n\t\t\t\t\t} else if (evt.type === HttpEventType.Response) {\r\n\t\t\t\t\t\tthis.uploadedItem = evt.body;\r\n\t\t\t\t\t\tthis.progress = 1;\r\n\t\t\t\t\t\toncomplete!();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.subscription = of(event$).subscribe();\r\n\t\t\tthis.uploadedItem = event$;\r\n\t\t\tthis.oncancel = fileOrOncancel as (item: UploadingItem) => void;\r\n\t\t}\r\n\t}\r\n\r\n\tcancel() {\r\n\t\tthis.subscription.unsubscribe();\r\n\t\tthis.oncancel!(this);\r\n\t}\r\n\r\n\tget done() {\r\n\t\treturn !!this.uploadedItem;\r\n\t}\r\n\r\n\tget name() {\r\n\t\treturn this.uploadedItem?.name || this.file?.name;\r\n\t}\r\n\r\n\tget downloading() {\r\n\t\treturn this.downloadingSubs && !this.downloadingSubs.closed;\r\n\t}\r\n}\r\n/**\r\n * A control value accessor component to provide the user interface for uploading files.\r\n *\r\n * The application that integrates this UI must provide an implementation of `FileUploadService`.\r\n *\r\n * The control's value is a list of alpha-numerical strings, which are the identifiers to the uploaded files.\r\n *\r\n * Example:\r\n *\r\n * ```html\r\n * <form>\r\n * <bui-file-upload [(ngModel)]=\"uploadedFileIds\" name=\"myFiles\"></bui-file-upload>\r\n * </form>\r\n * ```\r\n *\r\n * @see FileUploadService\r\n */\r\n@Component({\r\n\thost: {\r\n\t\tclass: 'bui-host bui-file-upload',\r\n\t\t'[class.bui-dnd-active]': '_overFrame && remaining >= _numberOfFilesDragged',\r\n\t\t'[class.bui-dnd-over]': '_overDropZone && remaining >= _numberOfFilesDragged',\r\n\t\t'[class.bui-dnd-invalid]': '_invalidFilesDragged'\r\n\t},\r\n\tselector: 'bui-file-upload',\r\n\ttemplateUrl: './file-upload.component.html',\r\n\tstyleUrls: ['./file-upload.component.scss'],\r\n\tproviders: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => FileUploadComponent), multi: true }],\r\n\tanimations: [\r\n\t\ttrigger('slideOut', [\r\n\t\t\ttransition('* => *', [\r\n\t\t\t\tquery(':leave', stagger(100, animate('0.25s', style({ height: 0, overflow: 'hidden' }))), { optional: true })\r\n\t\t\t])\r\n\t\t])\r\n\t],\r\n\tstandalone: false\r\n})\r\nexport class FileUploadComponent implements OnInit, OnDestroy, ControlValueAccessor {\r\n\t/** @ignore */\r\n\t_value: string[] | null = null;\r\n\r\n\t/**\r\n\t * The caption of the button for opening file selection dialog.\r\n\t */\r\n\t@Input()\r\n\tuploadActionText = 'Drag files here to attach or browse';\r\n\r\n\t/**\r\n\t * The label for listing successful uploaded files.\r\n\t */\r\n\t@Input()\r\n\tfileUploadedLabel = 'List of files uploaded successfully';\r\n\r\n\t/**\r\n\t * The text to be displayed when the user starts to drag file items over the browser window.\r\n\t */\r\n\t@Input()\r\n\tdragHint = 'Please drag the files here.';\r\n\r\n\t/**\r\n\t * The text to be displayed when the user is dragging the file items over the drop zone.\r\n\t */\r\n\t@Input()\r\n\tdropHint = 'Please release the mouse button to start uploading.';\r\n\r\n\t/** Specifies the total number of files accepted. A falsy value removes the limit.*/\r\n\t@Input()\r\n\tlimit = 0;\r\n\r\n\t/**\r\n\t * specify the number of maximum bytes that can be uploaded.\r\n\t * if number is specified, bytes are assumed, otherwise enter a string for specific size type.\r\n\t */\r\n\t@Input()\r\n\tfileSize: number | string = '10MB';\r\n\r\n\t/**\r\n\t * Accepted MIME types\r\n\t *\r\n\t * @example ['text/*', 'image/png']\r\n\t */\r\n\t@Input()\r\n\tget types(): string[] {\r\n\t\treturn this._types;\r\n\t}\r\n\tset types(types: string[]) {\r\n\t\tif (Array.isArray(types) && types?.length) {\r\n\t\t\tthis._typeRegExps = [];\r\n\t\t\tthis._types = Array.from(types);\r\n\t\t\tthis._accept = this._types.join(',');\r\n\t\t\ttypes.forEach(t => this._typeRegExps.push(new RegExp(t.replace(/\\*/g, '.*'))));\r\n\t\t}\r\n\t}\r\n\r\n\t/** @ignore */\r\n\t_fileSizeExceedMsg: string = '';\r\n\r\n\t/** @ignore */\r\n\t_uploadingItems: UploadingItem[] = [];\r\n\r\n\t/** @ignore */\r\n\t_accept = '*/*';\r\n\r\n\t/** @ignore */\r\n\t_itemAnimationStart = new Subject<void>();\r\n\t/** @ignore */\r\n\t_itemAnimationDone = new Subject<void>();\r\n\t/** @ignore */\r\n\t_itemAnimationInProgress = false;\r\n\r\n\tprivate _onChange = (_: string[]) => {};\r\n\tprivate _onTouch = () => {};\r\n\tprivate _frameDndEnter: (event: DragEvent) => void;\r\n\tprivate _frameDndLeave: () => void;\r\n\tprivate _frameDndOver: (event: DragEvent) => void;\r\n\tprivate _frameDndStop: () => void;\r\n\tprivate _overFrameCounter = 0;\r\n\tprivate _overCounter = 0;\r\n\tprivate _typeRegExps: RegExp[] = [/.*\\/.*/];\r\n\tprivate _types: string[] = ['*/*'];\r\n\tprivate _initSubs?: Subscription;\r\n\tprivate _numberOfFilesDragged = 0;\r\n\r\n\t@ViewChild('fileInput', { read: ElementRef, static: true })\r\n\tprivate _fileInput!: ElementRef<HTMLInputElement>;\r\n\r\n\tconstructor(private _service: FileUploadService) {\r\n\t\tthis._onChange([]);\r\n\t\tthis._onTouch();\r\n\t\tthis._frameDndEnter = this._onDndEnterFrame.bind(this);\r\n\t\tthis._frameDndLeave = this._onDndLeaveFrame.bind(this);\r\n\t\tthis._frameDndStop = this._onDndStopFrame.bind(this);\r\n\t\tthis._frameDndOver = event => event.preventDefault();\r\n\t}\r\n\r\n\t/** @internal */\r\n\tngOnInit(): void {\r\n\t\tdocument.addEventListener('dragenter', this._frameDndEnter);\r\n\t\tdocument.addEventListener('dragleave', this._frameDndLeave);\r\n\t\tdocument.addEventListener('dragend', this._frameDndStop);\r\n\t\tdocument.addEventListener('drop', this._frameDndStop);\r\n\t\tdocument.addEventListener('dragover', this._frameDndOver);\r\n\t\tthis._itemAnimationStart.subscribe(() => (this._itemAnimationInProgress = true));\r\n\t\tthis._itemAnimationDone.subscribe(() => (this._itemAnimationInProgress = false));\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tdocument.removeEventListener('dragenter', this._frameDndEnter);\r\n\t\tdocument.removeEventListener('dragleave', this._frameDndLeave);\r\n\t\tdocument.removeEventListener('dragend', this._frameDndStop);\r\n\t\tdocument.removeEventListener('drop', this._frameDndStop);\r\n\t\tdocument.removeEventListener('dragover', this._frameDndOver);\r\n\t\tthis._itemAnimationStart.complete();\r\n\t\tthis._itemAnimationDone.complete();\r\n\t}\r\n\r\n\t/** @internal */\r\n\twriteValue(obj: any): void {\r\n\t\tif (Array.isArray(obj)) {\r\n\t\t\tif (!this._value) {\r\n\t\t\t\tthis._acceptChange(obj);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst common = obj.filter(v => this._value!.includes(v));\r\n\t\t\tif (common.length === obj.length && common.length === this._value.length) {\r\n\t\t\t\treturn; // no change\r\n\t\t\t}\r\n\t\t\tthis._acceptChange(obj);\r\n\t\t} else {\r\n\t\t\tthis._value = null;\r\n\t\t}\r\n\t}\r\n\r\n\t/** @internal */\r\n\tregisterOnChange(fn: any): void {\r\n\t\tthis._onChange = fn;\r\n\t}\r\n\r\n\t/** @internal */\r\n\tregisterOnTouched(fn: any): void {\r\n\t\tthis._onTouch = fn;\r\n\t}\r\n\r\n\t/** @internal */\r\n\t@HostListener('dragenter', ['$event'])\r\n\tonDragEnter(event: DragEvent) {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis._overCounter++;\r\n\t}\r\n\r\n\t/** @internal */\r\n\t@HostListener('dragover', ['$event'])\r\n\tonDragOver(event: Event) {\r\n\t\tevent.preventDefault();\r\n\t}\r\n\r\n\t/** @internal */\r\n\t@HostListener('dragleave', ['$event'])\r\n\tonDragLeave(event: Event) {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis._overCounter--;\r\n\t}\r\n\r\n\t/** @internal */\r\n\t@HostListener('drop', ['$event'])\r\n\tonDndDrop(event: DragEvent) {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis._onDndStopFrame();\r\n\t\tconst files = event.dataTransfer?.files;\r\n\t\tif (files?.length && this._validateFileSize(files)) {\r\n\t\t\tthis._uploadFiles(Array.from(files));\r\n\t\t}\r\n\t}\r\n\r\n\t/** Open the file selection dialog */\r\n\tselectFiles() {\r\n\t\tthis._fileInput.nativeElement.click();\r\n\t}\r\n\r\n\t/** @ignore */\r\n\t_openItem(item: UploadingItem) {\r\n\t\titem.downloadingSubs = this._service.get(item.uploadedItem!.id).subscribe(blob => {\r\n\t\t\tconst url = URL.createObjectURL(blob);\r\n\t\t\twindow.open(url, '_blank');\r\n\t\t});\r\n\t}\r\n\r\n\t/** @ignore */\r\n\tget _overFrame(): boolean {\r\n\t\treturn this._overFrameCounter > 0;\r\n\t}\r\n\r\n\t/** @ignore */\r\n\tget _overDropZone(): boolean {\r\n\t\treturn this._overCounter > 0;\r\n\t}\r\n\r\n\t/** Whether file uploading is in progress */\r\n\tget uploading(): boolean {\r\n\t\treturn this._uploadingItems.some(i => !i.done);\r\n\t}\r\n\r\n\t/** The remaining number of files allowed.*/\r\n\tget remaining(): number {\r\n\t\treturn this.limit ? this.limit - this._uploadingItems.length : Infinity;\r\n\t}\r\n\r\n\t/** @ignore */\r\n\t_handleFileSelection() {\r\n\t\tconst fileList = this._fileInput.nativeElement.files;\r\n\t\tif (fileList?.length && this._validateFileSize(fileList)) {\r\n\t\t\tthis._uploadFiles(Array.from(fileList));\r\n\t\t\tthis._fileInput.nativeElement.value = '';\r\n\t\t}\r\n\t}\r\n\r\n\t/** @ignore */\r\n\tget _invalidFilesDragged(): boolean {\r\n\t\treturn this._numberOfFilesDragged > this.remaining && (this._overFrame || this._overDropZone);\r\n\t}\r\n\r\n\t/** @ignore */\r\n\tget _initialising(): boolean {\r\n\t\treturn !!this._initSubs && !this._initSubs.closed;\r\n\t}\r\n\r\n\tprivate returnFileSize(size: number) {\r\n\t\tif (size < 1024) {\r\n\t\t\treturn `${size} bytes`;\r\n\t\t} else if (size >= 1024 && size < 1048576) {\r\n\t\t\treturn `${(size / 1024).toFixed(1)} KB`;\r\n\t\t} else {\r\n\t\t\treturn `${(size / 1048576).toFixed(1)} MB`;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _validateFileSize(files: FileList) {\r\n\t\tthis._fileSizeExceedMsg = '';\r\n\t\tconst maxSize = this.returnFileSize(this._getMaxBytes());\r\n\t\tfor (let i = 0; i < files.length; i++) {\r\n\t\t\tif (files[i]!.size > this._getMaxBytes()) {\r\n\t\t\t\tthis._fileSizeExceedMsg = `Selected file/s has exceeded the allowable size of ${maxSize} per file`;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprivate _getMaxBytes(): number {\r\n\t\tif (typeof this.fileSize === 'string') {\r\n\t\t\tif (this.fileSize.toUpperCase().endsWith('KB')) {\r\n\t\t\t\tconst kiloBytes = this.fileSize.substring(0, this.fileSize.indexOf('KB'));\r\n\t\t\t\treturn Number(kiloBytes) * 1024;\r\n\t\t\t} else if (this.fileSize.toUpperCase().endsWith('MB')) {\r\n\t\t\t\tconst megaBytes = this.fileSize.substring(0, this.fileSize.indexOf('MB'));\r\n\t\t\t\treturn Number(megaBytes) * 1048576;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.fileSize as number;\r\n\t}\r\n\r\n\tprivate _uploadFiles(files: File[]) {\r\n\t\tif (this._initialising || files.length > this.remaining) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst filtered = files.filter(\r\n\t\t\tf =>\r\n\t\t\t\t(!f.type || this._typeRegExps.some(regexp => f.type.match(regexp))) &&\r\n\t\t\t\t!this._uploadingItems.some(i => i.name === f.name)\r\n\t\t);\r\n\t\tconst observables = this._service.upload(filtered);\r\n\t\tconst items = filtered.map(\r\n\t\t\t(f, i) => new UploadingItem(observables[i], f, this._updateItems.bind(this), this._deleteItem.bind(this))\r\n\t\t);\r\n\t\tthis._uploadingItems = [...this._uploadingItems, ...items];\r\n\t}\r\n\r\n\tprivate _onDndEnterFrame(event: DragEvent) {\r\n\t\tevent.preventDefault();\r\n\t\tthis._numberOfFilesDragged = event.dataTransfer?.items?.length || 0;\r\n\t\tthis._overFrameCounter++;\r\n\t}\r\n\r\n\tprivate _onDndLeaveFrame() {\r\n\t\tthis._overFrameCounter--;\r\n\t}\r\n\r\n\tprivate _onDndStopFrame() {\r\n\t\tthis._overFrameCounter = 0;\r\n\t\tthis._overCounter = 0;\r\n\t}\r\n\r\n\tprivate _acceptChange(v: string[]) {\r\n\t\tthis._initSubs = this._service.list().subscribe(list => {\r\n\t\t\tthis._uploadingItems = list\r\n\t\t\t\t.filter(i => v.includes(i.id))\r\n\t\t\t\t.map(f => new UploadingItem(f, this._deleteItem.bind(this)));\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _updateItems() {\r\n\t\tconst completed = this._uploadingItems.filter(i => !!i.uploadedItem);\r\n\t\tthis._uploadingItems = [...completed, ...this._uploadingItems.filter(i => !i.uploadedItem)];\r\n\t\tthis._updateValue(completed);\r\n\t}\r\n\r\n\tprivate _deleteItem(item: UploadingItem) {\r\n\t\tconst key = item.uploadedItem?.id;\r\n\t\tif (key) {\r\n\t\t\tthis._service.delete(key).subscribe(() => {\r\n\t\t\t\tthis._uploadingItems = this._uploadingItems.filter(i => i !== item);\r\n\t\t\t\tconst completed = this._uploadingItems.filter(i => !!i.uploadedItem);\r\n\t\t\t\tthis._updateValue(completed);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis._uploadingItems = this._uploadingItems.filter(i => i !== item);\r\n\t\t\tconst completed = this._uploadingItems.filter(i => !!i.uploadedItem);\r\n\t\t\tthis._updateValue(completed);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _updateValue(completed: UploadingItem[]) {\r\n\t\tconst completedIds = completed.map(c => c.uploadedItem!.id);\r\n\t\tthis._value = completedIds;\r\n\t\tif (!this._value.length) {\r\n\t\t\tthis._value = null;\r\n\t\t}\r\n\t\tthis._onChange(completedIds);\r\n\t}\r\n}\r\n","<div class=\"bui-file-upload-container\">\r\n\t<div\r\n\t\tclass=\"bui-file-upload-hint\"\r\n\t\t*ngIf=\"!_initialising && remaining > 0 && (!_itemAnimationInProgress || remaining > 1)\"\r\n\t>\r\n\t\t<ng-template [ngIf]=\"_invalidFilesDragged\" [ngIfElse]=\"validDnd\">\r\n\t\t\t<mat-icon [buiIcon]=\"'block'\" [size]=\"32\" color=\"warn\" variant=\"outlined\" style=\"opacity: 0.6\"></mat-icon>\r\n\t\t</ng-template>\r\n\t\t<ng-template #validDnd>\r\n\t\t\t<div *ngIf=\"!_overFrame && !_overDropZone\" class=\"bui-color-muted bui-upload-icon-link\" (click)=\"selectFiles()\">\r\n\t\t\t\t<mat-icon [buiIcon]=\"'fas fa-cloud-upload-alt'\" [size]=\"32\"></mat-icon>\r\n\t\t\t\t<a role=\"button\">{{ uploadActionText }}</a>\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"_overFrame && !_overDropZone\" class=\"bui-color-light\">{{ dragHint }}</div>\r\n\t\t\t<div *ngIf=\"_overDropZone\" class=\"bui-color-light\">{{ dropHint }}</div>\r\n\t\t</ng-template>\r\n\t</div>\r\n\t<div\r\n\t\tclass=\"bui-file-upload-list\"\r\n\t\t[@slideOut]=\"_uploadingItems.length\"\r\n\t\t(@slideOut.start)=\"_itemAnimationStart.next()\"\r\n\t\t(@slideOut.done)=\"_itemAnimationDone.next()\"\r\n\t\t*ngIf=\"_uploadingItems.length\"\r\n\t>\r\n\t\t<span class=\"bui-file-uploaded-label\">{{ fileUploadedLabel }}</span>\r\n\r\n\t\t<ng-container *ngFor=\"let item of _uploadingItems; let idx = index\">\r\n\t\t\t<div class=\"bui-file-upload-item\" [class.in-progress]=\"!item.done\" #itemDiv>\r\n\t\t\t\t<div class=\"bui-file-upload-item-name\">\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<mat-icon class=\"bui-color-muted\">description</mat-icon>\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\tclass=\"text\"\r\n\t\t\t\t\t\t\t*ngIf=\"item.done && !item.downloading; else staticName\"\r\n\t\t\t\t\t\t\thref=\"#{{ item.uploadedItem?.id }}\"\r\n\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); _openItem(item)\"\r\n\t\t\t\t\t\t\tcontextmenu=\"false\"\r\n\t\t\t\t\t\t\tmatTooltip=\"Download\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{{ item.name }}\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t<ng-template #staticName>\r\n\t\t\t\t\t\t\t<span class=\"text\">{{ item.name }}</span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<div class=\"bui-file-upload-item-progress\">\r\n\t\t\t\t\t\t<mat-progress-bar\r\n\t\t\t\t\t\t\tmode=\"determinate\"\r\n\t\t\t\t\t\t\t[class.upload-completed]=\"item.done\"\r\n\t\t\t\t\t\t\t*ngIf=\"!item.downloading\"\r\n\t\t\t\t\t\t\t[value]=\"item.done ? 100 : item.progress * 100\"\r\n\t\t\t\t\t\t></mat-progress-bar>\r\n\t\t\t\t\t\t<mat-progress-bar mode=\"buffer\" *ngIf=\"item.downloading\"></mat-progress-bar>\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t<ng-template [ngIf]=\"item.done\" [ngIfElse]=\"inprogress\"> 100% </ng-template>\r\n\t\t\t\t\t\t\t<ng-template #inprogress>\r\n\t\t\t\t\t\t\t\t{{ item.progress | percent }}\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bui-file-upload-item-action\">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t(click)=\"item.cancel()\"\r\n\t\t\t\t\t\t(mouseenter)=\"itemDiv.classList.add('bui-file-upload-item-deleting')\"\r\n\t\t\t\t\t\t(mouseleave)=\"itemDiv.classList.remove('bui-file-upload-item-deleting')\"\r\n\t\t\t\t\t\tmatTooltip=\"Delete\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<mat-icon [buiIcon]=\"'cancel'\" style=\"line-height: 0.9\"></mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<mat-divider *ngIf=\"idx < _uploadingItems.length - 1\"></mat-divider>\r\n\t\t</ng-container>\r\n\t</div>\r\n\t<input\r\n\t\ttype=\"file\"\r\n\t\t#fileInput\r\n\t\tstyle=\"display: none\"\r\n\t\taccept=\"{{ _accept }}\"\r\n\t\t(change)=\"_handleFileSelection()\"\r\n\t\t[multiple]=\"remaining > 1\"\r\n\t/>\r\n\r\n\t<div *ngIf=\"_fileSizeExceedMsg\" class=\"bui-color-warn bui-file-size-exceed\">\r\n\t\t<span> {{ _fileSizeExceedMsg }}</span> <mat-icon role=\"button\" (click)=\"_fileSizeExceedMsg = ''\">cancel</mat-icon>\r\n\t</div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FileUploadComponent } from './file-upload.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { IconFontModule } from '@bravura/ui/icon-font';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n\tdeclarations: [FileUploadComponent],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tMatIconModule,\r\n\t\tIconFontModule,\r\n\t\tMatProgressBarModule,\r\n\t\tMatButtonModule,\r\n\t\tMatDividerModule,\r\n\t\tMatTooltipModule\r\n\t],\r\n\texports: [FileUploadComponent]\r\n})\r\nexport class FileUploadModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FileUploadService"],"mappings":"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"}
1
+ {"version":3,"file":"bravura-ui-file-upload.mjs","sources":["../../../projects/ui/file-upload/file-upload.service.ts","../../../projects/ui/file-upload/file-upload.component.ts","../../../projects/ui/file-upload/file-upload.component.html","../../../projects/ui/file-upload/file-upload.module.ts","../../../projects/ui/file-upload/bravura-ui-file-upload.ts"],"sourcesContent":["import { HttpEvent } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * This type represents a file or form item that has been sent as part of a multipart/form-data POST request.\r\n */\r\nexport class FileUploadItem {\r\n\t/** The original filename in the client's filesystem, as provided by the browser. */\r\n\tname: string;\r\n\r\n\t/** The size of the file item. */\r\n\tsize: number;\r\n\r\n\t/** An alpha-numeric string that uniquely identifies the file item. */\r\n\tid: string;\r\n\r\n\t/** The content type (MIME type) of the file. */\r\n\ttype: string;\r\n\r\n\t/** @internal */\r\n\tconstructor(_id: string, _name: string, _size: number, _type: string) {\r\n\t\tthis.id = _id;\r\n\t\tthis.name = _name;\r\n\t\tthis.size = _size;\r\n\t\tthis.type = _type;\r\n\t}\r\n}\r\n\r\n/**\r\n * This is an API for processing file upload requests.\r\n *\r\n * A sub class of this type handles multiple file requests, sent using multipart/form-data encoding type, as specified by RFC 1867.\r\n *\r\n * Please extend this type and provide it in an injector at the same level, or ancestral to that, of the `FileUploadComponent`.\r\n */\r\n@Injectable()\r\nexport abstract class FileUploadService {\r\n\t/**\r\n\t * Upload a list of selected files from the browser. The returned `Observable` array provides the update of the uploading progress\r\n\t * through HTTP events.\r\n\t */\r\n\tabstract upload(files: File[]): Array<Observable<HttpEvent<FileUploadItem>>>;\r\n\r\n\t/** List all the uploaded file items in the current HTTP session. This list excludes the files still in the process of being uploaded*/\r\n\tabstract list(): Observable<FileUploadItem[]>;\r\n\r\n\t/** Get the content of an uploaded file item as a `Blob`. */\r\n\tabstract get(id: string): Observable<Blob>;\r\n\r\n\t/** Delete an uploaded file item from the server. */\r\n\tabstract delete(id: string): Observable<void>;\r\n\r\n\t/** Delete all uploaded file items in the current HTTP session. */\r\n\tabstract clear?(): Observable<void>;\r\n}\r\n","import { animate, query, stagger, style, transition, trigger } from '@angular/animations';\r\nimport { HttpEvent, HttpEventType } from '@angular/common/http';\r\nimport { Component, ElementRef, forwardRef, HostListener, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Observable, of, Subject, Subscription } from 'rxjs';\r\nimport { FileUploadItem, FileUploadService } from './file-upload.service';\r\n\r\n/** @ignore */\r\nclass UploadingItem {\r\n\tprogress = 0;\r\n\tuploadedItem: FileUploadItem | null | undefined;\r\n\tdownloadingSubs?: Subscription;\r\n\tprivate subscription: Subscription;\r\n\tprivate file?: File;\r\n\r\n\tconstructor(item: FileUploadItem, oncancel: (item: UploadingItem) => void);\r\n\tconstructor(\r\n\t\tevent$: Observable<HttpEvent<FileUploadItem>> | FileUploadItem,\r\n\t\tfile: File,\r\n\t\toncomplete: () => void,\r\n\t\toncancel: (item: UploadingItem) => void\r\n\t);\r\n\tconstructor(\r\n\t\tevent$: Observable<HttpEvent<FileUploadItem>> | FileUploadItem,\r\n\t\tfileOrOncancel?: File | ((item: UploadingItem) => void),\r\n\t\toncomplete?: () => void,\r\n\t\tprivate oncancel?: (item: UploadingItem) => void\r\n\t) {\r\n\t\tif (event$ instanceof Observable) {\r\n\t\t\tthis.file = fileOrOncancel as File;\r\n\t\t\tthis.subscription = event$.subscribe({\r\n\t\t\t\tnext: evt => {\r\n\t\t\t\t\tif (evt.type === HttpEventType.UploadProgress) {\r\n\t\t\t\t\t\tthis.progress = evt.loaded / (this.file as File).size;\r\n\t\t\t\t\t} else if (evt.type === HttpEventType.Response) {\r\n\t\t\t\t\t\tthis.uploadedItem = evt.body;\r\n\t\t\t\t\t\tthis.progress = 1;\r\n\t\t\t\t\t\toncomplete!();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.subscription = of(event$).subscribe();\r\n\t\t\tthis.uploadedItem = event$;\r\n\t\t\tthis.oncancel = fileOrOncancel as (item: UploadingItem) => void;\r\n\t\t}\r\n\t}\r\n\r\n\tcancel() {\r\n\t\tthis.subscription.unsubscribe();\r\n\t\tthis.oncancel!(this);\r\n\t}\r\n\r\n\tget done() {\r\n\t\treturn !!this.uploadedItem;\r\n\t}\r\n\r\n\tget name() {\r\n\t\treturn this.uploadedItem?.name || this.file?.name;\r\n\t}\r\n\r\n\tget downloading() {\r\n\t\treturn this.downloadingSubs && !this.downloadingSubs.closed;\r\n\t}\r\n}\r\n/**\r\n * A control value accessor component to provide the user interface for uploading files.\r\n *\r\n * The application that integrates this UI must provide an implementation of `FileUploadService`.\r\n *\r\n * The control's value is a list of alpha-numerical strings, which are the identifiers to the uploaded files.\r\n *\r\n * Example:\r\n *\r\n * ```html\r\n * <form>\r\n * <bui-file-upload [(ngModel)]=\"uploadedFileIds\" name=\"myFiles\"></bui-file-upload>\r\n * </form>\r\n * ```\r\n *\r\n * @see FileUploadService\r\n */\r\n@Component({\r\n\thost: {\r\n\t\tclass: 'bui-host bui-file-upload',\r\n\t\t'[class.bui-dnd-active]': '_overFrame && remaining >= _numberOfFilesDragged',\r\n\t\t'[class.bui-dnd-over]': '_overDropZone && remaining >= _numberOfFilesDragged',\r\n\t\t'[class.bui-dnd-invalid]': '_invalidFilesDragged'\r\n\t},\r\n\tselector: 'bui-file-upload',\r\n\ttemplateUrl: './file-upload.component.html',\r\n\tstyleUrls: ['./file-upload.component.scss'],\r\n\tproviders: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => FileUploadComponent), multi: true }],\r\n\tanimations: [\r\n\t\ttrigger('slideOut', [\r\n\t\t\ttransition('* => *', [\r\n\t\t\t\tquery(':leave', stagger(100, animate('0.25s', style({ height: 0, overflow: 'hidden' }))), { optional: true })\r\n\t\t\t])\r\n\t\t])\r\n\t],\r\n\tstandalone: false\r\n})\r\nexport class FileUploadComponent implements OnInit, OnDestroy, ControlValueAccessor {\r\n\t/** @ignore */\r\n\t_value: string[] | null = null;\r\n\r\n\t/**\r\n\t * The caption of the button for opening file selection dialog.\r\n\t */\r\n\t@Input()\r\n\tuploadActionText = 'Drag files here to attach or browse';\r\n\r\n\t/**\r\n\t * The label for listing successful uploaded files.\r\n\t */\r\n\t@Input()\r\n\tfileUploadedLabel = 'List of files uploaded successfully';\r\n\r\n\t/**\r\n\t * The text to be displayed when the user starts to drag file items over the browser window.\r\n\t */\r\n\t@Input()\r\n\tdragHint = 'Please drag the files here.';\r\n\r\n\t/**\r\n\t * The text to be displayed when the user is dragging the file items over the drop zone.\r\n\t */\r\n\t@Input()\r\n\tdropHint = 'Please release the mouse button to start uploading.';\r\n\r\n\t/** Specifies the total number of files accepted. A falsy value removes the limit.*/\r\n\t@Input()\r\n\tlimit = 0;\r\n\r\n\t/**\r\n\t * specify the number of maximum bytes that can be uploaded.\r\n\t * if number is specified, bytes are assumed, otherwise enter a string for specific size type.\r\n\t */\r\n\t@Input()\r\n\tfileSize: number | string = '10MB';\r\n\r\n\t/**\r\n\t * Accepted MIME types\r\n\t *\r\n\t * @example ['text/*', 'image/png']\r\n\t */\r\n\t@Input()\r\n\tget types(): string[] {\r\n\t\treturn this._types;\r\n\t}\r\n\tset types(types: string[]) {\r\n\t\tif (Array.isArray(types) && types?.length) {\r\n\t\t\tthis._typeRegExps = [];\r\n\t\t\tthis._types = Array.from(types);\r\n\t\t\tthis._accept = this._types.join(',');\r\n\t\t\ttypes.forEach(t => this._typeRegExps.push(new RegExp(t.replace(/\\*/g, '.*'))));\r\n\t\t}\r\n\t}\r\n\r\n\t/** @ignore */\r\n\t_fileSizeExceedMsg: string = '';\r\n\r\n\t/** @ignore */\r\n\t_uploadingItems: UploadingItem[] = [];\r\n\r\n\t/** @ignore */\r\n\t_accept = '*/*';\r\n\r\n\t/** @ignore */\r\n\t_itemAnimationStart = new Subject<void>();\r\n\t/** @ignore */\r\n\t_itemAnimationDone = new Subject<void>();\r\n\t/** @ignore */\r\n\t_itemAnimationInProgress = false;\r\n\r\n\tprivate _onChange = (_: string[]) => {};\r\n\tprivate _onTouch = () => {};\r\n\tprivate _frameDndEnter: (event: DragEvent) => void;\r\n\tprivate _frameDndLeave: () => void;\r\n\tprivate _frameDndOver: (event: DragEvent) => void;\r\n\tprivate _frameDndStop: () => void;\r\n\tprivate _overFrameCounter = 0;\r\n\tprivate _overCounter = 0;\r\n\tprivate _typeRegExps: RegExp[] = [/.*\\/.*/];\r\n\tprivate _types: string[] = ['*/*'];\r\n\tprivate _initSubs?: Subscription;\r\n\tprivate _numberOfFilesDragged = 0;\r\n\r\n\t@ViewChild('fileInput', { read: ElementRef, static: true })\r\n\tprivate _fileInput!: ElementRef<HTMLInputElement>;\r\n\r\n\tconstructor(private _service: FileUploadService) {\r\n\t\tthis._onChange([]);\r\n\t\tthis._onTouch();\r\n\t\tthis._frameDndEnter = this._onDndEnterFrame.bind(this);\r\n\t\tthis._frameDndLeave = this._onDndLeaveFrame.bind(this);\r\n\t\tthis._frameDndStop = this._onDndStopFrame.bind(this);\r\n\t\tthis._frameDndOver = event => event.preventDefault();\r\n\t}\r\n\r\n\t/** @internal */\r\n\tngOnInit(): void {\r\n\t\tdocument.addEventListener('dragenter', this._frameDndEnter);\r\n\t\tdocument.addEventListener('dragleave', this._frameDndLeave);\r\n\t\tdocument.addEventListener('dragend', this._frameDndStop);\r\n\t\tdocument.addEventListener('drop', this._frameDndStop);\r\n\t\tdocument.addEventListener('dragover', this._frameDndOver);\r\n\t\tthis._itemAnimationStart.subscribe(() => (this._itemAnimationInProgress = true));\r\n\t\tthis._itemAnimationDone.subscribe(() => (this._itemAnimationInProgress = false));\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tdocument.removeEventListener('dragenter', this._frameDndEnter);\r\n\t\tdocument.removeEventListener('dragleave', this._frameDndLeave);\r\n\t\tdocument.removeEventListener('dragend', this._frameDndStop);\r\n\t\tdocument.removeEventListener('drop', this._frameDndStop);\r\n\t\tdocument.removeEventListener('dragover', this._frameDndOver);\r\n\t\tthis._itemAnimationStart.complete();\r\n\t\tthis._itemAnimationDone.complete();\r\n\t}\r\n\r\n\t/** @internal */\r\n\twriteValue(obj: any): void {\r\n\t\tif (Array.isArray(obj)) {\r\n\t\t\tif (!this._value) {\r\n\t\t\t\tthis._acceptChange(obj);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst common = obj.filter(v => this._value!.includes(v));\r\n\t\t\tif (common.length === obj.length && common.length === this._value.length) {\r\n\t\t\t\treturn; // no change\r\n\t\t\t}\r\n\t\t\tthis._acceptChange(obj);\r\n\t\t} else {\r\n\t\t\tthis._value = null;\r\n\t\t}\r\n\t}\r\n\r\n\t/** @internal */\r\n\tregisterOnChange(fn: any): void {\r\n\t\tthis._onChange = fn;\r\n\t}\r\n\r\n\t/** @internal */\r\n\tregisterOnTouched(fn: any): void {\r\n\t\tthis._onTouch = fn;\r\n\t}\r\n\r\n\t/** @internal */\r\n\t@HostListener('dragenter', ['$event'])\r\n\tonDragEnter(event: DragEvent) {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis._overCounter++;\r\n\t}\r\n\r\n\t/** @internal */\r\n\t@HostListener('dragover', ['$event'])\r\n\tonDragOver(event: Event) {\r\n\t\tevent.preventDefault();\r\n\t}\r\n\r\n\t/** @internal */\r\n\t@HostListener('dragleave', ['$event'])\r\n\tonDragLeave(event: Event) {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis._overCounter--;\r\n\t}\r\n\r\n\t/** @internal */\r\n\t@HostListener('drop', ['$event'])\r\n\tonDndDrop(event: DragEvent) {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis._onDndStopFrame();\r\n\t\tconst files = event.dataTransfer?.files;\r\n\t\tif (files?.length && this._validateFileSize(files)) {\r\n\t\t\tthis._uploadFiles(Array.from(files));\r\n\t\t}\r\n\t}\r\n\r\n\t/** Open the file selection dialog */\r\n\tselectFiles() {\r\n\t\tthis._fileInput.nativeElement.click();\r\n\t}\r\n\r\n\t/** @ignore */\r\n\t_openItem(item: UploadingItem) {\r\n\t\titem.downloadingSubs = this._service.get(item.uploadedItem!.id).subscribe(blob => {\r\n\t\t\tconst url = URL.createObjectURL(blob);\r\n\t\t\twindow.open(url, '_blank');\r\n\t\t});\r\n\t}\r\n\r\n\t/** @ignore */\r\n\tget _overFrame(): boolean {\r\n\t\treturn this._overFrameCounter > 0;\r\n\t}\r\n\r\n\t/** @ignore */\r\n\tget _overDropZone(): boolean {\r\n\t\treturn this._overCounter > 0;\r\n\t}\r\n\r\n\t/** Whether file uploading is in progress */\r\n\tget uploading(): boolean {\r\n\t\treturn this._uploadingItems.some(i => !i.done);\r\n\t}\r\n\r\n\t/** The remaining number of files allowed.*/\r\n\tget remaining(): number {\r\n\t\treturn this.limit ? this.limit - this._uploadingItems.length : Infinity;\r\n\t}\r\n\r\n\t/** @ignore */\r\n\t_handleFileSelection() {\r\n\t\tconst fileList = this._fileInput.nativeElement.files;\r\n\t\tif (fileList?.length && this._validateFileSize(fileList)) {\r\n\t\t\tthis._uploadFiles(Array.from(fileList));\r\n\t\t\tthis._fileInput.nativeElement.value = '';\r\n\t\t}\r\n\t}\r\n\r\n\t/** @ignore */\r\n\tget _invalidFilesDragged(): boolean {\r\n\t\treturn this._numberOfFilesDragged > this.remaining && (this._overFrame || this._overDropZone);\r\n\t}\r\n\r\n\t/** @ignore */\r\n\tget _initialising(): boolean {\r\n\t\treturn !!this._initSubs && !this._initSubs.closed;\r\n\t}\r\n\r\n\tprivate returnFileSize(size: number) {\r\n\t\tif (size < 1024) {\r\n\t\t\treturn `${size} bytes`;\r\n\t\t} else if (size >= 1024 && size < 1048576) {\r\n\t\t\treturn `${(size / 1024).toFixed(1)} KB`;\r\n\t\t} else {\r\n\t\t\treturn `${(size / 1048576).toFixed(1)} MB`;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _validateFileSize(files: FileList) {\r\n\t\tthis._fileSizeExceedMsg = '';\r\n\t\tconst maxSize = this.returnFileSize(this._getMaxBytes());\r\n\t\tfor (let i = 0; i < files.length; i++) {\r\n\t\t\tif (files[i]!.size > this._getMaxBytes()) {\r\n\t\t\t\tthis._fileSizeExceedMsg = `Selected file/s has exceeded the allowable size of ${maxSize} per file`;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprivate _getMaxBytes(): number {\r\n\t\tif (typeof this.fileSize === 'string') {\r\n\t\t\tif (this.fileSize.toUpperCase().endsWith('KB')) {\r\n\t\t\t\tconst kiloBytes = this.fileSize.substring(0, this.fileSize.indexOf('KB'));\r\n\t\t\t\treturn Number(kiloBytes) * 1024;\r\n\t\t\t} else if (this.fileSize.toUpperCase().endsWith('MB')) {\r\n\t\t\t\tconst megaBytes = this.fileSize.substring(0, this.fileSize.indexOf('MB'));\r\n\t\t\t\treturn Number(megaBytes) * 1048576;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.fileSize as number;\r\n\t}\r\n\r\n\tprivate _uploadFiles(files: File[]) {\r\n\t\tif (this._initialising || files.length > this.remaining) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst filtered = files.filter(\r\n\t\t\tf =>\r\n\t\t\t\t(!f.type || this._typeRegExps.some(regexp => f.type.match(regexp))) &&\r\n\t\t\t\t!this._uploadingItems.some(i => i.name === f.name)\r\n\t\t);\r\n\t\tconst observables = this._service.upload(filtered);\r\n\t\tconst items = filtered.map(\r\n\t\t\t(f, i) => new UploadingItem(observables[i], f, this._updateItems.bind(this), this._deleteItem.bind(this))\r\n\t\t);\r\n\t\tthis._uploadingItems = [...this._uploadingItems, ...items];\r\n\t}\r\n\r\n\tprivate _onDndEnterFrame(event: DragEvent) {\r\n\t\tevent.preventDefault();\r\n\t\tthis._numberOfFilesDragged = event.dataTransfer?.items?.length || 0;\r\n\t\tthis._overFrameCounter++;\r\n\t}\r\n\r\n\tprivate _onDndLeaveFrame() {\r\n\t\tthis._overFrameCounter--;\r\n\t}\r\n\r\n\tprivate _onDndStopFrame() {\r\n\t\tthis._overFrameCounter = 0;\r\n\t\tthis._overCounter = 0;\r\n\t}\r\n\r\n\tprivate _acceptChange(v: string[]) {\r\n\t\tthis._initSubs = this._service.list().subscribe(list => {\r\n\t\t\tthis._uploadingItems = list\r\n\t\t\t\t.filter(i => v.includes(i.id))\r\n\t\t\t\t.map(f => new UploadingItem(f, this._deleteItem.bind(this)));\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _updateItems() {\r\n\t\tconst completed = this._uploadingItems.filter(i => !!i.uploadedItem);\r\n\t\tthis._uploadingItems = [...completed, ...this._uploadingItems.filter(i => !i.uploadedItem)];\r\n\t\tthis._updateValue(completed);\r\n\t}\r\n\r\n\tprivate _deleteItem(item: UploadingItem) {\r\n\t\tconst key = item.uploadedItem?.id;\r\n\t\tif (key) {\r\n\t\t\tthis._service.delete(key).subscribe(() => {\r\n\t\t\t\tthis._uploadingItems = this._uploadingItems.filter(i => i !== item);\r\n\t\t\t\tconst completed = this._uploadingItems.filter(i => !!i.uploadedItem);\r\n\t\t\t\tthis._updateValue(completed);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis._uploadingItems = this._uploadingItems.filter(i => i !== item);\r\n\t\t\tconst completed = this._uploadingItems.filter(i => !!i.uploadedItem);\r\n\t\t\tthis._updateValue(completed);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _updateValue(completed: UploadingItem[]) {\r\n\t\tconst completedIds = completed.map(c => c.uploadedItem!.id);\r\n\t\tthis._value = completedIds;\r\n\t\tif (!this._value.length) {\r\n\t\t\tthis._value = null;\r\n\t\t}\r\n\t\tthis._onChange(completedIds);\r\n\t}\r\n}\r\n","<div class=\"bui-file-upload-container\">\n\t@if (!_initialising && remaining > 0 && (!_itemAnimationInProgress || remaining > 1)) {\n\t\t<div class=\"bui-file-upload-hint\">\n\t\t\t@if (_invalidFilesDragged) {\n\t\t\t\t<mat-icon [buiIcon]=\"'block'\" [size]=\"32\" color=\"warn\" variant=\"outlined\" style=\"opacity: 0.6\"></mat-icon>\n\t\t\t} @else {\n\t\t\t\t@if (!_overFrame && !_overDropZone) {\n\t\t\t\t\t<div class=\"bui-color-muted bui-upload-icon-link\" (click)=\"selectFiles()\">\n\t\t\t\t\t\t<mat-icon [buiIcon]=\"'fas fa-cloud-upload-alt'\" [size]=\"32\"></mat-icon>\n\t\t\t\t\t\t<a role=\"button\">{{ uploadActionText }}</a>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (_overFrame && !_overDropZone) {\n\t\t\t\t\t<div class=\"bui-color-light\">{{ dragHint }}</div>\n\t\t\t\t}\n\t\t\t\t@if (_overDropZone) {\n\t\t\t\t\t<div class=\"bui-color-light\">{{ dropHint }}</div>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\t@if (_uploadingItems.length) {\n\t\t<div\n\t\t\tclass=\"bui-file-upload-list\"\n\t\t\t[@slideOut]=\"_uploadingItems.length\"\n\t\t\t(@slideOut.start)=\"_itemAnimationStart.next()\"\n\t\t\t(@slideOut.done)=\"_itemAnimationDone.next()\"\n\t\t>\n\t\t\t<span class=\"bui-file-uploaded-label\">{{ fileUploadedLabel }}</span>\n\t\t\t@for (item of _uploadingItems; track item; let idx = $index) {\n\t\t\t\t<div class=\"bui-file-upload-item\" [class.in-progress]=\"!item.done\" #itemDiv>\n\t\t\t\t\t<div class=\"bui-file-upload-item-name\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<mat-icon class=\"bui-color-muted\">description</mat-icon>\n\t\t\t\t\t\t\t@if (item.done && !item.downloading) {\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\tclass=\"text\"\n\t\t\t\t\t\t\t\t\thref=\"#{{ item.uploadedItem?.id }}\"\n\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); _openItem(item)\"\n\t\t\t\t\t\t\t\t\tcontextmenu=\"false\"\n\t\t\t\t\t\t\t\t\tmatTooltip=\"Download\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ item.name }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<span class=\"text\">{{ item.name }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<div class=\"bui-file-upload-item-progress\">\n\t\t\t\t\t\t\t@if (!item.downloading) {\n\t\t\t\t\t\t\t\t<mat-progress-bar\n\t\t\t\t\t\t\t\t\tmode=\"determinate\"\n\t\t\t\t\t\t\t\t\t[class.upload-completed]=\"item.done\"\n\t\t\t\t\t\t\t\t\t[value]=\"item.done ? 100 : item.progress * 100\"\n\t\t\t\t\t\t\t\t></mat-progress-bar>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (item.downloading) {\n\t\t\t\t\t\t\t\t<mat-progress-bar mode=\"buffer\"></mat-progress-bar>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t@if (item.done) {\n\t\t\t\t\t\t\t\t\t100%\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ item.progress | percent }}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"bui-file-upload-item-action\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\t\t\t(click)=\"item.cancel()\"\n\t\t\t\t\t\t\t(mouseenter)=\"itemDiv.classList.add('bui-file-upload-item-deleting')\"\n\t\t\t\t\t\t\t(mouseleave)=\"itemDiv.classList.remove('bui-file-upload-item-deleting')\"\n\t\t\t\t\t\t\tmatTooltip=\"Delete\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<mat-icon [buiIcon]=\"'cancel'\" style=\"line-height: 0.9\"></mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t@if (idx < _uploadingItems.length - 1) {\n\t\t\t\t\t<mat-divider></mat-divider>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\t<input\n\t\ttype=\"file\"\n\t\t#fileInput\n\t\tstyle=\"display: none\"\n\t\taccept=\"{{ _accept }}\"\n\t\t(change)=\"_handleFileSelection()\"\n\t\t[multiple]=\"remaining > 1\"\n\t/>\n\n\t@if (_fileSizeExceedMsg) {\n\t\t<div class=\"bui-color-warn bui-file-size-exceed\">\n\t\t\t<span> {{ _fileSizeExceedMsg }}</span> <mat-icon role=\"button\" (click)=\"_fileSizeExceedMsg = ''\">cancel</mat-icon>\n\t\t</div>\n\t}\n</div>\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FileUploadComponent } from './file-upload.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { IconFontModule } from '@bravura/ui/icon-font';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n\tdeclarations: [FileUploadComponent],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tMatIconModule,\r\n\t\tIconFontModule,\r\n\t\tMatProgressBarModule,\r\n\t\tMatButtonModule,\r\n\t\tMatDividerModule,\r\n\t\tMatTooltipModule\r\n\t],\r\n\texports: [FileUploadComponent]\r\n})\r\nexport class FileUploadModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FileUploadService"],"mappings":"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"}
@@ -23,10 +23,10 @@ const BUI_FORM_FIELD_CONFIG = new InjectionToken('@bravura/ui/buiFormFieldConfig
23
23
  * component.
24
24
  */
25
25
  class FormFieldComponent extends MatFormField {
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormFieldComponent, isStandalone: false, selector: "bui-dummy-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true, styles: [".bui-form-field-bound,.bui-form-field-detach{padding-top:24px;--mat-mdc-form-field-floating-label-scale: 1 !important;--mat-mdc-form-field-floating-label-translate-y: -3.3rem}.bui-form-field-bound .mdc-floating-label,.bui-form-field-detach .mdc-floating-label{--mat-mdc-form-field-label-transform: translateY(var(--mat-mdc-form-field-floating-label-translate-y)) translateX(-4px) scale(var(--mat-mdc-form-field-floating-label-scale, .75)) !important;transition:none!important}[dir=rtl] .bui-form-field-bound .mdc-floating-label,[dir=rtl] .bui-form-field-detach .mdc-floating-label{--mat-mdc-form-field-label-transform: translateY(var(--mat-mdc-form-field-floating-label-translate-y)) translateX(4px) scale(var(--mat-mdc-form-field-floating-label-scale, .75)) !important}.bui-form-field-bound .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix,.bui-form-field-detach .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{display:flex;flex-direction:column;justify-content:center;align-self:stretch}.bui-form-field-bound.mat-focused{--mat-mdc-form-field-floating-label-translate-y: calc(-3.3rem - 1px) }.bui-form-field-bound .mat-mdc-form-field-hint-wrapper,.bui-form-field-bound .mat-mdc-form-field-error-wrapper{padding-left:initial;padding-inline-start:4px}.bui-form-field-bound .mat-mdc-form-field-infix{min-height:48px}.bui-form-field-bound .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.bui-form-field-bound .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:4px}.bui-form-field-bound .mdc-notched-outline--notched .mdc-notched-outline__notch{border-top-width:1px;border-top-style:solid}.bui-form-field-bound .mdc-text-field--focused .mdc-notched-outline--notched .mdc-notched-outline__notch{border-top-width:2px}.bui-form-field-bound .mat-mdc-form-field-icon-prefix>.mat-icon{padding:0 6px 0 12px}.bui-form-field-bound .mat-mdc-form-field-icon-prefix>span,.bui-form-field-bound .mat-mdc-form-field-icon-prefix>div{padding-inline-start:6px}.bui-form-field-bound .mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px 0 6px}.bui-form-field-bound .mat-mdc-form-field-icon-suffix>span,.bui-form-field-bound .mat-mdc-form-field-icon-suffix>div{padding-inline-end:6px}.bui-form-field-detach .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:0;padding-bottom:0}.bui-form-field-detach .mat-mdc-form-field-hint-wrapper,.bui-form-field-detach .mat-mdc-form-field-error-wrapper{padding-inline-start:0}.bui-form-field-detach .mat-mdc-form-field-infix{min-height:40px}.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{border:none!important}.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:0}.bui-form-field-detach .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-inline-start:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: FormFieldComponent, isStandalone: false, selector: "bui-dummy-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true, styles: [".bui-form-field-bound,.bui-form-field-detach{padding-top:24px;--mat-mdc-form-field-floating-label-scale: 1 !important;--mat-mdc-form-field-floating-label-translate-y: -3.3rem}.bui-form-field-bound .mdc-floating-label,.bui-form-field-detach .mdc-floating-label{--mat-mdc-form-field-label-transform: translateY(var(--mat-mdc-form-field-floating-label-translate-y)) translateX(-4px) scale(var(--mat-mdc-form-field-floating-label-scale, .75)) !important;transition:none!important}[dir=rtl] .bui-form-field-bound .mdc-floating-label,[dir=rtl] .bui-form-field-detach .mdc-floating-label{--mat-mdc-form-field-label-transform: translateY(var(--mat-mdc-form-field-floating-label-translate-y)) translateX(4px) scale(var(--mat-mdc-form-field-floating-label-scale, .75)) !important}.bui-form-field-bound .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix,.bui-form-field-detach .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{display:flex;flex-direction:column;justify-content:center;align-self:stretch}.bui-form-field-bound.mat-focused{--mat-mdc-form-field-floating-label-translate-y: calc(-3.3rem - 1px) }.bui-form-field-bound .mat-mdc-form-field-hint-wrapper,.bui-form-field-bound .mat-mdc-form-field-error-wrapper{padding-left:initial;padding-inline-start:4px}.bui-form-field-bound .mat-mdc-form-field-infix{min-height:48px}.bui-form-field-bound .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.bui-form-field-bound .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:4px}.bui-form-field-bound .mdc-notched-outline--notched .mdc-notched-outline__notch{border-top-width:1px;border-top-style:solid}.bui-form-field-bound .mdc-text-field--focused .mdc-notched-outline--notched .mdc-notched-outline__notch{border-top-width:2px}.bui-form-field-bound .mat-mdc-form-field-icon-prefix>.mat-icon{padding:0 6px 0 12px}.bui-form-field-bound .mat-mdc-form-field-icon-prefix>span,.bui-form-field-bound .mat-mdc-form-field-icon-prefix>div{padding-inline-start:6px}.bui-form-field-bound .mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px 0 6px}.bui-form-field-bound .mat-mdc-form-field-icon-suffix>span,.bui-form-field-bound .mat-mdc-form-field-icon-suffix>div{padding-inline-end:6px}.bui-form-field-detach .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:0;padding-bottom:0}.bui-form-field-detach .mat-mdc-form-field-hint-wrapper,.bui-form-field-detach .mat-mdc-form-field-error-wrapper{padding-inline-start:0}.bui-form-field-detach .mat-mdc-form-field-infix{min-height:40px}.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{border:none!important}.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:0}.bui-form-field-detach .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-inline-start:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFieldComponent, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormFieldComponent, decorators: [{
30
30
  type: Component,
31
31
  args: [{ selector: 'bui-dummy-component', template: ``, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [".bui-form-field-bound,.bui-form-field-detach{padding-top:24px;--mat-mdc-form-field-floating-label-scale: 1 !important;--mat-mdc-form-field-floating-label-translate-y: -3.3rem}.bui-form-field-bound .mdc-floating-label,.bui-form-field-detach .mdc-floating-label{--mat-mdc-form-field-label-transform: translateY(var(--mat-mdc-form-field-floating-label-translate-y)) translateX(-4px) scale(var(--mat-mdc-form-field-floating-label-scale, .75)) !important;transition:none!important}[dir=rtl] .bui-form-field-bound .mdc-floating-label,[dir=rtl] .bui-form-field-detach .mdc-floating-label{--mat-mdc-form-field-label-transform: translateY(var(--mat-mdc-form-field-floating-label-translate-y)) translateX(4px) scale(var(--mat-mdc-form-field-floating-label-scale, .75)) !important}.bui-form-field-bound .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix,.bui-form-field-detach .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{display:flex;flex-direction:column;justify-content:center;align-self:stretch}.bui-form-field-bound.mat-focused{--mat-mdc-form-field-floating-label-translate-y: calc(-3.3rem - 1px) }.bui-form-field-bound .mat-mdc-form-field-hint-wrapper,.bui-form-field-bound .mat-mdc-form-field-error-wrapper{padding-left:initial;padding-inline-start:4px}.bui-form-field-bound .mat-mdc-form-field-infix{min-height:48px}.bui-form-field-bound .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.bui-form-field-bound .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:4px}.bui-form-field-bound .mdc-notched-outline--notched .mdc-notched-outline__notch{border-top-width:1px;border-top-style:solid}.bui-form-field-bound .mdc-text-field--focused .mdc-notched-outline--notched .mdc-notched-outline__notch{border-top-width:2px}.bui-form-field-bound .mat-mdc-form-field-icon-prefix>.mat-icon{padding:0 6px 0 12px}.bui-form-field-bound .mat-mdc-form-field-icon-prefix>span,.bui-form-field-bound .mat-mdc-form-field-icon-prefix>div{padding-inline-start:6px}.bui-form-field-bound .mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px 0 6px}.bui-form-field-bound .mat-mdc-form-field-icon-suffix>span,.bui-form-field-bound .mat-mdc-form-field-icon-suffix>div{padding-inline-end:6px}.bui-form-field-detach .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:0;padding-bottom:0}.bui-form-field-detach .mat-mdc-form-field-hint-wrapper,.bui-form-field-detach .mat-mdc-form-field-error-wrapper{padding-inline-start:0}.bui-form-field-detach .mat-mdc-form-field-infix{min-height:40px}.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{border:none!important}.bui-form-field-detach .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:0}.bui-form-field-detach .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-inline-start:0}\n"] }]
32
32
  }] });
@@ -57,10 +57,10 @@ class FormFieldStyleDirective {
57
57
  this._flowDetection = matFormField._shouldAlwaysFloat;
58
58
  this.appearance = config.appearance;
59
59
  }
60
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFieldStyleDirective, deps: [{ token: i1.MatFormField, host: true }, { token: i0.ElementRef }, { token: BUI_FORM_FIELD_CONFIG }], target: i0.ɵɵFactoryTarget.Directive }); }
61
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: FormFieldStyleDirective, isStandalone: false, selector: "bui-form-field, mat-form-field", inputs: { appearance: "appearance" }, host: { classAttribute: "bui-host" }, ngImport: i0 }); }
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormFieldStyleDirective, deps: [{ token: i1.MatFormField, host: true }, { token: i0.ElementRef }, { token: BUI_FORM_FIELD_CONFIG }], target: i0.ɵɵFactoryTarget.Directive }); }
61
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: FormFieldStyleDirective, isStandalone: false, selector: "bui-form-field, mat-form-field", inputs: { appearance: "appearance" }, host: { classAttribute: "bui-host" }, ngImport: i0 }); }
62
62
  }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFieldStyleDirective, decorators: [{
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormFieldStyleDirective, decorators: [{
64
64
  type: Directive,
65
65
  args: [{
66
66
  selector: 'bui-form-field, mat-form-field',
@@ -98,11 +98,11 @@ class FormFieldModule {
98
98
  ]
99
99
  };
100
100
  }
101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
102
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: FormFieldModule, declarations: [FormFieldComponent, FormFieldStyleDirective], imports: [CommonModule, MatFormFieldModule, ObserversModule], exports: [FormFieldComponent, FormFieldStyleDirective, MatFormFieldModule] }); }
103
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFieldModule, imports: [CommonModule, MatFormFieldModule, ObserversModule, MatFormFieldModule] }); }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
102
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: FormFieldModule, declarations: [FormFieldComponent, FormFieldStyleDirective], imports: [CommonModule, MatFormFieldModule, ObserversModule], exports: [FormFieldComponent, FormFieldStyleDirective, MatFormFieldModule] }); }
103
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormFieldModule, imports: [CommonModule, MatFormFieldModule, ObserversModule, MatFormFieldModule] }); }
104
104
  }
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFieldModule, decorators: [{
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormFieldModule, decorators: [{
106
106
  type: NgModule,
107
107
  args: [{
108
108
  declarations: [FormFieldComponent, FormFieldStyleDirective],