UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

510 lines 73.4 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 * 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 "../../../accordion/accordion.component"; import * as i7 from "../../../accordion/accordion-panel/accordion-panel.component"; import * as i8 from "@angular/common"; import * as i9 from "../../../../directives/template-outlet/template-outlet.directive"; import * as i10 from "../../../../directives/disabled/disabled.directive"; import * as i11 from "../../../tooltip/tooltip.directive"; import * as i12 from "../../validation-alert/validation-alert.component"; import * as i13 from "../../fieldset/fieldset.directive"; import * as i14 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 */ /* eslint-enable 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) { super(injector); /** * 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(); const index = this.value.length; this.value.push(item); this.triggerValueChange(); setTimeout(() => { const itemId = this.getItemAriaId(index, 'itemContainer'); const itemContainer = document.getElementById(itemId); const firstInput = itemContainer.querySelector('input'); if (firstInput) { firstInput.focus(); } itemContainer.scrollIntoView({ behavior: 'smooth', block: 'center' }); }); } /** * Deletes an item from the array */ delete(item) { const index = this.value.indexOf(item); // return the view to the previous item in the list. const prevItemId = this.getItemAriaId(index - 1, 'itemContainer'); const prevContainer = document.getElementById(prevItemId); if (prevContainer) { prevContainer.scrollIntoView({ behavior: 'smooth', block: 'center' }); } // focus on the add button, otherwise focus is reset to the beginning of the page this.addButton.nativeElement.focus(); this.value.splice(index, 1); this.triggerValueChange(); this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.removeButtonEvent); } /** * 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); } 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); } 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)); }; /** @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: [i6.AccordionComponent, i7.AccordionPanelComponent, i7.PanelControlComponent, i8.NgForOf, i8.NgIf, i9.TemplateOutletDirective, i10.DisabledDirective, i11.TooltipDirective, i12.ValidationAlertComponent, i13.FieldsetDirective, i14.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]) ], 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\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\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\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\r\n </sme-accordion-panel>\r\n </sme-accordion>\r\n\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\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 }]; }, { 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RyxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBYyxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUEyQjVFLDJDQUMrRDs7OztJQUR4QywyREFBc0MsMkJBQUEsa0JBQUE7Ozs7OztJQzFDL0QsNEJBQ3NGOzs7Ozs7SUFEL0IsZ0RBQTJCLGlCQUFBLHdGQUFBOzs7O0lBRWxGLGtDQUlpRTtJQURRLDRPQUFTLGVBQUEsc0JBQVksQ0FBQSxJQUFDO0lBRTdGLDJCQUEwQztJQUM1QyxpQkFBUzs7O0lB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QixNQUFNO1lBS0EsZ0JBQWdCO2tCQUR0QixNQUFNO1lBS0EscUJBQXFCO2tCQUQzQixNQUFNO1lBT0EsMkJBQTJCO2tCQURqQyxLQUFLO1lBT0MsT0FBTztrQkFEYixLQUFLO1lBT0MsT0FBTztrQkFEYixLQUFLO1lBT0MsVUFBVTtrQkFEaEIsS0FBSztZQU9DLFFBQVE7a0JBRGQsS0FBSztZQUlDLFdBQVc7a0JBRGpCLEtBQUs7WUFJQyxXQUFXO2tCQURqQixLQUFLO1lBSUMsZUFBZTtrQkFEckIsS0FBSztZQU9DLFFBQVE7a0JBRGQsS0FBSztZQUlDLGFBQWE7a0JBRG5CLEtBQUs7WUFJQyxjQUFjO2tCQURwQixLQUFLO1lBSUssU0FBUztrQkFEbkIsS0FBSztZQWFLLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsaUJBQWlCO1lBV3RCLFNBQVM7a0JBRGhCLFNBQVM7bUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb250ZW50Q2hpbGQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi8uLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBBcnJheVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZElzb2xhdG9yQ29tcG9uZW50LCBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vaXNvbGF0b3IvaXNvbGF0b3IuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXNrRm9yTmV3SXRlbUV2ZW50QXJncyB7XHJcbiAgICBpdGVtOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXNrRm9ySXRlbUhlYWRlckFyZ3Mge1xyXG4gICAgaGVhZGVyRXZhbEZ1bmM6IE1zZnRTbWUuRnVuYzI8YW55LCBudW1iZXIsIHN0cmluZz47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXNrRm9yUmVtb3ZlRXZhbEZ1bmNBcmdzIHtcclxuICAgIHJlbW92ZUV2YWxGdW5jOiBNc2Z0U21lLkZ1bmMyPGFueSwgbnVtYmVyLCBib29sZWFuPjtcclxufVxyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJhcnJheVwiIFsobmdNb2RlbCldPVwiZGF0YVwiIFtuYW1lXT1cInByb3BlcnR5U2NoZW1hLm5hbWVcIiBbbGFiZWxdPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpXCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHlTY2hlbWEucmVxdWlyZWRcIiBbZGVzY3JpcHRpb25dPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEuZGVzY3JpcHRpb24pXCIgKGFza0Zvck5ld0l0ZW0pPVwiYXNrRm9yTmV3SXRlbSgkZXZlbnQpXCJcclxuICAgICAgICBbYWRqdXN0Q29udHJvbEJ1dHRvbkxvY2F0aW9uXT1cInNob3VsZEFkanVzdENvbnRyb2xCdXR0b25Mb2NhdGlvbigpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib