@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
510 lines • 73.4 kB
JavaScript
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