{"version":3,"sources":["webpack:///./node_modules/adaptivecards/src/registry.ts","webpack:///./node_modules/adaptivecards/src/text-formatters.ts","webpack:///./node_modules/adaptivecards/src/table.ts","webpack:///./node_modules/adaptivecards/src/shared.ts","webpack:///./node_modules/adaptivecards/src/utils.ts","webpack:///./node_modules/adaptivecards/src/serialization.ts","webpack:///./node_modules/adaptivecards/src/strings.ts"],"names":["serialization_1","__webpack_require__","CardObjectRegistry","this","_items","prototype","findByName","typeName","hasOwnProperty","undefined","clear","copyTo","target","_i","keys_1","Object","keys","length","key","typeRegistration","register","objectType","schemaVersion","Versions","v1_0","registrationInfo","unregister","createInstance","targetVersion","compareTo","getItemCount","getItemAt","index","_this","map","e","exports","GlobalRegistry","populateWithDefaultElements","registry","defaultElements","populateWithDefaultActions","defaultActions","defineProperty","_elements","_actions","reset","AbstractTextFormatter","regularExpression","_regularExpression","format","lang","input","matches","result","exec","replace","internalFormat","DateFormatter","_super","__extends","date","Date","parse","toLowerCase","toLocaleDateString","day","weekday","month","year","TimeFormatter","toLocaleTimeString","hour","minute","formatText","text","formatters_1","card_elements_1","enums_1","registry_1","shared_1","strings_1","utils_1","TableColumnDefinition","apply","arguments","width","SizeAndUnit","SizeUnit","Weight","getSchemaKey","horizontalCellContentAlignmentProperty","EnumProperty","v1_5","HorizontalAlignment","verticalCellContentAlignmentProperty","VerticalAlignment","widthProperty","CustomProperty","sender","prop","source","context","defaultValue","value","name","invalidWidth","isNaN","logParseEvent","ValidationEvent","InvalidPropertyValue","Strings","errors","invalidColumnWidth","property","unit","Pixel","serializeValue","physicalSize","serializeNumber","__decorate","SerializableObject","StylableContainer","parseItem","parseCardObject","isDesignMode","createItemInstance","_errorType","ElementTypeNotAllowed","elementTypeNotAllowed","internalAddItem","item","parent","Error","elementAlreadyParented","push","setParent","internalRemoveItem","itemIndex","indexOf","splice","updateLayout","internalIndexOf","internalParse","call","items","getCollectionPropertyName","Array","isArray","items_1","instance","internalToJSON","serializeArray","removeItem","getFirstVisibleRenderedItem","getLastVisibleRenderedItem","StylableCardElementContainer","TableCell","_columnIndex","_cellType","getHasBorder","parentRow","parentTable","showGridLines","applyBorder","renderedElement","styleDefinition","hostConfig","containerStyles","getStyleByName","gridStyle","borderColor","stringToCssColor","style","borderRight","borderBottom","getDefaultPadding","getHasBackground","PaddingDefinition","Spacing","Small","internalRender","cellElement","setAttribute","cellType","minWidth","shouldSerialize","_context","getJsonTypeName","getEffectiveTextStyleDefinition","textStyles","columnHeader","getEffectiveHorizontalAlignment","horizontalAlignment","horizontalCellContentAlignment","columnIndex","getColumnAt","getEffectiveVerticalContentAlignment","verticalContentAlignment","verticalCellContentAlignment","verticalAlignment","Container","TableRow","None","applyBackground","defaultStyle","backgroundColor","bgColor","isFirstRow","getIsFirstRow","cellSpacing","table","rowElement","document","createElement","display","flexDirection","i","Math","min","getColumnCount","cell","firstRowAsHeaders","renderedCell","render","column","computedWidth","flex","marginLeft","appendChild","children","addCell","removeCellAt","cardElement","ensureHasEnoughCells","cellCount","styleProperty","ContainerStyleProperty","Table","_columns","getValue","gridStyleProperty","setValue","ensureRowsHaveEnoughCells","removeCellsFromColumn","totalWeights","_a","_b","_c","tableElement","borderTop","borderLeft","renderedRow","separatorRow","height","addColumn","removeColumn","addRow","row","_columnsProperty","SerializableObjectCollectionProperty","firstRowAsHeadersProperty","BoolProperty","showGridLinesProperty","Enums","GlobalSettings","useAdvancedTextBlockTruncation","useAdvancedCardBottomTruncation","useMarkdownInRadioButtonAndCheckbox","allowMarkForTextHighlighting","alwaysBleedSeparators","enableFullJsonRoundTrip","displayInputValidationErrors","allowPreProcessingPropertyValues","setTabIndexAtCardRoot","enableFallback","useWebkitLineClamp","allowMoreThanMaxActionsInOverflowMenu","removePaddingFromContainersWithBackgroundImage","resetInputsDirtyStateAfterActionExecution","applets","logEnabled","logLevel","LogLevel","maximumRetryAttempts","defaultTimeBetweenRetryAttempts","authPromptWidth","authPromptHeight","refresh","mode","RefreshMode","Manual","timeBetweenAutomaticRefreshes","maximumConsecutiveAutomaticRefreshes","allowManualRefreshesAfterAutomaticRefreshes","ContentTypes","applicationJson","applicationXWwwFormUrlencoded","StringWithSubstitutions","_isProcessed","getReferencedInputs","inputs","referencedInputs","_original","inputs_1","RegExp","id","substituteInputValues","contentType","_processed","regEx","matchedInput","valueForReplace","JSON","stringify","slice","encodeURIComponent","getOriginal","get","set","SpacingDefinition","top","right","bottom","left","requireUnitSpecifier","expectedMatchCount","parseInt","UUID","generate","d0","random","d1","d2","d3","lut","initialize","toString","Shared","getEnumValueByName","enumType","keyAsNumber","truncateWorker","element","maxHeight","fullText","truncateAt","lineHeight","fits","scrollHeight","breakableIndices","html","results","idx","findNextCharacter","findBreakableIndices","lo","hi","bestBreakIdx","mid","floor","isInternetExplorer","window","documentMode","isMobileOS","userAgent","navigator","match","generateUniqueId","node","child","parseString","obj","parseNumber","parseBool","parseEnum","enumValue","color","a","truncateText","innerText","substring","ttDeprecatedPolicy","trustedTypes","createPolicy","createHTML","currIdx","truncate","innerHTML","truncatedString","truncatedHTML","getFitStatus","containerEnd","start","offsetTop","clientHeight","ContainerFitStatus","FullyInContainer","Overflowing","FullyOutOfContainer","getScrollX","pageXOffset","getScrollY","pageYOffset","clearElementChildren","firstChild","removeChild","addCancelSelectActionEventHandler","onclick","preventDefault","cancelBubble","debounce","fn","delay","timer","args","clearTimeout","setTimeout","Utils","Version","major","minor","label","_isValid","_major","_minor","_label","versionString","_versionString","invalidVersionString","toJSON","otherVersion","isValid","getAllDeclaredVersions","ctor","properties","propertyName","propertyValue","sort","v1","v2","v1_1","v1_2","v1_3","v1_4","v1_6","latest","isVersionLessOrEqual","version","BaseSerializationContext","_validationEvents","isTemplateString","startsWith","tryDeleteValue","tryDeleteDefaultValue","forceDeleteIfNullOrDefault","serializeString","serializeBool","serializeEnum","propertyValue_1","serializedItem","clearEvents","logEvent","phase","event","message","ValidationPhase","Parse","getEventAt","SimpleSerializationContext","PropertyDefinition","onGetInitialValue","isSerializationEnabled","sequentialNumber","_sequentialNumber","getInternalName","StringProperty","treatEmptyAsUndefined","parsedValue","invalidPropertyValue","NumProperty","PixelSizeProperty","size","StringArrayProperty","sourceValue","sourceValue_1","concat","ValueSetProperty","values","isValidValue","versionedValue","propertyValueNotSupported","invalidValue","ToJSON","_values","SerializableObjectProperty","nullable","serializedValue","hasAllDefaultValues","onItemAdded","sourceCollection","sourceCollection_1","sourceItem","onParse","onToJSON","SerializableObjectSchema","_properties","add","properties_1","remove","properties_2","getCount","propertyKey","descriptor","getOwnPropertyDescriptor","_propertyBag","_rawProperties","maxVersion","defaultMaxVersion","s","getSchema","getDefaultSerializationContext","populateSchema","schema","constructor","sortedProperties","p1","p2","onRegisterCustomProperties","UnsupportedProperty","propertyNotSupported","resetDefaultValues","serializedProperties","effectiveContext","toJSONOriginalParam","hasDefaultValue","setCustomProperty","getCustomProperty","_schemaCache","unknownElementType","unknownActionType","actionTypeNotAllowed","showCardMustHaveCard","invalidCardVersion","defaultingToVersion","supportedInVersion","versionUsed","indexOutOfRange","elementCannotBeUsedAsInline","inlineAlreadyParented","interactivityNotAllowed","inputsMustHaveUniqueId","choiceSetMustHaveAtLeastOneChoice","choiceSetChoicesMustHaveTitleAndValue","propertyMustBeSet","actionHttpHeadersMustHaveNameAndValue","tooManyActions","maximumActions","tooLittleTimeDelay","minAutoplayDelay","tooManyCarouselPages","maxCarouselPages","invalidInitialPageIndex","initialPageIndex","columnAlreadyBelongsToAnotherSet","invalidCardType","unsupportedCardVersion","maxSupportedVersion","duplicateId","markdownProcessingNotEnabled","processMarkdownEventRemoved","actionAlreadyParented","elementTypeNotStandalone","invalidInputLabelWidth","magicCodeInputCard","tryAgain","pleaseLogin","enterMagicCode","pleaseEnterMagicCodeYouReceived","submit","cancel","somethingWentWrong","authenticationFailed","runtime","automaticRefreshPaused","clckToRestartAutomaticRefresh","refreshThisCard","hints","dontUseWeightedAndStrecthedColumnsInSameSet","defaults","inlineActionTitle","overflowButtonText","overflowButtonTooltip","emptyElementText","elementType","mediaPlayerAriaLabel","mediaPlayerPlayMedia","youTubeVideoPlayer","vimeoVideoPlayer","dailymotionVideoPlayer","carouselNavigationPreviousTooltip","carouselNavigationNextTooltip"],"mappings":"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","file":"42.9450a9c976adac8268dd.js","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { CardElement, Action } from \"./card-elements\";\r\nimport { SerializableObject, Version, Versions } from \"./serialization\";\r\n\r\nexport interface ITypeRegistration<T extends SerializableObject> {\r\n    typeName: string;\r\n    objectType: { new (): T };\r\n    schemaVersion: Version;\r\n}\r\n\r\nexport class CardObjectRegistry<T extends SerializableObject> {\r\n    private _items: { [typeName: string]: ITypeRegistration<T> } = {};\r\n\r\n    findByName(typeName: string): ITypeRegistration<T> | undefined {\r\n        return this._items.hasOwnProperty(typeName) ? this._items[typeName] : undefined;\r\n    }\r\n\r\n    clear() {\r\n        this._items = {};\r\n    }\r\n\r\n    copyTo(target: CardObjectRegistry<T>) {\r\n        const keys = Object.keys(this._items);\r\n\r\n        for (const key of keys) {\r\n            const typeRegistration = this._items[key];\r\n\r\n            target.register(\r\n                typeRegistration.typeName,\r\n                typeRegistration.objectType,\r\n                typeRegistration.schemaVersion\r\n            );\r\n        }\r\n    }\r\n\r\n    register(\r\n        typeName: string,\r\n        objectType: { new (): T },\r\n        schemaVersion: Version = Versions.v1_0\r\n    ) {\r\n        let registrationInfo = this.findByName(typeName);\r\n\r\n        if (registrationInfo !== undefined) {\r\n            registrationInfo.objectType = objectType;\r\n        } else {\r\n            registrationInfo = {\r\n                typeName: typeName,\r\n                objectType: objectType,\r\n                schemaVersion: schemaVersion\r\n            };\r\n        }\r\n\r\n        this._items[typeName] = registrationInfo;\r\n    }\r\n\r\n    unregister(typeName: string) {\r\n        delete this._items[typeName];\r\n    }\r\n\r\n    createInstance(typeName: string, targetVersion: Version): T | undefined {\r\n        const registrationInfo = this.findByName(typeName);\r\n\r\n        return registrationInfo && registrationInfo.schemaVersion.compareTo(targetVersion) <= 0\r\n            ? new registrationInfo.objectType()\r\n            : undefined;\r\n    }\r\n\r\n    getItemCount(): number {\r\n        return Object.keys(this._items).length;\r\n    }\r\n\r\n    getItemAt(index: number): ITypeRegistration<T> {\r\n        return Object.keys(this._items).map((e) => this._items[e])[index];\r\n    }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class GlobalRegistry {\r\n    private static _elements?: CardObjectRegistry<CardElement>;\r\n    private static _actions?: CardObjectRegistry<Action>;\r\n\r\n    static populateWithDefaultElements(registry: CardObjectRegistry<CardElement>) {\r\n        registry.clear();\r\n\r\n        GlobalRegistry.defaultElements.copyTo(registry);\r\n    }\r\n\r\n    static populateWithDefaultActions(registry: CardObjectRegistry<Action>) {\r\n        registry.clear();\r\n\r\n        GlobalRegistry.defaultActions.copyTo(registry);\r\n    }\r\n\r\n    static readonly defaultElements = new CardObjectRegistry<CardElement>();\r\n    static readonly defaultActions = new CardObjectRegistry<Action>();\r\n    static get elements(): CardObjectRegistry<CardElement> {\r\n        if (!GlobalRegistry._elements) {\r\n            GlobalRegistry._elements = new CardObjectRegistry<CardElement>();\r\n            GlobalRegistry.populateWithDefaultElements(GlobalRegistry._elements);\r\n        }\r\n\r\n        return GlobalRegistry._elements;\r\n    }\r\n\r\n    static get actions(): CardObjectRegistry<Action> {\r\n        if (!GlobalRegistry._actions) {\r\n            GlobalRegistry._actions = new CardObjectRegistry<Action>();\r\n            GlobalRegistry.populateWithDefaultActions(GlobalRegistry._actions);\r\n        }\r\n\r\n        return GlobalRegistry._actions;\r\n    }\r\n\r\n    static reset() {\r\n        GlobalRegistry._elements = undefined;\r\n        GlobalRegistry._actions = undefined;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nabstract class AbstractTextFormatter {\r\n    private _regularExpression: RegExp;\r\n\r\n    protected abstract internalFormat(lang: string | undefined, matches: RegExpExecArray): string;\r\n\r\n    constructor(regularExpression: RegExp) {\r\n        this._regularExpression = regularExpression;\r\n    }\r\n\r\n    format(lang: string | undefined, input: string | undefined): string | undefined {\r\n        let matches;\r\n\r\n        if (input) {\r\n            let result = input;\r\n\r\n            while ((matches = this._regularExpression.exec(input)) != null) {\r\n                result = result.replace(matches[0], this.internalFormat(lang, matches));\r\n            }\r\n\r\n            return result;\r\n        } else {\r\n            return input;\r\n        }\r\n    }\r\n}\r\n\r\nclass DateFormatter extends AbstractTextFormatter {\r\n    protected internalFormat(lang: string | undefined, matches: RegExpExecArray): string {\r\n        const date = new Date(Date.parse(matches[1]));\r\n        const format = matches[2] !== undefined ? matches[2].toLowerCase() : \"compact\";\r\n\r\n        if (format !== \"compact\") {\r\n            return date.toLocaleDateString(lang, {\r\n                day: \"numeric\",\r\n                weekday: format,\r\n                month: format,\r\n                year: \"numeric\"\r\n            } as Intl.DateTimeFormatOptions);\r\n        } else {\r\n            return date.toLocaleDateString();\r\n        }\r\n    }\r\n}\r\n\r\nclass TimeFormatter extends AbstractTextFormatter {\r\n    protected internalFormat(lang: string | undefined, matches: RegExpExecArray): string {\r\n        const date = new Date(Date.parse(matches[1]));\r\n\r\n        return date.toLocaleTimeString(lang, { hour: \"numeric\", minute: \"2-digit\" });\r\n    }\r\n}\r\n\r\nexport function formatText(lang: string | undefined, text: string | undefined): string | undefined {\r\n    const formatters: AbstractTextFormatter[] = [\r\n        new DateFormatter(\r\n            /\\{{2}DATE\\((\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:Z|(?:(?:-|\\+)\\d{2}:\\d{2})))(?:, ?(COMPACT|LONG|SHORT))?\\)\\}{2}/g\r\n        ),\r\n        new TimeFormatter(\r\n            /\\{{2}TIME\\((\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:Z|(?:(?:-|\\+)\\d{2}:\\d{2})))\\)\\}{2}/g\r\n        )\r\n    ];\r\n\r\n    let result = text;\r\n\r\n    for (const formatter of formatters) {\r\n        result = formatter.format(lang, result);\r\n    }\r\n\r\n    return result;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport {\r\n    CardElement,\r\n    StylableCardElementContainer,\r\n    SerializationContext,\r\n    Container,\r\n    ContainerStyleProperty\r\n} from \"./card-elements\";\r\nimport {\r\n    HorizontalAlignment,\r\n    VerticalAlignment,\r\n    SizeUnit,\r\n    ValidationEvent,\r\n    TypeErrorType,\r\n    Spacing\r\n} from \"./enums\";\r\nimport { TextStyleDefinition } from \"./host-config\";\r\nimport { GlobalRegistry } from \"./registry\";\r\nimport {\r\n    BaseSerializationContext,\r\n    BoolProperty,\r\n    CustomProperty,\r\n    EnumProperty,\r\n    property,\r\n    PropertyBag,\r\n    PropertyDefinition,\r\n    SerializableObject,\r\n    SerializableObjectCollectionProperty,\r\n    Versions\r\n} from \"./serialization\";\r\nimport { SizeAndUnit, PaddingDefinition } from \"./shared\";\r\nimport { Strings } from \"./strings\";\r\nimport { stringToCssColor } from \"./utils\";\r\n\r\nexport class TableColumnDefinition extends SerializableObject {\r\n    //#region Schema\r\n\r\n    static readonly horizontalCellContentAlignmentProperty = new EnumProperty(\r\n        Versions.v1_5,\r\n        \"horizontalCellContentAlignment\",\r\n        HorizontalAlignment\r\n    );\r\n    static readonly verticalCellContentAlignmentProperty = new EnumProperty(\r\n        Versions.v1_5,\r\n        \"verticalCellContentAlignment\",\r\n        VerticalAlignment\r\n    );\r\n\r\n    static readonly widthProperty = new CustomProperty<SizeAndUnit>(\r\n        Versions.v1_5,\r\n        \"width\",\r\n        (\r\n            sender: SerializableObject,\r\n            prop: PropertyDefinition,\r\n            source: PropertyBag,\r\n            context: BaseSerializationContext\r\n        ) => {\r\n            let result: SizeAndUnit = prop.defaultValue;\r\n            const value = source[prop.name];\r\n            let invalidWidth = false;\r\n\r\n            if (typeof value === \"number\" && !isNaN(value)) {\r\n                result = new SizeAndUnit(value, SizeUnit.Weight);\r\n            } else if (typeof value === \"string\") {\r\n                try {\r\n                    result = SizeAndUnit.parse(value);\r\n                } catch (e) {\r\n                    invalidWidth = true;\r\n                }\r\n            } else {\r\n                invalidWidth = true;\r\n            }\r\n\r\n            if (invalidWidth) {\r\n                context.logParseEvent(\r\n                    sender,\r\n                    ValidationEvent.InvalidPropertyValue,\r\n                    Strings.errors.invalidColumnWidth(value)\r\n                );\r\n            }\r\n\r\n            return result;\r\n        },\r\n        (\r\n            sender: SerializableObject,\r\n            property: PropertyDefinition,\r\n            target: PropertyBag,\r\n            value: SizeAndUnit,\r\n            context: BaseSerializationContext\r\n        ) => {\r\n            if (value.unit === SizeUnit.Pixel) {\r\n                context.serializeValue(target, \"width\", value.physicalSize + \"px\");\r\n            } else {\r\n                context.serializeNumber(target, \"width\", value.physicalSize);\r\n            }\r\n        },\r\n        new SizeAndUnit(1, SizeUnit.Weight)\r\n    );\r\n\r\n    @property(TableColumnDefinition.horizontalCellContentAlignmentProperty)\r\n    horizontalCellContentAlignment?: HorizontalAlignment;\r\n\r\n    @property(TableColumnDefinition.verticalCellContentAlignmentProperty)\r\n    verticalCellContentAlignment?: VerticalAlignment;\r\n\r\n    @property(TableColumnDefinition.widthProperty)\r\n    width: SizeAndUnit = new SizeAndUnit(1, SizeUnit.Weight);\r\n\r\n    getSchemaKey(): string {\r\n        return \"ColumnDefinition\";\r\n    }\r\n\r\n    //#endregion\r\n\r\n    computedWidth: SizeAndUnit;\r\n}\r\n\r\nexport abstract class StylableContainer<\r\n    T extends CardElement\r\n> extends StylableCardElementContainer {\r\n    private _items: T[] = [];\r\n\r\n    private parseItem(source: any, context: SerializationContext): T | undefined {\r\n        return context.parseCardObject<T>(\r\n            this,\r\n            source,\r\n            [], // Forbidden types not supported for elements for now\r\n            !this.isDesignMode(),\r\n            (typeName: string) => {\r\n                return this.createItemInstance(typeName);\r\n            },\r\n            (typeName: string, _errorType: TypeErrorType) => {\r\n                context.logParseEvent(\r\n                    undefined,\r\n                    ValidationEvent.ElementTypeNotAllowed,\r\n                    Strings.errors.elementTypeNotAllowed(typeName)\r\n                );\r\n            }\r\n        );\r\n    }\r\n\r\n    protected abstract getCollectionPropertyName(): string;\r\n    protected abstract createItemInstance(typeName: string): T | undefined;\r\n\r\n    protected internalAddItem(item: T) {\r\n        if (!item.parent) {\r\n            this._items.push(item);\r\n\r\n            item.setParent(this);\r\n        } else {\r\n            throw new Error(Strings.errors.elementAlreadyParented());\r\n        }\r\n    }\r\n\r\n    protected internalRemoveItem(item: T): boolean {\r\n        const itemIndex = this._items.indexOf(item);\r\n\r\n        if (itemIndex >= 0) {\r\n            this._items.splice(itemIndex, 1);\r\n\r\n            item.setParent(undefined);\r\n\r\n            this.updateLayout();\r\n\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    protected internalIndexOf(item: T): number {\r\n        return this._items.indexOf(item);\r\n    }\r\n\r\n    protected internalParse(source: any, context: SerializationContext) {\r\n        super.internalParse(source, context);\r\n\r\n        this._items = [];\r\n\r\n        const items = source[this.getCollectionPropertyName()];\r\n\r\n        if (Array.isArray(items)) {\r\n            for (const item of items) {\r\n                const instance = this.parseItem(item, context);\r\n\r\n                if (instance) {\r\n                    this._items.push(instance);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n        super.internalToJSON(target, context);\r\n\r\n        context.serializeArray(target, this.getCollectionPropertyName(), this._items);\r\n    }\r\n\r\n    removeItem(item: T): boolean {\r\n        return this.internalRemoveItem(item);\r\n    }\r\n\r\n    getItemCount(): number {\r\n        return this._items.length;\r\n    }\r\n\r\n    getItemAt(index: number): T {\r\n        return this._items[index];\r\n    }\r\n\r\n    getFirstVisibleRenderedItem(): T | undefined {\r\n        return this.getItemCount() > 0 ? this.getItemAt(0) : undefined;\r\n    }\r\n\r\n    getLastVisibleRenderedItem(): T | undefined {\r\n        return this.getItemCount() > 0 ? this.getItemAt(this.getItemCount() - 1) : undefined;\r\n    }\r\n}\r\n\r\nexport type CellType = \"data\" | \"header\";\r\n\r\nexport class TableCell extends Container {\r\n    private _columnIndex: number = -1;\r\n    private _cellType: CellType = \"data\";\r\n\r\n    protected getHasBorder(): boolean {\r\n        return this.parentRow.parentTable.showGridLines;\r\n    }\r\n\r\n    protected applyBorder() {\r\n        if (this.renderedElement && this.getHasBorder()) {\r\n            const styleDefinition = this.hostConfig.containerStyles.getStyleByName(\r\n                this.parentRow.parentTable.gridStyle\r\n            );\r\n\r\n            if (styleDefinition.borderColor) {\r\n                const borderColor = stringToCssColor(styleDefinition.borderColor);\r\n\r\n                if (borderColor) {\r\n                    this.renderedElement.style.borderRight = \"1px solid \" + borderColor;\r\n                    this.renderedElement.style.borderBottom = \"1px solid \" + borderColor;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected getDefaultPadding(): PaddingDefinition {\r\n        return this.getHasBackground() || this.getHasBorder()\r\n            ? new PaddingDefinition(Spacing.Small, Spacing.Small, Spacing.Small, Spacing.Small)\r\n            : super.getDefaultPadding();\r\n    }\r\n\r\n    protected internalRender(): HTMLElement | undefined {\r\n        const cellElement = super.internalRender();\r\n\r\n        if (cellElement) {\r\n            cellElement.setAttribute(\"role\", this.cellType === \"data\" ? \"cell\" : \"columnheader\");\r\n            cellElement.style.minWidth = \"0\";\r\n\r\n            if (this.cellType === \"header\") {\r\n                cellElement.setAttribute(\"scope\", \"col\");\r\n            }\r\n        }\r\n\r\n        return cellElement;\r\n    }\r\n\r\n    protected shouldSerialize(_context: SerializationContext): boolean {\r\n        return true;\r\n    }\r\n\r\n    getJsonTypeName(): string {\r\n        return \"TableCell\";\r\n    }\r\n\r\n    getEffectiveTextStyleDefinition(): TextStyleDefinition {\r\n        if (this.cellType === \"header\") {\r\n            return this.hostConfig.textStyles.columnHeader;\r\n        }\r\n\r\n        return super.getEffectiveTextStyleDefinition();\r\n    }\r\n\r\n    getEffectiveHorizontalAlignment(): HorizontalAlignment {\r\n        if (this.horizontalAlignment !== undefined) {\r\n            return this.horizontalAlignment;\r\n        }\r\n\r\n        if (this.parentRow.horizontalCellContentAlignment !== undefined) {\r\n            return this.parentRow.horizontalCellContentAlignment;\r\n        }\r\n\r\n        if (this.columnIndex >= 0) {\r\n            const horizontalAlignment = this.parentRow.parentTable.getColumnAt(\r\n                this.columnIndex\r\n            ).horizontalCellContentAlignment;\r\n\r\n            if (horizontalAlignment !== undefined) {\r\n                return horizontalAlignment;\r\n            }\r\n        }\r\n\r\n        if (this.parentRow.parentTable.horizontalCellContentAlignment !== undefined) {\r\n            return this.parentRow.parentTable.horizontalCellContentAlignment;\r\n        }\r\n\r\n        return super.getEffectiveHorizontalAlignment();\r\n    }\r\n\r\n    getEffectiveVerticalContentAlignment(): VerticalAlignment {\r\n        if (this.verticalContentAlignment !== undefined) {\r\n            return this.verticalContentAlignment;\r\n        }\r\n\r\n        if (this.parentRow.verticalCellContentAlignment !== undefined) {\r\n            return this.parentRow.verticalCellContentAlignment;\r\n        }\r\n\r\n        if (this.columnIndex >= 0) {\r\n            const verticalAlignment = this.parentRow.parentTable.getColumnAt(\r\n                this.columnIndex\r\n            ).verticalCellContentAlignment;\r\n\r\n            if (verticalAlignment !== undefined) {\r\n                return verticalAlignment;\r\n            }\r\n        }\r\n\r\n        if (this.parentRow.parentTable.verticalCellContentAlignment !== undefined) {\r\n            return this.parentRow.parentTable.verticalCellContentAlignment;\r\n        }\r\n\r\n        return super.getEffectiveVerticalContentAlignment();\r\n    }\r\n\r\n    get columnIndex(): number {\r\n        return this._columnIndex;\r\n    }\r\n\r\n    get cellType(): CellType {\r\n        return this._cellType;\r\n    }\r\n\r\n    get parentRow(): TableRow {\r\n        return this.parent as TableRow;\r\n    }\r\n\r\n    get isStandalone(): boolean {\r\n        return false;\r\n    }\r\n}\r\n\r\nexport class TableRow extends StylableContainer<TableCell> {\r\n    //#region Schema\r\n\r\n    static readonly styleProperty = new ContainerStyleProperty(Versions.v1_5, \"style\");\r\n    static readonly horizontalCellContentAlignmentProperty = new EnumProperty(\r\n        Versions.v1_5,\r\n        \"horizontalCellContentAlignment\",\r\n        HorizontalAlignment\r\n    );\r\n    static readonly verticalCellContentAlignmentProperty = new EnumProperty(\r\n        Versions.v1_5,\r\n        \"verticalCellContentAlignment\",\r\n        VerticalAlignment\r\n    );\r\n\r\n    @property(TableRow.horizontalCellContentAlignmentProperty)\r\n    horizontalCellContentAlignment?: HorizontalAlignment;\r\n\r\n    @property(TableRow.verticalCellContentAlignmentProperty)\r\n    verticalCellContentAlignment?: VerticalAlignment;\r\n\r\n    //#endregion\r\n\r\n    protected getDefaultPadding(): PaddingDefinition {\r\n        return new PaddingDefinition(Spacing.None, Spacing.None, Spacing.None, Spacing.None);\r\n    }\r\n\r\n    protected applyBackground() {\r\n        if (this.renderedElement) {\r\n            const styleDefinition = this.hostConfig.containerStyles.getStyleByName(\r\n                this.style,\r\n                this.hostConfig.containerStyles.getStyleByName(this.defaultStyle)\r\n            );\r\n\r\n            if (styleDefinition.backgroundColor) {\r\n                const bgColor = stringToCssColor(styleDefinition.backgroundColor);\r\n\r\n                if (bgColor) {\r\n                    this.renderedElement.style.backgroundColor = bgColor;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected getCollectionPropertyName(): string {\r\n        return \"cells\";\r\n    }\r\n\r\n    protected createItemInstance(typeName: string): TableCell | undefined {\r\n        return !typeName || typeName === \"TableCell\" ? new TableCell() : undefined;\r\n    }\r\n\r\n    protected internalRender(): HTMLElement | undefined {\r\n        const isFirstRow = this.getIsFirstRow();\r\n        const cellSpacing = this.hostConfig.table.cellSpacing;\r\n\r\n        const rowElement = document.createElement(\"div\");\r\n        rowElement.setAttribute(\"role\", \"row\");\r\n        rowElement.style.display = \"flex\";\r\n        rowElement.style.flexDirection = \"row\";\r\n\r\n        for (let i = 0; i < Math.min(this.getItemCount(), this.parentTable.getColumnCount()); i++) {\r\n            const cell = this.getItemAt(i);\r\n\r\n            // Cheating a bit in order to keep cellType read-only\r\n            cell[\"_columnIndex\"] = i;\r\n            cell[\"_cellType\"] =\r\n                this.parentTable.firstRowAsHeaders && isFirstRow ? \"header\" : \"data\";\r\n\r\n            const renderedCell = cell.render();\r\n\r\n            if (renderedCell) {\r\n                const column = this.parentTable.getColumnAt(i);\r\n\r\n                if (column.computedWidth.unit === SizeUnit.Pixel) {\r\n                    renderedCell.style.flex = \"0 0 \" + column.computedWidth.physicalSize + \"px\";\r\n                } else {\r\n                    renderedCell.style.flex = \"1 1 \" + column.computedWidth.physicalSize + \"%\";\r\n                }\r\n\r\n                if (i > 0 && !this.parentTable.showGridLines && cellSpacing > 0) {\r\n                    renderedCell.style.marginLeft = cellSpacing + \"px\";\r\n                }\r\n\r\n                rowElement.appendChild(renderedCell);\r\n            }\r\n        }\r\n\r\n        return rowElement.children.length > 0 ? rowElement : undefined;\r\n    }\r\n\r\n    protected shouldSerialize(_context: SerializationContext): boolean {\r\n        return true;\r\n    }\r\n\r\n    addCell(cell: TableCell) {\r\n        this.internalAddItem(cell);\r\n    }\r\n\r\n    removeCellAt(columnIndex: number): boolean {\r\n        if (columnIndex >= 0 && columnIndex < this.getItemCount()) {\r\n            return this.removeItem(this.getItemAt(columnIndex));\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    indexOf(cardElement: CardElement): number {\r\n        return cardElement instanceof TableCell ? this.internalIndexOf(cardElement) : -1;\r\n    }\r\n\r\n    ensureHasEnoughCells(cellCount: number) {\r\n        while (this.getItemCount() < cellCount) {\r\n            this.addCell(new TableCell());\r\n        }\r\n    }\r\n\r\n    getJsonTypeName(): string {\r\n        return \"TableRow\";\r\n    }\r\n\r\n    getIsFirstRow(): boolean {\r\n        return this.parentTable.getItemAt(0) === this;\r\n    }\r\n\r\n    get parentTable(): Table {\r\n        return this.parent as Table;\r\n    }\r\n\r\n    get isStandalone(): boolean {\r\n        return false;\r\n    }\r\n}\r\n\r\nexport class Table extends StylableContainer<TableRow> {\r\n    //#region Schema\r\n\r\n    private static readonly _columnsProperty = new SerializableObjectCollectionProperty(\r\n        Versions.v1_5,\r\n        \"columns\",\r\n        TableColumnDefinition\r\n    );\r\n\r\n    static readonly firstRowAsHeadersProperty = new BoolProperty(\r\n        Versions.v1_5,\r\n        \"firstRowAsHeaders\",\r\n        true\r\n    );\r\n    static readonly showGridLinesProperty = new BoolProperty(Versions.v1_5, \"showGridLines\", true);\r\n    static readonly gridStyleProperty = new ContainerStyleProperty(Versions.v1_5, \"gridStyle\");\r\n    static readonly horizontalCellContentAlignmentProperty = new EnumProperty(\r\n        Versions.v1_5,\r\n        \"horizontalCellContentAlignment\",\r\n        HorizontalAlignment\r\n    );\r\n    static readonly verticalCellContentAlignmentProperty = new EnumProperty(\r\n        Versions.v1_5,\r\n        \"verticalCellContentAlignment\",\r\n        VerticalAlignment\r\n    );\r\n\r\n    @property(Table._columnsProperty)\r\n    private _columns: TableColumnDefinition[] = [];\r\n\r\n    @property(Table.firstRowAsHeadersProperty)\r\n    firstRowAsHeaders: boolean = true;\r\n\r\n    @property(Table.showGridLinesProperty)\r\n    showGridLines: boolean = true;\r\n\r\n    @property(Table.gridStyleProperty)\r\n    get gridStyle(): string | undefined {\r\n        const style = this.getValue(Table.gridStyleProperty);\r\n\r\n        if (style && this.hostConfig.containerStyles.getStyleByName(style)) {\r\n            return style;\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    set gridStyle(value: string | undefined) {\r\n        this.setValue(Table.gridStyleProperty, value);\r\n    }\r\n\r\n    @property(Table.horizontalCellContentAlignmentProperty)\r\n    horizontalCellContentAlignment?: HorizontalAlignment;\r\n\r\n    @property(Table.verticalCellContentAlignmentProperty)\r\n    verticalCellContentAlignment?: VerticalAlignment;\r\n\r\n    //#endregion\r\n\r\n    private ensureRowsHaveEnoughCells() {\r\n        for (let i = 0; i < this.getItemCount(); i++) {\r\n            this.getItemAt(i).ensureHasEnoughCells(this.getColumnCount());\r\n        }\r\n    }\r\n\r\n    private removeCellsFromColumn(columnIndex: number) {\r\n        for (let i = 0; i < this.getItemCount(); i++) {\r\n            this.getItemAt(i).removeCellAt(columnIndex);\r\n        }\r\n    }\r\n\r\n    protected getCollectionPropertyName(): string {\r\n        return \"rows\";\r\n    }\r\n\r\n    protected createItemInstance(typeName: string): TableRow | undefined {\r\n        return !typeName || typeName === \"TableRow\" ? new TableRow() : undefined;\r\n    }\r\n\r\n    protected internalParse(source: PropertyBag, context: SerializationContext) {\r\n        super.internalParse(source, context);\r\n\r\n        this.ensureRowsHaveEnoughCells();\r\n    }\r\n\r\n    protected internalRender(): HTMLElement | undefined {\r\n        if (this.getItemCount() > 0) {\r\n            let totalWeights: number = 0;\r\n\r\n            for (const column of this._columns) {\r\n                if (column.width.unit === SizeUnit.Weight) {\r\n                    totalWeights += column.width.physicalSize;\r\n                }\r\n            }\r\n\r\n            for (const column of this._columns) {\r\n                if (column.width.unit === SizeUnit.Pixel) {\r\n                    column.computedWidth = new SizeAndUnit(\r\n                        column.width.physicalSize,\r\n                        SizeUnit.Pixel\r\n                    );\r\n                } else {\r\n                    column.computedWidth = new SizeAndUnit(\r\n                        (100 / totalWeights) * column.width.physicalSize,\r\n                        SizeUnit.Weight\r\n                    );\r\n                }\r\n            }\r\n\r\n            const tableElement = document.createElement(\"div\");\r\n            tableElement.setAttribute(\"role\", \"table\");\r\n            tableElement.style.display = \"flex\";\r\n            tableElement.style.flexDirection = \"column\";\r\n\r\n            if (this.showGridLines) {\r\n                const styleDefinition = this.hostConfig.containerStyles.getStyleByName(\r\n                    this.gridStyle\r\n                );\r\n\r\n                if (styleDefinition.borderColor) {\r\n                    const borderColor = stringToCssColor(styleDefinition.borderColor);\r\n\r\n                    if (borderColor) {\r\n                        tableElement.style.borderTop = \"1px solid \" + borderColor;\r\n                        tableElement.style.borderLeft = \"1px solid \" + borderColor;\r\n                    }\r\n                }\r\n            }\r\n\r\n            const cellSpacing = this.hostConfig.table.cellSpacing;\r\n\r\n            for (let i = 0; i < this.getItemCount(); i++) {\r\n                const renderedRow = this.getItemAt(i).render();\r\n\r\n                if (renderedRow) {\r\n                    if (i > 0 && !this.showGridLines && cellSpacing > 0) {\r\n                        const separatorRow = document.createElement(\"div\");\r\n                        separatorRow.setAttribute(\"aria-hidden\", \"true\");\r\n                        separatorRow.style.height = cellSpacing + \"px\";\r\n\r\n                        tableElement.appendChild(separatorRow);\r\n                    }\r\n\r\n                    tableElement.appendChild(renderedRow);\r\n                }\r\n            }\r\n\r\n            return tableElement;\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    addColumn(column: TableColumnDefinition) {\r\n        this._columns.push(column);\r\n\r\n        this.ensureRowsHaveEnoughCells();\r\n    }\r\n\r\n    removeColumn(column: TableColumnDefinition) {\r\n        const index = this._columns.indexOf(column);\r\n\r\n        if (index >= 0) {\r\n            this.removeCellsFromColumn(index);\r\n\r\n            this._columns.splice(index, 1);\r\n        }\r\n    }\r\n\r\n    getColumnCount(): number {\r\n        return this._columns.length;\r\n    }\r\n\r\n    getColumnAt(index: number): TableColumnDefinition {\r\n        return this._columns[index];\r\n    }\r\n\r\n    addRow(row: TableRow) {\r\n        this.internalAddItem(row);\r\n\r\n        row.ensureHasEnoughCells(this.getColumnCount());\r\n    }\r\n\r\n    indexOf(cardElement: CardElement): number {\r\n        return cardElement instanceof TableRow ? this.internalIndexOf(cardElement) : -1;\r\n    }\r\n\r\n    getJsonTypeName(): string {\r\n        return \"Table\";\r\n    }\r\n}\r\n\r\nGlobalRegistry.defaultElements.register(\"Table\", Table, Versions.v1_5);\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as Enums from \"./enums\";\r\n\r\nexport type Refresh = {\r\n    mode: Enums.RefreshMode;\r\n    timeBetweenAutomaticRefreshes: number;\r\n    maximumConsecutiveAutomaticRefreshes: number;\r\n    allowManualRefreshesAfterAutomaticRefreshes: boolean;\r\n};\r\n\r\nexport type AppletsSettings = {\r\n    logEnabled: boolean;\r\n    logLevel: Enums.LogLevel;\r\n    maximumRetryAttempts: number;\r\n    defaultTimeBetweenRetryAttempts: number;\r\n    authPromptWidth: number;\r\n    authPromptHeight: number;\r\n    readonly refresh: Refresh;\r\n    onLogEvent?: (level: Enums.LogLevel, message?: any, ...optionalParams: any[]) => void;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class GlobalSettings {\r\n    static useAdvancedTextBlockTruncation: boolean = true;\r\n    static useAdvancedCardBottomTruncation: boolean = false;\r\n    static useMarkdownInRadioButtonAndCheckbox: boolean = true;\r\n    static allowMarkForTextHighlighting: boolean = false;\r\n    static alwaysBleedSeparators: boolean = false;\r\n    static enableFullJsonRoundTrip: boolean = false;\r\n    static displayInputValidationErrors: boolean = true;\r\n    static allowPreProcessingPropertyValues: boolean = false;\r\n    static setTabIndexAtCardRoot: boolean = true;\r\n    static enableFallback: boolean = true;\r\n    static useWebkitLineClamp: boolean = true;\r\n    static allowMoreThanMaxActionsInOverflowMenu: boolean = false;\r\n    static removePaddingFromContainersWithBackgroundImage: boolean = false;\r\n    static resetInputsDirtyStateAfterActionExecution: boolean = true;\r\n\r\n    static readonly applets: AppletsSettings = {\r\n        logEnabled: true,\r\n        logLevel: Enums.LogLevel.Error,\r\n        maximumRetryAttempts: 3,\r\n        defaultTimeBetweenRetryAttempts: 3000, // 3 seconds\r\n        authPromptWidth: 400,\r\n        authPromptHeight: 600,\r\n        refresh: {\r\n            mode: Enums.RefreshMode.Manual,\r\n            timeBetweenAutomaticRefreshes: 3000, // 3 seconds\r\n            maximumConsecutiveAutomaticRefreshes: 3,\r\n            allowManualRefreshesAfterAutomaticRefreshes: true\r\n        }\r\n    };\r\n}\r\n\r\nexport const ContentTypes = {\r\n    applicationJson: \"application/json\",\r\n    applicationXWwwFormUrlencoded: \"application/x-www-form-urlencoded\"\r\n};\r\n\r\nexport interface ISeparationDefinition {\r\n    spacing: number;\r\n    lineThickness?: number;\r\n    lineColor?: string;\r\n}\r\n\r\nexport interface IInput {\r\n    id?: string;\r\n    value?: string;\r\n    validateValue(): boolean;\r\n}\r\n\r\nexport type Dictionary<T> = { [key: string]: T };\r\n\r\nexport class StringWithSubstitutions {\r\n    private _isProcessed: boolean = false;\r\n    private _original?: string;\r\n    private _processed?: string;\r\n\r\n    getReferencedInputs(inputs: IInput[], referencedInputs: Dictionary<IInput>) {\r\n        if (!referencedInputs) {\r\n            throw new Error(\"The referencedInputs parameter cannot be null.\");\r\n        }\r\n\r\n        if (this._original) {\r\n            for (const input of inputs) {\r\n                const matches = new RegExp(\"\\\\{{2}(\" + input.id + \").value\\\\}{2}\", \"gi\").exec(\r\n                    this._original\r\n                );\r\n\r\n                if (matches != null && input.id) {\r\n                    referencedInputs[input.id] = input;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    substituteInputValues(inputs: Dictionary<IInput>, contentType: string) {\r\n        this._processed = this._original;\r\n\r\n        if (this._original) {\r\n            const regEx = /\\{{2}([a-z0-9_$@]+).value\\}{2}/gi;\r\n            let matches;\r\n\r\n            while ((matches = regEx.exec(this._original)) !== null && this._processed) {\r\n                for (const key of Object.keys(inputs)) {\r\n                    if (key.toLowerCase() === matches[1].toLowerCase()) {\r\n                        const matchedInput = inputs[key];\r\n\r\n                        let valueForReplace = \"\";\r\n\r\n                        if (matchedInput.value) {\r\n                            valueForReplace = matchedInput.value;\r\n                        }\r\n\r\n                        if (contentType === ContentTypes.applicationJson) {\r\n                            valueForReplace = JSON.stringify(valueForReplace);\r\n                            valueForReplace = valueForReplace.slice(1, -1);\r\n                        } else if (contentType === ContentTypes.applicationXWwwFormUrlencoded) {\r\n                            valueForReplace = encodeURIComponent(valueForReplace);\r\n                        }\r\n\r\n                        this._processed = this._processed.replace(matches[0], valueForReplace);\r\n\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        this._isProcessed = true;\r\n    }\r\n\r\n    getOriginal(): string | undefined {\r\n        return this._original;\r\n    }\r\n\r\n    get(): string | undefined {\r\n        if (!this._isProcessed) {\r\n            return this._original;\r\n        } else {\r\n            return this._processed;\r\n        }\r\n    }\r\n\r\n    set(value: string | undefined) {\r\n        this._original = value;\r\n        this._isProcessed = false;\r\n    }\r\n}\r\n\r\nexport class SpacingDefinition {\r\n    left: number = 0;\r\n    top: number = 0;\r\n    right: number = 0;\r\n    bottom: number = 0;\r\n\r\n    constructor(top: number = 0, right: number = 0, bottom: number = 0, left: number = 0) {\r\n        this.top = top;\r\n        this.right = right;\r\n        this.bottom = bottom;\r\n        this.left = left;\r\n    }\r\n}\r\n\r\nexport class PaddingDefinition {\r\n    top: Enums.Spacing = Enums.Spacing.None;\r\n    right: Enums.Spacing = Enums.Spacing.None;\r\n    bottom: Enums.Spacing = Enums.Spacing.None;\r\n    left: Enums.Spacing = Enums.Spacing.None;\r\n\r\n    constructor(\r\n        top: Enums.Spacing = Enums.Spacing.None,\r\n        right: Enums.Spacing = Enums.Spacing.None,\r\n        bottom: Enums.Spacing = Enums.Spacing.None,\r\n        left: Enums.Spacing = Enums.Spacing.None\r\n    ) {\r\n        this.top = top;\r\n        this.right = right;\r\n        this.bottom = bottom;\r\n        this.left = left;\r\n    }\r\n}\r\n\r\nexport class SizeAndUnit {\r\n    physicalSize: number;\r\n    unit: Enums.SizeUnit;\r\n\r\n    static parse(input: string, requireUnitSpecifier: boolean = false): SizeAndUnit {\r\n        const result = new SizeAndUnit(0, Enums.SizeUnit.Weight);\r\n\r\n        if (typeof input === \"number\") {\r\n            result.physicalSize = input;\r\n\r\n            return result;\r\n        } else if (typeof input === \"string\") {\r\n            const regExp = /^([0-9]+)(px|\\*)?$/g;\r\n            const matches = regExp.exec(input);\r\n            const expectedMatchCount = requireUnitSpecifier ? 3 : 2;\r\n\r\n            if (matches && matches.length >= expectedMatchCount) {\r\n                result.physicalSize = parseInt(matches[1]);\r\n\r\n                if (matches.length === 3) {\r\n                    if (matches[2] === \"px\") {\r\n                        result.unit = Enums.SizeUnit.Pixel;\r\n                    }\r\n                }\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        throw new Error(\"Invalid size: \" + input);\r\n    }\r\n\r\n    constructor(physicalSize: number, unit: Enums.SizeUnit) {\r\n        this.physicalSize = physicalSize;\r\n        this.unit = unit;\r\n    }\r\n}\r\n\r\nexport interface IResourceInformation {\r\n    url: string;\r\n    mimeType: string;\r\n}\r\n\r\n/**\r\n * Fast UUID generator, RFC4122 version 4 compliant.\r\n * @author Jeff Ward (jcward.com).\r\n * @license MIT license\r\n * @link http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\r\n **/\r\n/* eslint-disable @typescript-eslint/no-extraneous-class, @typescript-eslint/naming-convention, no-bitwise */\r\nexport class UUID {\r\n    private static lut: string[] = [];\r\n\r\n    static generate(): string {\r\n        const d0 = (Math.random() * 0xffffffff) | 0;\r\n        const d1 = (Math.random() * 0xffffffff) | 0;\r\n        const d2 = (Math.random() * 0xffffffff) | 0;\r\n        const d3 = (Math.random() * 0xffffffff) | 0;\r\n\r\n        return (\r\n            UUID.lut[d0 & 0xff] +\r\n            UUID.lut[(d0 >> 8) & 0xff] +\r\n            UUID.lut[(d0 >> 16) & 0xff] +\r\n            UUID.lut[(d0 >> 24) & 0xff] +\r\n            \"-\" +\r\n            UUID.lut[d1 & 0xff] +\r\n            UUID.lut[(d1 >> 8) & 0xff] +\r\n            \"-\" +\r\n            UUID.lut[((d1 >> 16) & 0x0f) | 0x40] +\r\n            UUID.lut[(d1 >> 24) & 0xff] +\r\n            \"-\" +\r\n            UUID.lut[(d2 & 0x3f) | 0x80] +\r\n            UUID.lut[(d2 >> 8) & 0xff] +\r\n            \"-\" +\r\n            UUID.lut[(d2 >> 16) & 0xff] +\r\n            UUID.lut[(d2 >> 24) & 0xff] +\r\n            UUID.lut[d3 & 0xff] +\r\n            UUID.lut[(d3 >> 8) & 0xff] +\r\n            UUID.lut[(d3 >> 16) & 0xff] +\r\n            UUID.lut[(d3 >> 24) & 0xff]\r\n        );\r\n    }\r\n\r\n    static initialize() {\r\n        for (let i = 0; i < 256; i++) {\r\n            UUID.lut[i] = (i < 16 ? \"0\" : \"\") + i.toString(16);\r\n        }\r\n    }\r\n}\r\n\r\nUUID.initialize();\r\n/* eslint-enable @typescript-eslint/no-extraneous-class, @typescript-eslint/naming-convention, no-bitwise */\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as Enums from \"./enums\";\r\nimport * as Shared from \"./shared\";\r\n\r\n// To work around TypeScript complaining about documentMode not being declared\r\n// on type Document\r\ndeclare global {\r\n    // eslint-disable-next-line @typescript-eslint/naming-convention\r\n    interface Document {\r\n        documentMode?: any;\r\n    }\r\n}\r\n\r\nexport function isInternetExplorer(): boolean {\r\n    // The documentMode property only exists in IE\r\n    return window.document.documentMode !== undefined;\r\n}\r\n\r\nexport function isMobileOS(): boolean {\r\n    const userAgent = window.navigator.userAgent;\r\n\r\n    return (\r\n        !!userAgent.match(/Android/i) || !!userAgent.match(/iPad/i) || !!userAgent.match(/iPhone/i)\r\n    );\r\n}\r\n\r\n/**\r\n * Generate a UUID prepended with \"__ac-\"\r\n */\r\nexport function generateUniqueId(): string {\r\n    return \"__ac-\" + Shared.UUID.generate();\r\n}\r\n\r\nexport function appendChild(node: Node, child: Node | undefined) {\r\n    if (child) {\r\n        node.appendChild(child);\r\n    }\r\n}\r\n\r\nexport function parseString(obj: any, defaultValue?: string): string | undefined {\r\n    return typeof obj === \"string\" ? obj : defaultValue;\r\n}\r\n\r\nexport function parseNumber(obj: any, defaultValue?: number): number | undefined {\r\n    return typeof obj === \"number\" ? obj : defaultValue;\r\n}\r\n\r\nexport function parseBool(value: any, defaultValue?: boolean): boolean | undefined {\r\n    if (typeof value === \"boolean\") {\r\n        return value;\r\n    } else if (typeof value === \"string\") {\r\n        switch (value.toLowerCase()) {\r\n            case \"true\":\r\n                return true;\r\n            case \"false\":\r\n                return false;\r\n            default:\r\n                return defaultValue;\r\n        }\r\n    }\r\n\r\n    return defaultValue;\r\n}\r\n\r\nexport function getEnumValueByName(\r\n    enumType: { [s: number]: string },\r\n    name: string\r\n): number | undefined {\r\n    // eslint-disable-next-line guard-for-in\r\n    for (const key in enumType) {\r\n        const keyAsNumber = parseInt(key, 10);\r\n\r\n        if (keyAsNumber >= 0) {\r\n            const value = enumType[key];\r\n\r\n            if (value && typeof value === \"string\" && value.toLowerCase() === name.toLowerCase()) {\r\n                return keyAsNumber;\r\n            }\r\n        }\r\n    }\r\n\r\n    return undefined;\r\n}\r\n\r\nexport function parseEnum(\r\n    enumType: { [s: number]: string },\r\n    name: string,\r\n    defaultValue?: number\r\n): number | undefined {\r\n    if (!name) {\r\n        return defaultValue;\r\n    }\r\n\r\n    const enumValue = getEnumValueByName(enumType, name);\r\n\r\n    return enumValue !== undefined ? enumValue : defaultValue;\r\n}\r\n\r\nexport function stringToCssColor(color: string | undefined): string | undefined {\r\n    if (color) {\r\n        const regEx = /#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})?/gi;\r\n        const matches = regEx.exec(color);\r\n\r\n        if (matches && matches[4]) {\r\n            const a = parseInt(matches[1], 16) / 255;\r\n            const r = parseInt(matches[2], 16);\r\n            const g = parseInt(matches[3], 16);\r\n            const b = parseInt(matches[4], 16);\r\n\r\n            return \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + a + \")\";\r\n        }\r\n    }\r\n\r\n    return color;\r\n}\r\n\r\nfunction truncateWorker(\r\n    element: HTMLElement,\r\n    maxHeight: number,\r\n    fullText: string,\r\n    truncateAt: (text: string, idx: number) => void,\r\n    lineHeight?: number\r\n) {\r\n    const fits = () => {\r\n        // Allow a one pixel overflow to account for rounding differences\r\n        // between browsers\r\n        return maxHeight - element.scrollHeight >= -1.0;\r\n    };\r\n\r\n    if (fits()) {\r\n        return;\r\n    }\r\n\r\n    const breakableIndices = findBreakableIndices(fullText);\r\n    let lo = 0;\r\n    let hi = breakableIndices.length;\r\n    let bestBreakIdx = 0;\r\n\r\n    // Do a binary search for the longest string that fits\r\n    while (lo < hi) {\r\n        const mid = Math.floor((lo + hi) / 2);\r\n        truncateAt(fullText, breakableIndices[mid]);\r\n\r\n        if (fits()) {\r\n            bestBreakIdx = breakableIndices[mid];\r\n            lo = mid + 1;\r\n        } else {\r\n            hi = mid;\r\n        }\r\n    }\r\n\r\n    truncateAt(fullText, bestBreakIdx);\r\n\r\n    // If we have extra room, try to expand the string letter by letter\r\n    // (covers the case where we have to break in the middle of a long word)\r\n    if (lineHeight && maxHeight - element.scrollHeight >= lineHeight - 1.0) {\r\n        let idx = findNextCharacter(fullText, bestBreakIdx);\r\n\r\n        while (idx < fullText.length) {\r\n            truncateAt(fullText, idx);\r\n\r\n            if (fits()) {\r\n                bestBreakIdx = idx;\r\n                idx = findNextCharacter(fullText, idx);\r\n            } else {\r\n                break;\r\n            }\r\n        }\r\n\r\n        truncateAt(fullText, bestBreakIdx);\r\n    }\r\n}\r\n\r\nexport function truncateText(element: HTMLElement, maxHeight: number, lineHeight?: number) {\r\n    truncateWorker(\r\n        element,\r\n        maxHeight,\r\n        element.innerText,\r\n        (text: string, idx: number) => {\r\n            element.innerText = text.substring(0, idx) + \"...\";\r\n        },\r\n        lineHeight\r\n    );\r\n}\r\n\r\n/**\r\n * {@link truncate} has been deprecated and is no longer in use internally. This policy passes\r\n * content through as it always has, which is _supposed_ to be dealing with text only (see {@link\r\n * TextBlock.truncateIfSupported}), but had a bug where it might actually pass through an element\r\n * for which innerHTML yielded actual HTML (since fixed).\r\n */\r\nconst ttDeprecatedPolicy = (typeof window === 'undefined') ? undefined : window.trustedTypes?.createPolicy(\"adaptivecards#deprecatedExportedFunctionPolicy\", {\r\n    createHTML: (value) => value\r\n});\r\n\r\n/** @deprecated Use {@link truncateText} instead. */\r\nexport function truncate(element: HTMLElement, maxHeight: number, lineHeight?: number) {\r\n    truncateWorker(\r\n        element,\r\n        maxHeight,\r\n        element.innerHTML,\r\n        (text: string, idx: number) => {\r\n            const truncatedString = text.substring(0, idx) + \"...\";\r\n            const truncatedHTML =\r\n                ttDeprecatedPolicy?.createHTML(truncatedString) ?? truncatedString;\r\n            element.innerHTML = truncatedHTML as string;\r\n        },\r\n        lineHeight\r\n    );\r\n}\r\n\r\nfunction findBreakableIndices(html: string): number[] {\r\n    const results: number[] = [];\r\n    let idx = findNextCharacter(html, -1);\r\n\r\n    while (idx < html.length) {\r\n        if (html[idx] === \" \") {\r\n            results.push(idx);\r\n        }\r\n\r\n        idx = findNextCharacter(html, idx);\r\n    }\r\n\r\n    return results;\r\n}\r\n\r\nfunction findNextCharacter(html: string, currIdx: number): number {\r\n    currIdx += 1;\r\n\r\n    // If we found the start of an HTML tag, keep advancing until we get\r\n    // past it, so we don't end up truncating in the middle of the tag\r\n    while (currIdx < html.length && html[currIdx] === \"<\") {\r\n        while (currIdx < html.length && html[currIdx++] !== \">\") {\r\n            continue;\r\n        }\r\n    }\r\n\r\n    return currIdx;\r\n}\r\n\r\nexport function getFitStatus(element: HTMLElement, containerEnd: number): Enums.ContainerFitStatus {\r\n    const start = element.offsetTop;\r\n    const end = start + element.clientHeight;\r\n\r\n    if (end <= containerEnd) {\r\n        return Enums.ContainerFitStatus.FullyInContainer;\r\n    } else if (start < containerEnd) {\r\n        return Enums.ContainerFitStatus.Overflowing;\r\n    } else {\r\n        return Enums.ContainerFitStatus.FullyOutOfContainer;\r\n    }\r\n}\r\n\r\nexport function getScrollX(): number {\r\n    return window.pageXOffset;\r\n}\r\n\r\nexport function getScrollY(): number {\r\n    return window.pageYOffset;\r\n}\r\n\r\nexport function clearElementChildren(element: HTMLElement) {\r\n    while (element.firstChild) {\r\n        element.removeChild(element.firstChild);\r\n    }\r\n}\r\n\r\nexport function addCancelSelectActionEventHandler(element: HTMLElement) {\r\n    element.onclick = (e) => {\r\n        e.preventDefault();\r\n        e.cancelBubble = true;\r\n    };\r\n}\r\n\r\nexport function debounce(fn: (...args: unknown[]) => unknown, delay: number) {\r\n    let timer: NodeJS.Timeout;\r\n    function debouncedFn(...args: unknown[]) {\r\n        if (timer) {\r\n            clearTimeout(timer);\r\n        }\r\n        timer = setTimeout(() => {\r\n            fn(...args);\r\n        }, delay);\r\n    }\r\n    return debouncedFn;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { GlobalSettings, SizeAndUnit } from \"./shared\";\r\nimport * as Utils from \"./utils\";\r\nimport * as Enums from \"./enums\";\r\nimport { Strings } from \"./strings\";\r\n\r\nexport interface IValidationEvent {\r\n    source?: SerializableObject;\r\n    phase: Enums.ValidationPhase;\r\n    event: Enums.ValidationEvent;\r\n    message: string;\r\n}\r\n\r\nexport class Version {\r\n    private _versionString: string;\r\n    private _major: number;\r\n    private _minor: number;\r\n    private _isValid: boolean = true;\r\n    private _label?: string;\r\n\r\n    constructor(major: number = 1, minor: number = 1, label?: string) {\r\n        this._major = major;\r\n        this._minor = minor;\r\n        this._label = label;\r\n    }\r\n\r\n    static parse(versionString: string, context: BaseSerializationContext): Version | undefined {\r\n        if (!versionString) {\r\n            return undefined;\r\n        }\r\n\r\n        const result = new Version();\r\n        result._versionString = versionString;\r\n\r\n        const regEx = /(\\d+).(\\d+)/gi;\r\n        const matches = regEx.exec(versionString);\r\n\r\n        if (matches != null && matches.length === 3) {\r\n            result._major = parseInt(matches[1]);\r\n            result._minor = parseInt(matches[2]);\r\n        } else {\r\n            result._isValid = false;\r\n        }\r\n\r\n        if (!result._isValid) {\r\n            context.logParseEvent(\r\n                undefined,\r\n                Enums.ValidationEvent.InvalidPropertyValue,\r\n                Strings.errors.invalidVersionString(result._versionString)\r\n            );\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    toString(): string {\r\n        return !this._isValid ? this._versionString : this._major + \".\" + this._minor;\r\n    }\r\n\r\n    toJSON(): any {\r\n        return this.toString();\r\n    }\r\n\r\n    compareTo(otherVersion: Version): number {\r\n        if (!this.isValid || !otherVersion.isValid) {\r\n            throw new Error(\"Cannot compare invalid version.\");\r\n        }\r\n\r\n        if (this.major > otherVersion.major) {\r\n            return 1;\r\n        } else if (this.major < otherVersion.major) {\r\n            return -1;\r\n        } else if (this.minor > otherVersion.minor) {\r\n            return 1;\r\n        } else if (this.minor < otherVersion.minor) {\r\n            return -1;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    get label(): string {\r\n        return this._label ? this._label : this.toString();\r\n    }\r\n\r\n    get major(): number {\r\n        return this._major;\r\n    }\r\n\r\n    get minor(): number {\r\n        return this._minor;\r\n    }\r\n\r\n    get isValid(): boolean {\r\n        return this._isValid;\r\n    }\r\n}\r\n\r\nexport type TargetVersion = Version | \"*\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class Versions {\r\n    /* eslint-disable @typescript-eslint/naming-convention */\r\n    static readonly v1_0 = new Version(1, 0);\r\n    static readonly v1_1 = new Version(1, 1);\r\n    static readonly v1_2 = new Version(1, 2);\r\n    static readonly v1_3 = new Version(1, 3);\r\n    static readonly v1_4 = new Version(1, 4);\r\n    static readonly v1_5 = new Version(1, 5);\r\n    static readonly v1_6 = new Version(1, 6);\r\n    static readonly latest = Versions.v1_6;\r\n    // If preview tag is added/removed from any version,\r\n    // don't forget to update .ac-schema-version-1-?::after too in adaptivecards-site\\themes\\adaptivecards\\source\\css\\style.css\r\n    /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n    static getAllDeclaredVersions(): Version[] {\r\n        const ctor = <any>Versions;\r\n        const properties: Version[] = [];\r\n\r\n        for (const propertyName in ctor) {\r\n            if (propertyName.match(/^v[0-9_]*$/)) {\r\n                // filter latest\r\n                try {\r\n                    const propertyValue = ctor[propertyName];\r\n\r\n                    if (propertyValue instanceof Version) {\r\n                        properties.push(propertyValue);\r\n                    }\r\n                } catch {\r\n                    // If a property happens to have a getter function and\r\n                    // it throws an exception, we need to catch it here\r\n                }\r\n            }\r\n        }\r\n        return properties.sort((v1: Version, v2: Version) => v1.compareTo(v2));\r\n    }\r\n}\r\n\r\nexport function isVersionLessOrEqual(\r\n    version: TargetVersion,\r\n    targetVersion: TargetVersion\r\n): boolean {\r\n    if (version instanceof Version) {\r\n        if (targetVersion instanceof Version) {\r\n            return targetVersion.compareTo(version) >= 0;\r\n        } else {\r\n            // Target version is *\r\n            return true;\r\n        }\r\n    } else {\r\n        // Version is *\r\n        return true;\r\n    }\r\n}\r\n\r\nexport abstract class BaseSerializationContext {\r\n    private _validationEvents: IValidationEvent[] = [];\r\n\r\n    toJSONOriginalParam: any;\r\n    targetVersion: Version;\r\n\r\n    constructor(targetVersion: Version = Versions.latest) {\r\n        this.targetVersion = targetVersion;\r\n    }\r\n    \r\n    private isTemplateString(value: any) {\r\n        if (typeof value === \"string\") {\r\n            return value.startsWith(\"${\");\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    private tryDeleteValue(target: { [key: string]: any }, propertyName: string) {\r\n        if (!GlobalSettings.enableFullJsonRoundTrip) {\r\n            delete target[propertyName];\r\n        }\r\n    }\r\n\r\n    private tryDeleteDefaultValue(target: { [key: string]: any }, propertyName: string) {\r\n        if (!GlobalSettings.enableFullJsonRoundTrip || !this.isTemplateString(target[propertyName])) {\r\n            delete target[propertyName];\r\n        }\r\n    }\r\n\r\n    serializeValue(\r\n        target: { [key: string]: any },\r\n        propertyName: string,\r\n        propertyValue: any,\r\n        defaultValue: any = undefined,\r\n        forceDeleteIfNullOrDefault: boolean = false\r\n    ) {\r\n        if (\r\n            propertyValue === null ||\r\n            propertyValue === undefined\r\n        ) {\r\n            if (!GlobalSettings.enableFullJsonRoundTrip || forceDeleteIfNullOrDefault) {\r\n                delete target[propertyName];\r\n            }\r\n        } else if (propertyValue === defaultValue) {\r\n            if (!GlobalSettings.enableFullJsonRoundTrip || forceDeleteIfNullOrDefault || !this.isTemplateString(target[propertyName])) {\r\n                delete target[propertyName];\r\n            }\r\n        } else {\r\n            target[propertyName] = propertyValue;\r\n        }\r\n    }\r\n\r\n    serializeString(\r\n        target: { [key: string]: any },\r\n        propertyName: string,\r\n        propertyValue?: string,\r\n        defaultValue?: string\r\n    ) {\r\n        if (\r\n            propertyValue === null ||\r\n            propertyValue === undefined\r\n        ) {\r\n            this.tryDeleteValue(target, propertyName);\r\n        } else if (propertyValue === defaultValue) {\r\n            this.tryDeleteDefaultValue(target, propertyName);\r\n        } else {\r\n            target[propertyName] = propertyValue;\r\n        }\r\n    }\r\n\r\n    serializeBool(\r\n        target: { [key: string]: any },\r\n        propertyName: string,\r\n        propertyValue?: boolean,\r\n        defaultValue?: boolean\r\n    ) {\r\n        if (\r\n            propertyValue === null ||\r\n            propertyValue === undefined\r\n        ) {\r\n            this.tryDeleteValue(target, propertyName);\r\n        } else if (propertyValue === defaultValue) {\r\n            this.tryDeleteDefaultValue(target, propertyName);\r\n        } else {\r\n            target[propertyName] = propertyValue;\r\n        }\r\n    }\r\n\r\n    serializeNumber(\r\n        target: { [key: string]: any },\r\n        propertyName: string,\r\n        propertyValue?: number,\r\n        defaultValue?: number\r\n    ) {\r\n        if (\r\n            propertyValue === null ||\r\n            propertyValue === undefined ||\r\n            isNaN(propertyValue)\r\n        ) {\r\n            this.tryDeleteValue(target, propertyName);\r\n        } else if (propertyValue === defaultValue) {\r\n            this.tryDeleteDefaultValue(target, propertyName);\r\n        } else {\r\n            target[propertyName] = propertyValue;\r\n        }\r\n    }\r\n\r\n    serializeEnum(\r\n        enumType: { [s: number]: string },\r\n        target: { [key: string]: any },\r\n        propertyName: string,\r\n        propertyValue: number | undefined,\r\n        defaultValue: number | undefined = undefined\r\n    ) {\r\n        if (\r\n            propertyValue === null ||\r\n            propertyValue === undefined\r\n        ) {\r\n            this.tryDeleteValue(target, propertyName);\r\n        } else if (propertyValue === defaultValue) {\r\n            this.tryDeleteDefaultValue(target, propertyName);\r\n        } else {\r\n            target[propertyName] = enumType[propertyValue];\r\n        }\r\n    }\r\n\r\n    serializeArray(\r\n        target: { [key: string]: any },\r\n        propertyName: string,\r\n        propertyValue: any[] | undefined\r\n    ) {\r\n        const items = [];\r\n\r\n        if (propertyValue) {\r\n            for (const item of propertyValue) {\r\n                let serializedItem: any = undefined;\r\n\r\n                if (item instanceof SerializableObject) {\r\n                    serializedItem = item.toJSON(this);\r\n                } else if (item.toJSON) {\r\n                    serializedItem = item.toJSON();\r\n                } else {\r\n                    serializedItem = item;\r\n                }\r\n\r\n                if (serializedItem !== undefined) {\r\n                    items.push(serializedItem);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (items.length === 0) {\r\n            if (target.hasOwnProperty(propertyName) && Array.isArray(target[propertyName])) {\r\n                delete target[propertyName];\r\n            }\r\n        } else {\r\n            this.serializeValue(target, propertyName, items);\r\n        }\r\n    }\r\n\r\n    clearEvents() {\r\n        this._validationEvents = [];\r\n    }\r\n\r\n    logEvent(\r\n        source: SerializableObject | undefined,\r\n        phase: Enums.ValidationPhase,\r\n        event: Enums.ValidationEvent,\r\n        message: string\r\n    ) {\r\n        this._validationEvents.push({\r\n            source: source,\r\n            phase: phase,\r\n            event: event,\r\n            message: message\r\n        });\r\n    }\r\n\r\n    logParseEvent(\r\n        source: SerializableObject | undefined,\r\n        event: Enums.ValidationEvent,\r\n        message: string\r\n    ) {\r\n        this.logEvent(source, Enums.ValidationPhase.Parse, event, message);\r\n    }\r\n\r\n    getEventAt(index: number): IValidationEvent {\r\n        return this._validationEvents[index];\r\n    }\r\n\r\n    get eventCount(): number {\r\n        return this._validationEvents.length;\r\n    }\r\n}\r\n\r\nclass SimpleSerializationContext extends BaseSerializationContext {}\r\n\r\nexport class PropertyDefinition {\r\n    private static _sequentialNumber: number = 0;\r\n\r\n    getInternalName(): string {\r\n        return this.name;\r\n    }\r\n\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): any {\r\n        return source[this.name];\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: any,\r\n        context: BaseSerializationContext\r\n    ): void {\r\n        context.serializeValue(target, this.name, value, this.defaultValue);\r\n    }\r\n\r\n    readonly sequentialNumber: number;\r\n\r\n    isSerializationEnabled: boolean = true;\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly defaultValue?: any,\r\n        readonly onGetInitialValue?: (sender: SerializableObject) => any\r\n    ) {\r\n        this.sequentialNumber = PropertyDefinition._sequentialNumber;\r\n\r\n        PropertyDefinition._sequentialNumber++;\r\n    }\r\n}\r\n\r\nexport class StringProperty extends PropertyDefinition {\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): string | undefined {\r\n        const parsedValue = Utils.parseString(source[this.name], this.defaultValue);\r\n        const isUndefined =\r\n            parsedValue === undefined || (parsedValue === \"\" && this.treatEmptyAsUndefined);\r\n\r\n        if (!isUndefined && this.regEx !== undefined) {\r\n            const matches = this.regEx.exec(parsedValue);\r\n\r\n            if (!matches) {\r\n                context.logParseEvent(\r\n                    sender,\r\n                    Enums.ValidationEvent.InvalidPropertyValue,\r\n                    Strings.errors.invalidPropertyValue(parsedValue, this.name)\r\n                );\r\n\r\n                return undefined;\r\n            }\r\n        }\r\n\r\n        return parsedValue;\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: string | undefined,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        context.serializeString(\r\n            target,\r\n            this.name,\r\n            value === \"\" && this.treatEmptyAsUndefined ? undefined : value,\r\n            this.defaultValue\r\n        );\r\n    }\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly treatEmptyAsUndefined: boolean = true,\r\n        readonly regEx?: RegExp,\r\n        readonly defaultValue?: string,\r\n        readonly onGetInitialValue?: (sender: SerializableObject) => string\r\n    ) {\r\n        super(targetVersion, name, defaultValue, onGetInitialValue);\r\n    }\r\n}\r\n\r\nexport class BoolProperty extends PropertyDefinition {\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): boolean | undefined {\r\n        return Utils.parseBool(source[this.name], this.defaultValue);\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: object,\r\n        value: boolean | undefined,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        context.serializeBool(target, this.name, value, this.defaultValue);\r\n    }\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly defaultValue?: boolean,\r\n        readonly onGetInitialValue?: (sender: SerializableObject) => any\r\n    ) {\r\n        super(targetVersion, name, defaultValue, onGetInitialValue);\r\n    }\r\n}\r\n\r\nexport class NumProperty extends PropertyDefinition {\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): number | undefined {\r\n        return Utils.parseNumber(source[this.name], this.defaultValue);\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: number | undefined,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        context.serializeNumber(target, this.name, value, this.defaultValue);\r\n    }\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly defaultValue?: number,\r\n        readonly onGetInitialValue?: (sender: SerializableObject) => any\r\n    ) {\r\n        super(targetVersion, name, defaultValue, onGetInitialValue);\r\n    }\r\n}\r\n\r\nexport class PixelSizeProperty extends PropertyDefinition {\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): number | undefined {\r\n        let result: number | undefined = undefined;\r\n        const value = source[this.name];\r\n\r\n        if (typeof value === \"string\") {\r\n            let isValid = false;\r\n\r\n            try {\r\n                const size = SizeAndUnit.parse(value, true);\r\n\r\n                if (size.unit === Enums.SizeUnit.Pixel) {\r\n                    result = size.physicalSize;\r\n\r\n                    isValid = true;\r\n                }\r\n            } catch {\r\n                // Do nothing. A parse error is emitted below\r\n            }\r\n\r\n            if (!isValid) {\r\n                context.logParseEvent(\r\n                    sender,\r\n                    Enums.ValidationEvent.InvalidPropertyValue,\r\n                    Strings.errors.invalidPropertyValue(source[this.name], this.name)\r\n                );\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: number | undefined,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        context.serializeValue(\r\n            target,\r\n            this.name,\r\n            typeof value === \"number\" && !isNaN(value) ? value + \"px\" : undefined\r\n        );\r\n    }\r\n}\r\n\r\nexport interface IVersionedValue<TValue> {\r\n    value: TValue;\r\n    targetVersion?: Version;\r\n}\r\n\r\nexport class StringArrayProperty extends PropertyDefinition {\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): string[] | undefined {\r\n        const sourceValue = source[this.name];\r\n\r\n        if (sourceValue === undefined || !Array.isArray(sourceValue)) {\r\n            return this.defaultValue;\r\n        }\r\n\r\n        const result: string[] = [];\r\n\r\n        for (const value of sourceValue) {\r\n            if (typeof value === \"string\") {\r\n                result.push(value);\r\n            } else {\r\n                context.logParseEvent(\r\n                    sender,\r\n                    Enums.ValidationEvent.InvalidPropertyValue,\r\n                    `Invalid array value \"${JSON.stringify(\r\n                        value\r\n                    )}\" of type \"${typeof value}\" ignored for \"${this.name}\".`\r\n                );\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: string[] | undefined,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        context.serializeArray(target, this.name, value);\r\n    }\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly defaultValue?: string[],\r\n        readonly onGetInitialValue?: (sender: SerializableObject) => string[] | undefined\r\n    ) {\r\n        super(targetVersion, name, defaultValue, onGetInitialValue);\r\n    }\r\n}\r\n\r\nexport class ValueSetProperty extends PropertyDefinition {\r\n    isValidValue(value: string, context: BaseSerializationContext): boolean {\r\n        for (const versionedValue of this.values) {\r\n            if (value.toLowerCase() === versionedValue.value.toLowerCase()) {\r\n                const targetVersion = versionedValue.targetVersion\r\n                    ? versionedValue.targetVersion\r\n                    : this.targetVersion;\r\n\r\n                return targetVersion.compareTo(context.targetVersion) <= 0;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): string | undefined {\r\n        const sourceValue = source[this.name];\r\n\r\n        if (sourceValue === undefined) {\r\n            return this.defaultValue;\r\n        }\r\n\r\n        if (typeof sourceValue === \"string\") {\r\n            for (const versionedValue of this.values) {\r\n                if (sourceValue.toLowerCase() === versionedValue.value.toLowerCase()) {\r\n                    const targetVersion = versionedValue.targetVersion\r\n                        ? versionedValue.targetVersion\r\n                        : this.targetVersion;\r\n\r\n                    if (targetVersion.compareTo(context.targetVersion) <= 0) {\r\n                        return versionedValue.value;\r\n                    } else {\r\n                        context.logParseEvent(\r\n                            sender,\r\n                            Enums.ValidationEvent.InvalidPropertyValue,\r\n                            Strings.errors.propertyValueNotSupported(\r\n                                sourceValue,\r\n                                this.name,\r\n                                targetVersion.toString(),\r\n                                context.targetVersion.toString()\r\n                            )\r\n                        );\r\n\r\n                        return this.defaultValue;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        context.logParseEvent(\r\n            sender,\r\n            Enums.ValidationEvent.InvalidPropertyValue,\r\n            Strings.errors.invalidPropertyValue(sourceValue, this.name)\r\n        );\r\n\r\n        return this.defaultValue;\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: string | undefined,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        let invalidValue = false;\r\n\r\n        if (value !== undefined) {\r\n            invalidValue = true;\r\n\r\n            for (const versionedValue of this.values) {\r\n                if (versionedValue.value === value) {\r\n                    const targetVersion = versionedValue.targetVersion\r\n                        ? versionedValue.targetVersion\r\n                        : this.targetVersion;\r\n\r\n                    if (targetVersion.compareTo(context.targetVersion) <= 0) {\r\n                        invalidValue = false;\r\n\r\n                        break;\r\n                    } else {\r\n                        context.logEvent(\r\n                            sender,\r\n                            Enums.ValidationPhase.ToJSON,\r\n                            Enums.ValidationEvent.InvalidPropertyValue,\r\n                            Strings.errors.propertyValueNotSupported(\r\n                                value,\r\n                                this.name,\r\n                                targetVersion.toString(),\r\n                                context.targetVersion.toString()\r\n                            )\r\n                        );\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        if (!invalidValue) {\r\n            context.serializeValue(target, this.name, value, this.defaultValue, true);\r\n        }\r\n    }\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly values: IVersionedValue<string>[],\r\n        readonly defaultValue?: string,\r\n        readonly onGetInitialValue?: (sender: SerializableObject) => string\r\n    ) {\r\n        super(targetVersion, name, defaultValue, onGetInitialValue);\r\n    }\r\n}\r\n\r\nexport class EnumProperty<TEnum extends { [s: number]: string }> extends PropertyDefinition {\r\n    private _values: IVersionedValue<number>[] = [];\r\n\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): number | undefined {\r\n        const sourceValue = source[this.name];\r\n\r\n        if (typeof sourceValue !== \"string\") {\r\n            return this.defaultValue;\r\n        }\r\n\r\n        const enumValue = Utils.getEnumValueByName(this.enumType, sourceValue);\r\n\r\n        if (enumValue !== undefined) {\r\n            for (const versionedValue of this.values) {\r\n                if (versionedValue.value === enumValue) {\r\n                    const targetVersion = versionedValue.targetVersion\r\n                        ? versionedValue.targetVersion\r\n                        : this.targetVersion;\r\n\r\n                    if (targetVersion.compareTo(context.targetVersion) <= 0) {\r\n                        return enumValue;\r\n                    } else {\r\n                        context.logParseEvent(\r\n                            sender,\r\n                            Enums.ValidationEvent.InvalidPropertyValue,\r\n                            Strings.errors.propertyValueNotSupported(\r\n                                sourceValue,\r\n                                this.name,\r\n                                targetVersion.toString(),\r\n                                context.targetVersion.toString()\r\n                            )\r\n                        );\r\n\r\n                        return this.defaultValue;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        context.logParseEvent(\r\n            sender,\r\n            Enums.ValidationEvent.InvalidPropertyValue,\r\n            Strings.errors.invalidPropertyValue(sourceValue, this.name)\r\n        );\r\n\r\n        return this.defaultValue;\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: number | undefined,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        let invalidValue = false;\r\n\r\n        if (value !== undefined) {\r\n            invalidValue = true;\r\n\r\n            for (const versionedValue of this.values) {\r\n                if (versionedValue.value === value) {\r\n                    const targetVersion = versionedValue.targetVersion\r\n                        ? versionedValue.targetVersion\r\n                        : this.targetVersion;\r\n\r\n                    if (targetVersion.compareTo(context.targetVersion) <= 0) {\r\n                        invalidValue = false;\r\n\r\n                        break;\r\n                    } else {\r\n                        context.logEvent(\r\n                            sender,\r\n                            Enums.ValidationPhase.ToJSON,\r\n                            Enums.ValidationEvent.InvalidPropertyValue,\r\n                            Strings.errors.invalidPropertyValue(value, this.name)\r\n                        );\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        if (!invalidValue) {\r\n            context.serializeEnum(this.enumType, target, this.name, value, this.defaultValue);\r\n        }\r\n    }\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly enumType: TEnum,\r\n        readonly defaultValue?: number,\r\n        values?: IVersionedValue<number>[],\r\n        readonly onGetInitialValue?: (sender: SerializableObject) => number\r\n    ) {\r\n        super(targetVersion, name, defaultValue, onGetInitialValue);\r\n\r\n        if (!values) {\r\n            // eslint-disable-next-line guard-for-in\r\n            for (const key in enumType) {\r\n                const keyAsNumber = parseInt(key, 10);\r\n\r\n                if (keyAsNumber >= 0) {\r\n                    this._values.push({ value: keyAsNumber });\r\n                }\r\n            }\r\n        } else {\r\n            this._values = values;\r\n        }\r\n    }\r\n\r\n    get values(): IVersionedValue<number>[] {\r\n        return this._values;\r\n    }\r\n}\r\n\r\nexport type SerializableObjectType = { new (): SerializableObject };\r\n\r\nexport class SerializableObjectProperty extends PropertyDefinition {\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): SerializableObject | undefined {\r\n        const sourceValue = source[this.name];\r\n\r\n        if (sourceValue === undefined) {\r\n            return this.onGetInitialValue ? this.onGetInitialValue(sender) : this.defaultValue;\r\n        }\r\n\r\n        const result = new this.objectType();\r\n        result.parse(sourceValue, context);\r\n\r\n        return result;\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: SerializableObject | undefined,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        let serializedValue: object | undefined = undefined;\r\n\r\n        if (value !== undefined && !value.hasAllDefaultValues()) {\r\n            serializedValue = value.toJSON(context);\r\n        }\r\n\r\n        if (typeof serializedValue === \"object\" && Object.keys(serializedValue).length === 0) {\r\n            serializedValue = undefined;\r\n        }\r\n\r\n        context.serializeValue(target, this.name, serializedValue, this.defaultValue, true);\r\n    }\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly objectType: SerializableObjectType,\r\n        readonly nullable: boolean = false,\r\n        defaultValue?: SerializableObject\r\n    ) {\r\n        super(targetVersion, name, defaultValue, (sender: SerializableObject) => {\r\n            return this.nullable ? undefined : new this.objectType();\r\n        });\r\n    }\r\n}\r\n\r\nexport class SerializableObjectCollectionProperty extends PropertyDefinition {\r\n    parse(\r\n        sender: SerializableObject,\r\n        source: PropertyBag,\r\n        context: BaseSerializationContext\r\n    ): SerializableObject[] | undefined {\r\n        const result: SerializableObject[] | undefined = [];\r\n\r\n        const sourceCollection = source[this.name];\r\n\r\n        if (Array.isArray(sourceCollection)) {\r\n            for (const sourceItem of sourceCollection) {\r\n                const item = new this.objectType();\r\n                item.parse(sourceItem, context);\r\n\r\n                result.push(item);\r\n\r\n                if (this.onItemAdded) {\r\n                    this.onItemAdded(sender, item);\r\n                }\r\n            }\r\n        }\r\n\r\n        return result.length > 0\r\n            ? result\r\n            : this.onGetInitialValue\r\n            ? this.onGetInitialValue(sender)\r\n            : undefined;\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: SerializableObject[] | undefined,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        context.serializeArray(target, this.name, value);\r\n    }\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly objectType: SerializableObjectType,\r\n        readonly onItemAdded?: (sender: SerializableObject, item: SerializableObject) => void\r\n    ) {\r\n        super(targetVersion, name, undefined, (sender: SerializableObject) => {\r\n            return [];\r\n        });\r\n    }\r\n}\r\n\r\nexport class CustomProperty<T> extends PropertyDefinition {\r\n    parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): T {\r\n        return this.onParse(sender, this, source, context);\r\n    }\r\n\r\n    toJSON(\r\n        sender: SerializableObject,\r\n        target: PropertyBag,\r\n        value: T,\r\n        context: BaseSerializationContext\r\n    ) {\r\n        this.onToJSON(sender, this, target, value, context);\r\n    }\r\n\r\n    constructor(\r\n        readonly targetVersion: Version,\r\n        readonly name: string,\r\n        readonly onParse: (\r\n            sender: SerializableObject,\r\n            property: PropertyDefinition,\r\n            source: PropertyBag,\r\n            context: BaseSerializationContext\r\n        ) => T,\r\n        readonly onToJSON: (\r\n            sender: SerializableObject,\r\n            property: PropertyDefinition,\r\n            target: PropertyBag,\r\n            value: T,\r\n            context: BaseSerializationContext\r\n        ) => void,\r\n        readonly defaultValue?: T,\r\n        readonly onGetInitialValue?: (sender: SerializableObject) => T\r\n    ) {\r\n        super(targetVersion, name, defaultValue, onGetInitialValue);\r\n\r\n        if (!this.onParse) {\r\n            throw new Error(\"CustomPropertyDefinition instances must have an onParse handler.\");\r\n        }\r\n\r\n        if (!this.onToJSON) {\r\n            throw new Error(\"CustomPropertyDefinition instances must have an onToJSON handler.\");\r\n        }\r\n    }\r\n}\r\n\r\nexport class SerializableObjectSchema {\r\n    private _properties: PropertyDefinition[] = [];\r\n\r\n    indexOf(prop: PropertyDefinition): number {\r\n        for (let i = 0; i < this._properties.length; i++) {\r\n            if (this._properties[i] === prop) {\r\n                return i;\r\n            }\r\n        }\r\n\r\n        return -1;\r\n    }\r\n\r\n    add(...properties: PropertyDefinition[]) {\r\n        for (const prop of properties) {\r\n            if (this.indexOf(prop) === -1) {\r\n                this._properties.push(prop);\r\n            }\r\n        }\r\n    }\r\n\r\n    remove(...properties: PropertyDefinition[]) {\r\n        for (const prop of properties) {\r\n            while (true) {\r\n                const index = this.indexOf(prop);\r\n\r\n                if (index >= 0) {\r\n                    this._properties.splice(index, 1);\r\n                } else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    getItemAt(index: number): PropertyDefinition {\r\n        return this._properties[index];\r\n    }\r\n\r\n    getCount(): number {\r\n        return this._properties.length;\r\n    }\r\n}\r\n\r\n// This is a decorator function, used to map SerializableObject descendant class members to\r\n// schema properties\r\nexport function property(prop: PropertyDefinition) {\r\n    return function (target: any, propertyKey: string) {\r\n        const descriptor = Object.getOwnPropertyDescriptor(target, propertyKey) || {};\r\n\r\n        if (!descriptor.get && !descriptor.set) {\r\n            descriptor.get = function (this: SerializableObject) {\r\n                return this.getValue(prop);\r\n            };\r\n            descriptor.set = function (this: SerializableObject, value: any) {\r\n                this.setValue(prop, value);\r\n            };\r\n\r\n            Object.defineProperty(target, propertyKey, descriptor);\r\n        }\r\n    };\r\n}\r\n\r\nexport type PropertyBag = { [propertyName: string]: any };\r\n\r\nexport abstract class SerializableObject {\r\n    static onRegisterCustomProperties?: (\r\n        sender: SerializableObject,\r\n        schema: SerializableObjectSchema\r\n    ) => void;\r\n    static defaultMaxVersion: Version = Versions.latest;\r\n\r\n    private static readonly _schemaCache: { [typeName: string]: SerializableObjectSchema } = {};\r\n\r\n    private _propertyBag: PropertyBag = {};\r\n    private _rawProperties: PropertyBag = {};\r\n\r\n    protected abstract getSchemaKey(): string;\r\n\r\n    protected getDefaultSerializationContext(): BaseSerializationContext {\r\n        return new SimpleSerializationContext();\r\n    }\r\n\r\n    protected populateSchema(schema: SerializableObjectSchema) {\r\n        const ctor = <any>this.constructor;\r\n        const properties: PropertyDefinition[] = [];\r\n\r\n        // eslint-disable-next-line guard-for-in\r\n        for (const propertyName in ctor) {\r\n            try {\r\n                const propertyValue = ctor[propertyName];\r\n\r\n                if (propertyValue instanceof PropertyDefinition) {\r\n                    properties.push(propertyValue);\r\n                }\r\n            } catch {\r\n                // If a property happens to have a getter function and\r\n                // it throws an exception, we need to catch it here\r\n            }\r\n        }\r\n\r\n        if (properties.length > 0) {\r\n            const sortedProperties = properties.sort(\r\n                (p1: PropertyDefinition, p2: PropertyDefinition) => {\r\n                    if (p1.sequentialNumber > p2.sequentialNumber) {\r\n                        return 1;\r\n                    } else if (p1.sequentialNumber < p2.sequentialNumber) {\r\n                        return -1;\r\n                    }\r\n\r\n                    return 0;\r\n                }\r\n            );\r\n\r\n            schema.add(...sortedProperties);\r\n        }\r\n\r\n        if (SerializableObject.onRegisterCustomProperties) {\r\n            SerializableObject.onRegisterCustomProperties(this, schema);\r\n        }\r\n    }\r\n\r\n    protected getValue(prop: PropertyDefinition): any {\r\n        return this._propertyBag.hasOwnProperty(prop.getInternalName())\r\n            ? this._propertyBag[prop.getInternalName()]\r\n            : prop.defaultValue;\r\n    }\r\n\r\n    protected setValue(prop: PropertyDefinition, value: any) {\r\n        if (value === undefined || value === null) {\r\n            delete this._propertyBag[prop.getInternalName()];\r\n        } else {\r\n            this._propertyBag[prop.getInternalName()] = value;\r\n        }\r\n    }\r\n\r\n    protected internalParse(source: PropertyBag, context: BaseSerializationContext) {\r\n        this._propertyBag = {};\r\n        this._rawProperties = GlobalSettings.enableFullJsonRoundTrip ? (source ? source : {}) : {};\r\n\r\n        if (source) {\r\n            const s = this.getSchema();\r\n\r\n            for (let i = 0; i < s.getCount(); i++) {\r\n                const prop = s.getItemAt(i);\r\n\r\n                if (prop.isSerializationEnabled) {\r\n                    let propertyValue = prop.onGetInitialValue\r\n                        ? prop.onGetInitialValue(this)\r\n                        : undefined;\r\n\r\n                    if (source.hasOwnProperty(prop.name)) {\r\n                        if (prop.targetVersion.compareTo(context.targetVersion) <= 0) {\r\n                            propertyValue = prop.parse(this, source, context);\r\n                        } else {\r\n                            context.logParseEvent(\r\n                                this,\r\n                                Enums.ValidationEvent.UnsupportedProperty,\r\n                                Strings.errors.propertyNotSupported(\r\n                                    prop.name,\r\n                                    prop.targetVersion.toString(),\r\n                                    context.targetVersion.toString()\r\n                                )\r\n                            );\r\n                        }\r\n                    }\r\n\r\n                    this.setValue(prop, propertyValue);\r\n                }\r\n            }\r\n        } else {\r\n            this.resetDefaultValues();\r\n        }\r\n    }\r\n\r\n    protected internalToJSON(target: PropertyBag, context: BaseSerializationContext) {\r\n        const s = this.getSchema();\r\n        const serializedProperties: string[] = [];\r\n\r\n        for (let i = 0; i < s.getCount(); i++) {\r\n            const prop = s.getItemAt(i);\r\n\r\n            // Avoid serializing the same property multiple times. This is necessary\r\n            // because some property definitions map to the same underlying schema\r\n            // property\r\n            if (\r\n                prop.isSerializationEnabled &&\r\n                prop.targetVersion.compareTo(context.targetVersion) <= 0 &&\r\n                serializedProperties.indexOf(prop.name) === -1\r\n            ) {\r\n                prop.toJSON(this, target, this.getValue(prop), context);\r\n\r\n                serializedProperties.push(prop.name);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected shouldSerialize(_context: BaseSerializationContext): boolean {\r\n        return true;\r\n    }\r\n\r\n    maxVersion: Version = SerializableObject.defaultMaxVersion;\r\n\r\n    constructor() {\r\n        const s = this.getSchema();\r\n\r\n        for (let i = 0; i < s.getCount(); i++) {\r\n            const prop = s.getItemAt(i);\r\n\r\n            if (prop.onGetInitialValue) {\r\n                this.setValue(prop, prop.onGetInitialValue(this));\r\n            }\r\n        }\r\n    }\r\n\r\n    parse(source: PropertyBag, context?: BaseSerializationContext) {\r\n        this.internalParse(source, context ? context : new SimpleSerializationContext());\r\n    }\r\n\r\n    toJSON(context?: BaseSerializationContext): PropertyBag | undefined {\r\n        let effectiveContext: BaseSerializationContext;\r\n\r\n        if (context && context instanceof BaseSerializationContext) {\r\n            effectiveContext = context;\r\n        } else {\r\n            effectiveContext = this.getDefaultSerializationContext();\r\n            effectiveContext.toJSONOriginalParam = context;\r\n        }\r\n\r\n        if (this.shouldSerialize(effectiveContext)) {\r\n            let result: PropertyBag;\r\n\r\n            if (\r\n                GlobalSettings.enableFullJsonRoundTrip &&\r\n                this._rawProperties &&\r\n                typeof this._rawProperties === \"object\"\r\n            ) {\r\n                result = this._rawProperties;\r\n            } else {\r\n                result = {};\r\n            }\r\n\r\n            this.internalToJSON(result, effectiveContext);\r\n\r\n            return result;\r\n        } else {\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n    hasDefaultValue(prop: PropertyDefinition): boolean {\r\n        return this.getValue(prop) === prop.defaultValue;\r\n    }\r\n\r\n    hasAllDefaultValues(): boolean {\r\n        const s = this.getSchema();\r\n\r\n        for (let i = 0; i < s.getCount(); i++) {\r\n            const prop = s.getItemAt(i);\r\n\r\n            if (!this.hasDefaultValue(prop)) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    resetDefaultValues() {\r\n        const s = this.getSchema();\r\n\r\n        for (let i = 0; i < s.getCount(); i++) {\r\n            const prop = s.getItemAt(i);\r\n\r\n            this.setValue(prop, prop.defaultValue);\r\n        }\r\n    }\r\n\r\n    setCustomProperty(name: string, value: any) {\r\n        const shouldDeleteProperty =\r\n            (typeof value === \"string\" && !value) || value === undefined || value === null;\r\n\r\n        if (shouldDeleteProperty) {\r\n            delete this._rawProperties[name];\r\n        } else {\r\n            this._rawProperties[name] = value;\r\n        }\r\n    }\r\n\r\n    getCustomProperty(name: string): any {\r\n        return this._rawProperties[name];\r\n    }\r\n\r\n    getSchema(): SerializableObjectSchema {\r\n        let schema: SerializableObjectSchema = SerializableObject._schemaCache[this.getSchemaKey()];\r\n\r\n        if (!schema) {\r\n            schema = new SerializableObjectSchema();\r\n\r\n            this.populateSchema(schema);\r\n\r\n            SerializableObject._schemaCache[this.getSchemaKey()] = schema;\r\n        }\r\n\r\n        return schema;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class Strings {\r\n    static readonly errors = {\r\n        unknownElementType: (typeName: string) =>\r\n            `Unknown element type \"${typeName}\". Fallback will be used if present.`,\r\n        unknownActionType: (typeName: string) =>\r\n            `Unknown action type \"${typeName}\". Fallback will be used if present.`,\r\n        elementTypeNotAllowed: (typeName: string) =>\r\n            `Element type \"${typeName}\" is not allowed in this context.`,\r\n        actionTypeNotAllowed: (typeName: string) =>\r\n            `Action type \"${typeName}\" is not allowed in this context.`,\r\n        invalidPropertyValue: (value: any, propertyName: string) =>\r\n            `Invalid value \"${value}\" for property \"${propertyName}\".`,\r\n        showCardMustHaveCard: () =>\r\n            `\"An Action.ShowCard must have its \"card\" property set to a valid AdaptiveCard object.`,\r\n        invalidColumnWidth: (invalidWidth: string) =>\r\n            `Invalid column width \"${invalidWidth}\" - defaulting to \"auto\".`,\r\n        invalidCardVersion: (defaultingToVersion: string) =>\r\n            `Invalid card version. Defaulting to \"${defaultingToVersion}\".`,\r\n        invalidVersionString: (versionString: string) =>\r\n            `Invalid version string \"${versionString}\".`,\r\n        propertyValueNotSupported: (\r\n            value: any,\r\n            propertyName: string,\r\n            supportedInVersion: string,\r\n            versionUsed: string\r\n        ) =>\r\n            `Value \"${value}\" for property \"${propertyName}\" is supported in version ${supportedInVersion}, but you are using version ${versionUsed}.`,\r\n        propertyNotSupported: (\r\n            propertyName: string,\r\n            supportedInVersion: string,\r\n            versionUsed: string\r\n        ) =>\r\n            `Property \"${propertyName}\" is supported in version ${supportedInVersion}, but you are using version ${versionUsed}.`,\r\n        indexOutOfRange: (index: number) => `Index out of range (${index}).`,\r\n        elementCannotBeUsedAsInline: () =>\r\n            \"RichTextBlock.addInline: the specified card element cannot be used as a RichTextBlock inline.\",\r\n        inlineAlreadyParented: () =>\r\n            \"RichTextBlock.addInline: the specified inline already belongs to another RichTextBlock.\",\r\n        interactivityNotAllowed: () => \"Interactivity is not allowed.\",\r\n        inputsMustHaveUniqueId: () => \"All inputs must have a unique Id.\",\r\n        choiceSetMustHaveAtLeastOneChoice: () =>\r\n            \"An Input.ChoiceSet must have at least one choice defined.\",\r\n        choiceSetChoicesMustHaveTitleAndValue: () =>\r\n            \"All choices in an Input.ChoiceSet must have their title and value properties set.\",\r\n        propertyMustBeSet: (propertyName: string) => `Property \"${propertyName}\" must be set.`,\r\n        actionHttpHeadersMustHaveNameAndValue: () =>\r\n            \"All headers of an Action.Http must have their name and value properties set.\",\r\n        tooManyActions: (maximumActions: number) =>\r\n            `Maximum number of actions exceeded (${maximumActions}).`,\r\n        tooLittleTimeDelay: (minAutoplayDelay: number) =>\r\n            `Autoplay Delay is too short (${minAutoplayDelay}).`,\r\n        tooManyCarouselPages: (maxCarouselPages: number) =>\r\n            `Maximum number of Carousel pages exceeded (${maxCarouselPages}).`,\r\n        invalidInitialPageIndex: (initialPageIndex: number) =>\r\n            `InitialPage for carousel is invalid (${initialPageIndex}).`,\r\n        columnAlreadyBelongsToAnotherSet: () => \"This column already belongs to another ColumnSet.\",\r\n        invalidCardType: () =>\r\n            `Invalid or missing card type. Make sure the card's type property is set to \"AdaptiveCard\".`,\r\n        unsupportedCardVersion: (version: string, maxSupportedVersion: string) =>\r\n            `The specified card version (${version}) is not supported or still in preview. The latest released card version is ${maxSupportedVersion}.`,\r\n        duplicateId: (id: string) => `Duplicate Id \"${id}\".`,\r\n        markdownProcessingNotEnabled: () =>\r\n            \"Markdown processing isn't enabled. Please see https://www.npmjs.com/package/adaptivecards#supporting-markdown\",\r\n        processMarkdownEventRemoved: () =>\r\n            \"The processMarkdown event has been removed. Please update your code and set onProcessMarkdown instead.\",\r\n        elementAlreadyParented: () => \"The element already belongs to another container.\",\r\n        actionAlreadyParented: () => \"The action already belongs to another element.\",\r\n        elementTypeNotStandalone: (typeName: string) =>\r\n            `Elements of type ${typeName} cannot be used as standalone elements.`,\r\n        invalidInputLabelWidth: () =>\r\n            `Invalid input label width. Defaulting to label width from host config.`,\r\n    };\r\n    static readonly magicCodeInputCard = {\r\n        tryAgain: () => \"That didn't work... let's try again.\",\r\n        pleaseLogin: () =>\r\n            'Please login in the popup. You will obtain a magic code. Paste that code below and select \"Submit\"',\r\n        enterMagicCode: () => \"Enter magic code\",\r\n        pleaseEnterMagicCodeYouReceived: () => \"Please enter the magic code you received.\",\r\n        submit: () => \"Submit\",\r\n        cancel: () => \"Cancel\",\r\n        somethingWentWrong: () => \"Something went wrong. This action can't be handled.\",\r\n        authenticationFailed: () => \"Authentication failed.\"\r\n    };\r\n    static readonly runtime = {\r\n        automaticRefreshPaused: () => \"Automatic refresh paused.\",\r\n        clckToRestartAutomaticRefresh: () => \"Click to restart.\",\r\n        refreshThisCard: () => \"Refresh this card\"\r\n    };\r\n    static readonly hints = {\r\n        dontUseWeightedAndStrecthedColumnsInSameSet: () =>\r\n            \"It is not recommended to use weighted and stretched columns in the same ColumnSet, because in such a situation stretched columns will always get the minimum amount of space.\"\r\n    };\r\n    static readonly defaults = {\r\n        inlineActionTitle: () => \"Inline Action\",\r\n        overflowButtonText: () => \"...\",\r\n        overflowButtonTooltip: () => \"More options\",\r\n        emptyElementText: (elementType: string) => `Empty ${elementType}`,\r\n        mediaPlayerAriaLabel: () => \"Media content\",\r\n        mediaPlayerPlayMedia: () => \"Play media\",\r\n        youTubeVideoPlayer: () => \"YouTube video player\",\r\n        vimeoVideoPlayer: () => \"Vimeo video player\",\r\n        dailymotionVideoPlayer: () => \"Dailymotion video player\",\r\n        carouselNavigationPreviousTooltip: () => \"Previous carousel page\",\r\n        carouselNavigationNextTooltip: () => \"Next carousel page\"\r\n    };\r\n}\r\n"],"sourceRoot":"","x_microsoft_symbol_client_key":"7419083cde932ecaddc63b525c7445243fba978f4169c92aaa89b3921441f08f"}