@bravura/ui 1.7.2 → 1.10.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 (44) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/behavior/await.directive.d.ts +60 -0
  3. package/behavior/behavior.module.d.ts +5 -2
  4. package/behavior/public-api.d.ts +1 -0
  5. package/behavior/sizing.directive.d.ts +12 -6
  6. package/bundles/bravura-ui-behavior.umd.js +161 -23
  7. package/bundles/bravura-ui-behavior.umd.js.map +1 -1
  8. package/bundles/bravura-ui-discrete-input.umd.js +2 -2
  9. package/bundles/bravura-ui-discrete-input.umd.js.map +1 -1
  10. package/bundles/bravura-ui-form-field.umd.js +2 -2
  11. package/bundles/bravura-ui-form-field.umd.js.map +1 -1
  12. package/bundles/bravura-ui-radio-panel.umd.js +2 -2
  13. package/bundles/bravura-ui-radio-panel.umd.js.map +1 -1
  14. package/bundles/bravura-ui-selection-panel.umd.js +7 -5
  15. package/bundles/bravura-ui-selection-panel.umd.js.map +1 -1
  16. package/bundles/bravura-ui-tooltip.umd.js +2 -1
  17. package/bundles/bravura-ui-tooltip.umd.js.map +1 -1
  18. package/esm2015/behavior/await.directive.js +106 -0
  19. package/esm2015/behavior/behavior.module.js +9 -6
  20. package/esm2015/behavior/public-api.js +2 -1
  21. package/esm2015/behavior/sizing.directive.js +42 -14
  22. package/esm2015/discrete-input/discrete-input.component.js +3 -3
  23. package/esm2015/form-field/form-field.component.js +3 -3
  24. package/esm2015/radio-panel/radio-panel.directive.js +3 -3
  25. package/esm2015/selection-panel/selection-panel-item.component.js +2 -2
  26. package/esm2015/selection-panel/selection-panel.directive.js +4 -3
  27. package/esm2015/selection-panel/selection-panel.module.js +4 -3
  28. package/esm2015/tooltip/tooltip.component.js +3 -2
  29. package/fesm2015/bravura-ui-behavior.js +151 -19
  30. package/fesm2015/bravura-ui-behavior.js.map +1 -1
  31. package/fesm2015/bravura-ui-discrete-input.js +2 -2
  32. package/fesm2015/bravura-ui-discrete-input.js.map +1 -1
  33. package/fesm2015/bravura-ui-form-field.js +2 -2
  34. package/fesm2015/bravura-ui-form-field.js.map +1 -1
  35. package/fesm2015/bravura-ui-radio-panel.js +2 -2
  36. package/fesm2015/bravura-ui-radio-panel.js.map +1 -1
  37. package/fesm2015/bravura-ui-selection-panel.js +7 -5
  38. package/fesm2015/bravura-ui-selection-panel.js.map +1 -1
  39. package/fesm2015/bravura-ui-tooltip.js +2 -1
  40. package/fesm2015/bravura-ui-tooltip.js.map +1 -1
  41. package/package.json +1 -1
  42. package/selection-panel/selection-panel-item.component.d.ts +1 -1
  43. package/selection-panel/selection-panel.module.d.ts +1 -1
  44. package/theme/_ui-theme.scss +39 -11
@@ -1 +1 @@
1
- {"version":3,"file":"bravura-ui-discrete-input.js","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\tFormArray,\n\tFormControl,\n\tFormGroup,\n\tFormGroupDirective,\n\tNgControl,\n\tNgForm,\n\tValidators\n} from '@angular/forms';\nimport { ErrorStateMatcher, mixinErrorState } from '@angular/material/core';\nimport { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\n\n// Boilerplate for applying mixins to form field control for error state checking.\n/** @ignore */\nconst _DiscreteInputBase = mixinErrorState(\n\tclass {\n\t\tconstructor(\n\t\t\t/** @ignore */ public _defaultErrorStateMatcher: ErrorStateMatcher,\n\t\t\t/** @ignore */ public _parentForm: NgForm,\n\t\t\t/** @ignore */ public _parentFormGroup: FormGroupDirective,\n\t\t\t/** @ignore */ public ngControl: NgControl\n\t\t) {}\n\t}\n);\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'\n\t}\n})\nexport class DiscreteInputComponent\n\textends _DiscreteInputBase\n\timplements MatFormFieldControl<string>, ControlValueAccessor, OnDestroy\n{\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: FormArray;\n\t/** @ignore */ group: FormGroup;\n\t/** Emits whenever the component state changes. */\n\tstateChanges: 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\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 FormControl(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\tsuper(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, control);\n\t\tthis.parts = new FormArray([]);\n\t\tthis.group = new FormGroup({ 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): void {\n\t\tlet v = control.value && control.value[0];\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}\n\t}\n\n\t/** @ignore */\n\t_onPaste(event: ClipboardEvent) {\n\t\tlet text = event.clipboardData?.getData('text');\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\t\tevent.preventDefault();\n\t\tthis.onContainerClick();\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\t/** @ignore */\n\tngDoCheck() {\n\t\tif (this.ngControl) {\n\t\t\t// We need to re-evaluate this on every change detection cycle, because there are some\n\t\t\t// error triggers that we can't subscribe to (e.g. parent form submissions). This means\n\t\t\t// that whatever logic is in here has to be super lean or we risk destroying the performance.\n\t\t\tthis.updateErrorState();\n\t\t}\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<ng-template ngFor [ngForOf]=\"parts.controls\" let-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\tsize=\"1\"\n\t\t\t\tmaxLength=\"1\"\n\t\t\t\t[attr.aria-label]=\"'character ' + (i + 1)\"\n\t\t\t\t(input)=\"_handleInput(p, i)\"\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\tautocapitalize=\"none\"\n\t\t\t/>\n\t\t\t<span *ngIf=\"_separatorRequired(i)\" class=\"bui-discrete-input-spacer\">{{ separator }}</span>\n\t\t</ng-template>\n\t</ng-container>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DiscreteInputComponent } from './discrete-input.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { A11yModule } from '@angular/cdk/a11y';\n\n@NgModule({\n\tdeclarations: [DiscreteInputComponent],\n\timports: [CommonModule, MatFormFieldModule, ReactiveFormsModule, A11yModule]\n})\nexport class DiscreteInputModule {}\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.js","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\tFormArray,\n\tFormControl,\n\tFormGroup,\n\tFormGroupDirective,\n\tNgControl,\n\tNgForm,\n\tValidators\n} from '@angular/forms';\nimport { ErrorStateMatcher, mixinErrorState } from '@angular/material/core';\nimport { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\n\n// Boilerplate for applying mixins to form field control for error state checking.\n/** @ignore */\nconst _DiscreteInputBase = mixinErrorState(\n\tclass {\n\t\tconstructor(\n\t\t\t/** @ignore */ public _defaultErrorStateMatcher: ErrorStateMatcher,\n\t\t\t/** @ignore */ public _parentForm: NgForm,\n\t\t\t/** @ignore */ public _parentFormGroup: FormGroupDirective,\n\t\t\t/** @ignore */ public ngControl: NgControl\n\t\t) {}\n\t}\n);\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})\nexport class DiscreteInputComponent\n\textends _DiscreteInputBase\n\timplements MatFormFieldControl<string>, ControlValueAccessor, OnDestroy\n{\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: FormArray;\n\t/** @ignore */ group: FormGroup;\n\t/** Emits whenever the component state changes. */\n\tstateChanges: 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\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 FormControl(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\tsuper(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, control);\n\t\tthis.parts = new FormArray([]);\n\t\tthis.group = new FormGroup({ 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): void {\n\t\tlet v = control.value && control.value[0];\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}\n\t}\n\n\t/** @ignore */\n\t_onPaste(event: ClipboardEvent) {\n\t\tlet text = event.clipboardData?.getData('text');\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\t\tevent.preventDefault();\n\t\tthis.onContainerClick();\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\t/** @ignore */\n\tngDoCheck() {\n\t\tif (this.ngControl) {\n\t\t\t// We need to re-evaluate this on every change detection cycle, because there are some\n\t\t\t// error triggers that we can't subscribe to (e.g. parent form submissions). This means\n\t\t\t// that whatever logic is in here has to be super lean or we risk destroying the performance.\n\t\t\tthis.updateErrorState();\n\t\t}\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<ng-template ngFor [ngForOf]=\"parts.controls\" let-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\tsize=\"1\"\n\t\t\t\tmaxLength=\"1\"\n\t\t\t\t[attr.aria-label]=\"'character ' + (i + 1)\"\n\t\t\t\t(input)=\"_handleInput(p, i)\"\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\tautocapitalize=\"none\"\n\t\t\t/>\n\t\t\t<span *ngIf=\"_separatorRequired(i)\" class=\"bui-discrete-input-spacer\">{{ separator }}</span>\n\t\t</ng-template>\n\t</ng-container>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DiscreteInputComponent } from './discrete-input.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { A11yModule } from '@angular/cdk/a11y';\n\n@NgModule({\n\tdeclarations: [DiscreteInputComponent],\n\timports: [CommonModule, MatFormFieldModule, ReactiveFormsModule, A11yModule]\n})\nexport class DiscreteInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -54,7 +54,7 @@ class FormFieldComponent extends MatFormField {
54
54
  }
55
55
  }
56
56
  FormFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: FormFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
57
- FormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: FormFieldComponent, selector: "bui-form-field", inputs: { color: "color" }, host: { listeners: { "click": "_hostClicked($event)" }, properties: { "class.mat-form-field-appearance-standard": "appearance == \"standard\"", "class.mat-form-field-appearance-fill": "appearance == \"fill\"", "class.mat-form-field-appearance-outline": "appearance == \"outline\"", "class.mat-form-field-appearance-detach": "appearance == \"detach\"", "class.mat-form-field-appearance-bound": "appearance == \"bound\"", "class.mat-form-field-appearance-legacy": "appearance == \"legacy\"", "class.mat-form-field-invalid": "_control.errorState", "class.mat-form-field-can-float": "_canLabelFloat()", "class.mat-form-field-should-float": "_shouldLabelFloat()", "class.mat-form-field-has-label": "_hasFloatingLabel()", "class.mat-form-field-hide-placeholder": "_hideControlPlaceholder()", "class.mat-form-field-disabled": "_control.disabled", "class.mat-form-field-autofilled": "_control.autofilled", "class.mat-focused": "_control.focused", "class.ng-untouched": "_shouldForward(\"untouched\")", "class.ng-touched": "_shouldForward(\"touched\")", "class.ng-pristine": "_shouldForward(\"pristine\")", "class.ng-dirty": "_shouldForward(\"dirty\")", "class.ng-valid": "_shouldForward(\"valid\")", "class.ng-invalid": "_shouldForward(\"invalid\")", "class.ng-pending": "_shouldForward(\"pending\")", "class._mat-animation-noopable": "!_animationsEnabled" }, classAttribute: "mat-form-field bui-form-field" }, providers: [
57
+ FormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: FormFieldComponent, selector: "bui-form-field", inputs: { color: "color" }, host: { listeners: { "click": "_hostClicked($event)" }, properties: { "class.mat-form-field-appearance-standard": "appearance == \"standard\"", "class.mat-form-field-appearance-fill": "appearance == \"fill\"", "class.mat-form-field-appearance-outline": "appearance == \"outline\"", "class.mat-form-field-appearance-detach": "appearance == \"detach\"", "class.mat-form-field-appearance-bound": "appearance == \"bound\"", "class.mat-form-field-appearance-legacy": "appearance == \"legacy\"", "class.mat-form-field-invalid": "_control.errorState", "class.mat-form-field-can-float": "_canLabelFloat()", "class.mat-form-field-should-float": "_shouldLabelFloat()", "class.mat-form-field-has-label": "_hasFloatingLabel()", "class.mat-form-field-hide-placeholder": "_hideControlPlaceholder()", "class.mat-form-field-disabled": "_control.disabled", "class.mat-form-field-autofilled": "_control.autofilled", "class.mat-focused": "_control.focused", "class.ng-untouched": "_shouldForward(\"untouched\")", "class.ng-touched": "_shouldForward(\"touched\")", "class.ng-pristine": "_shouldForward(\"pristine\")", "class.ng-dirty": "_shouldForward(\"dirty\")", "class.ng-valid": "_shouldForward(\"valid\")", "class.ng-invalid": "_shouldForward(\"invalid\")", "class.ng-pending": "_shouldForward(\"pending\")", "class._mat-animation-noopable": "!_animationsEnabled" }, classAttribute: "mat-form-field bui-form-field bui-host" }, providers: [
58
58
  { provide: MAT_FORM_FIELD, useExisting: TYPE_REF },
59
59
  { provide: MatFormField, useExisting: TYPE_REF }
60
60
  ], exportAs: ["buiFormField"], usesInheritance: true, ngImport: i0, template: "<div class=\"mat-form-field-wrapper\">\n\t<div class=\"mat-form-field-flex {{ _borderClass() }}\" #connectionContainer>\n\t\t<!-- Outline used for outline appearance. -->\n\t\t<ng-container *ngIf=\"appearance == 'outline'\">\n\t\t\t<div class=\"mat-form-field-outline\">\n\t\t\t\t<div class=\"mat-form-field-outline-start\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-gap\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-end\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"mat-form-field-outline mat-form-field-outline-thick\">\n\t\t\t\t<div class=\"mat-form-field-outline-start\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-gap\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-end\"></div>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<div class=\"mat-form-field-prefix\" *ngIf=\"_prefixChildren.length\">\n\t\t\t<ng-content select=\"[matPrefix]\"></ng-content>\n\t\t</div>\n\n\t\t<div class=\"{{ _enhancedAppearance() ? 'bui-form-field-infix' : 'mat-form-field-infix' }}\" #inputContainer>\n\t\t\t<ng-content></ng-content>\n\n\t\t\t<span class=\"mat-form-field-label-wrapper\">\n\t\t\t\t<!-- We add aria-owns as a workaround for an issue in JAWS & NVDA where the label isn't\n\t\t\t read if it comes before the control in the DOM. -->\n\t\t\t\t<label\n\t\t\t\t\tclass=\"mat-form-field-label\"\n\t\t\t\t\t(cdkObserveContent)=\"updateOutlineGap()\"\n\t\t\t\t\t[cdkObserveContentDisabled]=\"appearance != 'outline'\"\n\t\t\t\t\t[id]=\"_labelId\"\n\t\t\t\t\t[attr.for]=\"_control.id\"\n\t\t\t\t\t[attr.aria-owns]=\"_control.id\"\n\t\t\t\t\t[class.mat-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n\t\t\t\t\t[class.mat-form-field-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n\t\t\t\t\t[class.mat-accent]=\"color == 'accent'\"\n\t\t\t\t\t[class.mat-warn]=\"color == 'warn'\"\n\t\t\t\t\t#label\n\t\t\t\t\t*ngIf=\"_hasFloatingLabel()\"\n\t\t\t\t\t[ngSwitch]=\"_hasLabel()\"\n\t\t\t\t>\n\t\t\t\t\t<!-- @breaking-change 8.0.0 remove in favor of mat-label element an placeholder attr. -->\n\t\t\t\t\t<ng-container *ngSwitchCase=\"false\">\n\t\t\t\t\t\t<ng-content select=\"mat-placeholder\"></ng-content>\n\t\t\t\t\t\t<span>{{ _control.placeholder }}</span>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t<ng-content select=\"mat-label\" *ngSwitchCase=\"true\"></ng-content>\n\n\t\t\t\t\t<!-- @breaking-change 8.0.0 remove `mat-placeholder-required` class -->\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"mat-placeholder-required mat-form-field-required-marker\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t*ngIf=\"!hideRequiredMarker && _control.required && !_control.disabled\"\n\t\t\t\t\t\t>&#32;*</span\n\t\t\t\t\t>\n\t\t\t\t</label>\n\t\t\t</span>\n\t\t</div>\n\n\t\t<div class=\"mat-form-field-suffix\" *ngIf=\"_suffixChildren.length\">\n\t\t\t<ng-content select=\"[matSuffix]\"></ng-content>\n\t\t</div>\n\t\t<div *ngIf=\"_enhancedAppearance()\" class=\"bui-form-field-right-filler\"></div>\n\t</div>\n\n\t<!-- Underline used for legacy, standard, and box appearances. -->\n\t<div class=\"mat-form-field-underline\" #underline *ngIf=\"appearance != 'outline'\">\n\t\t<span\n\t\t\tclass=\"mat-form-field-ripple\"\n\t\t\t[class.mat-accent]=\"color == 'accent'\"\n\t\t\t[class.mat-warn]=\"color == 'warn'\"\n\t\t></span>\n\t</div>\n\n\t<div class=\"mat-form-field-subscript-wrapper\" [ngSwitch]=\"_getDisplayedMessages()\" (click)=\"$event.stopPropagation()\">\n\t\t<div *ngSwitchCase=\"'error'\" [@transitionMessages]=\"_subscriptAnimationState\">\n\t\t\t<ng-content select=\"mat-error\"></ng-content>\n\t\t</div>\n\n\t\t<div class=\"mat-form-field-hint-wrapper\" *ngSwitchCase=\"'hint'\" [@transitionMessages]=\"_subscriptAnimationState\">\n\t\t\t<!-- TODO(mmalerba): use an actual <mat-hint> once all selectors are switched to mat-* -->\n\t\t\t<div *ngIf=\"hintLabel\" [id]=\"_hintLabelId\" class=\"mat-hint\">{{ hintLabel }}</div>\n\t\t\t<ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n\t\t\t<div class=\"mat-form-field-hint-spacer\"></div>\n\t\t\t<ng-content select=\"mat-hint[align='end']\"></ng-content>\n\t\t</div>\n\t</div>\n</div>\n", styles: [".bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex{padding:.5em;align-items:center;border-radius:4px;border-style:solid}.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex:not(.bui-form-field-border-thick):not(:hover),.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-disabled{border-width:1px;margin:1px}.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex:not(.bui-form-field-border-thick):not(:hover) .bui-form-field-right-filler,.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-disabled .bui-form-field-right-filler{width:2px}.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-disabled{border-color:#80808033;border-style:dotted}.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-default{border-color:#80808066}.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-thick,.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex.bui-border-emphasis:hover{border-width:2px}.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex.bui-form-field-border-thick .bui-form-field-right-filler,.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex.bui-border-emphasis:hover .bui-form-field-right-filler{width:0}.bui-form-field.mat-form-field-appearance-detach,.bui-form-field.mat-form-field-appearance-bound{padding-top:.75em}.bui-form-field.mat-form-field-appearance-detach .mat-form-field-wrapper,.bui-form-field.mat-form-field-appearance-bound .mat-form-field-wrapper{padding-top:.5em}.bui-form-field.mat-form-field-appearance-detach .bui-form-field-infix,.bui-form-field.mat-form-field-appearance-bound .bui-form-field-infix{flex-grow:1}.bui-form-field.mat-form-field-appearance-detach .mat-form-field-label,.bui-form-field.mat-form-field-appearance-bound .mat-form-field-label{font-size:1.125em}.bui-form-field.mat-form-field-appearance-detach .mat-form-field-flex,.bui-form-field.mat-form-field-appearance-bound .mat-form-field-flex{align-items:center}.bui-form-field.mat-form-field-appearance-detach .mat-form-field-flex{padding:.125em 0;align-items:center}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [matFormFieldAnimations.transitionMessages], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
@@ -67,7 +67,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImpor
67
67
  styleUrls: ['./form-field.component.scss'],
68
68
  animations: [matFormFieldAnimations.transitionMessages],
69
69
  host: {
70
- class: 'mat-form-field bui-form-field',
70
+ class: 'mat-form-field bui-form-field bui-host',
71
71
  '[class.mat-form-field-appearance-standard]': 'appearance == "standard"',
72
72
  '[class.mat-form-field-appearance-fill]': 'appearance == "fill"',
73
73
  '[class.mat-form-field-appearance-outline]': 'appearance == "outline"',
@@ -1 +1 @@
1
- {"version":3,"file":"bravura-ui-form-field.js","sources":["../../../projects/ui/form-field/form-field.component.ts","../../../projects/ui/form-field/form-field.component.html","../../../projects/ui/form-field/form-field.module.ts","../../../projects/ui/form-field/bravura-ui-form-field.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, forwardRef, HostListener, ViewEncapsulation } from '@angular/core';\nimport { MatFormField, matFormFieldAnimations, MAT_FORM_FIELD } from '@angular/material/form-field';\n\n/** @ignore */\nconst TYPE_REF = forwardRef(() => FormFieldComponent);\n\n/**\n * Container for form controls that applies Material Design styling and behavior.\n *\n * This component extends Angular Material's [mat-form-field](https://material.angular.io/components/form-field) and provides two additional appearances\n * `bound` and `detach`. `bound` renders the label outside the outlined area of the field, while `detach` remove the borders all together. `detach`\n * is generally used with form controls that render their own borders.\n */\n@Component({\n\tselector: 'bui-form-field',\n\texportAs: 'buiFormField',\n\ttemplateUrl: 'form-field.component.html',\n\tstyleUrls: ['./form-field.component.scss'],\n\tanimations: [matFormFieldAnimations.transitionMessages],\n\thost: {\n\t\tclass: 'mat-form-field bui-form-field',\n\t\t'[class.mat-form-field-appearance-standard]': 'appearance == \"standard\"',\n\t\t'[class.mat-form-field-appearance-fill]': 'appearance == \"fill\"',\n\t\t'[class.mat-form-field-appearance-outline]': 'appearance == \"outline\"',\n\t\t'[class.mat-form-field-appearance-detach]': 'appearance == \"detach\"',\n\t\t'[class.mat-form-field-appearance-bound]': 'appearance == \"bound\"',\n\t\t'[class.mat-form-field-appearance-legacy]': 'appearance == \"legacy\"',\n\t\t'[class.mat-form-field-invalid]': '_control.errorState',\n\t\t'[class.mat-form-field-can-float]': '_canLabelFloat()',\n\t\t'[class.mat-form-field-should-float]': '_shouldLabelFloat()',\n\t\t'[class.mat-form-field-has-label]': '_hasFloatingLabel()',\n\t\t'[class.mat-form-field-hide-placeholder]': '_hideControlPlaceholder()',\n\t\t'[class.mat-form-field-disabled]': '_control.disabled',\n\t\t'[class.mat-form-field-autofilled]': '_control.autofilled',\n\t\t'[class.mat-focused]': '_control.focused',\n\t\t'[class.ng-untouched]': '_shouldForward(\"untouched\")',\n\t\t'[class.ng-touched]': '_shouldForward(\"touched\")',\n\t\t'[class.ng-pristine]': '_shouldForward(\"pristine\")',\n\t\t'[class.ng-dirty]': '_shouldForward(\"dirty\")',\n\t\t'[class.ng-valid]': '_shouldForward(\"valid\")',\n\t\t'[class.ng-invalid]': '_shouldForward(\"invalid\")',\n\t\t'[class.ng-pending]': '_shouldForward(\"pending\")',\n\t\t'[class._mat-animation-noopable]': '!_animationsEnabled'\n\t},\n\tinputs: ['color'],\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{ provide: MAT_FORM_FIELD, useExisting: TYPE_REF },\n\t\t{ provide: MatFormField, useExisting: TYPE_REF }\n\t]\n})\nexport class FormFieldComponent extends MatFormField {\n\t/**\n\t * @ignore\n\t */\n\t_shouldAlwaysFloat(): boolean {\n\t\treturn super._shouldAlwaysFloat() || this._enhancedAppearance();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\t_borderClass(): string {\n\t\tif ((this.appearance as any) !== 'bound') {\n\t\t\treturn 'bui-form-field-flex-default';\n\t\t}\n\t\tif (this._control.disabled) {\n\t\t\treturn 'bui-form-field-border-disabled';\n\t\t} else if (this._control.errorState) {\n\t\t\treturn 'bui-border-warn bui-form-field-border-thick';\n\t\t} else if (this._control.focused) {\n\t\t\treturn `bui-border-${this.color || 'primary'} bui-form-field-border-thick`;\n\t\t} else {\n\t\t\treturn 'bui-form-field-border-default bui-border-emphasis';\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\t_enhancedAppearance() {\n\t\treturn (this.appearance as any) === 'detach' || (this.appearance as any) === 'bound';\n\t}\n\n\t/** @ignore */\n\t@HostListener('click', ['$event'])\n\t_hostClicked(event: MouseEvent) {\n\t\tthis._control.onContainerClick && this._control.onContainerClick(event);\n\t}\n}\n\n(FormFieldComponent as any).ɵcmp.styles.push((MatFormField as any).ɵcmp.styles);\n","<div class=\"mat-form-field-wrapper\">\n\t<div class=\"mat-form-field-flex {{ _borderClass() }}\" #connectionContainer>\n\t\t<!-- Outline used for outline appearance. -->\n\t\t<ng-container *ngIf=\"appearance == 'outline'\">\n\t\t\t<div class=\"mat-form-field-outline\">\n\t\t\t\t<div class=\"mat-form-field-outline-start\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-gap\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-end\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"mat-form-field-outline mat-form-field-outline-thick\">\n\t\t\t\t<div class=\"mat-form-field-outline-start\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-gap\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-end\"></div>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<div class=\"mat-form-field-prefix\" *ngIf=\"_prefixChildren.length\">\n\t\t\t<ng-content select=\"[matPrefix]\"></ng-content>\n\t\t</div>\n\n\t\t<div class=\"{{ _enhancedAppearance() ? 'bui-form-field-infix' : 'mat-form-field-infix' }}\" #inputContainer>\n\t\t\t<ng-content></ng-content>\n\n\t\t\t<span class=\"mat-form-field-label-wrapper\">\n\t\t\t\t<!-- We add aria-owns as a workaround for an issue in JAWS & NVDA where the label isn't\n\t\t\t read if it comes before the control in the DOM. -->\n\t\t\t\t<label\n\t\t\t\t\tclass=\"mat-form-field-label\"\n\t\t\t\t\t(cdkObserveContent)=\"updateOutlineGap()\"\n\t\t\t\t\t[cdkObserveContentDisabled]=\"appearance != 'outline'\"\n\t\t\t\t\t[id]=\"_labelId\"\n\t\t\t\t\t[attr.for]=\"_control.id\"\n\t\t\t\t\t[attr.aria-owns]=\"_control.id\"\n\t\t\t\t\t[class.mat-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n\t\t\t\t\t[class.mat-form-field-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n\t\t\t\t\t[class.mat-accent]=\"color == 'accent'\"\n\t\t\t\t\t[class.mat-warn]=\"color == 'warn'\"\n\t\t\t\t\t#label\n\t\t\t\t\t*ngIf=\"_hasFloatingLabel()\"\n\t\t\t\t\t[ngSwitch]=\"_hasLabel()\"\n\t\t\t\t>\n\t\t\t\t\t<!-- @breaking-change 8.0.0 remove in favor of mat-label element an placeholder attr. -->\n\t\t\t\t\t<ng-container *ngSwitchCase=\"false\">\n\t\t\t\t\t\t<ng-content select=\"mat-placeholder\"></ng-content>\n\t\t\t\t\t\t<span>{{ _control.placeholder }}</span>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t<ng-content select=\"mat-label\" *ngSwitchCase=\"true\"></ng-content>\n\n\t\t\t\t\t<!-- @breaking-change 8.0.0 remove `mat-placeholder-required` class -->\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"mat-placeholder-required mat-form-field-required-marker\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t*ngIf=\"!hideRequiredMarker && _control.required && !_control.disabled\"\n\t\t\t\t\t\t>&#32;*</span\n\t\t\t\t\t>\n\t\t\t\t</label>\n\t\t\t</span>\n\t\t</div>\n\n\t\t<div class=\"mat-form-field-suffix\" *ngIf=\"_suffixChildren.length\">\n\t\t\t<ng-content select=\"[matSuffix]\"></ng-content>\n\t\t</div>\n\t\t<div *ngIf=\"_enhancedAppearance()\" class=\"bui-form-field-right-filler\"></div>\n\t</div>\n\n\t<!-- Underline used for legacy, standard, and box appearances. -->\n\t<div class=\"mat-form-field-underline\" #underline *ngIf=\"appearance != 'outline'\">\n\t\t<span\n\t\t\tclass=\"mat-form-field-ripple\"\n\t\t\t[class.mat-accent]=\"color == 'accent'\"\n\t\t\t[class.mat-warn]=\"color == 'warn'\"\n\t\t></span>\n\t</div>\n\n\t<div class=\"mat-form-field-subscript-wrapper\" [ngSwitch]=\"_getDisplayedMessages()\" (click)=\"$event.stopPropagation()\">\n\t\t<div *ngSwitchCase=\"'error'\" [@transitionMessages]=\"_subscriptAnimationState\">\n\t\t\t<ng-content select=\"mat-error\"></ng-content>\n\t\t</div>\n\n\t\t<div class=\"mat-form-field-hint-wrapper\" *ngSwitchCase=\"'hint'\" [@transitionMessages]=\"_subscriptAnimationState\">\n\t\t\t<!-- TODO(mmalerba): use an actual <mat-hint> once all selectors are switched to mat-* -->\n\t\t\t<div *ngIf=\"hintLabel\" [id]=\"_hintLabelId\" class=\"mat-hint\">{{ hintLabel }}</div>\n\t\t\t<ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n\t\t\t<div class=\"mat-form-field-hint-spacer\"></div>\n\t\t\t<ng-content select=\"mat-hint[align='end']\"></ng-content>\n\t\t</div>\n\t</div>\n</div>\n","import { ObserversModule } from '@angular/cdk/observers';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormFieldComponent } from './form-field.component';\n\n@NgModule({\n\tdeclarations: [FormFieldComponent],\n\timports: [CommonModule, MatFormFieldModule, ObserversModule],\n\texports: [FormFieldComponent, MatFormFieldModule]\n})\nexport class FormFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAGA;AACA,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,kBAAkB,CAAC,CAAC;AAEtD;;;;;;;MA8Ca,kBAAmB,SAAQ,YAAY;;;;IAInD,kBAAkB;QACjB,OAAO,KAAK,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAChE;;;;IAKD,YAAY;QACX,IAAK,IAAI,CAAC,UAAkB,KAAK,OAAO,EAAE;YACzC,OAAO,6BAA6B,CAAC;SACrC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC3B,OAAO,gCAAgC,CAAC;SACxC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACpC,OAAO,6CAA6C,CAAC;SACrD;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACjC,OAAO,cAAc,IAAI,CAAC,KAAK,IAAI,SAAS,8BAA8B,CAAC;SAC3E;aAAM;YACN,OAAO,mDAAmD,CAAC;SAC3D;KACD;;;;IAKD,mBAAmB;QAClB,OAAQ,IAAI,CAAC,UAAkB,KAAK,QAAQ,IAAK,IAAI,CAAC,UAAkB,KAAK,OAAO,CAAC;KACrF;;IAID,YAAY,CAAC,KAAiB;QAC7B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KACxE;;+GArCW,kBAAkB;mGAAlB,kBAAkB,g8CALnB;QACV,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE;QAClD,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE;KAChD,6EClDF,++HAyFA,ipFDvEa,CAAC,sBAAsB,CAAC,kBAAkB,CAAC;2FAkC3C,kBAAkB;kBAvC9B,SAAS;mBAAC;oBACV,QAAQ,EAAE,gBAAgB;oBAC1B,QAAQ,EAAE,cAAc;oBACxB,WAAW,EAAE,2BAA2B;oBACxC,SAAS,EAAE,CAAC,6BAA6B,CAAC;oBAC1C,UAAU,EAAE,CAAC,sBAAsB,CAAC,kBAAkB,CAAC;oBACvD,IAAI,EAAE;wBACL,KAAK,EAAE,+BAA+B;wBACtC,4CAA4C,EAAE,0BAA0B;wBACxE,wCAAwC,EAAE,sBAAsB;wBAChE,2CAA2C,EAAE,yBAAyB;wBACtE,0CAA0C,EAAE,wBAAwB;wBACpE,yCAAyC,EAAE,uBAAuB;wBAClE,0CAA0C,EAAE,wBAAwB;wBACpE,gCAAgC,EAAE,qBAAqB;wBACvD,kCAAkC,EAAE,kBAAkB;wBACtD,qCAAqC,EAAE,qBAAqB;wBAC5D,kCAAkC,EAAE,qBAAqB;wBACzD,yCAAyC,EAAE,2BAA2B;wBACtE,iCAAiC,EAAE,mBAAmB;wBACtD,mCAAmC,EAAE,qBAAqB;wBAC1D,qBAAqB,EAAE,kBAAkB;wBACzC,sBAAsB,EAAE,6BAA6B;wBACrD,oBAAoB,EAAE,2BAA2B;wBACjD,qBAAqB,EAAE,4BAA4B;wBACnD,kBAAkB,EAAE,yBAAyB;wBAC7C,kBAAkB,EAAE,yBAAyB;wBAC7C,oBAAoB,EAAE,2BAA2B;wBACjD,oBAAoB,EAAE,2BAA2B;wBACjD,iCAAiC,EAAE,qBAAqB;qBACxD;oBACD,MAAM,EAAE,CAAC,OAAO,CAAC;oBACjB,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,SAAS,EAAE;wBACV,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE;wBAClD,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE;qBAChD;iBACD;8BAoCA,YAAY;sBADX,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;AAMjC,kBAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAE,YAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;;MEjFlE,eAAe;;4GAAf,eAAe;6GAAf,eAAe,iBAJZ,kBAAkB,aACvB,YAAY,EAAE,kBAAkB,EAAE,eAAe,aACjD,kBAAkB,EAAE,kBAAkB;6GAEpC,eAAe,YAHlB,CAAC,YAAY,EAAE,kBAAkB,EAAE,eAAe,CAAC,EAC9B,kBAAkB;2FAEpC,eAAe;kBAL3B,QAAQ;mBAAC;oBACT,YAAY,EAAE,CAAC,kBAAkB,CAAC;oBAClC,OAAO,EAAE,CAAC,YAAY,EAAE,kBAAkB,EAAE,eAAe,CAAC;oBAC5D,OAAO,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;iBACjD;;;ACVD;;;;;;"}
1
+ {"version":3,"file":"bravura-ui-form-field.js","sources":["../../../projects/ui/form-field/form-field.component.ts","../../../projects/ui/form-field/form-field.component.html","../../../projects/ui/form-field/form-field.module.ts","../../../projects/ui/form-field/bravura-ui-form-field.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, forwardRef, HostListener, ViewEncapsulation } from '@angular/core';\nimport { MatFormField, matFormFieldAnimations, MAT_FORM_FIELD } from '@angular/material/form-field';\n\n/** @ignore */\nconst TYPE_REF = forwardRef(() => FormFieldComponent);\n\n/**\n * Container for form controls that applies Material Design styling and behavior.\n *\n * This component extends Angular Material's [mat-form-field](https://material.angular.io/components/form-field) and provides two additional appearances\n * `bound` and `detach`. `bound` renders the label outside the outlined area of the field, while `detach` remove the borders all together. `detach`\n * is generally used with form controls that render their own borders.\n */\n@Component({\n\tselector: 'bui-form-field',\n\texportAs: 'buiFormField',\n\ttemplateUrl: 'form-field.component.html',\n\tstyleUrls: ['./form-field.component.scss'],\n\tanimations: [matFormFieldAnimations.transitionMessages],\n\thost: {\n\t\tclass: 'mat-form-field bui-form-field bui-host',\n\t\t'[class.mat-form-field-appearance-standard]': 'appearance == \"standard\"',\n\t\t'[class.mat-form-field-appearance-fill]': 'appearance == \"fill\"',\n\t\t'[class.mat-form-field-appearance-outline]': 'appearance == \"outline\"',\n\t\t'[class.mat-form-field-appearance-detach]': 'appearance == \"detach\"',\n\t\t'[class.mat-form-field-appearance-bound]': 'appearance == \"bound\"',\n\t\t'[class.mat-form-field-appearance-legacy]': 'appearance == \"legacy\"',\n\t\t'[class.mat-form-field-invalid]': '_control.errorState',\n\t\t'[class.mat-form-field-can-float]': '_canLabelFloat()',\n\t\t'[class.mat-form-field-should-float]': '_shouldLabelFloat()',\n\t\t'[class.mat-form-field-has-label]': '_hasFloatingLabel()',\n\t\t'[class.mat-form-field-hide-placeholder]': '_hideControlPlaceholder()',\n\t\t'[class.mat-form-field-disabled]': '_control.disabled',\n\t\t'[class.mat-form-field-autofilled]': '_control.autofilled',\n\t\t'[class.mat-focused]': '_control.focused',\n\t\t'[class.ng-untouched]': '_shouldForward(\"untouched\")',\n\t\t'[class.ng-touched]': '_shouldForward(\"touched\")',\n\t\t'[class.ng-pristine]': '_shouldForward(\"pristine\")',\n\t\t'[class.ng-dirty]': '_shouldForward(\"dirty\")',\n\t\t'[class.ng-valid]': '_shouldForward(\"valid\")',\n\t\t'[class.ng-invalid]': '_shouldForward(\"invalid\")',\n\t\t'[class.ng-pending]': '_shouldForward(\"pending\")',\n\t\t'[class._mat-animation-noopable]': '!_animationsEnabled'\n\t},\n\tinputs: ['color'],\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{ provide: MAT_FORM_FIELD, useExisting: TYPE_REF },\n\t\t{ provide: MatFormField, useExisting: TYPE_REF }\n\t]\n})\nexport class FormFieldComponent extends MatFormField {\n\t/**\n\t * @ignore\n\t */\n\t_shouldAlwaysFloat(): boolean {\n\t\treturn super._shouldAlwaysFloat() || this._enhancedAppearance();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\t_borderClass(): string {\n\t\tif ((this.appearance as any) !== 'bound') {\n\t\t\treturn 'bui-form-field-flex-default';\n\t\t}\n\t\tif (this._control.disabled) {\n\t\t\treturn 'bui-form-field-border-disabled';\n\t\t} else if (this._control.errorState) {\n\t\t\treturn 'bui-border-warn bui-form-field-border-thick';\n\t\t} else if (this._control.focused) {\n\t\t\treturn `bui-border-${this.color || 'primary'} bui-form-field-border-thick`;\n\t\t} else {\n\t\t\treturn 'bui-form-field-border-default bui-border-emphasis';\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\t_enhancedAppearance() {\n\t\treturn (this.appearance as any) === 'detach' || (this.appearance as any) === 'bound';\n\t}\n\n\t/** @ignore */\n\t@HostListener('click', ['$event'])\n\t_hostClicked(event: MouseEvent) {\n\t\tthis._control.onContainerClick && this._control.onContainerClick(event);\n\t}\n}\n\n(FormFieldComponent as any).ɵcmp.styles.push((MatFormField as any).ɵcmp.styles);\n","<div class=\"mat-form-field-wrapper\">\n\t<div class=\"mat-form-field-flex {{ _borderClass() }}\" #connectionContainer>\n\t\t<!-- Outline used for outline appearance. -->\n\t\t<ng-container *ngIf=\"appearance == 'outline'\">\n\t\t\t<div class=\"mat-form-field-outline\">\n\t\t\t\t<div class=\"mat-form-field-outline-start\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-gap\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-end\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"mat-form-field-outline mat-form-field-outline-thick\">\n\t\t\t\t<div class=\"mat-form-field-outline-start\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-gap\"></div>\n\t\t\t\t<div class=\"mat-form-field-outline-end\"></div>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<div class=\"mat-form-field-prefix\" *ngIf=\"_prefixChildren.length\">\n\t\t\t<ng-content select=\"[matPrefix]\"></ng-content>\n\t\t</div>\n\n\t\t<div class=\"{{ _enhancedAppearance() ? 'bui-form-field-infix' : 'mat-form-field-infix' }}\" #inputContainer>\n\t\t\t<ng-content></ng-content>\n\n\t\t\t<span class=\"mat-form-field-label-wrapper\">\n\t\t\t\t<!-- We add aria-owns as a workaround for an issue in JAWS & NVDA where the label isn't\n\t\t\t read if it comes before the control in the DOM. -->\n\t\t\t\t<label\n\t\t\t\t\tclass=\"mat-form-field-label\"\n\t\t\t\t\t(cdkObserveContent)=\"updateOutlineGap()\"\n\t\t\t\t\t[cdkObserveContentDisabled]=\"appearance != 'outline'\"\n\t\t\t\t\t[id]=\"_labelId\"\n\t\t\t\t\t[attr.for]=\"_control.id\"\n\t\t\t\t\t[attr.aria-owns]=\"_control.id\"\n\t\t\t\t\t[class.mat-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n\t\t\t\t\t[class.mat-form-field-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n\t\t\t\t\t[class.mat-accent]=\"color == 'accent'\"\n\t\t\t\t\t[class.mat-warn]=\"color == 'warn'\"\n\t\t\t\t\t#label\n\t\t\t\t\t*ngIf=\"_hasFloatingLabel()\"\n\t\t\t\t\t[ngSwitch]=\"_hasLabel()\"\n\t\t\t\t>\n\t\t\t\t\t<!-- @breaking-change 8.0.0 remove in favor of mat-label element an placeholder attr. -->\n\t\t\t\t\t<ng-container *ngSwitchCase=\"false\">\n\t\t\t\t\t\t<ng-content select=\"mat-placeholder\"></ng-content>\n\t\t\t\t\t\t<span>{{ _control.placeholder }}</span>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t<ng-content select=\"mat-label\" *ngSwitchCase=\"true\"></ng-content>\n\n\t\t\t\t\t<!-- @breaking-change 8.0.0 remove `mat-placeholder-required` class -->\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"mat-placeholder-required mat-form-field-required-marker\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t*ngIf=\"!hideRequiredMarker && _control.required && !_control.disabled\"\n\t\t\t\t\t\t>&#32;*</span\n\t\t\t\t\t>\n\t\t\t\t</label>\n\t\t\t</span>\n\t\t</div>\n\n\t\t<div class=\"mat-form-field-suffix\" *ngIf=\"_suffixChildren.length\">\n\t\t\t<ng-content select=\"[matSuffix]\"></ng-content>\n\t\t</div>\n\t\t<div *ngIf=\"_enhancedAppearance()\" class=\"bui-form-field-right-filler\"></div>\n\t</div>\n\n\t<!-- Underline used for legacy, standard, and box appearances. -->\n\t<div class=\"mat-form-field-underline\" #underline *ngIf=\"appearance != 'outline'\">\n\t\t<span\n\t\t\tclass=\"mat-form-field-ripple\"\n\t\t\t[class.mat-accent]=\"color == 'accent'\"\n\t\t\t[class.mat-warn]=\"color == 'warn'\"\n\t\t></span>\n\t</div>\n\n\t<div class=\"mat-form-field-subscript-wrapper\" [ngSwitch]=\"_getDisplayedMessages()\" (click)=\"$event.stopPropagation()\">\n\t\t<div *ngSwitchCase=\"'error'\" [@transitionMessages]=\"_subscriptAnimationState\">\n\t\t\t<ng-content select=\"mat-error\"></ng-content>\n\t\t</div>\n\n\t\t<div class=\"mat-form-field-hint-wrapper\" *ngSwitchCase=\"'hint'\" [@transitionMessages]=\"_subscriptAnimationState\">\n\t\t\t<!-- TODO(mmalerba): use an actual <mat-hint> once all selectors are switched to mat-* -->\n\t\t\t<div *ngIf=\"hintLabel\" [id]=\"_hintLabelId\" class=\"mat-hint\">{{ hintLabel }}</div>\n\t\t\t<ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n\t\t\t<div class=\"mat-form-field-hint-spacer\"></div>\n\t\t\t<ng-content select=\"mat-hint[align='end']\"></ng-content>\n\t\t</div>\n\t</div>\n</div>\n","import { ObserversModule } from '@angular/cdk/observers';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormFieldComponent } from './form-field.component';\n\n@NgModule({\n\tdeclarations: [FormFieldComponent],\n\timports: [CommonModule, MatFormFieldModule, ObserversModule],\n\texports: [FormFieldComponent, MatFormFieldModule]\n})\nexport class FormFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -100,7 +100,7 @@ class RadioPanelDirective extends MatRadioGroup {
100
100
  }
101
101
  }
102
102
  RadioPanelDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: RadioPanelDirective, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
103
- RadioPanelDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.7", type: RadioPanelDirective, selector: "bui-radio-panel", inputs: { color: "color" }, host: { attributes: { "role": "radiogroup" }, classAttribute: "bui-radio-panel" }, providers: [
103
+ RadioPanelDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.7", type: RadioPanelDirective, selector: "bui-radio-panel", inputs: { color: "color" }, host: { attributes: { "role": "radiogroup" }, classAttribute: "bui-radio-panel bui-host" }, providers: [
104
104
  {
105
105
  provide: NG_VALUE_ACCESSOR,
106
106
  useExisting: forwardRef(() => RadioPanelDirective),
@@ -125,7 +125,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImpor
125
125
  // tslint:disable-next-line: no-host-metadata-property
126
126
  host: {
127
127
  role: 'radiogroup',
128
- class: 'bui-radio-panel'
128
+ class: 'bui-radio-panel bui-host'
129
129
  }
130
130
  }]
131
131
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { color: [{
@@ -1 +1 @@
1
- {"version":3,"file":"bravura-ui-radio-panel.js","sources":["../../../projects/ui/radio-panel/radio-panel-item.component.ts","../../../projects/ui/radio-panel/radio-panel-item.component.html","../../../projects/ui/radio-panel/radio-panel.directive.ts","../../../projects/ui/radio-panel/radio-panel.module.ts","../../../projects/ui/radio-panel/bravura-ui-radio-panel.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport {\n\tAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tInject,\n\tInput,\n\tOptional\n} from '@angular/core';\nimport {\n\tMatRadioButton,\n\tMatRadioDefaultOptions,\n\tMatRadioGroup,\n\tMAT_RADIO_DEFAULT_OPTIONS,\n\tMAT_RADIO_GROUP\n} from '@angular/material/radio';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * Use `bui-radio-panel-item` instead of `mat-radio-button` in a `bui-radio-panel` to display an option.\n */\n@Component({\n\tselector: 'bui-radio-panel-item',\n\ttemplateUrl: './radio-panel-item.component.html',\n\tstyleUrls: ['./radio-panel-item.component.scss'],\n\t// tslint:disable-next-line: no-inputs-metadata-property\n\tinputs: ['disableRipple', 'tabIndex'],\n\texportAs: 'matRadioButton',\n\t// tslint:disable-next-line: no-host-metadata-property\n\thost: {\n\t\tclass: 'bui-radio-panel-item',\n\t\t'[class.bui-radio-checked]': 'checked',\n\t\t'[class.bui-disabled]': 'disabled',\n\t\t'[class._mat-animation-noopable]': '_noopAnimations',\n\t\t'[class.mat-primary]': 'color === \"primary\"',\n\t\t'[class.mat-accent]': 'color === \"accent\"',\n\t\t'[class.mat-warn]': 'color === \"warn\"',\n\t\t// Needs to be removed since it causes some a11y issues (see #21266).\n\t\t'[attr.tabindex]': 'null',\n\t\t'[attr.id]': 'id',\n\t\t'[attr.aria-label]': 'null',\n\t\t'[attr.aria-labelledby]': 'null',\n\t\t'[attr.aria-describedby]': 'null',\n\t\t// Note: under normal conditions focus shouldn't land on this element, however it may be\n\t\t// programmatically set, for example inside of a focus trap, in this case we want to forward\n\t\t// the focus to the native element.\n\t\t'(focus)': '_inputElement.nativeElement.focus()'\n\t},\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RadioPanelItemComponent extends MatRadioButton {\n\t/**\n\t * This will be displayed as the panel header\n\t */\n\t@Input()\n\ttitle = '';\n\n\tconstructor(\n\t\t@Optional() @Inject(MAT_RADIO_GROUP) radioGroup: MatRadioGroup,\n\t\telementRef: ElementRef,\n\t\t_changeDetector: ChangeDetectorRef,\n\t\t_focusMonitor: FocusMonitor,\n\t\t_radioDispatcher: UniqueSelectionDispatcher,\n\t\t@Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode?: string,\n\t\t@Optional()\n\t\t@Inject(MAT_RADIO_DEFAULT_OPTIONS)\n\t\t_providerOverride?: MatRadioDefaultOptions,\n\t\t@Attribute('tabindex') tabIndex?: string\n\t) {\n\t\tsuper(\n\t\t\tradioGroup,\n\t\t\telementRef,\n\t\t\t_changeDetector,\n\t\t\t_focusMonitor,\n\t\t\t_radioDispatcher,\n\t\t\tanimationMode,\n\t\t\t_providerOverride,\n\t\t\ttabIndex\n\t\t);\n\t}\n}\n","<label [attr.for]=\"inputId\" #label class=\"bui-radio-panel-item-label bui-border-{{ checked ? color : 'default' }}\">\n\t<div class=\"bui-radio-panel-item-wrapper\">\n\t\t<div matRipple matRippleColor=\"rgba(128,128,128,.1)\" class=\"bui-ripple\" *ngIf=\"!disabled\"></div>\n\t\t<div class=\"bui-label-header\">\n\t\t\t<span class=\"bui-label-title\" [innerHTML]=\"title\"></span>\n\t\t\t<span class=\"bui-radio-panel-item-circle\">\n\t\t\t\t<span class=\"bui-persistent-ripple\"></span>\n\t\t\t\t<mat-icon [color]=\"color\" *ngIf=\"checked\">check_circle</mat-icon>\n\t\t\t\t<mat-icon *ngIf=\"!checked\" class=\"bui-radio-panel-item-circle-unchecked\">radio_button_unchecked</mat-icon>\n\t\t\t</span>\n\t\t</div>\n\t\t<!-- The actual 'radio' part of the control. -->\n\t\t<span class=\"radio-container\">\n\t\t\t<input\n\t\t\t\t#input\n\t\t\t\tclass=\"mat-radio-input cdk-visually-hidden\"\n\t\t\t\ttype=\"radio\"\n\t\t\t\t[id]=\"inputId\"\n\t\t\t\t[checked]=\"checked\"\n\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t[tabIndex]=\"tabIndex\"\n\t\t\t\t[attr.name]=\"name\"\n\t\t\t\t[attr.value]=\"value\"\n\t\t\t\t[required]=\"required\"\n\t\t\t\t[attr.aria-label]=\"ariaLabel\"\n\t\t\t\t[attr.aria-labelledby]=\"ariaLabelledby\"\n\t\t\t\t[attr.aria-describedby]=\"ariaDescribedby\"\n\t\t\t\t(change)=\"_onInputInteraction($event)\"\n\t\t\t\t(click)=\"_onInputClick($event)\"\n\t\t\t/>\n\t\t</span>\n\n\t\t<div class=\"bui-label-content-gap\"></div>\n\t\t<!-- The label content for radio control. -->\n\t\t<div class=\"bui-label-content\">\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</label>\n","import {\n\tChangeDetectorRef,\n\tContentChildren,\n\tDirective,\n\tforwardRef,\n\tInput,\n\tOnChanges,\n\tQueryList,\n\tSimpleChanges\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatRadioGroup, MAT_RADIO_GROUP } from '@angular/material/radio';\nimport { RadioPanelItemComponent } from './radio-panel-item.component';\n/**\n * Radio panel is a [control value accessor](https://angular.io/api/forms/ControlValueAccessor)\n * that extends Angular Material's [radio group component](https://material.angular.io/components/radio/overview).\n * It inherits all the features of `MatRadioGroup`, and arranges the child items in panels,\n * with the `title` attributes rendered as captions. The check box icon and the borders will be displayed\n * in the color selected by the theme attribute `color`.\n *\n */\n@Directive({\n\t// tslint:disable-next-line: directive-selector\n\tselector: 'bui-radio-panel',\n\texportAs: 'buiRadioPanel',\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => RadioPanelDirective),\n\t\t\tmulti: true\n\t\t},\n\t\t{ provide: MAT_RADIO_GROUP, useExisting: forwardRef(() => RadioPanelDirective) }\n\t],\n\t// tslint:disable-next-line: no-host-metadata-property\n\thost: {\n\t\trole: 'radiogroup',\n\t\tclass: 'bui-radio-panel'\n\t}\n})\nexport class RadioPanelDirective extends MatRadioGroup implements OnChanges {\n\t/** Theme color for all of the radio panels in the group. */\n\t@Input() color: ThemePalette;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChildren(RadioPanelItemComponent, { descendants: true })\n\t_radios!: QueryList<RadioPanelItemComponent>;\n\n\tconstructor(cd: ChangeDetectorRef) {\n\t\tsuper(cd);\n\t}\n\n\t/** @ignore */\n\tngOnChanges(changes: SimpleChanges): void {\n\t\tif (changes.color && this._radios) {\n\t\t\tthis._radios.forEach(item => item._markForCheck());\n\t\t}\n\t}\n}\n","import { RadioPanelItemComponent } from './radio-panel-item.component';\nimport { RadioPanelDirective } from './radio-panel.directive';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n/**\n * Import this NgModule for the radio panel component\n */\n@NgModule({\n\tdeclarations: [RadioPanelItemComponent, RadioPanelDirective],\n\timports: [CommonModule, MatRadioModule, MatRippleModule, MatIconModule],\n\texports: [RadioPanelItemComponent, RadioPanelDirective]\n})\nexport class RadioPanelModule {}\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-radio-panel.js","sources":["../../../projects/ui/radio-panel/radio-panel-item.component.ts","../../../projects/ui/radio-panel/radio-panel-item.component.html","../../../projects/ui/radio-panel/radio-panel.directive.ts","../../../projects/ui/radio-panel/radio-panel.module.ts","../../../projects/ui/radio-panel/bravura-ui-radio-panel.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport {\n\tAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tInject,\n\tInput,\n\tOptional\n} from '@angular/core';\nimport {\n\tMatRadioButton,\n\tMatRadioDefaultOptions,\n\tMatRadioGroup,\n\tMAT_RADIO_DEFAULT_OPTIONS,\n\tMAT_RADIO_GROUP\n} from '@angular/material/radio';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * Use `bui-radio-panel-item` instead of `mat-radio-button` in a `bui-radio-panel` to display an option.\n */\n@Component({\n\tselector: 'bui-radio-panel-item',\n\ttemplateUrl: './radio-panel-item.component.html',\n\tstyleUrls: ['./radio-panel-item.component.scss'],\n\t// tslint:disable-next-line: no-inputs-metadata-property\n\tinputs: ['disableRipple', 'tabIndex'],\n\texportAs: 'matRadioButton',\n\t// tslint:disable-next-line: no-host-metadata-property\n\thost: {\n\t\tclass: 'bui-radio-panel-item',\n\t\t'[class.bui-radio-checked]': 'checked',\n\t\t'[class.bui-disabled]': 'disabled',\n\t\t'[class._mat-animation-noopable]': '_noopAnimations',\n\t\t'[class.mat-primary]': 'color === \"primary\"',\n\t\t'[class.mat-accent]': 'color === \"accent\"',\n\t\t'[class.mat-warn]': 'color === \"warn\"',\n\t\t// Needs to be removed since it causes some a11y issues (see #21266).\n\t\t'[attr.tabindex]': 'null',\n\t\t'[attr.id]': 'id',\n\t\t'[attr.aria-label]': 'null',\n\t\t'[attr.aria-labelledby]': 'null',\n\t\t'[attr.aria-describedby]': 'null',\n\t\t// Note: under normal conditions focus shouldn't land on this element, however it may be\n\t\t// programmatically set, for example inside of a focus trap, in this case we want to forward\n\t\t// the focus to the native element.\n\t\t'(focus)': '_inputElement.nativeElement.focus()'\n\t},\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RadioPanelItemComponent extends MatRadioButton {\n\t/**\n\t * This will be displayed as the panel header\n\t */\n\t@Input()\n\ttitle = '';\n\n\tconstructor(\n\t\t@Optional() @Inject(MAT_RADIO_GROUP) radioGroup: MatRadioGroup,\n\t\telementRef: ElementRef,\n\t\t_changeDetector: ChangeDetectorRef,\n\t\t_focusMonitor: FocusMonitor,\n\t\t_radioDispatcher: UniqueSelectionDispatcher,\n\t\t@Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode?: string,\n\t\t@Optional()\n\t\t@Inject(MAT_RADIO_DEFAULT_OPTIONS)\n\t\t_providerOverride?: MatRadioDefaultOptions,\n\t\t@Attribute('tabindex') tabIndex?: string\n\t) {\n\t\tsuper(\n\t\t\tradioGroup,\n\t\t\telementRef,\n\t\t\t_changeDetector,\n\t\t\t_focusMonitor,\n\t\t\t_radioDispatcher,\n\t\t\tanimationMode,\n\t\t\t_providerOverride,\n\t\t\ttabIndex\n\t\t);\n\t}\n}\n","<label [attr.for]=\"inputId\" #label class=\"bui-radio-panel-item-label bui-border-{{ checked ? color : 'default' }}\">\n\t<div class=\"bui-radio-panel-item-wrapper\">\n\t\t<div matRipple matRippleColor=\"rgba(128,128,128,.1)\" class=\"bui-ripple\" *ngIf=\"!disabled\"></div>\n\t\t<div class=\"bui-label-header\">\n\t\t\t<span class=\"bui-label-title\" [innerHTML]=\"title\"></span>\n\t\t\t<span class=\"bui-radio-panel-item-circle\">\n\t\t\t\t<span class=\"bui-persistent-ripple\"></span>\n\t\t\t\t<mat-icon [color]=\"color\" *ngIf=\"checked\">check_circle</mat-icon>\n\t\t\t\t<mat-icon *ngIf=\"!checked\" class=\"bui-radio-panel-item-circle-unchecked\">radio_button_unchecked</mat-icon>\n\t\t\t</span>\n\t\t</div>\n\t\t<!-- The actual 'radio' part of the control. -->\n\t\t<span class=\"radio-container\">\n\t\t\t<input\n\t\t\t\t#input\n\t\t\t\tclass=\"mat-radio-input cdk-visually-hidden\"\n\t\t\t\ttype=\"radio\"\n\t\t\t\t[id]=\"inputId\"\n\t\t\t\t[checked]=\"checked\"\n\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t[tabIndex]=\"tabIndex\"\n\t\t\t\t[attr.name]=\"name\"\n\t\t\t\t[attr.value]=\"value\"\n\t\t\t\t[required]=\"required\"\n\t\t\t\t[attr.aria-label]=\"ariaLabel\"\n\t\t\t\t[attr.aria-labelledby]=\"ariaLabelledby\"\n\t\t\t\t[attr.aria-describedby]=\"ariaDescribedby\"\n\t\t\t\t(change)=\"_onInputInteraction($event)\"\n\t\t\t\t(click)=\"_onInputClick($event)\"\n\t\t\t/>\n\t\t</span>\n\n\t\t<div class=\"bui-label-content-gap\"></div>\n\t\t<!-- The label content for radio control. -->\n\t\t<div class=\"bui-label-content\">\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</label>\n","import {\n\tChangeDetectorRef,\n\tContentChildren,\n\tDirective,\n\tforwardRef,\n\tInput,\n\tOnChanges,\n\tQueryList,\n\tSimpleChanges\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatRadioGroup, MAT_RADIO_GROUP } from '@angular/material/radio';\nimport { RadioPanelItemComponent } from './radio-panel-item.component';\n/**\n * Radio panel is a [control value accessor](https://angular.io/api/forms/ControlValueAccessor)\n * that extends Angular Material's [radio group component](https://material.angular.io/components/radio/overview).\n * It inherits all the features of `MatRadioGroup`, and arranges the child items in panels,\n * with the `title` attributes rendered as captions. The check box icon and the borders will be displayed\n * in the color selected by the theme attribute `color`.\n *\n */\n@Directive({\n\t// tslint:disable-next-line: directive-selector\n\tselector: 'bui-radio-panel',\n\texportAs: 'buiRadioPanel',\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => RadioPanelDirective),\n\t\t\tmulti: true\n\t\t},\n\t\t{ provide: MAT_RADIO_GROUP, useExisting: forwardRef(() => RadioPanelDirective) }\n\t],\n\t// tslint:disable-next-line: no-host-metadata-property\n\thost: {\n\t\trole: 'radiogroup',\n\t\tclass: 'bui-radio-panel bui-host'\n\t}\n})\nexport class RadioPanelDirective extends MatRadioGroup implements OnChanges {\n\t/** Theme color for all of the radio panels in the group. */\n\t@Input() color: ThemePalette;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChildren(RadioPanelItemComponent, { descendants: true })\n\t_radios!: QueryList<RadioPanelItemComponent>;\n\n\tconstructor(cd: ChangeDetectorRef) {\n\t\tsuper(cd);\n\t}\n\n\t/** @ignore */\n\tngOnChanges(changes: SimpleChanges): void {\n\t\tif (changes.color && this._radios) {\n\t\t\tthis._radios.forEach(item => item._markForCheck());\n\t\t}\n\t}\n}\n","import { RadioPanelItemComponent } from './radio-panel-item.component';\nimport { RadioPanelDirective } from './radio-panel.directive';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n/**\n * Import this NgModule for the radio panel component\n */\n@NgModule({\n\tdeclarations: [RadioPanelItemComponent, RadioPanelDirective],\n\timports: [CommonModule, MatRadioModule, MatRippleModule, MatIconModule],\n\texports: [RadioPanelItemComponent, RadioPanelDirective]\n})\nexport class RadioPanelModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAqBA;;;MAgCa,uBAAwB,SAAQ,cAAc;IAO1D,YACsC,UAAyB,EAC9D,UAAsB,EACtB,eAAkC,EAClC,aAA2B,EAC3B,gBAA2C,EACA,aAAsB,EAGjE,iBAA0C,EACnB,QAAiB;QAExC,KAAK,CACJ,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,QAAQ,CACR,CAAC;;;;QAvBH,UAAK,GAAG,EAAE,CAAC;KAwBV;;oHA7BW,uBAAuB,kBAQd,eAAe,6JAKf,qBAAqB,6BAEjC,yBAAyB,6BAEtB,UAAU;wGAjBV,uBAAuB,wsBCrDpC,qkDAuCA;2FDca,uBAAuB;kBA7BnC,SAAS;mBAAC;oBACV,QAAQ,EAAE,sBAAsB;oBAChC,WAAW,EAAE,mCAAmC;oBAChD,SAAS,EAAE,CAAC,mCAAmC,CAAC;;oBAEhD,MAAM,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC;oBACrC,QAAQ,EAAE,gBAAgB;;oBAE1B,IAAI,EAAE;wBACL,KAAK,EAAE,sBAAsB;wBAC7B,2BAA2B,EAAE,SAAS;wBACtC,sBAAsB,EAAE,UAAU;wBAClC,iCAAiC,EAAE,iBAAiB;wBACpD,qBAAqB,EAAE,qBAAqB;wBAC5C,oBAAoB,EAAE,oBAAoB;wBAC1C,kBAAkB,EAAE,kBAAkB;;wBAEtC,iBAAiB,EAAE,MAAM;wBACzB,WAAW,EAAE,IAAI;wBACjB,mBAAmB,EAAE,MAAM;wBAC3B,wBAAwB,EAAE,MAAM;wBAChC,yBAAyB,EAAE,MAAM;;;;wBAIjC,SAAS,EAAE,qCAAqC;qBAChD;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAC/C;;0BASE,QAAQ;;0BAAI,MAAM;2BAAC,eAAe;;0BAKlC,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB;;0BACxC,QAAQ;;0BACR,MAAM;2BAAC,yBAAyB;;0BAEhC,SAAS;2BAAC,UAAU;4CAZtB,KAAK;sBADJ,KAAK;;;AE3CP;;;;;;;;MA0Ba,mBAAoB,SAAQ,aAAa;IAUrD,YAAY,EAAqB;QAChC,KAAK,CAAC,EAAE,CAAC,CAAC;KACV;;IAGD,WAAW,CAAC,OAAsB;QACjC,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;SACnD;KACD;;gHAnBW,mBAAmB;oGAAnB,mBAAmB,kKAdpB;QACV;YACC,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;YAClD,KAAK,EAAE,IAAI;SACX;QACD,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE;KAChF,kDAcgB,uBAAuB;2FAP5B,mBAAmB;kBAlB/B,SAAS;mBAAC;;oBAEV,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE,eAAe;oBACzB,SAAS,EAAE;wBACV;4BACC,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;4BAClD,KAAK,EAAE,IAAI;yBACX;wBACD,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC,EAAE;qBAChF;;oBAED,IAAI,EAAE;wBACL,IAAI,EAAE,YAAY;wBAClB,KAAK,EAAE,0BAA0B;qBACjC;iBACD;wGAGS,KAAK;sBAAb,KAAK;gBAMN,OAAO;sBADN,eAAe;uBAAC,uBAAuB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;;ACvChE;;;MAQa,gBAAgB;;6GAAhB,gBAAgB;8GAAhB,gBAAgB,iBAJb,uBAAuB,EAAE,mBAAmB,aACjD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,aAC5D,uBAAuB,EAAE,mBAAmB;8GAE1C,gBAAgB,YAHnB,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,CAAC;2FAG3D,gBAAgB;kBAL5B,QAAQ;mBAAC;oBACT,YAAY,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,CAAC;oBAC5D,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,CAAC;oBACvE,OAAO,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,CAAC;iBACvD;;;ACfD;;;;;;"}
@@ -111,7 +111,7 @@ class SelectionPanelItemComponent {
111
111
  }
112
112
  }
113
113
  SelectionPanelItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SelectionPanelItemComponent, deps: [{ token: SELECTION_PANEL_GROUP }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
114
- SelectionPanelItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: SelectionPanelItemComponent, selector: "bui-selection-panel-item", inputs: { title: "title", disabled: "disabled", value: "value", checked: "checked", color: "color" }, host: { properties: { "class.bui-selection-checked": "checked", "class.bui-border-accent": "checked && color ==='accent'", "class.bui-border-primary": "checked && color ==='primary'", "class.bui-border-warn": "checked && color ==='warn'", "class.bui-disabled": "disabled" }, classAttribute: "bui-selection-panel-item" }, viewQueries: [{ propertyName: "_ripple", first: true, predicate: MatRipple, descendants: true }], ngImport: i0, template: "<div class=\"bui-selection-panel-item-wrapper\">\n\t<div\n\t\tmatRipple\n\t\tmatRippleColor=\"rgba(128,128,128,.1)\"\n\t\tclass=\"bui-ripple\"\n\t\t*ngIf=\"!disabled\"\n\t\t[matRippleTrigger]=\"toggleTrigger\"\n\t\t#ripple=\"matRipple\"\n\t></div>\n\t<div class=\"bui-selection-panel-item-header\" #toggleTrigger>\n\t\t<mat-checkbox [(ngModel)]=\"checked\" [color]=\"color\" [disabled]=\"disabled\" (change)=\"_markInteracted()\">\n\t\t\t<div class=\"bui-selection-panel-item-title\" [innerHTML]=\"title\"></div>\n\t\t</mat-checkbox>\n\t</div>\n\n\t<div\n\t\tclass=\"bui-selection-panel-item-content\"\n\t\t[class.bui-selectable]=\"!_selectByHeader\"\n\t\t(click)=\"_contentClicked($event)\"\n\t>\n\t\t<ng-content></ng-content>\n\t</div>\n\t<div class=\"bui-selection-panel-item-bottom\"></div>\n</div>\n", styles: [":host{position:relative;border-radius:5px;border:1px solid rgba(128,128,128,.2);padding:1px}:host .bui-selection-panel-item-wrapper{padding-left:1rem;padding-right:1rem}:host .bui-ripple{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}:host .bui-selection-panel-item-header{margin-top:calc(1rem - 4px);margin-bottom:calc(1rem - 4px)}:host .bui-selection-panel-item-title{font-size:larger;font-weight:bold;white-space:normal;margin-top:2px}:host .bui-selection-panel-item-content{margin-top:1rem;margin-bottom:1rem}:host(:not(:first-child)){margin-top:1rem}:host(:not([hidden])){display:block}:host(:not(.bui-disabled)):hover{border-width:2px;padding:0;border-color:#8080804d}:host(:not(.bui-disabled)) .bui-selection-panel-item-content.bui-selectable{cursor:pointer}\n"], components: [{ type: i1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleRadius", "matRippleDisabled", "matRippleTrigger", "matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleAnimation"], exportAs: ["matRipple"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
114
+ SelectionPanelItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: SelectionPanelItemComponent, selector: "bui-selection-panel-item", inputs: { title: "title", disabled: "disabled", value: "value", checked: "checked", color: "color" }, host: { properties: { "class.bui-selection-checked": "checked", "class.bui-border-accent": "checked && color ==='accent'", "class.bui-border-primary": "checked && color ==='primary'", "class.bui-border-warn": "checked && color ==='warn'", "class.bui-disabled": "disabled" }, classAttribute: "bui-selection-panel-item" }, viewQueries: [{ propertyName: "_ripple", first: true, predicate: MatRipple, descendants: true }], ngImport: i0, template: "<div class=\"bui-selection-panel-item-wrapper\">\n\t<div\n\t\tmatRipple\n\t\tmatRippleColor=\"rgba(128,128,128,.1)\"\n\t\tclass=\"bui-ripple\"\n\t\t*ngIf=\"!disabled\"\n\t\t[matRippleTrigger]=\"toggleTrigger\"\n\t\t#ripple=\"matRipple\"\n\t></div>\n\t<div class=\"bui-selection-panel-item-header\" #toggleTrigger>\n\t\t<mat-checkbox\n\t\t\t[(ngModel)]=\"checked\"\n\t\t\t[color]=\"color\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t(change)=\"_markInteracted()\"\n\t\t\tstyle=\"flex-grow: 1\"\n\t\t>\n\t\t\t<div class=\"bui-selection-panel-item-title\" [innerHTML]=\"title\"></div>\n\t\t</mat-checkbox>\n\t\t<ng-content select=\"[buiSelectionItemHeadingEnd]\"></ng-content>\n\t</div>\n\n\t<div\n\t\tclass=\"bui-selection-panel-item-content\"\n\t\t[class.bui-selectable]=\"!_selectByHeader\"\n\t\t(click)=\"_contentClicked($event)\"\n\t>\n\t\t<ng-content></ng-content>\n\t</div>\n\t<div class=\"bui-selection-panel-item-bottom\"></div>\n</div>\n", styles: [":host{position:relative;border-radius:5px;border:1px solid rgba(128,128,128,.2);padding:1px}:host .bui-selection-panel-item-wrapper{padding-left:1rem;padding-right:1rem}:host .bui-ripple{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}:host .bui-selection-panel-item-header{margin-top:calc(1rem - 4px);margin-bottom:calc(1rem - 4px);display:flex;align-items:center}:host .bui-selection-panel-item-title{font-size:larger;font-weight:bold;white-space:normal;margin-top:2px}:host .bui-selection-panel-item-content{margin-top:1rem;margin-bottom:1rem}:host(:not(:first-child)){margin-top:1rem}:host(:not([hidden])){display:block}:host(:not(.bui-disabled)):hover{border-width:2px;padding:0;border-color:#8080804d}:host(:not(.bui-disabled)) .bui-selection-panel-item-content.bui-selectable{cursor:pointer}\n"], components: [{ type: i1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleRadius", "matRippleDisabled", "matRippleTrigger", "matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleAnimation"], exportAs: ["matRipple"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
115
115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SelectionPanelItemComponent, decorators: [{
116
116
  type: Component,
117
117
  args: [{
@@ -236,7 +236,7 @@ class SelectionPanelDirective {
236
236
  }
237
237
  }
238
238
  SelectionPanelDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SelectionPanelDirective, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
239
- SelectionPanelDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.7", type: SelectionPanelDirective, selector: "bui-selection-panel", inputs: { color: "color", selectByHeader: "selectByHeader" }, providers: [
239
+ SelectionPanelDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.7", type: SelectionPanelDirective, selector: "bui-selection-panel", inputs: { color: "color", selectByHeader: "selectByHeader" }, host: { classAttribute: "bui-selection-panel bui-host" }, providers: [
240
240
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectionPanelDirective), multi: true },
241
241
  { provide: SELECTION_PANEL_GROUP, useExisting: forwardRef(() => SelectionPanelDirective) }
242
242
  ], queries: [{ propertyName: "_items", predicate: SelectionPanelItemComponent, descendants: true }], exportAs: ["buiSelectionPanel"], usesOnChanges: true, ngImport: i0 });
@@ -248,7 +248,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImpor
248
248
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectionPanelDirective), multi: true },
249
249
  { provide: SELECTION_PANEL_GROUP, useExisting: forwardRef(() => SelectionPanelDirective) }
250
250
  ],
251
- exportAs: 'buiSelectionPanel'
251
+ exportAs: 'buiSelectionPanel',
252
+ host: { class: 'bui-selection-panel bui-host' }
252
253
  }]
253
254
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { color: [{
254
255
  type: Input
@@ -262,13 +263,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImpor
262
263
  class SelectionPanelModule {
263
264
  }
264
265
  SelectionPanelModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SelectionPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
265
- SelectionPanelModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SelectionPanelModule, declarations: [SelectionPanelDirective, SelectionPanelItemComponent], imports: [CommonModule, MatCheckboxModule, FormsModule, MatRippleModule] });
266
+ SelectionPanelModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SelectionPanelModule, declarations: [SelectionPanelDirective, SelectionPanelItemComponent], imports: [CommonModule, MatCheckboxModule, FormsModule, MatRippleModule], exports: [SelectionPanelDirective, SelectionPanelItemComponent] });
266
267
  SelectionPanelModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SelectionPanelModule, imports: [[CommonModule, MatCheckboxModule, FormsModule, MatRippleModule]] });
267
268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SelectionPanelModule, decorators: [{
268
269
  type: NgModule,
269
270
  args: [{
270
271
  declarations: [SelectionPanelDirective, SelectionPanelItemComponent],
271
- imports: [CommonModule, MatCheckboxModule, FormsModule, MatRippleModule]
272
+ imports: [CommonModule, MatCheckboxModule, FormsModule, MatRippleModule],
273
+ exports: [SelectionPanelDirective, SelectionPanelItemComponent]
272
274
  }]
273
275
  }] });
274
276
 
@@ -1 +1 @@
1
- {"version":3,"file":"bravura-ui-selection-panel.js","sources":["../../../projects/ui/selection-panel/selection-panel-item.component.ts","../../../projects/ui/selection-panel/selection-panel-item.component.html","../../../projects/ui/selection-panel/selection-panel.directive.ts","../../../projects/ui/selection-panel/selection-panel.module.ts","../../../projects/ui/selection-panel/bravura-ui-selection-panel.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tInject,\n\tInjectionToken,\n\tInput,\n\tViewChild\n} from '@angular/core';\nimport { MatRipple, ThemePalette } from '@angular/material/core';\n\n/**\n * @ignore\n */\nexport interface SelectionPanelItemGroup {\n\t_selection: any[];\n\tcolor: ThemePalette;\n\t_isDisabled: boolean;\n\t_onTouched: () => void;\n\tselectByHeader: boolean;\n}\n\n/**\n * @ignore\n */\nexport const SELECTION_PANEL_GROUP = new InjectionToken<SelectionPanelItemGroup>('SelectionPanelItemGroup');\n\n/**\n * Use `bui-selection-panel-item` within a `bui-selection-panel` to display an option.\n */\n@Component({\n\tselector: 'bui-selection-panel-item',\n\ttemplateUrl: './selection-panel-item.component.html',\n\tstyleUrls: ['./selection-panel-item.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'bui-selection-panel-item',\n\t\t'[class.bui-selection-checked]': 'checked',\n\t\t'[class.bui-border-accent]': `checked && color ==='accent'`,\n\t\t'[class.bui-border-primary]': `checked && color ==='primary'`,\n\t\t'[class.bui-border-warn]': `checked && color ==='warn'`,\n\t\t'[class.bui-disabled]': 'disabled'\n\t}\n})\nexport class SelectionPanelItemComponent {\n\t/** @ignore */\n\tstatic ngAcceptInputType_disabled: boolean | string;\n\n\t/** @ignore */\n\tstatic ngAcceptInputType_checked: boolean | string;\n\n\t/**\n\t * This will be displayed as the panel header\n\t */\n\t@Input()\n\ttitle = '';\n\n\t/** Whether the option is disabled. */\n\t@Input()\n\tget disabled(): boolean {\n\t\treturn this._disabled || this._group._isDisabled;\n\t}\n\tset disabled(value: boolean) {\n\t\tthis._setDisabled(coerceBooleanProperty(value));\n\t}\n\n\t/** The value of this option. */\n\t@Input()\n\tget value(): any {\n\t\treturn this._value;\n\t}\n\tset value(value: any) {\n\t\tif (this._value !== value) {\n\t\t\tthis._value = value;\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n\n\t/** Whether this option is checked. */\n\t@Input()\n\tget checked(): boolean {\n\t\treturn this._group._selection.includes(this.value);\n\t}\n\tset checked(value: boolean) {\n\t\tif (!this._group._onTouched) {\n\t\t\tsetTimeout(() => this._setChecked(value), 0);\n\t\t} else {\n\t\t\tthis._setChecked(value);\n\t\t}\n\t}\n\n\t/** Theme color of the radio button. */\n\t@Input()\n\tget color(): ThemePalette {\n\t\treturn this._color || this._group.color;\n\t}\n\tset color(newValue: ThemePalette) {\n\t\tthis._color = newValue;\n\t}\n\n\tget _selectByHeader(): boolean {\n\t\treturn this._group.selectByHeader;\n\t}\n\n\tprivate _color: ThemePalette;\n\tprivate _disabled = false;\n\tprivate _value: any;\n\n\t@ViewChild(MatRipple)\n\tprivate _ripple?: MatRipple;\n\n\tconstructor(@Inject(SELECTION_PANEL_GROUP) private _group: SelectionPanelItemGroup, private _cd: ChangeDetectorRef) {}\n\n\t/** @ignore */\n\t_markInteracted() {\n\t\tthis._group._onTouched();\n\t}\n\n\t/** @ignore */\n\t_notify() {\n\t\tthis._cd.markForCheck();\n\t}\n\n\t/** Toggle selection programmatically */\n\ttoggle() {\n\t\tthis.checked = !this.checked;\n\t}\n\n\t/** @ignore */\n\t_contentClicked(event: MouseEvent) {\n\t\tif (!this._selectByHeader) {\n\t\t\tthis._ripple?.launch(event.clientX, event.clientY);\n\t\t\tthis.toggle();\n\t\t}\n\t}\n\n\t/** Sets the disabled state and marks for check if a change occurred. */\n\tprivate _setDisabled(value: boolean) {\n\t\tif (this._disabled !== value) {\n\t\t\tthis._disabled = value;\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n\n\tprivate _setChecked(value: boolean) {\n\t\tconst newCheckedState = coerceBooleanProperty(value);\n\t\tconst old = this._group._selection.includes(this.value);\n\t\tif (old !== newCheckedState) {\n\t\t\tconst contained = this._group._selection.some(v => v === this._value);\n\t\t\tif (newCheckedState && this._group && !contained) {\n\t\t\t\tthis._group._selection = [...this._group._selection, this._value];\n\t\t\t} else if (!newCheckedState && this._group && contained) {\n\t\t\t\t// When unchecking the selected item, update the selection\n\t\t\t\t// property on the group.\n\t\t\t\tthis._group._selection = this._group._selection.filter(v => v !== this._value);\n\t\t\t}\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n}\n","<div class=\"bui-selection-panel-item-wrapper\">\n\t<div\n\t\tmatRipple\n\t\tmatRippleColor=\"rgba(128,128,128,.1)\"\n\t\tclass=\"bui-ripple\"\n\t\t*ngIf=\"!disabled\"\n\t\t[matRippleTrigger]=\"toggleTrigger\"\n\t\t#ripple=\"matRipple\"\n\t></div>\n\t<div class=\"bui-selection-panel-item-header\" #toggleTrigger>\n\t\t<mat-checkbox [(ngModel)]=\"checked\" [color]=\"color\" [disabled]=\"disabled\" (change)=\"_markInteracted()\">\n\t\t\t<div class=\"bui-selection-panel-item-title\" [innerHTML]=\"title\"></div>\n\t\t</mat-checkbox>\n\t</div>\n\n\t<div\n\t\tclass=\"bui-selection-panel-item-content\"\n\t\t[class.bui-selectable]=\"!_selectByHeader\"\n\t\t(click)=\"_contentClicked($event)\"\n\t>\n\t\t<ng-content></ng-content>\n\t</div>\n\t<div class=\"bui-selection-panel-item-bottom\"></div>\n</div>\n","import {\n\tChangeDetectorRef,\n\tContentChildren,\n\tDirective,\n\tforwardRef,\n\tInput,\n\tOnChanges,\n\tQueryList,\n\tSimpleChanges\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport {\n\tSelectionPanelItemComponent,\n\tSelectionPanelItemGroup,\n\tSELECTION_PANEL_GROUP\n} from './selection-panel-item.component';\n\n/**\n * Selection panel is a [control value accessor](https://angular.io/api/forms/ControlValueAccessor)\n * that display a set of multi-selection items as bordered panels, in a similar fashion as Radio Panel `bui-radio-panel`.\n *\n * Accessibility features are not yet fully implemented.\n *\n * Example:\n *\n * ```html\n * <bui-selection-panel>\n * <bui-selection-panel-item *ngFor=\"let obj of objects\" [value]=\"obj\">{{obj.description}}</bui-selection-panel-item>\n * </bui-selection-panel>\n * ```\n *\n */\n@Directive({\n\tselector: 'bui-selection-panel',\n\tproviders: [\n\t\t{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectionPanelDirective), multi: true },\n\t\t{ provide: SELECTION_PANEL_GROUP, useExisting: forwardRef(() => SelectionPanelDirective) }\n\t],\n\texportAs: 'buiSelectionPanel'\n})\nexport class SelectionPanelDirective implements ControlValueAccessor, SelectionPanelItemGroup, OnChanges {\n\t/** Theme color for all of the selection checkboxes in the group. */\n\t@Input() color: ThemePalette;\n\n\t/**\n\t * When set to `false`, the selection is triggered by click everywhere within the panels that is\n\t * not focus-trapping; otherwise, only clicking on the header will activate the selection.\n\t *\n\t * @default true\n\t */\n\t@Input() selectByHeader = true;\n\n\t/**\n\t * @ignore\n\t * The selected values. Used by the child elements to modify the group's value\n\t */\n\tget _selection(): any[] {\n\t\treturn this._selected;\n\t}\n\tset _selection(value: any[]) {\n\t\tif (value !== this._selected) {\n\t\t\tthis._selected = value;\n\t\t\tthis._onChange(this._selected);\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_onTouched!: () => void;\n\n\t/** @ignore */\n\t_isDisabled = false;\n\n\tprivate _onChange!: (_: any) => void;\n\n\tprivate _selected: any[] = [];\n\n\t@ContentChildren(SelectionPanelItemComponent, { descendants: true })\n\tprivate _items!: QueryList<SelectionPanelItemComponent>;\n\n\tconstructor(private _cd: ChangeDetectorRef) {}\n\n\t/**\n\t * @ignore\n\t */\n\twriteValue(obj: any): void {\n\t\tthis._selected = [];\n\t\tif (Array.isArray(obj)) {\n\t\t\tthis._selected.push(...obj);\n\t\t} else if (obj !== null && obj !== undefined) {\n\t\t\tthis._selected.push(obj);\n\t\t}\n\t\tthis._items?.forEach(it => it._notify());\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tregisterOnChange(fn: (_: any) => void): void {\n\t\tthis._onChange = fn;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\t/**\n\t * Sets the disabled state and marks for check if a change occurred.\n\t * @ignore\n\t */\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tif (this._isDisabled !== isDisabled) {\n\t\t\tthis._isDisabled = isDisabled;\n\t\t\tthis._cd.markForCheck();\n\t\t\tthis._items.forEach(it => it._notify());\n\t\t}\n\t}\n\n\t/** @ignore */\n\tngOnChanges(changes: SimpleChanges): void {\n\t\tif (this._items) {\n\t\t\tif (changes.color || changes.selectByHeader) {\n\t\t\t\tthis._items.forEach(item => item._notify());\n\t\t\t}\n\t\t}\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SelectionPanelDirective } from './selection-panel.directive';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { SelectionPanelItemComponent } from './selection-panel-item.component';\nimport { FormsModule } from '@angular/forms';\nimport { MatRippleModule } from '@angular/material/core';\n\n@NgModule({\n\tdeclarations: [SelectionPanelDirective, SelectionPanelItemComponent],\n\timports: [CommonModule, MatCheckboxModule, FormsModule, MatRippleModule]\n})\nexport class SelectionPanelModule {}\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-selection-panel.js","sources":["../../../projects/ui/selection-panel/selection-panel-item.component.ts","../../../projects/ui/selection-panel/selection-panel-item.component.html","../../../projects/ui/selection-panel/selection-panel.directive.ts","../../../projects/ui/selection-panel/selection-panel.module.ts","../../../projects/ui/selection-panel/bravura-ui-selection-panel.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tInject,\n\tInjectionToken,\n\tInput,\n\tViewChild\n} from '@angular/core';\nimport { MatRipple, ThemePalette } from '@angular/material/core';\n\n/**\n * @ignore\n */\nexport interface SelectionPanelItemGroup {\n\t_selection: any[];\n\tcolor: ThemePalette;\n\t_isDisabled: boolean;\n\t_onTouched: () => void;\n\tselectByHeader: boolean;\n}\n\n/**\n * @ignore\n */\nexport const SELECTION_PANEL_GROUP = new InjectionToken<SelectionPanelItemGroup>('SelectionPanelItemGroup');\n\n/**\n * Use `bui-selection-panel-item` within a `bui-selection-panel` to display an option.\n */\n@Component({\n\tselector: 'bui-selection-panel-item',\n\ttemplateUrl: './selection-panel-item.component.html',\n\tstyleUrls: ['./selection-panel-item.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'bui-selection-panel-item',\n\t\t'[class.bui-selection-checked]': 'checked',\n\t\t'[class.bui-border-accent]': `checked && color ==='accent'`,\n\t\t'[class.bui-border-primary]': `checked && color ==='primary'`,\n\t\t'[class.bui-border-warn]': `checked && color ==='warn'`,\n\t\t'[class.bui-disabled]': 'disabled'\n\t}\n})\nexport class SelectionPanelItemComponent {\n\t/** @ignore */\n\tstatic ngAcceptInputType_disabled: boolean | string;\n\n\t/** @ignore */\n\tstatic ngAcceptInputType_checked: boolean | string;\n\n\t/**\n\t * This will be displayed as the panel header\n\t */\n\t@Input()\n\ttitle = '';\n\n\t/** Whether the option is disabled. */\n\t@Input()\n\tget disabled(): boolean {\n\t\treturn this._disabled || this._group._isDisabled;\n\t}\n\tset disabled(value: boolean) {\n\t\tthis._setDisabled(coerceBooleanProperty(value));\n\t}\n\n\t/** The value of this option. */\n\t@Input()\n\tget value(): any {\n\t\treturn this._value;\n\t}\n\tset value(value: any) {\n\t\tif (this._value !== value) {\n\t\t\tthis._value = value;\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n\n\t/** Whether this option is checked. */\n\t@Input()\n\tget checked(): boolean {\n\t\treturn this._group._selection.includes(this.value);\n\t}\n\tset checked(value: boolean) {\n\t\tif (!this._group._onTouched) {\n\t\t\tsetTimeout(() => this._setChecked(value), 0);\n\t\t} else {\n\t\t\tthis._setChecked(value);\n\t\t}\n\t}\n\n\t/** Theme color of the radio button. */\n\t@Input()\n\tget color(): ThemePalette {\n\t\treturn this._color || this._group.color;\n\t}\n\tset color(newValue: ThemePalette) {\n\t\tthis._color = newValue;\n\t}\n\n\tget _selectByHeader(): boolean {\n\t\treturn this._group.selectByHeader;\n\t}\n\n\tprivate _color: ThemePalette;\n\tprivate _disabled = false;\n\tprivate _value: any;\n\n\t@ViewChild(MatRipple)\n\tprivate _ripple?: MatRipple;\n\n\tconstructor(@Inject(SELECTION_PANEL_GROUP) private _group: SelectionPanelItemGroup, private _cd: ChangeDetectorRef) {}\n\n\t/** @ignore */\n\t_markInteracted() {\n\t\tthis._group._onTouched();\n\t}\n\n\t/** @ignore */\n\t_notify() {\n\t\tthis._cd.markForCheck();\n\t}\n\n\t/** Toggle selection programmatically */\n\ttoggle() {\n\t\tthis.checked = !this.checked;\n\t}\n\n\t/** @ignore */\n\t_contentClicked(event: MouseEvent) {\n\t\tif (!this._selectByHeader) {\n\t\t\tthis._ripple?.launch(event.clientX, event.clientY);\n\t\t\tthis.toggle();\n\t\t}\n\t}\n\n\t/** Sets the disabled state and marks for check if a change occurred. */\n\tprivate _setDisabled(value: boolean) {\n\t\tif (this._disabled !== value) {\n\t\t\tthis._disabled = value;\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n\n\tprivate _setChecked(value: boolean) {\n\t\tconst newCheckedState = coerceBooleanProperty(value);\n\t\tconst old = this._group._selection.includes(this.value);\n\t\tif (old !== newCheckedState) {\n\t\t\tconst contained = this._group._selection.some(v => v === this._value);\n\t\t\tif (newCheckedState && this._group && !contained) {\n\t\t\t\tthis._group._selection = [...this._group._selection, this._value];\n\t\t\t} else if (!newCheckedState && this._group && contained) {\n\t\t\t\t// When unchecking the selected item, update the selection\n\t\t\t\t// property on the group.\n\t\t\t\tthis._group._selection = this._group._selection.filter(v => v !== this._value);\n\t\t\t}\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n}\n","<div class=\"bui-selection-panel-item-wrapper\">\n\t<div\n\t\tmatRipple\n\t\tmatRippleColor=\"rgba(128,128,128,.1)\"\n\t\tclass=\"bui-ripple\"\n\t\t*ngIf=\"!disabled\"\n\t\t[matRippleTrigger]=\"toggleTrigger\"\n\t\t#ripple=\"matRipple\"\n\t></div>\n\t<div class=\"bui-selection-panel-item-header\" #toggleTrigger>\n\t\t<mat-checkbox\n\t\t\t[(ngModel)]=\"checked\"\n\t\t\t[color]=\"color\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t(change)=\"_markInteracted()\"\n\t\t\tstyle=\"flex-grow: 1\"\n\t\t>\n\t\t\t<div class=\"bui-selection-panel-item-title\" [innerHTML]=\"title\"></div>\n\t\t</mat-checkbox>\n\t\t<ng-content select=\"[buiSelectionItemHeadingEnd]\"></ng-content>\n\t</div>\n\n\t<div\n\t\tclass=\"bui-selection-panel-item-content\"\n\t\t[class.bui-selectable]=\"!_selectByHeader\"\n\t\t(click)=\"_contentClicked($event)\"\n\t>\n\t\t<ng-content></ng-content>\n\t</div>\n\t<div class=\"bui-selection-panel-item-bottom\"></div>\n</div>\n","import {\n\tChangeDetectorRef,\n\tContentChildren,\n\tDirective,\n\tforwardRef,\n\tInput,\n\tOnChanges,\n\tQueryList,\n\tSimpleChanges\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport {\n\tSelectionPanelItemComponent,\n\tSelectionPanelItemGroup,\n\tSELECTION_PANEL_GROUP\n} from './selection-panel-item.component';\n\n/**\n * Selection panel is a [control value accessor](https://angular.io/api/forms/ControlValueAccessor)\n * that display a set of multi-selection items as bordered panels, in a similar fashion as Radio Panel `bui-radio-panel`.\n *\n * Accessibility features are not yet fully implemented.\n *\n * Example:\n *\n * ```html\n * <bui-selection-panel>\n * <bui-selection-panel-item *ngFor=\"let obj of objects\" [value]=\"obj\">{{obj.description}}</bui-selection-panel-item>\n * </bui-selection-panel>\n * ```\n *\n */\n@Directive({\n\tselector: 'bui-selection-panel',\n\tproviders: [\n\t\t{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectionPanelDirective), multi: true },\n\t\t{ provide: SELECTION_PANEL_GROUP, useExisting: forwardRef(() => SelectionPanelDirective) }\n\t],\n\texportAs: 'buiSelectionPanel',\n\thost: { class: 'bui-selection-panel bui-host' }\n})\nexport class SelectionPanelDirective implements ControlValueAccessor, SelectionPanelItemGroup, OnChanges {\n\t/** Theme color for all of the selection checkboxes in the group. */\n\t@Input() color: ThemePalette;\n\n\t/**\n\t * When set to `false`, the selection is triggered by click everywhere within the panels that is\n\t * not focus-trapping; otherwise, only clicking on the header will activate the selection.\n\t *\n\t * @default true\n\t */\n\t@Input() selectByHeader = true;\n\n\t/**\n\t * @ignore\n\t * The selected values. Used by the child elements to modify the group's value\n\t */\n\tget _selection(): any[] {\n\t\treturn this._selected;\n\t}\n\tset _selection(value: any[]) {\n\t\tif (value !== this._selected) {\n\t\t\tthis._selected = value;\n\t\t\tthis._onChange(this._selected);\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n\n\t/** @ignore */\n\t_onTouched!: () => void;\n\n\t/** @ignore */\n\t_isDisabled = false;\n\n\tprivate _onChange!: (_: any) => void;\n\n\tprivate _selected: any[] = [];\n\n\t@ContentChildren(SelectionPanelItemComponent, { descendants: true })\n\tprivate _items!: QueryList<SelectionPanelItemComponent>;\n\n\tconstructor(private _cd: ChangeDetectorRef) {}\n\n\t/**\n\t * @ignore\n\t */\n\twriteValue(obj: any): void {\n\t\tthis._selected = [];\n\t\tif (Array.isArray(obj)) {\n\t\t\tthis._selected.push(...obj);\n\t\t} else if (obj !== null && obj !== undefined) {\n\t\t\tthis._selected.push(obj);\n\t\t}\n\t\tthis._items?.forEach(it => it._notify());\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tregisterOnChange(fn: (_: any) => void): void {\n\t\tthis._onChange = fn;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\t/**\n\t * Sets the disabled state and marks for check if a change occurred.\n\t * @ignore\n\t */\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tif (this._isDisabled !== isDisabled) {\n\t\t\tthis._isDisabled = isDisabled;\n\t\t\tthis._cd.markForCheck();\n\t\t\tthis._items.forEach(it => it._notify());\n\t\t}\n\t}\n\n\t/** @ignore */\n\tngOnChanges(changes: SimpleChanges): void {\n\t\tif (this._items) {\n\t\t\tif (changes.color || changes.selectByHeader) {\n\t\t\t\tthis._items.forEach(item => item._notify());\n\t\t\t}\n\t\t}\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SelectionPanelDirective } from './selection-panel.directive';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { SelectionPanelItemComponent } from './selection-panel-item.component';\nimport { FormsModule } from '@angular/forms';\nimport { MatRippleModule } from '@angular/material/core';\n\n@NgModule({\n\tdeclarations: [SelectionPanelDirective, SelectionPanelItemComponent],\n\timports: [CommonModule, MatCheckboxModule, FormsModule, MatRippleModule],\n\texports: [SelectionPanelDirective, SelectionPanelItemComponent]\n})\nexport class SelectionPanelModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ class TooltipComponent extends TooltipComponent$1 {
32
32
  }
33
33
  }
34
34
  TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: TooltipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.BreakpointObserver }, { token: BUI_TOOLTIP_TEMPLATE_REF }], target: i0.ɵɵFactoryTarget.Component });
35
- TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: TooltipComponent, selector: "bui-tooltip-component", host: { attributes: { "aria-hidden": "true" }, listeners: { "body:click": "this._handleBodyInteraction()", "body:auxclick": "this._handleBodyInteraction()" }, properties: { "style.zoom": "_visibility === \"visible\" ? 1 : null" } }, viewQueries: [{ propertyName: "tooltipDiv", first: true, predicate: ["tooltipDiv"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div\n\tclass=\"mat-tooltip bui-tooltip\"\n\t[ngClass]=\"tooltipClass\"\n\t[class.mat-tooltip-handset]=\"(_isHandset | async)?.matches\"\n\t[@state]=\"_visibility\"\n\t(@state.start)=\"_animationStart()\"\n\t(@state.done)=\"_animationDone($event)\"\n>\n\t<ng-template [ngIf]=\"_tooltip.template\">\n\t\t<ng-template [ngTemplateOutlet]=\"_tooltip.template\"></ng-template>\n\t</ng-template>\n\t<div #tooltipDiv></div>\n</div>\n", styles: [".bui-tooltip.mat-tooltip{max-width:100vw;font-size:inherit}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i2.AsyncPipe }, animations: [matTooltipAnimations.tooltipState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
35
+ TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: TooltipComponent, selector: "bui-tooltip-component", host: { attributes: { "aria-hidden": "true" }, listeners: { "body:click": "this._handleBodyInteraction()", "body:auxclick": "this._handleBodyInteraction()" }, properties: { "style.zoom": "_visibility === \"visible\" ? 1 : null" }, classAttribute: "bui-tooltip-component bui-host" }, viewQueries: [{ propertyName: "tooltipDiv", first: true, predicate: ["tooltipDiv"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div\n\tclass=\"mat-tooltip bui-tooltip\"\n\t[ngClass]=\"tooltipClass\"\n\t[class.mat-tooltip-handset]=\"(_isHandset | async)?.matches\"\n\t[@state]=\"_visibility\"\n\t(@state.start)=\"_animationStart()\"\n\t(@state.done)=\"_animationDone($event)\"\n>\n\t<ng-template [ngIf]=\"_tooltip.template\">\n\t\t<ng-template [ngTemplateOutlet]=\"_tooltip.template\"></ng-template>\n\t</ng-template>\n\t<div #tooltipDiv></div>\n</div>\n", styles: [".bui-tooltip.mat-tooltip{max-width:100vw;font-size:inherit}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i2.AsyncPipe }, animations: [matTooltipAnimations.tooltipState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
36
36
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: TooltipComponent, decorators: [{
37
37
  type: Component,
38
38
  args: [{
@@ -43,6 +43,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImpor
43
43
  changeDetection: ChangeDetectionStrategy.OnPush,
44
44
  animations: [matTooltipAnimations.tooltipState],
45
45
  host: {
46
+ class: 'bui-tooltip-component bui-host',
46
47
  // Forces the element to have a layout in IE and Edge. This fixes issues where the element
47
48
  // won't be rendered if the animations are disabled or there is no web animations polyfill.
48
49
  '[style.zoom]': '_visibility === "visible" ? 1 : null',
@@ -1 +1 @@
1
- {"version":3,"file":"bravura-ui-tooltip.js","sources":["../../../projects/ui/tooltip/tooltip.component.ts","../../../projects/ui/tooltip/tooltip.component.html","../../../projects/ui/tooltip/tooltip.directive.ts","../../../projects/ui/tooltip/tooltip.module.ts","../../../projects/ui/tooltip/bravura-ui-tooltip.ts"],"sourcesContent":["import { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tInject,\n\tInjectionToken,\n\tTemplateRef,\n\tViewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { matTooltipAnimations, TooltipComponent as MatTooltipComponent } from '@angular/material/tooltip';\n\n/**\n * @ignore\n */\ninterface TooltipTemplateContainer {\n\ttemplate?: TemplateRef<any>;\n}\n\n/**\n * @ignore\n */\nexport const BUI_TOOLTIP_TEMPLATE_REF = new InjectionToken<TooltipTemplateContainer>(\n\t'@bravura/ui/tooltip/templateContainer'\n);\n\n@Component({\n\tselector: 'bui-tooltip-component',\n\ttemplateUrl: './tooltip.component.html',\n\tstyleUrls: ['./tooltip.component.scss'],\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tanimations: [matTooltipAnimations.tooltipState],\n\thost: {\n\t\t// Forces the element to have a layout in IE and Edge. This fixes issues where the element\n\t\t// won't be rendered if the animations are disabled or there is no web animations polyfill.\n\t\t'[style.zoom]': '_visibility === \"visible\" ? 1 : null',\n\t\t'(body:click)': 'this._handleBodyInteraction()',\n\t\t'(body:auxclick)': 'this._handleBodyInteraction()',\n\t\t'aria-hidden': 'true'\n\t}\n})\nexport class TooltipComponent extends MatTooltipComponent {\n\tprivate _messageCopy = '';\n\n\t@ViewChild('tooltipDiv', { static: true })\n\tprivate tooltipDiv!: ElementRef<HTMLDivElement>;\n\n\tconstructor(\n\t\tchangeDetectorRef: ChangeDetectorRef,\n\t\t_breakpointObserver: BreakpointObserver,\n\t\t@Inject(BUI_TOOLTIP_TEMPLATE_REF) public _tooltip: TooltipTemplateContainer\n\t) {\n\t\tsuper(changeDetectorRef, _breakpointObserver);\n\t}\n\n\tshow(delay: number): void {\n\t\tif (this._messageCopy !== this.message && !this._tooltip.template) {\n\t\t\tthis.tooltipDiv.nativeElement.innerHTML = this.message;\n\t\t\tthis._messageCopy = this.message;\n\t\t}\n\t\tsuper.show(delay);\n\t}\n}\n\n(TooltipComponent as any).ɵcmp.styles.push((MatTooltipComponent as any).ɵcmp.styles);\n","<div\n\tclass=\"mat-tooltip bui-tooltip\"\n\t[ngClass]=\"tooltipClass\"\n\t[class.mat-tooltip-handset]=\"(_isHandset | async)?.matches\"\n\t[@state]=\"_visibility\"\n\t(@state.start)=\"_animationStart()\"\n\t(@state.done)=\"_animationDone($event)\"\n>\n\t<ng-template [ngIf]=\"_tooltip.template\">\n\t\t<ng-template [ngTemplateOutlet]=\"_tooltip.template\"></ng-template>\n\t</ng-template>\n\t<div #tooltipDiv></div>\n</div>\n","import { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport {\n\tDirective,\n\tElementRef,\n\tforwardRef,\n\tInject,\n\tInput,\n\tNgZone,\n\tOptional,\n\tTemplateRef,\n\tViewContainerRef\n} from '@angular/core';\nimport {\n\tMatTooltipDefaultOptions,\n\tMAT_TOOLTIP_DEFAULT_OPTIONS,\n\tMAT_TOOLTIP_SCROLL_STRATEGY,\n\tTooltipPosition,\n\t_MatTooltipBase\n} from '@angular/material/tooltip';\nimport { BUI_TOOLTIP_TEMPLATE_REF, TooltipComponent } from './tooltip.component';\n\n/**\n * This directive extends [Angular Material tooltip](https://material.angular.io/components/tooltip/overview), with the additional capability of displaying\n * HTML content in the overlay area.\n *\n * All the other features are identical as those in Angular Material tooltip.\n */\n@Directive({\n\tselector: '[buiTooltip]',\n\texportAs: 'buiTooltip',\n\thost: {\n\t\tclass: 'mat-tooltip-trigger bui-tooltip-trigger'\n\t},\n\tproviders: [\n\t\t{\n\t\t\tprovide: BUI_TOOLTIP_TEMPLATE_REF,\n\t\t\tuseExisting: forwardRef(() => TooltipDirective)\n\t\t}\n\t]\n})\nexport class TooltipDirective extends _MatTooltipBase<TooltipComponent> {\n\tprotected readonly _tooltipComponent = TooltipComponent;\n\tprivate _templateRef?: TemplateRef<any>;\n\n\tconstructor(\n\t\toverlay: Overlay,\n\t\telementRef: ElementRef<HTMLElement>,\n\t\tscrollDispatcher: ScrollDispatcher,\n\t\tviewContainerRef: ViewContainerRef,\n\t\tngZone: NgZone,\n\t\tplatform: Platform,\n\t\tariaDescriber: AriaDescriber,\n\t\tfocusMonitor: FocusMonitor,\n\t\t@Inject(MAT_TOOLTIP_SCROLL_STRATEGY) scrollStrategy: any,\n\t\t@Optional() dir: Directionality,\n\t\t@Optional() @Inject(MAT_TOOLTIP_DEFAULT_OPTIONS) defaultOptions: MatTooltipDefaultOptions,\n\t\t@Inject(DOCUMENT) _document: any\n\t) {\n\t\tsuper(\n\t\t\toverlay,\n\t\t\telementRef,\n\t\t\tscrollDispatcher,\n\t\t\tviewContainerRef,\n\t\t\tngZone,\n\t\t\tplatform,\n\t\t\tariaDescriber,\n\t\t\tfocusMonitor,\n\t\t\tscrollStrategy,\n\t\t\tdir,\n\t\t\tdefaultOptions,\n\t\t\t_document\n\t\t);\n\t}\n\n\t/** Allows the user to define the position of the tooltip relative to the parent element */\n\t@Input()\n\tget buiTooltipPosition(): TooltipPosition {\n\t\treturn this.position;\n\t}\n\tset buiTooltipPosition(value: TooltipPosition) {\n\t\tthis.position = value;\n\t}\n\n\t/** Disables the display of the tooltip. */\n\t@Input()\n\tget buiTooltipDisabled(): boolean {\n\t\treturn this.disabled;\n\t}\n\tset buiTooltipDisabled(value) {\n\t\tthis.disabled = value;\n\t}\n\n\t/** The message to be displayed in the tooltip. */\n\t@Input()\n\tget buiTooltip(): string | TemplateRef<any> {\n\t\treturn this._templateRef || this.message;\n\t}\n\tset buiTooltip(value) {\n\t\tif (typeof value === 'string') {\n\t\t\tthis.message = value;\n\t\t} else {\n\t\t\tthis._templateRef = value;\n\t\t\tif (value) {\n\t\t\t\tthis.message = '[bui-tooltip-template]';\n\t\t\t} else {\n\t\t\t\tthis._templateRef = undefined;\n\t\t\t\tthis.message = '';\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @ignore */\n\tget template(): TemplateRef<any> | undefined {\n\t\treturn this._templateRef;\n\t}\n\n\t/** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n\t@Input()\n\tget buiTooltipClass() {\n\t\treturn this.tooltipClass;\n\t}\n\tset buiTooltipClass(value: string | string[] | Set<string> | { [key: string]: any }) {\n\t\tthis.tooltipClass = value;\n\t}\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER } from '@angular/material/tooltip';\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipDirective } from './tooltip.directive';\n\n@NgModule({\n\timports: [A11yModule, CommonModule, OverlayModule, MatCommonModule],\n\texports: [TooltipDirective, MatCommonModule, CdkScrollableModule],\n\tdeclarations: [TooltipDirective, TooltipComponent],\n\tentryComponents: [TooltipComponent],\n\tproviders: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER]\n})\nexport class TooltipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MatTooltipComponent"],"mappings":"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"}
1
+ {"version":3,"file":"bravura-ui-tooltip.js","sources":["../../../projects/ui/tooltip/tooltip.component.ts","../../../projects/ui/tooltip/tooltip.component.html","../../../projects/ui/tooltip/tooltip.directive.ts","../../../projects/ui/tooltip/tooltip.module.ts","../../../projects/ui/tooltip/bravura-ui-tooltip.ts"],"sourcesContent":["import { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tInject,\n\tInjectionToken,\n\tTemplateRef,\n\tViewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { matTooltipAnimations, TooltipComponent as MatTooltipComponent } from '@angular/material/tooltip';\n\n/**\n * @ignore\n */\ninterface TooltipTemplateContainer {\n\ttemplate?: TemplateRef<any>;\n}\n\n/**\n * @ignore\n */\nexport const BUI_TOOLTIP_TEMPLATE_REF = new InjectionToken<TooltipTemplateContainer>(\n\t'@bravura/ui/tooltip/templateContainer'\n);\n\n@Component({\n\tselector: 'bui-tooltip-component',\n\ttemplateUrl: './tooltip.component.html',\n\tstyleUrls: ['./tooltip.component.scss'],\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tanimations: [matTooltipAnimations.tooltipState],\n\thost: {\n\t\tclass: 'bui-tooltip-component bui-host',\n\t\t// Forces the element to have a layout in IE and Edge. This fixes issues where the element\n\t\t// won't be rendered if the animations are disabled or there is no web animations polyfill.\n\t\t'[style.zoom]': '_visibility === \"visible\" ? 1 : null',\n\t\t'(body:click)': 'this._handleBodyInteraction()',\n\t\t'(body:auxclick)': 'this._handleBodyInteraction()',\n\t\t'aria-hidden': 'true'\n\t}\n})\nexport class TooltipComponent extends MatTooltipComponent {\n\tprivate _messageCopy = '';\n\n\t@ViewChild('tooltipDiv', { static: true })\n\tprivate tooltipDiv!: ElementRef<HTMLDivElement>;\n\n\tconstructor(\n\t\tchangeDetectorRef: ChangeDetectorRef,\n\t\t_breakpointObserver: BreakpointObserver,\n\t\t@Inject(BUI_TOOLTIP_TEMPLATE_REF) public _tooltip: TooltipTemplateContainer\n\t) {\n\t\tsuper(changeDetectorRef, _breakpointObserver);\n\t}\n\n\tshow(delay: number): void {\n\t\tif (this._messageCopy !== this.message && !this._tooltip.template) {\n\t\t\tthis.tooltipDiv.nativeElement.innerHTML = this.message;\n\t\t\tthis._messageCopy = this.message;\n\t\t}\n\t\tsuper.show(delay);\n\t}\n}\n\n(TooltipComponent as any).ɵcmp.styles.push((MatTooltipComponent as any).ɵcmp.styles);\n","<div\n\tclass=\"mat-tooltip bui-tooltip\"\n\t[ngClass]=\"tooltipClass\"\n\t[class.mat-tooltip-handset]=\"(_isHandset | async)?.matches\"\n\t[@state]=\"_visibility\"\n\t(@state.start)=\"_animationStart()\"\n\t(@state.done)=\"_animationDone($event)\"\n>\n\t<ng-template [ngIf]=\"_tooltip.template\">\n\t\t<ng-template [ngTemplateOutlet]=\"_tooltip.template\"></ng-template>\n\t</ng-template>\n\t<div #tooltipDiv></div>\n</div>\n","import { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport {\n\tDirective,\n\tElementRef,\n\tforwardRef,\n\tInject,\n\tInput,\n\tNgZone,\n\tOptional,\n\tTemplateRef,\n\tViewContainerRef\n} from '@angular/core';\nimport {\n\tMatTooltipDefaultOptions,\n\tMAT_TOOLTIP_DEFAULT_OPTIONS,\n\tMAT_TOOLTIP_SCROLL_STRATEGY,\n\tTooltipPosition,\n\t_MatTooltipBase\n} from '@angular/material/tooltip';\nimport { BUI_TOOLTIP_TEMPLATE_REF, TooltipComponent } from './tooltip.component';\n\n/**\n * This directive extends [Angular Material tooltip](https://material.angular.io/components/tooltip/overview), with the additional capability of displaying\n * HTML content in the overlay area.\n *\n * All the other features are identical as those in Angular Material tooltip.\n */\n@Directive({\n\tselector: '[buiTooltip]',\n\texportAs: 'buiTooltip',\n\thost: {\n\t\tclass: 'mat-tooltip-trigger bui-tooltip-trigger'\n\t},\n\tproviders: [\n\t\t{\n\t\t\tprovide: BUI_TOOLTIP_TEMPLATE_REF,\n\t\t\tuseExisting: forwardRef(() => TooltipDirective)\n\t\t}\n\t]\n})\nexport class TooltipDirective extends _MatTooltipBase<TooltipComponent> {\n\tprotected readonly _tooltipComponent = TooltipComponent;\n\tprivate _templateRef?: TemplateRef<any>;\n\n\tconstructor(\n\t\toverlay: Overlay,\n\t\telementRef: ElementRef<HTMLElement>,\n\t\tscrollDispatcher: ScrollDispatcher,\n\t\tviewContainerRef: ViewContainerRef,\n\t\tngZone: NgZone,\n\t\tplatform: Platform,\n\t\tariaDescriber: AriaDescriber,\n\t\tfocusMonitor: FocusMonitor,\n\t\t@Inject(MAT_TOOLTIP_SCROLL_STRATEGY) scrollStrategy: any,\n\t\t@Optional() dir: Directionality,\n\t\t@Optional() @Inject(MAT_TOOLTIP_DEFAULT_OPTIONS) defaultOptions: MatTooltipDefaultOptions,\n\t\t@Inject(DOCUMENT) _document: any\n\t) {\n\t\tsuper(\n\t\t\toverlay,\n\t\t\telementRef,\n\t\t\tscrollDispatcher,\n\t\t\tviewContainerRef,\n\t\t\tngZone,\n\t\t\tplatform,\n\t\t\tariaDescriber,\n\t\t\tfocusMonitor,\n\t\t\tscrollStrategy,\n\t\t\tdir,\n\t\t\tdefaultOptions,\n\t\t\t_document\n\t\t);\n\t}\n\n\t/** Allows the user to define the position of the tooltip relative to the parent element */\n\t@Input()\n\tget buiTooltipPosition(): TooltipPosition {\n\t\treturn this.position;\n\t}\n\tset buiTooltipPosition(value: TooltipPosition) {\n\t\tthis.position = value;\n\t}\n\n\t/** Disables the display of the tooltip. */\n\t@Input()\n\tget buiTooltipDisabled(): boolean {\n\t\treturn this.disabled;\n\t}\n\tset buiTooltipDisabled(value) {\n\t\tthis.disabled = value;\n\t}\n\n\t/** The message to be displayed in the tooltip. */\n\t@Input()\n\tget buiTooltip(): string | TemplateRef<any> {\n\t\treturn this._templateRef || this.message;\n\t}\n\tset buiTooltip(value) {\n\t\tif (typeof value === 'string') {\n\t\t\tthis.message = value;\n\t\t} else {\n\t\t\tthis._templateRef = value;\n\t\t\tif (value) {\n\t\t\t\tthis.message = '[bui-tooltip-template]';\n\t\t\t} else {\n\t\t\t\tthis._templateRef = undefined;\n\t\t\t\tthis.message = '';\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @ignore */\n\tget template(): TemplateRef<any> | undefined {\n\t\treturn this._templateRef;\n\t}\n\n\t/** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n\t@Input()\n\tget buiTooltipClass() {\n\t\treturn this.tooltipClass;\n\t}\n\tset buiTooltipClass(value: string | string[] | Set<string> | { [key: string]: any }) {\n\t\tthis.tooltipClass = value;\n\t}\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER } from '@angular/material/tooltip';\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipDirective } from './tooltip.directive';\n\n@NgModule({\n\timports: [A11yModule, CommonModule, OverlayModule, MatCommonModule],\n\texports: [TooltipDirective, MatCommonModule, CdkScrollableModule],\n\tdeclarations: [TooltipDirective, TooltipComponent],\n\tentryComponents: [TooltipComponent],\n\tproviders: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER]\n})\nexport class TooltipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MatTooltipComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bravura/ui",
3
3
  "description": "Bravura UI Components for Angular applications",
4
- "version": "1.7.2",
4
+ "version": "1.10.0",
5
5
  "keywords": [
6
6
  "Angular",
7
7
  "Angular Material",
@@ -59,5 +59,5 @@ export declare class SelectionPanelItemComponent {
59
59
  private _setDisabled;
60
60
  private _setChecked;
61
61
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectionPanelItemComponent, never>;
62
- static ɵcmp: i0.ɵɵComponentDeclaration<SelectionPanelItemComponent, "bui-selection-panel-item", never, { "title": "title"; "disabled": "disabled"; "value": "value"; "checked": "checked"; "color": "color"; }, {}, never, ["*"]>;
62
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectionPanelItemComponent, "bui-selection-panel-item", never, { "title": "title"; "disabled": "disabled"; "value": "value"; "checked": "checked"; "color": "color"; }, {}, never, ["[buiSelectionItemHeadingEnd]", "*"]>;
63
63
  }
@@ -7,6 +7,6 @@ import * as i5 from "@angular/forms";
7
7
  import * as i6 from "@angular/material/core";
8
8
  export declare class SelectionPanelModule {
9
9
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectionPanelModule, never>;
10
- static ɵmod: i0.ɵɵNgModuleDeclaration<SelectionPanelModule, [typeof i1.SelectionPanelDirective, typeof i2.SelectionPanelItemComponent], [typeof i3.CommonModule, typeof i4.MatCheckboxModule, typeof i5.FormsModule, typeof i6.MatRippleModule], never>;
10
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SelectionPanelModule, [typeof i1.SelectionPanelDirective, typeof i2.SelectionPanelItemComponent], [typeof i3.CommonModule, typeof i4.MatCheckboxModule, typeof i5.FormsModule, typeof i6.MatRippleModule], [typeof i1.SelectionPanelDirective, typeof i2.SelectionPanelItemComponent]>;
11
11
  static ɵinj: i0.ɵɵInjectorDeclaration<SelectionPanelModule>;
12
12
  }