UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

499 lines 72.5 kB
import { __decorate, __metadata } from "tslib"; import { Component, ContentChild, ElementRef, EventEmitter, HostBinding, Injector, Input, Output, TemplateRef, ViewChild } from '@angular/core'; import { SmeSchemaProperty } from '../../../schema/schema-decorator'; import { ArrayPropertySchemaFieldLoaderComponent } from '../../../schema/schema-field-host.component'; import { SchemaPrimitiveType } from '../../../schema/schema-models'; import { SchemaUtilities } from '../../../schema/schema-utilities'; import { SmeInternalFormFieldComponent } from '../form-field.component'; import { FormFieldIsolatorComponent } from '../isolator/isolator.component'; import { ArrayFormFieldAccessibilityManagerService } from './array-form-field-accessibility-manager.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "../../../schema/schema-field-host.component"; import * as i3 from "../form-field-accessor.directive"; import * as i4 from "../form-field-validator.directive"; import * as i5 from "../form-field-async-validator.directive"; import * as i6 from "./array-form-field-accessibility-manager.service"; import * as i7 from "../../../accordion/accordion.component"; import * as i8 from "../../../accordion/accordion-panel/accordion-panel.component"; import * as i9 from "@angular/common"; import * as i10 from "../../../../directives/template-outlet/template-outlet.directive"; import * as i11 from "../../../../directives/disabled/disabled.directive"; import * as i12 from "../../../tooltip/tooltip.directive"; import * as i13 from "../../validation-alert/validation-alert.component"; import * as i14 from "../../fieldset/fieldset.directive"; import * as i15 from "../../form-field-layout/form-field-layout.component"; const _c0 = ["field"]; function ArrayFormFieldLoaderComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "sme-schema-field-host", 2); } if (rf & 2) { const model_r2 = ctx.$implicit; const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("propertySchema", ctx_r1.propertySchema.item)("context", ctx_r1.context)("data", model_r2); } } const _c1 = ["addButton"]; const _c2 = ["type", "array"]; const _c3 = function (a0, a1) { return { index: a0, ariaLabelId: a1 }; }; function ArrayFormFieldComponent_sme_accordion_panel_3_ng_container_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainer(0, 15); } if (rf & 2) { const ctx_r8 = i0.ɵɵnextContext(); const item_r2 = ctx_r8.$implicit; const i_r3 = ctx_r8.index; const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵproperty("template", ctx_r4.headerTemplate)("data", item_r2)("hostData", i0.ɵɵpureFunction2(3, _c3, i_r3, ctx_r4.getItemAriaId(i_r3, "itemHeader"))); } } function ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template(rf, ctx) { if (rf & 1) { const _r11 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 16); i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.moveUp(item_r2)); }); i0.ɵɵelement(1, "span", 17); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r5 = i0.ɵɵnextContext(2); i0.ɵɵproperty("title", ctx_r5.strings.MsftSmeShell.Angular.Form.Array.promoteButtonTooltip)("smeDisabled", ctx_r5.loadingOrDisabled); i0.ɵɵattribute("aria-label", ctx_r5.strings.MsftSmeShell.Angular.Form.Array.promoteButtonAriaLabel); } } function ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template(rf, ctx) { if (rf & 1) { const _r14 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 18); i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.moveDown(item_r2)); }); i0.ɵɵelement(1, "span", 19); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r6 = i0.ɵɵnextContext(2); i0.ɵɵproperty("title", ctx_r6.strings.MsftSmeShell.Angular.Form.Array.demoteButtonTooltip)("smeDisabled", ctx_r6.loadingOrDisabled); i0.ɵɵattribute("aria-label", ctx_r6.strings.MsftSmeShell.Angular.Form.Array.demoteButtonAriaLabel); } } function ArrayFormFieldComponent_sme_accordion_panel_3_button_5_Template(rf, ctx) { if (rf & 1) { const _r17 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 20); i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.delete(item_r2)); }); i0.ɵɵelement(1, "span", 21); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r7 = i0.ɵɵnextContext(2); i0.ɵɵproperty("title", ctx_r7.strings.MsftSmeShell.Angular.Form.Array.removeButtonTooltip)("smeDisabled", ctx_r7.loadingOrDisabled); i0.ɵɵattribute("aria-label", ctx_r7.strings.MsftSmeShell.Angular.Form.Array.removeButtonAriaLabel); } } function ArrayFormFieldComponent_sme_accordion_panel_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "sme-accordion-panel", 7)(1, "sme-panel-control"); i0.ɵɵtemplate(2, ArrayFormFieldComponent_sme_accordion_panel_3_ng_container_2_Template, 1, 6, "ng-container", 8); i0.ɵɵtemplate(3, ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template, 2, 3, "button", 9); i0.ɵɵtemplate(4, ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template, 2, 3, "button", 10); i0.ɵɵtemplate(5, ArrayFormFieldComponent_sme_accordion_panel_3_button_5_Template, 2, 3, "button", 11); i0.ɵɵelementEnd(); i0.ɵɵelementStart(6, "span", 12); i0.ɵɵtext(7); i0.ɵɵelementEnd(); i0.ɵɵelementStart(8, "fieldset", 13)(9, "div", 14); i0.ɵɵelementContainer(10, 15); i0.ɵɵelementEnd()()(); } if (rf & 2) { const item_r2 = ctx.$implicit; const i_r3 = ctx.index; const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵproperty("header", ctx_r0.getItemTitle(item_r2, i_r3))("isExpandable", false); i0.ɵɵattribute("data-uta-id", "array-form-field-item-" + i_r3); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r0.headerTemplate); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.showMove); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.showMove); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.getShowRemove(item_r2, i_r3)); i0.ɵɵadvance(1); i0.ɵɵproperty("id", ctx_r0.getItemAriaId(i_r3, "item")); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r0.itemTitle); i0.ɵɵadvance(1); i0.ɵɵclassProp("sme-subform-indent-none", ctx_r0.orientation === "horizontal"); i0.ɵɵattribute("aria-labelledby", ctx_r0.getItemAriaId(i_r3, "item")); i0.ɵɵadvance(1); i0.ɵɵproperty("id", ctx_r0.getItemAriaId(i_r3, "itemContainer")); i0.ɵɵadvance(1); i0.ɵɵproperty("template", ctx_r0.itemTemplate)("data", item_r2)("hostData", i0.ɵɵpureFunction2(16, _c3, i_r3, ctx_r0.getItemAriaId(i_r3, "item"))); } } function ArrayFormFieldComponent_button_4_Template(rf, ctx) { if (rf & 1) { const _r20 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 22, 23); i0.ɵɵlistener("click", function ArrayFormFieldComponent_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r19.add()); }); i0.ɵɵtext(2); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("smeDisabled", ctx_r1.loadingOrDisabled || ctx_r1.maxItems !== -1 && ctx_r1.value.length >= ctx_r1.maxItems)("title", ctx_r1.strings.MsftSmeShell.Angular.Form.Array.addButtonTooltip); i0.ɵɵattribute("aria-label", ctx_r1.strings.MsftSmeShell.Angular.Form.Array.addButtonAriaLabel); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r1.addButtonText); } } /* eslint-disable max-len */ export class ArrayFormFieldLoaderComponent extends ArrayPropertySchemaFieldLoaderComponent { askForNewItem($event) { const item = SchemaUtilities.generateDataBasedOnSchemaProperty(this.propertySchema.item); $event.item = item; } shouldAdjustControlButtonLocation() { const itemPropertySchema = this.propertySchema.item; let result = !!(this.propertySchema.item.label || this.propertySchema.item.description); if (!result) { let columnCount = 1; if (itemPropertySchema.options && itemPropertySchema.options.columnCount) { columnCount = itemPropertySchema.options.columnCount; } for (let i = 0; i < columnCount && i < itemPropertySchema.properties.length; i++) { if (itemPropertySchema.properties[i].label || itemPropertySchema.properties[i].description) { result = true; break; } } } return result; } } /** @nocollapse */ ArrayFormFieldLoaderComponent.ɵfac = /** @pureOrBreakMyCode */ function () { let ɵArrayFormFieldLoaderComponent_BaseFactory; return function ArrayFormFieldLoaderComponent_Factory(t) { return (ɵArrayFormFieldLoaderComponent_BaseFactory || (ɵArrayFormFieldLoaderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ArrayFormFieldLoaderComponent)))(t || ArrayFormFieldLoaderComponent); }; }(); /** @nocollapse */ ArrayFormFieldLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ArrayFormFieldLoaderComponent, selectors: [["ng-component"]], viewQuery: function ArrayFormFieldLoaderComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.arrayFormFieldComponent = _t.first); } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 9, consts: [["type", "array", 3, "ngModel", "name", "label", "required", "description", "adjustControlButtonLocation", "pendingMessage", "customAsyncValidateDisabled", "customAsyncValidateDebounceTime", "ngModelChange", "askForNewItem", "customValidate", "customAsyncValidate"], ["field", ""], [3, "propertySchema", "context", "data"]], template: function ArrayFormFieldLoaderComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "sme-form-field", 0, 1); i0.ɵɵlistener("ngModelChange", function ArrayFormFieldLoaderComponent_Template_sme_form_field_ngModelChange_0_listener($event) { return ctx.data = $event; })("askForNewItem", function ArrayFormFieldLoaderComponent_Template_sme_form_field_askForNewItem_0_listener($event) { return ctx.askForNewItem($event); })("customValidate", function ArrayFormFieldLoaderComponent_Template_sme_form_field_customValidate_0_listener($event) { return ctx.resolveFunction(ctx.propertySchema.customValidation)($event); })("customAsyncValidate", function ArrayFormFieldLoaderComponent_Template_sme_form_field_customAsyncValidate_0_listener($event) { return ctx.propertySchema.customAsyncValidation && ctx.resolveFunction(ctx.propertySchema.customAsyncValidation.handler)($event); }); i0.ɵɵtemplate(2, ArrayFormFieldLoaderComponent_ng_template_2_Template, 1, 3, "ng-template"); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵproperty("ngModel", ctx.data)("name", ctx.propertySchema.name)("label", ctx.localize(ctx.propertySchema.label))("required", ctx.propertySchema.required)("description", ctx.localize(ctx.propertySchema.description))("adjustControlButtonLocation", ctx.shouldAdjustControlButtonLocation())("pendingMessage", ctx.propertySchema.customAsyncValidation && ctx.localize(ctx.propertySchema.customAsyncValidation.pendingMessage))("customAsyncValidateDisabled", ctx.shouldCustomAsyncValidationBeDisabled())("customAsyncValidateDebounceTime", ctx.propertySchema.customAsyncValidation && +ctx.propertySchema.customAsyncValidation.handler); } }, dependencies: function () { return [i1.NgControlStatus, i1.RequiredValidator, i1.NgModel, i2.SchemaFieldHostComponent, ArrayFormFieldComponent, i3.FormFieldAccessorDirective, i4.FormFieldValidatorDirective, i5.FormFieldAsyncValidatorDirective]; }, encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArrayFormFieldLoaderComponent, [{ type: Component, args: [{ template: ` <sme-form-field #field type="array" [(ngModel)]="data" [name]="propertySchema.name" [label]="localize(propertySchema.label)" [required]="propertySchema.required" [description]="localize(propertySchema.description)" (askForNewItem)="askForNewItem($event)" [adjustControlButtonLocation]="shouldAdjustControlButtonLocation()" (customValidate)="resolveFunction(propertySchema.customValidation)($event)" (customAsyncValidate)="propertySchema.customAsyncValidation && resolveFunction(propertySchema.customAsyncValidation.handler)($event)" [pendingMessage]="propertySchema.customAsyncValidation && localize(propertySchema.customAsyncValidation.pendingMessage)" [customAsyncValidateDisabled]="shouldCustomAsyncValidationBeDisabled()" [customAsyncValidateDebounceTime]="propertySchema.customAsyncValidation && +propertySchema.customAsyncValidation.handler" > <ng-template let-model> <sme-schema-field-host [propertySchema]="propertySchema.item" [context]="context" [data]="model"></sme-schema-field-host> </ng-template> </sme-form-field> ` }] }], null, { arrayFormFieldComponent: [{ type: ViewChild, args: ['field'] }] }); })(); /** * Accessible Implementation of a form field for .sme-array */ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalFormFieldComponent { /** * Initializes a new instance of the JsonFormFieldComponent */ constructor(injector, arrayFormFieldAccessibilityManagerService) { super(injector); this.arrayFormFieldAccessibilityManagerService = arrayFormFieldAccessibilityManagerService; /** * When no "newItem" is provided. This output will be called anytime a new item is required. */ this.askForNewItem = new EventEmitter(); // Event used to provide a custom function that builds individual item headers this.askForItemHeader = new EventEmitter(); // Event used to provide a custom function that evaluates whether to show or hide individual remove buttons this.askForRemoveEvaluator = new EventEmitter(); /** * Indicates that the array item button locations should be adjusted to account for no item label. */ this.adjustControlButtonLocation = false; this.showAdd = true; this.showRemove = true; this.maxItems = -1; this.showMove = true; this.canCloseAll = true; this.canCloseAny = false; this.canOpenMultiple = true; this.addButtonText = MsftSme.self().Resources.strings.MsftSmeShell.Angular.Common.add; this._itemTitle = MsftSme.self().Resources.strings.MsftSmeShell.Angular.Form.Array.itemTitle; this.screenReaderEvent = ''; } /** * The source name to use for logging */ get logSourceName() { return 'ArrayFormFieldComponent'; } /** * Gets the item template from either the subFormTemplate or subFieldIsolator if provided. */ get itemTemplate() { if (this.subFieldIsolator && this.subFieldIsolator.subFieldTemplate) { return this.subFieldIsolator.subFieldTemplate; } return this.subFormTemplate; } set itemTitle(value) { this._itemTitle = `${value} {0}`; } get itemTitle() { return this._itemTitle; } /** * The aria label for this instance. */ get ariaLabel() { return this.getMergedDescriptionLabel(); } /** * The method called after the component is initialized. */ ngOnInit() { super.ngOnInit(); this.setAttribute('role', 'group'); if (this.subFieldIsolator) { this.subscriptions.push(this.subFieldIsolator.statusChanged.subscribe((status) => { if (status.pending) { this.ngModel.control.markAsPending(); } if (status.dirty) { this.ngModel.control.markAsDirty(); } if (status.touched) { this.ngModel.control.markAsTouched(); } this.ngModel.control.updateValueAndValidity(); })); } } /** * Updates a hidden aria-live region with information about changes to the page; if the same event is being repeated, the event string * is set in lowercase, so the screen reader thinks it's a new string. Clearing and re-setting the field does not prompt the screen * reader to read the aria-live region. * @param event the string to be announced */ updateScreenReaderEvent(event) { this.screenReaderEvent = event === this.screenReaderEvent ? event.toLocaleLowerCase() : event; } /** * Adds an item to the array */ add() { const item = this.getNewItem(); this.value.push(item); this.triggerValueChange(); this.arrayFormFieldAccessibilityManagerService.add(this.value, this.addButton, this.hostElement); } /** * Deletes an item from the array */ delete(item) { const index = this.value.indexOf(item); this.value.splice(index, 1); this.triggerValueChange(); this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.removeButtonEvent); this.arrayFormFieldAccessibilityManagerService.delete(this.value, this.addButton, this.hostElement); } /** * Decreases the index of an item by 1 */ moveUp(item) { const index = this.value.indexOf(item); if (index > 0) { const temp = { ...item }; this.value[index] = { ...this.value[index - 1] }; this.value[index - 1] = temp; this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.promoteButtonEvent); this.arrayFormFieldAccessibilityManagerService.promote(this.value, this.hostElement, index); } else { this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.promoteButtonPreventedEvent); } } /** * Increases the index of an item by 1 */ moveDown(item) { const index = this.value.indexOf(item); if (index < this.value.length - 1) { const temp = { ...item }; this.value[index] = { ...this.value[index + 1] }; this.value[index + 1] = temp; this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.demoteButtonEvent); this.arrayFormFieldAccessibilityManagerService.demote(this.value, this.hostElement, index); } else { this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.demoteButtonPreventedEvent); } } /** * The method called when a <select> element's value changes. */ triggerValueChange() { this.value = [...this.value]; } getItemAriaId(index, idName) { switch (idName) { case 'item': return `${this.idBag['item']}-${index}`; case 'itemHeader': return `${this.idBag['item']}-header-${index}`; case 'itemContainer': return `${this.idBag['item']}-container-${index}`; default: return null; } } getItemTitle(item, index) { const event = { headerEvalFunc: null }; this.askForItemHeader.emit(event); return event.headerEvalFunc ? event.headerEvalFunc(item, index) : this.itemTitle.format(index); } getShowRemove(item, index) { const event = { removeEvalFunc: null }; this.askForRemoveEvaluator.emit(event); return event.removeEvalFunc ? event.removeEvalFunc(item, index) : this.showRemove; } /** * Performs validation that is internal to this control * @param c The form control attached to this instance */ validate(c) { if (this.required) { if (MsftSme.isNullOrUndefined(this.value)) { return { required: true }; } if (!this.value.length) { return { required: true }; } } if (this.subFieldIsolator && !this.subFieldIsolator.isValid) { return { invalidSubField: { hidden: true } }; } return super.validate(c); } /** * Creates the idBag used by this component to store unique element ids. * id values will be assigned be the @see BaseComponent super class. */ createIdBag() { return { ...super.createIdBag(), detailsSpan: '', item: '' }; } /** * Generates a new item to be added to the array */ getNewItem() { if (this.newItem) { return MsftSme.deepCopy(this.newItem); } else { const event = { item: null }; this.askForNewItem.emit(event); return event.item || {}; } } }; /** @nocollapse */ ArrayFormFieldComponent.ɵfac = function ArrayFormFieldComponent_Factory(t) { return new (t || ArrayFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i6.ArrayFormFieldAccessibilityManagerService)); }; /** @nocollapse */ ArrayFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ArrayFormFieldComponent, selectors: [["sme-form-field", "type", "array"]], contentQueries: function ArrayFormFieldComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { i0.ɵɵcontentQuery(dirIndex, FormFieldIsolatorComponent, 7); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.subFieldIsolator = _t.first); } }, viewQuery: function ArrayFormFieldComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c1, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.addButton = _t.first); } }, hostVars: 1, hostBindings: function ArrayFormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) { i0.ɵɵattribute("aria-label", ctx.ariaLabel); } }, inputs: { adjustControlButtonLocation: "adjustControlButtonLocation", newItem: "newItem", showAdd: "showAdd", showRemove: "showRemove", showMove: "showMove", canCloseAll: "canCloseAll", canCloseAny: "canCloseAny", canOpenMultiple: "canOpenMultiple", maxItems: "maxItems", addButtonText: "addButtonText", headerTemplate: "headerTemplate", itemTitle: "itemTitle" }, outputs: { askForNewItem: "askForNewItem", askForItemHeader: "askForItemHeader", askForRemoveEvaluator: "askForRemoveEvaluator" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c2, decls: 8, vars: 8, consts: [[3, "formField"], [1, "sme-array"], [3, "canCloseAny", "canCloseAll", "canOpenMultiple"], [3, "header", "isExpandable", 4, "ngFor", "ngForOf"], ["type", "button", "data-uta-id", "add-button", "class", "sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs", 3, "smeDisabled", "title", "click", 4, "ngIf"], [3, "alert"], ["aria-live", "assertive", "aria-relevant", "all", 1, "sme-screen-reader"], [3, "header", "isExpandable"], ["smeTemplateOutlet", "", "hostDataName", "context", 3, "template", "data", "hostData", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs", "data-uta-id", "promote-button", 3, "title", "smeDisabled", "click", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs", "data-uta-id", "demote-button", 3, "title", "smeDisabled", "click", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs", "data-uta-id", "remove-button", 3, "title", "smeDisabled", "click", 4, "ngIf"], [1, "sme-screen-reader", 3, "id"], [1, "sme-arrange-stack-h", "sme-margin-bottom-lg", "sme-array-item"], [1, "sme-position-flex-auto", "sme-padding-inset-md", 3, "id"], ["smeTemplateOutlet", "", "hostDataName", "context", 3, "template", "data", "hostData"], ["type", "button", "data-uta-id", "promote-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-form-field-height", "sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-up"], ["type", "button", "data-uta-id", "demote-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-form-field-height", "sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-down"], ["type", "button", "data-uta-id", "remove-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-form-field-height", "sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-delete", "sme-color-red"], ["type", "button", "data-uta-id", "add-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-icon", "sme-icon-add", "sme-margin-bottom-xs", 3, "smeDisabled", "title", "click"], ["addButton", ""]], template: function ArrayFormFieldComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "sme-form-field-layout", 0)(1, "div", 1)(2, "sme-accordion", 2); i0.ɵɵtemplate(3, ArrayFormFieldComponent_sme_accordion_panel_3_Template, 11, 19, "sme-accordion-panel", 3); i0.ɵɵelementEnd(); i0.ɵɵtemplate(4, ArrayFormFieldComponent_button_4_Template, 3, 4, "button", 4); i0.ɵɵelementEnd(); i0.ɵɵelement(5, "sme-validation-alert", 5); i0.ɵɵelementStart(6, "div", 6); i0.ɵɵtext(7); i0.ɵɵelementEnd()(); } if (rf & 2) { i0.ɵɵproperty("formField", ctx); i0.ɵɵadvance(2); i0.ɵɵproperty("canCloseAny", ctx.canCloseAny)("canCloseAll", ctx.canCloseAll)("canOpenMultiple", ctx.canOpenMultiple); i0.ɵɵadvance(1); i0.ɵɵproperty("ngForOf", ctx.value); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showAdd); i0.ɵɵadvance(1); i0.ɵɵproperty("alert", ctx.alert); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx.screenReaderEvent); } }, dependencies: [i7.AccordionComponent, i8.AccordionPanelComponent, i8.PanelControlComponent, i9.NgForOf, i9.NgIf, i10.TemplateOutletDirective, i11.DisabledDirective, i12.TooltipDirective, i13.ValidationAlertComponent, i14.FieldsetDirective, i15.FormFieldLayoutComponent], encapsulation: 2 }); ArrayFormFieldComponent = __decorate([ SmeSchemaProperty({ type: SchemaPrimitiveType.Array, format: 'simple-list', isDefaultFormat: true, description: `A form field control binding to array data.`, loaderComponent: ArrayFormFieldLoaderComponent }), __metadata("design:paramtypes", [Injector, ArrayFormFieldAccessibilityManagerService]) ], ArrayFormFieldComponent); export { ArrayFormFieldComponent }; (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArrayFormFieldComponent, [{ type: Component, args: [{ selector: 'sme-form-field[type="array"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <div class=\"sme-array\">\r\n <sme-accordion [canCloseAny]=\"canCloseAny\" [canCloseAll]=\"canCloseAll\" [canOpenMultiple]=\"canOpenMultiple\">\r\n <sme-accordion-panel *ngFor=\"let item of value; let i = index\" [header]=\"getItemTitle(item, i)\" [isExpandable]=\"false\" [attr.data-uta-id]=\"'array-form-field-item-' + i\">\r\n <sme-panel-control>\r\n <ng-container *ngIf=\"headerTemplate\" smeTemplateOutlet [template]=\"headerTemplate\" [data]=\"item\" hostDataName=\"context\"\r\n [hostData]=\"{index: i, ariaLabelId: getItemAriaId(i, 'itemHeader')}\"></ng-container>\r\n <button *ngIf=\"showMove\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.promoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.promoteButtonTooltip\" (click)=\"moveUp(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"promote-button\">\r\n <span class=\"sme-icon sme-icon-up\"></span>\r\n </button>\r\n <button *ngIf=\"showMove\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.demoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.demoteButtonTooltip\" (click)=\"moveDown(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"demote-button\">\r\n <span class=\"sme-icon sme-icon-down\"></span>\r\n </button>\r\n <button *ngIf=\"getShowRemove(item, i)\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.removeButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.removeButtonTooltip\" (click)=\"delete(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"remove-button\">\r\n <span class=\"sme-icon sme-icon-delete sme-color-red\"></span>\r\n </button>\r\n </sme-panel-control>\r\n <span class=\"sme-screen-reader\" [id]=\"getItemAriaId(i, 'item')\">{{itemTitle}}</span>\r\n <fieldset [attr.aria-labelledby]=\"getItemAriaId(i, 'item')\"\r\n class=\"sme-arrange-stack-h sme-margin-bottom-lg sme-array-item\"\r\n [class.sme-subform-indent-none]=\"orientation==='horizontal'\">\r\n <div class=\"sme-position-flex-auto sme-padding-inset-md\" [id]=\"getItemAriaId(i, 'itemContainer')\">\r\n <ng-container smeTemplateOutlet [template]=\"itemTemplate\" [data]=\"item\" hostDataName=\"context\"\r\n [hostData]=\"{index: i, ariaLabelId: getItemAriaId(i, 'item')}\"></ng-container>\r\n </div>\r\n </fieldset>\r\n </sme-accordion-panel>\r\n </sme-accordion>\r\n <button #addButton *ngIf=\"showAdd\" type=\"button\" data-uta-id=\"add-button\"\r\n [smeDisabled]=\"loadingOrDisabled || (maxItems !== -1 && value.length >= maxItems)\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.addButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.addButtonTooltip\" (click)=\"add()\">{{addButtonText}}</button>\r\n </div>\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n <div class=\"sme-screen-reader\" aria-live=\"assertive\" aria-relevant=\"all\">{{screenReaderEvent}}</div>\r\n</sme-form-field-layout>\r\n" }] }], function () { return [{ type: i0.Injector }, { type: i6.ArrayFormFieldAccessibilityManagerService }]; }, { subFieldIsolator: [{ type: ContentChild, args: [FormFieldIsolatorComponent, { static: true }] }], askForNewItem: [{ type: Output }], askForItemHeader: [{ type: Output }], askForRemoveEvaluator: [{ type: Output }], adjustControlButtonLocation: [{ type: Input }], newItem: [{ type: Input }], showAdd: [{ type: Input }], showRemove: [{ type: Input }], showMove: [{ type: Input }], canCloseAll: [{ type: Input }], canCloseAny: [{ type: Input }], canOpenMultiple: [{ type: Input }], maxItems: [{ type: Input }], addButtonText: [{ type: Input }], headerTemplate: [{ type: Input }], itemTitle: [{ type: Input }], ariaLabel: [{ type: HostBinding, args: ['attr.aria-label'] }], addButton: [{ type: ViewChild, args: ['addButton'] }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RyxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBYyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBMkJqRywyQ0FDK0Q7Ozs7SUFEeEMsMkRBQXNDLDJCQUFBLGtCQUFBOzs7Ozs7SUM1Qy9ELDRCQUNzRjs7Ozs7O0lBRC9CLGdEQUEyQixpQkFBQSx3RkFBQTs7OztJQUVsRixrQ0FJaUU7SUFEUSw0T0FBUyxlQUFB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S0FBSztZQUlDLGFBQWE7a0JBRG5CLEtBQUs7WUFJQyxjQUFjO2tCQURwQixLQUFLO1lBSUssU0FBUztrQkFEbkIsS0FBSztZQWFLLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsaUJBQWlCO1lBV3RCLFNBQVM7a0JBRGhCLFNBQVM7bUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb250ZW50Q2hpbGQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi8uLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBBcnJheVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZElzb2xhdG9yQ29tcG9uZW50LCBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vaXNvbGF0b3IvaXNvbGF0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXJyYXlGb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuL2FycmF5LWZvcm0tZmllbGQtYWNjZXNzaWJpbGl0eS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JOZXdJdGVtRXZlbnRBcmdzIHtcclxuICAgIGl0ZW06IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JJdGVtSGVhZGVyQXJncyB7XHJcbiAgICBoZWFkZXJFdmFsRnVuYzogTXNmdFNtZS5GdW5jMjxhbnksIG51bWJlciwgc3RyaW5nPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JSZW1vdmVFdmFsRnVuY0FyZ3Mge1xyXG4gICAgcmVtb3ZlRXZhbEZ1bmM6IE1zZnRTbWUuRnVuYzI8YW55LCBudW1iZXIsIGJvb2xlYW4+O1xyXG59XHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxzbWUtZm9ybS1maWVsZCAjZmllbGQgdHlwZT1cImFycmF5XCIgWyhuZ01vZGVsKV09XCJkYXRhXCIgW25hbWVdPVwicHJvcGVydHlTY2hlbWEubmFtZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5sYWJlbClcIlxyXG4gICAgICAgIFtyZXF1aXJlZF09XCJwcm9wZXJ0eVNjaGVtYS5yZXF1aXJlZFwiIFtkZXNjcmlwdGlvbl09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5kZXNjcmlwdGlvbilcIiAoYXNrRm9yTmV3SXRlbSk9XCJhc2tGb3JOZXdJdGVtKCRldmVudClcIlxyXG4gICAgICAgIFthZGp1c3RDb250cm9sQnV0dG9uTG9jYXRpb25dPVwic2hvdWxkQWRqdXN0Q29udHJvbEJ1dHRvbkxvY2F0aW9uKClcIlxyXG4gICAgICAgIChjdXN0b21WYWxpZGF0ZSk9XCJyZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tVmFsaWRhdGlvbikoJGV2ZW50KVwiXHJcbiAgICAgICAgKGN1c3RvbUFzeW5jVmFsaWRhdGUpPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIHJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlcikoJGV2ZW50KVwiXHJcbiAgICAgICAgW3BlbmRpbmdNZXNzYWdlXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiBsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24ucGVuZGluZ01lc3NhZ2UpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURpc2FibGVkXT1cInNob3VsZEN1c3RvbUFzeW5jVmFsaWRhdGlvbkJlRGlzYWJsZWQoKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEZWJvdW5jZVRpbWVdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmICtwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbW9kZWw+XHJcbiAgICAgICAgICAgIDxzbWUtc