{"version":3,"file":"adaptivecards.min.js","mappings":"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","sources":["webpack://AdaptiveCards/webpack/universalModuleDefinition","webpack://AdaptiveCards/webpack/bootstrap","webpack://AdaptiveCards/./src/enums.ts","webpack://AdaptiveCards/webpack/runtime/define property getters","webpack://AdaptiveCards/webpack/runtime/hasOwnProperty shorthand","webpack://AdaptiveCards/webpack/runtime/make namespace object","webpack://AdaptiveCards/./src/strings.ts","webpack://AdaptiveCards/./src/shared.ts","webpack://AdaptiveCards/./src/utils.ts","webpack://AdaptiveCards/./src/serialization.ts","webpack://AdaptiveCards/./src/host-capabilities.ts","webpack://AdaptiveCards/./src/host-config.ts","webpack://AdaptiveCards/./src/registry.ts","webpack://AdaptiveCards/./src/card-object.ts","webpack://AdaptiveCards/./src/text-formatters.ts","webpack://AdaptiveCards/./src/controls/constants.ts","webpack://AdaptiveCards/./src/controls/collection.ts","webpack://AdaptiveCards/./src/controls/popup-control.ts","webpack://AdaptiveCards/./src/controls/popup-menu.ts","webpack://AdaptiveCards/./src/controls/menu-item.ts","webpack://AdaptiveCards/./src/card-elements.ts","webpack://AdaptiveCards/../node_modules/swiper/shared/ssr-window.esm.mjs","webpack://AdaptiveCards/../node_modules/swiper/shared/utils.mjs","webpack://AdaptiveCards/../node_modules/swiper/shared/swiper-core.mjs","webpack://AdaptiveCards/../node_modules/swiper/modules/keyboard.mjs","webpack://AdaptiveCards/../node_modules/swiper/shared/create-element-if-not-defined.mjs","webpack://AdaptiveCards/../node_modules/swiper/modules/navigation.mjs","webpack://AdaptiveCards/../node_modules/swiper/shared/classes-to-selector.mjs","webpack://AdaptiveCards/../node_modules/swiper/modules/pagination.mjs","webpack://AdaptiveCards/../node_modules/swiper/modules/scrollbar.mjs","webpack://AdaptiveCards/../node_modules/swiper/modules/a11y.mjs","webpack://AdaptiveCards/../node_modules/swiper/modules/history.mjs","webpack://AdaptiveCards/../node_modules/swiper/modules/autoplay.mjs","webpack://AdaptiveCards/./src/carousel.ts","webpack://AdaptiveCards/./src/activity-request.ts","webpack://AdaptiveCards/./src/table.ts","webpack://AdaptiveCards/./src/channel-adapter.ts","webpack://AdaptiveCards/./src/adaptive-applet.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"AdaptiveCards\"] = factory();\n\telse\n\t\troot[\"AdaptiveCards\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n This should really be a string enum, e.g.\r\n\r\n export enum ContainerStyle {\r\n Default = \"default\",\r\n Emphasis = \"emphasis\"\r\n }\r\n\r\n However, some hosts do not use a version of TypeScript\r\n recent enough to understand string enums. This is\r\n a compatible construct that does not require using\r\n a more recent version of TypeScript.\r\n\r\n Also note the \"weird\" way these readonly fields are declared is to work around\r\n a breaking change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n and adopt this syntax for all other static readonly fields.\r\n*/\r\n/* eslint-disable @typescript-eslint/no-extraneous-class, @typescript-eslint/naming-convention */\r\nexport class ContainerStyle {\r\n static readonly Default: \"default\" = \"default\";\r\n static readonly Emphasis: \"emphasis\" = \"emphasis\";\r\n static readonly Accent: \"accent\" = \"accent\";\r\n static readonly Good: \"good\" = \"good\";\r\n static readonly Attention: \"attention\" = \"attention\";\r\n static readonly Warning: \"warning\" = \"warning\";\r\n}\r\n\r\nexport class ActionStyle {\r\n static readonly Default: \"default\" = \"default\";\r\n static readonly Positive: \"positive\" = \"positive\";\r\n static readonly Destructive: \"destructive\" = \"destructive\";\r\n}\r\n\r\nexport class ActionMode {\r\n static readonly Primary: \"primary\" = \"primary\";\r\n static readonly Secondary: \"secondary\" = \"secondary\";\r\n}\r\n/* eslint-enable @typescript-eslint/no-extraneous-class, @typescript-eslint/naming-convention */\r\n\r\nexport enum Size {\r\n Auto,\r\n Stretch,\r\n Small,\r\n Medium,\r\n Large\r\n}\r\n\r\nexport enum ImageSize {\r\n Small,\r\n Medium,\r\n Large\r\n}\r\n\r\nexport enum ImageSetPresentationStyle {\r\n Default,\r\n Stacked,\r\n Grid\r\n}\r\n\r\nexport enum SizeUnit {\r\n Weight,\r\n Pixel\r\n}\r\n\r\nexport enum TextSize {\r\n Small,\r\n Default,\r\n Medium,\r\n Large,\r\n ExtraLarge\r\n}\r\n\r\nexport enum InputStyle {\r\n RevealOnHover,\r\n Default\r\n}\r\n\r\nexport enum TextWeight {\r\n Lighter,\r\n Default,\r\n Bolder\r\n}\r\n\r\nexport enum FontType {\r\n Default,\r\n Monospace\r\n}\r\n\r\nexport enum Spacing {\r\n None,\r\n Small,\r\n Default,\r\n Medium,\r\n Large,\r\n ExtraLarge,\r\n Padding\r\n}\r\n\r\nexport enum TextColor {\r\n Default,\r\n Dark,\r\n Light,\r\n Accent,\r\n Good,\r\n Warning,\r\n Attention\r\n}\r\n\r\nexport enum HorizontalAlignment {\r\n Left,\r\n Center,\r\n Right\r\n}\r\n\r\nexport enum VerticalAlignment {\r\n Top,\r\n Center,\r\n Bottom\r\n}\r\n\r\nexport enum ActionAlignment {\r\n Left,\r\n Center,\r\n Right,\r\n Stretch\r\n}\r\n\r\nexport enum ImageStyle {\r\n Default,\r\n Person\r\n}\r\n\r\nexport enum ShowCardActionMode {\r\n Inline,\r\n Popup\r\n}\r\n\r\nexport enum Orientation {\r\n Horizontal,\r\n Vertical\r\n}\r\n\r\nexport enum FillMode {\r\n Cover,\r\n RepeatHorizontally,\r\n RepeatVertically,\r\n Repeat\r\n}\r\n\r\nexport enum ActionIconPlacement {\r\n LeftOfTitle,\r\n AboveTitle\r\n}\r\n\r\nexport enum InputTextStyle {\r\n Text,\r\n Tel,\r\n Url,\r\n Email,\r\n Password\r\n}\r\n\r\nexport enum InputLabelPosition {\r\n Inline,\r\n Above\r\n}\r\n\r\nexport enum ValidationPhase {\r\n Parse,\r\n ToJSON,\r\n Validation\r\n}\r\n\r\nexport enum ValidationEvent {\r\n Hint,\r\n ActionTypeNotAllowed,\r\n CollectionCantBeEmpty,\r\n Deprecated,\r\n ElementTypeNotAllowed,\r\n InteractivityNotAllowed,\r\n InvalidPropertyValue,\r\n MissingCardType,\r\n PropertyCantBeNull,\r\n TooManyActions,\r\n UnknownActionType,\r\n UnknownElementType,\r\n UnsupportedCardVersion,\r\n DuplicateId,\r\n UnsupportedProperty,\r\n RequiredInputsShouldHaveLabel,\r\n RequiredInputsShouldHaveErrorMessage,\r\n Other\r\n}\r\n\r\nexport enum ContainerFitStatus {\r\n FullyInContainer,\r\n Overflowing,\r\n FullyOutOfContainer\r\n}\r\n\r\nexport enum TypeErrorType {\r\n UnknownType,\r\n ForbiddenType\r\n}\r\n\r\nexport enum RefreshMode {\r\n Disabled,\r\n Manual,\r\n Automatic\r\n}\r\n\r\nexport enum LogLevel {\r\n Info,\r\n Warning,\r\n Error\r\n}\r\n\r\nexport enum CarouselInteractionEvent {\r\n NavigationNext,\r\n NavigationPrevious,\r\n Pagination,\r\n Autoplay\r\n}\r\n\r\nexport enum ActionRole {\r\n Button,\r\n Link,\r\n Tab,\r\n Menu,\r\n MenuItem\r\n}\r\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\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","// 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 = { [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) {\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, 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: ReturnType;\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 = 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 {\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[],\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 extends PropertyDefinition {\r\n private _values: IVersionedValue[] = [];\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[],\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[] {\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 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 = 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\nimport {\r\n TargetVersion,\r\n Version,\r\n SerializableObject,\r\n BaseSerializationContext,\r\n PropertyBag\r\n} from \"./serialization\";\r\n\r\nexport class HostCapabilities extends SerializableObject {\r\n private _capabilities: { [key: string]: TargetVersion } = {};\r\n\r\n protected getSchemaKey(): string {\r\n return \"HostCapabilities\";\r\n }\r\n\r\n protected internalParse(source: any, context: BaseSerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n if (source) {\r\n // eslint-disable-next-line guard-for-in\r\n for (const name in source) {\r\n const jsonVersion = source[name];\r\n\r\n if (typeof jsonVersion === \"string\") {\r\n if (jsonVersion === \"*\") {\r\n this.addCapability(name, \"*\");\r\n } else {\r\n const version = Version.parse(jsonVersion, context);\r\n\r\n if (version?.isValid) {\r\n this.addCapability(name, version);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: BaseSerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n // eslint-disable-next-line guard-for-in\r\n for (const key in this._capabilities) {\r\n target[key] = this._capabilities[key];\r\n }\r\n }\r\n\r\n addCapability(name: string, version: TargetVersion) {\r\n this._capabilities[name] = version;\r\n }\r\n\r\n removeCapability(name: string) {\r\n delete this._capabilities[name];\r\n }\r\n\r\n clear() {\r\n this._capabilities = {};\r\n }\r\n\r\n hasCapability(name: string, version: TargetVersion): boolean {\r\n if (this._capabilities.hasOwnProperty(name)) {\r\n if (version === \"*\" || this._capabilities[name] === \"*\") {\r\n return true;\r\n }\r\n\r\n return version.compareTo(this._capabilities[name]) <= 0;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n areAllMet(hostCapabilities: HostCapabilities): boolean {\r\n for (const capabilityName in this._capabilities) {\r\n if (\r\n !hostCapabilities.hasCapability(capabilityName, this._capabilities[capabilityName])\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\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 Utils from \"./utils\";\r\nimport * as Shared from \"./shared\";\r\nimport { HostCapabilities } from \"./host-capabilities\";\r\n\r\nfunction parseHostConfigEnum(\r\n targetEnum: { [s: number]: string },\r\n value: string | number,\r\n defaultValue: number\r\n): number {\r\n if (typeof value === \"string\") {\r\n const parsedValue = Utils.parseEnum(targetEnum, value, defaultValue);\r\n\r\n return parsedValue !== undefined ? parsedValue : defaultValue;\r\n } else if (typeof value === \"number\") {\r\n return value;\r\n } else {\r\n return defaultValue;\r\n }\r\n}\r\n\r\nexport class ColorDefinition {\r\n default: string = \"#000000\";\r\n subtle: string = \"#666666\";\r\n\r\n constructor(defaultColor?: string, subtleColor?: string) {\r\n if (defaultColor) {\r\n this.default = defaultColor;\r\n }\r\n\r\n if (subtleColor) {\r\n this.subtle = subtleColor;\r\n }\r\n }\r\n\r\n parse(obj?: any) {\r\n if (obj) {\r\n this.default = obj[\"default\"] || this.default;\r\n this.subtle = obj[\"subtle\"] || this.subtle;\r\n }\r\n }\r\n}\r\n\r\nexport class TextColorDefinition extends ColorDefinition {\r\n readonly highlightColors = new ColorDefinition(\"#22000000\", \"#11000000\");\r\n\r\n parse(obj?: any) {\r\n super.parse(obj);\r\n\r\n if (obj) {\r\n this.highlightColors.parse(obj[\"highlightColors\"]);\r\n }\r\n }\r\n}\r\n\r\nexport class AdaptiveCardConfig {\r\n allowCustomStyle: boolean = false;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.allowCustomStyle = obj[\"allowCustomStyle\"] || this.allowCustomStyle;\r\n }\r\n }\r\n}\r\n\r\nexport class ImageSetConfig {\r\n imageSize: Enums.Size = Enums.Size.Medium;\r\n maxImageHeight: number = 100;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.imageSize = obj[\"imageSize\"] != null ? obj[\"imageSize\"] : this.imageSize;\r\n this.maxImageHeight = Utils.parseNumber(obj[\"maxImageHeight\"], 100)!;\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n imageSize: Enums.Size[this.imageSize],\r\n maxImageHeight: this.maxImageHeight\r\n };\r\n }\r\n}\r\n\r\nexport class MediaConfig {\r\n defaultPoster?: string;\r\n allowInlinePlayback: boolean = true;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.defaultPoster = obj[\"defaultPoster\"];\r\n this.allowInlinePlayback = obj[\"allowInlinePlayback\"] || this.allowInlinePlayback;\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n defaultPoster: this.defaultPoster,\r\n allowInlinePlayback: this.allowInlinePlayback\r\n };\r\n }\r\n}\r\n\r\nexport class TableConfig {\r\n cellSpacing: number = 8;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.cellSpacing =\r\n obj.cellSpacing && typeof obj.cellSpacing === \"number\"\r\n ? obj.cellSpacing\r\n : this.cellSpacing;\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n cellSpacing: this.cellSpacing\r\n };\r\n }\r\n}\r\n\r\nexport class BaseTextDefinition {\r\n size: Enums.TextSize = Enums.TextSize.Default;\r\n color: Enums.TextColor = Enums.TextColor.Default;\r\n isSubtle: boolean = false;\r\n weight: Enums.TextWeight = Enums.TextWeight.Default;\r\n\r\n constructor(obj?: any) {\r\n this.parse(obj);\r\n }\r\n\r\n parse(obj: any) {\r\n if (obj) {\r\n this.size = parseHostConfigEnum(Enums.TextSize, obj[\"size\"], this.size);\r\n this.color = parseHostConfigEnum(Enums.TextColor, obj[\"color\"], this.color);\r\n this.isSubtle =\r\n obj.isSubtle !== undefined && typeof obj.isSubtle === \"boolean\"\r\n ? obj.isSubtle\r\n : this.isSubtle;\r\n this.weight = parseHostConfigEnum(\r\n Enums.TextWeight,\r\n obj[\"weight\"],\r\n this.getDefaultWeight()\r\n );\r\n }\r\n }\r\n\r\n getDefaultWeight(): Enums.TextWeight {\r\n return Enums.TextWeight.Default;\r\n }\r\n\r\n toJSON(): any {\r\n return {\r\n size: Enums.TextSize[this.size],\r\n color: Enums.TextColor[this.color],\r\n isSubtle: this.isSubtle,\r\n weight: Enums.TextWeight[this.weight]\r\n };\r\n }\r\n}\r\n\r\nexport class TextStyleDefinition extends BaseTextDefinition {\r\n fontType: Enums.FontType = Enums.FontType.Default;\r\n\r\n parse(obj: any) {\r\n super.parse(obj);\r\n\r\n if (obj) {\r\n this.fontType = parseHostConfigEnum(Enums.FontType, obj.fontType, this.fontType);\r\n }\r\n }\r\n}\r\n\r\nexport class TextStyleSet {\r\n readonly default: TextStyleDefinition = new TextStyleDefinition();\r\n readonly heading: TextStyleDefinition = new TextStyleDefinition({\r\n size: \"Large\",\r\n weight: \"Bolder\"\r\n });\r\n readonly columnHeader: TextStyleDefinition = new TextStyleDefinition({\r\n weight: \"Bolder\"\r\n });\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.heading.parse(obj.heading);\r\n this.columnHeader.parse(obj.columnHeader);\r\n }\r\n }\r\n\r\n getStyleByName(name: string): TextStyleDefinition {\r\n switch (name.toLowerCase()) {\r\n case \"heading\":\r\n return this.heading;\r\n case \"columnHeader\":\r\n return this.columnHeader;\r\n default:\r\n return this.default;\r\n }\r\n }\r\n}\r\n\r\nexport class TextBlockConfig {\r\n headingLevel?: number;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.headingLevel = Utils.parseNumber(obj.headingLevel);\r\n }\r\n }\r\n}\r\n\r\nexport class RequiredInputLabelTextDefinition extends BaseTextDefinition {\r\n suffix?: string = \" *\";\r\n suffixColor: Enums.TextColor = Enums.TextColor.Attention;\r\n\r\n parse(obj?: any) {\r\n super.parse(obj);\r\n\r\n if (obj) {\r\n this.suffix = obj[\"suffix\"] || this.suffix;\r\n this.suffixColor = parseHostConfigEnum(\r\n Enums.TextColor,\r\n obj[\"suffixColor\"],\r\n this.suffixColor\r\n );\r\n }\r\n }\r\n\r\n toJSON(): any {\r\n const result = super.toJSON();\r\n result[\"suffix\"] = this.suffix;\r\n result[\"suffixColor\"] = Enums.TextColor[this.suffixColor];\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport class InputLabelConfig {\r\n inputSpacing: Enums.Spacing = Enums.Spacing.Small;\r\n width: number = 30;\r\n readonly requiredInputs: RequiredInputLabelTextDefinition =\r\n new RequiredInputLabelTextDefinition();\r\n readonly optionalInputs: BaseTextDefinition = new BaseTextDefinition();\r\n \r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.inputSpacing = parseHostConfigEnum(\r\n Enums.Spacing,\r\n obj[\"inputSpacing\"],\r\n this.inputSpacing\r\n );\r\n this.requiredInputs = new RequiredInputLabelTextDefinition(obj[\"requiredInputs\"]);\r\n this.optionalInputs = new BaseTextDefinition(obj[\"optionalInputs\"]);\r\n this.width =\r\n obj[\"width\"] != null ? obj[\"width\"] : this.width;\r\n }\r\n }\r\n}\r\n\r\nexport class InputConfig {\r\n readonly label: InputLabelConfig = new InputLabelConfig();\r\n readonly errorMessage: BaseTextDefinition = new BaseTextDefinition({\r\n color: Enums.TextColor.Attention\r\n });\r\n readonly debounceTimeInMilliSeconds: number = 0;\r\n readonly allowDynamicallyFilteredChoiceSet: boolean = true;\r\n readonly allowRevealOnHoverStyle: boolean = false;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.label = new InputLabelConfig(obj[\"label\"]);\r\n this.errorMessage = new BaseTextDefinition(obj[\"errorMessage\"]);\r\n this.allowRevealOnHoverStyle =\r\n obj[\"allowRevealOnHoverStyle\"] || this.allowRevealOnHoverStyle;\r\n this.allowDynamicallyFilteredChoiceSet =\r\n obj[\"allowDynamicallyFilteredChoiceSet\"] || this.allowDynamicallyFilteredChoiceSet;\r\n this.debounceTimeInMilliSeconds =\r\n obj[\"debounceTimeInMilliSeconds\"] || this.debounceTimeInMilliSeconds;\r\n }\r\n }\r\n}\r\n\r\nexport class FactTextDefinition extends BaseTextDefinition {\r\n wrap: boolean = true;\r\n\r\n parse(obj?: any) {\r\n super.parse(obj);\r\n\r\n if (obj) {\r\n this.wrap = obj[\"wrap\"] != null ? obj[\"wrap\"] : this.wrap;\r\n }\r\n }\r\n\r\n toJSON(): any {\r\n const result = super.toJSON();\r\n result[\"wrap\"] = this.wrap;\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport class FactTitleDefinition extends FactTextDefinition {\r\n maxWidth?: number = 150;\r\n weight: Enums.TextWeight = Enums.TextWeight.Bolder;\r\n\r\n constructor(obj?: any) {\r\n super(obj);\r\n\r\n if (obj) {\r\n this.maxWidth = obj[\"maxWidth\"] != null ? obj[\"maxWidth\"] : this.maxWidth;\r\n this.weight = parseHostConfigEnum(\r\n Enums.TextWeight,\r\n obj[\"weight\"],\r\n Enums.TextWeight.Bolder\r\n );\r\n }\r\n }\r\n\r\n getDefaultWeight() {\r\n return Enums.TextWeight.Bolder;\r\n }\r\n}\r\n\r\nexport class FactSetConfig {\r\n readonly title: FactTitleDefinition = new FactTitleDefinition();\r\n readonly value: FactTextDefinition = new FactTextDefinition();\r\n spacing: number = 10;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.title = new FactTitleDefinition(obj[\"title\"]);\r\n this.value = new FactTextDefinition(obj[\"value\"]);\r\n this.spacing =\r\n obj.spacing && obj.spacing != null ? obj.spacing && obj.spacing : this.spacing;\r\n }\r\n }\r\n}\r\n\r\nexport class ShowCardActionConfig {\r\n actionMode: Enums.ShowCardActionMode = Enums.ShowCardActionMode.Inline;\r\n inlineTopMargin: number = 16;\r\n style?: string = Enums.ContainerStyle.Emphasis;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.actionMode = parseHostConfigEnum(\r\n Enums.ShowCardActionMode,\r\n obj[\"actionMode\"],\r\n Enums.ShowCardActionMode.Inline\r\n );\r\n this.inlineTopMargin =\r\n obj[\"inlineTopMargin\"] != null ? obj[\"inlineTopMargin\"] : this.inlineTopMargin;\r\n this.style =\r\n obj[\"style\"] && typeof obj[\"style\"] === \"string\"\r\n ? obj[\"style\"]\r\n : Enums.ContainerStyle.Emphasis;\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n actionMode: Enums.ShowCardActionMode[this.actionMode],\r\n inlineTopMargin: this.inlineTopMargin,\r\n style: this.style\r\n };\r\n }\r\n}\r\n\r\nexport class ActionsConfig {\r\n maxActions: number = 5;\r\n spacing: Enums.Spacing = Enums.Spacing.Default;\r\n buttonSpacing: number = 20;\r\n readonly showCard: ShowCardActionConfig = new ShowCardActionConfig();\r\n preExpandSingleShowCardAction?: boolean = false;\r\n actionsOrientation: Enums.Orientation = Enums.Orientation.Horizontal;\r\n actionAlignment: Enums.ActionAlignment = Enums.ActionAlignment.Left;\r\n iconPlacement: Enums.ActionIconPlacement = Enums.ActionIconPlacement.LeftOfTitle;\r\n allowTitleToWrap: boolean = false;\r\n showIconInOverflow: boolean = false;\r\n iconSize: number = 16;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.maxActions = obj[\"maxActions\"] != null ? obj[\"maxActions\"] : this.maxActions;\r\n this.spacing = parseHostConfigEnum(\r\n Enums.Spacing,\r\n obj.spacing && obj.spacing,\r\n Enums.Spacing.Default\r\n );\r\n this.buttonSpacing =\r\n obj[\"buttonSpacing\"] != null ? obj[\"buttonSpacing\"] : this.buttonSpacing;\r\n this.showCard = new ShowCardActionConfig(obj[\"showCard\"]);\r\n this.preExpandSingleShowCardAction = Utils.parseBool(\r\n obj[\"preExpandSingleShowCardAction\"],\r\n false\r\n );\r\n this.actionsOrientation = parseHostConfigEnum(\r\n Enums.Orientation,\r\n obj[\"actionsOrientation\"],\r\n Enums.Orientation.Horizontal\r\n );\r\n this.actionAlignment = parseHostConfigEnum(\r\n Enums.ActionAlignment,\r\n obj[\"actionAlignment\"],\r\n Enums.ActionAlignment.Left\r\n );\r\n this.iconPlacement = parseHostConfigEnum(\r\n Enums.ActionIconPlacement,\r\n obj[\"iconPlacement\"],\r\n Enums.ActionIconPlacement.LeftOfTitle\r\n );\r\n this.allowTitleToWrap =\r\n obj[\"allowTitleToWrap\"] != null ? obj[\"allowTitleToWrap\"] : this.allowTitleToWrap;\r\n this.showIconInOverflow = obj[\"showIconInOverflow\"] ?? this.showIconInOverflow;\r\n\r\n try {\r\n const sizeAndUnit = Shared.SizeAndUnit.parse(obj[\"iconSize\"]);\r\n\r\n if (sizeAndUnit.unit === Enums.SizeUnit.Pixel) {\r\n this.iconSize = sizeAndUnit.physicalSize;\r\n }\r\n } catch (e) {\r\n // Swallow this, keep default icon size\r\n }\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n maxActions: this.maxActions,\r\n spacing: Enums.Spacing[this.spacing],\r\n buttonSpacing: this.buttonSpacing,\r\n showCard: this.showCard,\r\n preExpandSingleShowCardAction: this.preExpandSingleShowCardAction,\r\n actionsOrientation: Enums.Orientation[this.actionsOrientation],\r\n actionAlignment: Enums.ActionAlignment[this.actionAlignment]\r\n };\r\n }\r\n}\r\n\r\nexport class ColorSetDefinition {\r\n private parseSingleColor(obj: any, propertyName: string) {\r\n if (obj) {\r\n ((this)[propertyName] as TextColorDefinition).parse(obj[propertyName]);\r\n }\r\n }\r\n\r\n default: TextColorDefinition = new TextColorDefinition();\r\n dark: TextColorDefinition = new TextColorDefinition();\r\n light: TextColorDefinition = new TextColorDefinition();\r\n accent: TextColorDefinition = new TextColorDefinition();\r\n good: TextColorDefinition = new TextColorDefinition();\r\n warning: TextColorDefinition = new TextColorDefinition();\r\n attention: TextColorDefinition = new TextColorDefinition();\r\n\r\n constructor(obj?: any) {\r\n this.parse(obj);\r\n }\r\n\r\n parse(obj: any) {\r\n if (obj) {\r\n this.parseSingleColor(obj, \"default\");\r\n this.parseSingleColor(obj, \"dark\");\r\n this.parseSingleColor(obj, \"light\");\r\n this.parseSingleColor(obj, \"accent\");\r\n this.parseSingleColor(obj, \"good\");\r\n this.parseSingleColor(obj, \"warning\");\r\n this.parseSingleColor(obj, \"attention\");\r\n }\r\n }\r\n}\r\n\r\nexport class ContainerStyleDefinition {\r\n backgroundColor?: string;\r\n\r\n readonly foregroundColors: ColorSetDefinition = new ColorSetDefinition({\r\n \"default\": { default: \"#333333\", subtle: \"#EE333333\" },\r\n \"dark\": { default: \"#000000\", subtle: \"#66000000\" },\r\n \"light\": { default: \"#FFFFFF\", subtle: \"#33000000\" },\r\n \"accent\": { default: \"#2E89FC\", subtle: \"#882E89FC\" },\r\n \"good\": { default: \"#028A02\", subtle: \"#DD027502\" },\r\n \"warning\": { default: \"#E69500\", subtle: \"#DDE69500\" },\r\n \"attention\": { default: \"#CC3300\", subtle: \"#DDCC3300\" }\r\n });\r\n\r\n highlightBackgroundColor?: string;\r\n highlightForegroundColor?: string;\r\n borderColor?: string;\r\n\r\n parse(obj: any) {\r\n if (obj) {\r\n this.backgroundColor = obj[\"backgroundColor\"];\r\n\r\n this.foregroundColors.parse(obj[\"foregroundColors\"]);\r\n\r\n this.highlightBackgroundColor = obj[\"highlightBackgroundColor\"];\r\n this.highlightForegroundColor = obj[\"highlightForegroundColor\"];\r\n\r\n this.borderColor = obj[\"borderColor\"];\r\n }\r\n }\r\n\r\n constructor(obj?: any) {\r\n this.parse(obj);\r\n }\r\n\r\n get isBuiltIn(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nclass BuiltInContainerStyleDefinition extends ContainerStyleDefinition {\r\n get isBuiltIn(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport interface ILineHeightDefinitions {\r\n small: number;\r\n medium: number;\r\n default: number;\r\n large: number;\r\n extraLarge: number;\r\n}\r\n\r\nexport class ContainerStyleSet {\r\n private _allStyles: { [key: string]: ContainerStyleDefinition } = {};\r\n\r\n constructor(obj?: any) {\r\n this._allStyles[Enums.ContainerStyle.Default] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Emphasis] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Accent] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Good] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Attention] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Warning] = new BuiltInContainerStyleDefinition();\r\n\r\n if (obj) {\r\n this._allStyles[Enums.ContainerStyle.Default].parse(obj[Enums.ContainerStyle.Default]);\r\n this._allStyles[Enums.ContainerStyle.Emphasis].parse(\r\n obj[Enums.ContainerStyle.Emphasis]\r\n );\r\n this._allStyles[Enums.ContainerStyle.Accent].parse(obj[Enums.ContainerStyle.Accent]);\r\n this._allStyles[Enums.ContainerStyle.Good].parse(obj[Enums.ContainerStyle.Good]);\r\n this._allStyles[Enums.ContainerStyle.Attention].parse(\r\n obj[Enums.ContainerStyle.Attention]\r\n );\r\n this._allStyles[Enums.ContainerStyle.Warning].parse(obj[Enums.ContainerStyle.Warning]);\r\n\r\n const customStyleArray = obj[\"customStyles\"];\r\n\r\n if (customStyleArray && Array.isArray(customStyleArray)) {\r\n for (const customStyle of customStyleArray) {\r\n if (customStyle) {\r\n const styleName = customStyle[\"name\"];\r\n\r\n if (styleName && typeof styleName === \"string\") {\r\n if (this._allStyles.hasOwnProperty(styleName)) {\r\n this._allStyles[styleName].parse(customStyle[\"style\"]);\r\n } else {\r\n this._allStyles[styleName] = new ContainerStyleDefinition(\r\n customStyle[\"style\"]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n toJSON() {\r\n const customStyleArray: any[] = [];\r\n\r\n Object.keys(this._allStyles).forEach((key) => {\r\n if (!this._allStyles[key].isBuiltIn) {\r\n customStyleArray.push({\r\n name: key,\r\n style: this._allStyles[key]\r\n });\r\n }\r\n });\r\n\r\n const result: any = {\r\n default: this.default,\r\n emphasis: this.emphasis\r\n };\r\n\r\n if (customStyleArray.length > 0) {\r\n result.customStyles = customStyleArray;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getStyleByName(\r\n name: string | undefined,\r\n defaultValue?: ContainerStyleDefinition\r\n ): ContainerStyleDefinition {\r\n if (name && this._allStyles.hasOwnProperty(name)) {\r\n return this._allStyles[name];\r\n } else {\r\n return defaultValue ? defaultValue : this._allStyles[Enums.ContainerStyle.Default];\r\n }\r\n }\r\n\r\n get default(): ContainerStyleDefinition {\r\n return this._allStyles[Enums.ContainerStyle.Default];\r\n }\r\n\r\n get emphasis(): ContainerStyleDefinition {\r\n return this._allStyles[Enums.ContainerStyle.Emphasis];\r\n }\r\n}\r\n\r\nexport interface IFontSizeDefinitions {\r\n small: number;\r\n default: number;\r\n medium: number;\r\n large: number;\r\n extraLarge: number;\r\n}\r\n\r\nexport interface IFontWeightDefinitions {\r\n lighter: number;\r\n default: number;\r\n bolder: number;\r\n}\r\n\r\nexport class FontTypeDefinition {\r\n static readonly monospace = new FontTypeDefinition(\"'Courier New', Courier, monospace\");\r\n\r\n fontFamily?: string = \"Segoe UI,Segoe,Segoe WP,Helvetica Neue,Helvetica,sans-serif\";\r\n\r\n fontSizes: IFontSizeDefinitions = {\r\n small: 12,\r\n default: 14,\r\n medium: 17,\r\n large: 21,\r\n extraLarge: 26\r\n };\r\n\r\n fontWeights: IFontWeightDefinitions = {\r\n lighter: 200,\r\n default: 400,\r\n bolder: 600\r\n };\r\n\r\n constructor(fontFamily?: string) {\r\n if (fontFamily) {\r\n this.fontFamily = fontFamily;\r\n }\r\n }\r\n\r\n parse(obj?: any) {\r\n this.fontFamily = obj[\"fontFamily\"] || this.fontFamily;\r\n this.fontSizes = {\r\n small: (obj.fontSizes && obj.fontSizes[\"small\"]) || this.fontSizes.small,\r\n default: (obj.fontSizes && obj.fontSizes[\"default\"]) || this.fontSizes.default,\r\n medium: (obj.fontSizes && obj.fontSizes[\"medium\"]) || this.fontSizes.medium,\r\n large: (obj.fontSizes && obj.fontSizes[\"large\"]) || this.fontSizes.large,\r\n extraLarge: (obj.fontSizes && obj.fontSizes[\"extraLarge\"]) || this.fontSizes.extraLarge\r\n };\r\n this.fontWeights = {\r\n lighter: (obj.fontWeights && obj.fontWeights[\"lighter\"]) || this.fontWeights.lighter,\r\n default: (obj.fontWeights && obj.fontWeights[\"default\"]) || this.fontWeights.default,\r\n bolder: (obj.fontWeights && obj.fontWeights[\"bolder\"]) || this.fontWeights.bolder\r\n };\r\n }\r\n}\r\n\r\nexport class FontTypeSet {\r\n default: FontTypeDefinition;\r\n monospace: FontTypeDefinition;\r\n\r\n constructor(obj?: any) {\r\n this.default = new FontTypeDefinition();\r\n this.monospace = new FontTypeDefinition(\"'Courier New', Courier, monospace\");\r\n\r\n if (obj) {\r\n this.default.parse(obj[\"default\"]);\r\n this.monospace.parse(obj[\"monospace\"]);\r\n }\r\n }\r\n\r\n getStyleDefinition(style: Enums.FontType | undefined): FontTypeDefinition {\r\n switch (style) {\r\n case Enums.FontType.Monospace:\r\n return this.monospace;\r\n case Enums.FontType.Default:\r\n default:\r\n return this.default;\r\n }\r\n }\r\n}\r\n\r\nexport class CarouselConfig {\r\n maxCarouselPages: number = 10;\r\n minAutoplayDelay: number = 5000.0;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.maxCarouselPages =\r\n obj[\"maxCarouselPages\"] != null ? obj[\"maxCarouselPages\"] : this.maxCarouselPages;\r\n this.minAutoplayDelay =\r\n obj[\"minAutoplayDelay\"] != null ? obj[\"minAutoplayDelay\"] : this.minAutoplayDelay;\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n maxCarouselPages: this.maxCarouselPages,\r\n minAutoplayDelay: this.minAutoplayDelay\r\n };\r\n }\r\n}\r\n\r\nexport class HostConfig {\r\n readonly hostCapabilities = new HostCapabilities();\r\n\r\n private _legacyFontType: FontTypeDefinition;\r\n\r\n choiceSetInputValueSeparator: string = \",\";\r\n supportsInteractivity: boolean = true;\r\n lineHeights?: ILineHeightDefinitions;\r\n fontTypes?: FontTypeSet;\r\n\r\n readonly spacing = {\r\n small: 3,\r\n default: 8,\r\n medium: 20,\r\n large: 30,\r\n extraLarge: 40,\r\n padding: 15\r\n };\r\n\r\n readonly separator = {\r\n lineThickness: 1,\r\n lineColor: \"#EEEEEE\"\r\n };\r\n\r\n readonly imageSizes = {\r\n small: 40,\r\n medium: 80,\r\n large: 160\r\n };\r\n\r\n readonly containerStyles: ContainerStyleSet = new ContainerStyleSet();\r\n readonly inputs: InputConfig = new InputConfig();\r\n readonly actions: ActionsConfig = new ActionsConfig();\r\n readonly adaptiveCard: AdaptiveCardConfig = new AdaptiveCardConfig();\r\n readonly imageSet: ImageSetConfig = new ImageSetConfig();\r\n readonly media: MediaConfig = new MediaConfig();\r\n readonly factSet: FactSetConfig = new FactSetConfig();\r\n readonly table: TableConfig = new TableConfig();\r\n readonly textStyles: TextStyleSet = new TextStyleSet();\r\n readonly textBlock: TextBlockConfig = new TextBlockConfig();\r\n readonly carousel: CarouselConfig = new CarouselConfig();\r\n\r\n cssClassNamePrefix?: string;\r\n alwaysAllowBleed: boolean = false;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n if (typeof obj === \"string\" || obj instanceof String) {\r\n obj = JSON.parse(obj as string);\r\n }\r\n\r\n this.choiceSetInputValueSeparator =\r\n obj && typeof obj[\"choiceSetInputValueSeparator\"] === \"string\"\r\n ? obj[\"choiceSetInputValueSeparator\"]\r\n : this.choiceSetInputValueSeparator;\r\n this.supportsInteractivity =\r\n obj && typeof obj[\"supportsInteractivity\"] === \"boolean\"\r\n ? obj[\"supportsInteractivity\"]\r\n : this.supportsInteractivity;\r\n\r\n this._legacyFontType = new FontTypeDefinition();\r\n this._legacyFontType.parse(obj);\r\n\r\n if (obj.fontTypes) {\r\n this.fontTypes = new FontTypeSet(obj.fontTypes);\r\n }\r\n\r\n if (obj.lineHeights) {\r\n this.lineHeights = {\r\n small: obj.lineHeights[\"small\"],\r\n default: obj.lineHeights[\"default\"],\r\n medium: obj.lineHeights[\"medium\"],\r\n large: obj.lineHeights[\"large\"],\r\n extraLarge: obj.lineHeights[\"extraLarge\"]\r\n };\r\n }\r\n\r\n this.imageSizes = {\r\n small: (obj.imageSizes && obj.imageSizes[\"small\"]) || this.imageSizes.small,\r\n medium: (obj.imageSizes && obj.imageSizes[\"medium\"]) || this.imageSizes.medium,\r\n large: (obj.imageSizes && obj.imageSizes[\"large\"]) || this.imageSizes.large\r\n };\r\n\r\n this.containerStyles = new ContainerStyleSet(obj[\"containerStyles\"]);\r\n this.spacing = {\r\n small: (obj.spacing && obj.spacing[\"small\"]) || this.spacing.small,\r\n default: (obj.spacing && obj.spacing[\"default\"]) || this.spacing.default,\r\n medium: (obj.spacing && obj.spacing[\"medium\"]) || this.spacing.medium,\r\n large: (obj.spacing && obj.spacing[\"large\"]) || this.spacing.large,\r\n extraLarge: (obj.spacing && obj.spacing[\"extraLarge\"]) || this.spacing.extraLarge,\r\n padding: (obj.spacing && obj.spacing[\"padding\"]) || this.spacing.padding\r\n };\r\n\r\n this.separator = {\r\n lineThickness:\r\n (obj.separator && obj.separator[\"lineThickness\"]) ||\r\n this.separator.lineThickness,\r\n lineColor: (obj.separator && obj.separator[\"lineColor\"]) || this.separator.lineColor\r\n };\r\n\r\n this.inputs = new InputConfig(obj.inputs || this.inputs);\r\n this.actions = new ActionsConfig(obj.actions || this.actions);\r\n this.adaptiveCard = new AdaptiveCardConfig(obj.adaptiveCard || this.adaptiveCard);\r\n this.imageSet = new ImageSetConfig(obj[\"imageSet\"]);\r\n this.factSet = new FactSetConfig(obj[\"factSet\"]);\r\n this.textStyles = new TextStyleSet(obj[\"textStyles\"]);\r\n this.textBlock = new TextBlockConfig(obj[\"textBlock\"]);\r\n this.carousel = new CarouselConfig(obj[\"carousel\"]);\r\n }\r\n }\r\n\r\n getFontTypeDefinition(style?: Enums.FontType): FontTypeDefinition {\r\n if (this.fontTypes) {\r\n return this.fontTypes.getStyleDefinition(style);\r\n } else {\r\n return style === Enums.FontType.Monospace\r\n ? FontTypeDefinition.monospace\r\n : this._legacyFontType;\r\n }\r\n }\r\n\r\n getEffectiveImageSize(imageSize: Enums.ImageSize | Enums.Size): number {\r\n switch (imageSize) {\r\n case Enums.Size.Small:\r\n return this.imageSizes.small;\r\n\r\n case Enums.Size.Large:\r\n return this.imageSizes.large;\r\n\r\n case Enums.Size.Medium:\r\n default:\r\n return this.imageSizes.medium;\r\n }\r\n }\r\n\r\n getEffectiveSpacing(spacing: Enums.Spacing): number {\r\n switch (spacing) {\r\n case Enums.Spacing.Small:\r\n return this.spacing.small;\r\n case Enums.Spacing.Default:\r\n return this.spacing.default;\r\n case Enums.Spacing.Medium:\r\n return this.spacing.medium;\r\n case Enums.Spacing.Large:\r\n return this.spacing.large;\r\n case Enums.Spacing.ExtraLarge:\r\n return this.spacing.extraLarge;\r\n case Enums.Spacing.Padding:\r\n return this.spacing.padding;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n paddingDefinitionToSpacingDefinition(\r\n paddingDefinition: Shared.PaddingDefinition\r\n ): Shared.SpacingDefinition {\r\n return new Shared.SpacingDefinition(\r\n this.getEffectiveSpacing(paddingDefinition.top),\r\n this.getEffectiveSpacing(paddingDefinition.right),\r\n this.getEffectiveSpacing(paddingDefinition.bottom),\r\n this.getEffectiveSpacing(paddingDefinition.left)\r\n );\r\n }\r\n\r\n makeCssClassNames(...classNames: string[]): string[] {\r\n const result: string[] = [];\r\n\r\n for (const className of classNames) {\r\n result.push((this.cssClassNamePrefix ? this.cssClassNamePrefix + \"-\" : \"\") + className);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n makeCssClassName(...classNames: string[]): string {\r\n const result = this.makeCssClassNames(...classNames).join(\" \");\r\n\r\n return result ? result : \"\";\r\n }\r\n\r\n get fontFamily(): string | undefined {\r\n return this._legacyFontType.fontFamily;\r\n }\r\n\r\n set fontFamily(value: string | undefined) {\r\n this._legacyFontType.fontFamily = value;\r\n }\r\n\r\n get fontSizes(): IFontSizeDefinitions {\r\n return this._legacyFontType.fontSizes;\r\n }\r\n\r\n get fontWeights(): IFontWeightDefinitions {\r\n return this._legacyFontType.fontWeights;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const defaultHostConfig: HostConfig = new HostConfig({\r\n supportsInteractivity: true,\r\n spacing: {\r\n small: 10,\r\n default: 20,\r\n medium: 30,\r\n large: 40,\r\n extraLarge: 50,\r\n padding: 20\r\n },\r\n separator: {\r\n lineThickness: 1,\r\n lineColor: \"#EEEEEE\"\r\n },\r\n fontTypes: {\r\n default: {\r\n fontFamily: \"'Segoe UI', Tahoma, Geneva, Verdana, sans-serif\",\r\n fontSizes: {\r\n small: 12,\r\n default: 14,\r\n medium: 17,\r\n large: 21,\r\n extraLarge: 26\r\n },\r\n fontWeights: {\r\n lighter: 200,\r\n default: 400,\r\n bolder: 600\r\n }\r\n },\r\n monospace: {\r\n fontFamily: \"'Courier New', Courier, monospace\",\r\n fontSizes: {\r\n small: 12,\r\n default: 14,\r\n medium: 17,\r\n large: 21,\r\n extraLarge: 26\r\n },\r\n fontWeights: {\r\n lighter: 200,\r\n default: 400,\r\n bolder: 600\r\n }\r\n }\r\n },\r\n imageSizes: {\r\n small: 40,\r\n medium: 80,\r\n large: 160\r\n },\r\n containerStyles: {\r\n default: {\r\n backgroundColor: \"#FFFFFF\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n emphasis: {\r\n backgroundColor: \"#08000000\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n accent: {\r\n backgroundColor: \"#C7DEF9\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n good: {\r\n backgroundColor: \"#CCFFCC\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n attention: {\r\n backgroundColor: \"#FFC5B2\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n warning: {\r\n backgroundColor: \"#FFE2B2\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n }\r\n },\r\n inputs: {\r\n label: {\r\n requiredInputs: {\r\n weight: Enums.TextWeight.Bolder,\r\n suffix: \" *\",\r\n suffixColor: Enums.TextColor.Attention\r\n },\r\n optionalInputs: {\r\n weight: Enums.TextWeight.Bolder\r\n }\r\n },\r\n errorMessage: {\r\n color: Enums.TextColor.Attention,\r\n weight: Enums.TextWeight.Bolder\r\n },\r\n debounceTimeInMilliSeconds: 250\r\n },\r\n actions: {\r\n maxActions: 5,\r\n spacing: Enums.Spacing.Default,\r\n buttonSpacing: 10,\r\n showCard: {\r\n actionMode: Enums.ShowCardActionMode.Inline,\r\n inlineTopMargin: 16\r\n },\r\n actionsOrientation: Enums.Orientation.Horizontal,\r\n actionAlignment: Enums.ActionAlignment.Left\r\n },\r\n adaptiveCard: {\r\n allowCustomStyle: false\r\n },\r\n imageSet: {\r\n imageSize: Enums.Size.Medium,\r\n maxImageHeight: 100\r\n },\r\n factSet: {\r\n title: {\r\n color: Enums.TextColor.Default,\r\n size: Enums.TextSize.Default,\r\n isSubtle: false,\r\n weight: Enums.TextWeight.Bolder,\r\n wrap: true,\r\n maxWidth: 150\r\n },\r\n value: {\r\n color: Enums.TextColor.Default,\r\n size: Enums.TextSize.Default,\r\n isSubtle: false,\r\n weight: Enums.TextWeight.Default,\r\n wrap: true\r\n },\r\n spacing: 10\r\n },\r\n carousel: {\r\n maxCarouselPages: 10,\r\n minAutoplayDuration: 5000\r\n },\r\n textBlock: {\r\n headingLevel: 2\r\n }\r\n});\r\n","// 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 {\r\n typeName: string;\r\n objectType: { new (): T };\r\n schemaVersion: Version;\r\n}\r\n\r\nexport class CardObjectRegistry {\r\n private _items: { [typeName: string]: ITypeRegistration } = {};\r\n\r\n findByName(typeName: string): ITypeRegistration | 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) {\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 {\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;\r\n private static _actions?: CardObjectRegistry;\r\n\r\n static populateWithDefaultElements(registry: CardObjectRegistry) {\r\n registry.clear();\r\n\r\n GlobalRegistry.defaultElements.copyTo(registry);\r\n }\r\n\r\n static populateWithDefaultActions(registry: CardObjectRegistry) {\r\n registry.clear();\r\n\r\n GlobalRegistry.defaultActions.copyTo(registry);\r\n }\r\n\r\n static readonly defaultElements = new CardObjectRegistry();\r\n static readonly defaultActions = new CardObjectRegistry();\r\n static get elements(): CardObjectRegistry {\r\n if (!GlobalRegistry._elements) {\r\n GlobalRegistry._elements = new CardObjectRegistry();\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 {\r\n if (!GlobalRegistry._actions) {\r\n GlobalRegistry._actions = new CardObjectRegistry();\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\nimport * as Enums from \"./enums\";\r\nimport { Strings } from \"./strings\";\r\nimport { Dictionary, GlobalSettings } from \"./shared\";\r\nimport { HostConfig } from \"./host-config\";\r\nimport { HostCapabilities } from \"./host-capabilities\";\r\nimport {\r\n Versions,\r\n property,\r\n SerializableObject,\r\n StringProperty,\r\n SerializableObjectProperty,\r\n IValidationEvent,\r\n PropertyDefinition\r\n} from \"./serialization\";\r\n\r\nexport class ValidationResults {\r\n readonly allIds: Dictionary = {};\r\n readonly validationEvents: IValidationEvent[] = [];\r\n\r\n addFailure(cardObject: CardObject, event: Enums.ValidationEvent, message: string) {\r\n this.validationEvents.push({\r\n phase: Enums.ValidationPhase.Validation,\r\n source: cardObject,\r\n event: event,\r\n message: message\r\n });\r\n }\r\n}\r\n\r\nexport type CardObjectType = { new (): CardObject };\r\n\r\nexport abstract class CardObject extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly typeNameProperty = new StringProperty(\r\n Versions.v1_0,\r\n \"type\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n (sender: object) => {\r\n return (sender).getJsonTypeName();\r\n }\r\n );\r\n static readonly idProperty = new StringProperty(Versions.v1_0, \"id\");\r\n static readonly requiresProperty = new SerializableObjectProperty(\r\n Versions.v1_2,\r\n \"requires\",\r\n HostCapabilities,\r\n false,\r\n new HostCapabilities()\r\n );\r\n\r\n protected getSchemaKey(): string {\r\n return this.getJsonTypeName();\r\n }\r\n\r\n @property(CardObject.idProperty)\r\n id?: string;\r\n\r\n @property(CardObject.requiresProperty)\r\n get requires(): HostCapabilities {\r\n return this.getValue(CardObject.requiresProperty);\r\n }\r\n\r\n //#endregion\r\n\r\n private _shouldFallback: boolean = false;\r\n\r\n protected _parent?: CardObject;\r\n protected _renderedElement?: HTMLElement;\r\n\r\n /**\r\n * Checks if this CardObject contains the given DOM Node.\r\n * @param node The DOM Node to look for.\r\n * @returns `true` if the DOM Node was found, `false` otherwise.\r\n */\r\n protected contains(node: Node): boolean {\r\n if (this._renderedElement) {\r\n return this._renderedElement.contains(node);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n onPreProcessPropertyValue?: (\r\n sender: CardObject,\r\n property: PropertyDefinition,\r\n value: any\r\n ) => any;\r\n\r\n abstract getJsonTypeName(): string;\r\n\r\n abstract get hostConfig(): HostConfig;\r\n\r\n preProcessPropertyValue(prop: PropertyDefinition, propertyValue?: any): any {\r\n const value = propertyValue === undefined ? this.getValue(prop) : propertyValue;\r\n\r\n if (GlobalSettings.allowPreProcessingPropertyValues) {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n let currentObject: CardObject | undefined = this;\r\n\r\n while (currentObject && !currentObject.onPreProcessPropertyValue) {\r\n currentObject = currentObject.parent;\r\n }\r\n\r\n if (currentObject && currentObject.onPreProcessPropertyValue) {\r\n return currentObject.onPreProcessPropertyValue(this, prop, value);\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setParent(value: CardObject | undefined) {\r\n this._parent = value;\r\n }\r\n\r\n setShouldFallback(value: boolean) {\r\n this._shouldFallback = value;\r\n }\r\n\r\n shouldFallback(): boolean {\r\n return this._shouldFallback || !this.requires.areAllMet(this.hostConfig.hostCapabilities);\r\n }\r\n\r\n getRootObject(): CardObject {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n let currentObject: CardObject = this;\r\n\r\n while (currentObject.parent) {\r\n currentObject = currentObject.parent;\r\n }\r\n\r\n return currentObject;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n if (this.id) {\r\n if (context.allIds.hasOwnProperty(this.id)) {\r\n if (context.allIds[this.id] === 1) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.DuplicateId,\r\n Strings.errors.duplicateId(this.id)\r\n );\r\n }\r\n\r\n context.allIds[this.id] += 1;\r\n } else {\r\n context.allIds[this.id] = 1;\r\n }\r\n }\r\n }\r\n\r\n validateProperties(): ValidationResults {\r\n const result = new ValidationResults();\r\n\r\n this.internalValidateProperties(result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Recursively searches this CardObject and any children to find the\r\n * innermost CardObject that owns the given DOM Node.\r\n *\r\n * @param node The DOM Node to look for.\r\n *\r\n * @returns The owner of the given DOM Node, or `undefined` if no owner was found.\r\n */\r\n findDOMNodeOwner(node: Node): CardObject | undefined {\r\n // default implementation for CardObjects with no associated children\r\n return this.contains(node) ? this : undefined;\r\n }\r\n\r\n releaseDOMResources() {\r\n // Do nothing in base implementation\r\n }\r\n\r\n get parent(): CardObject | undefined {\r\n return this._parent;\r\n }\r\n\r\n get renderedElement(): HTMLElement | undefined {\r\n return this._renderedElement;\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\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class Constants {\r\n static readonly keys = {\r\n tab: \"Tab\",\r\n enter: \"Enter\",\r\n escape: \"Escape\",\r\n space: \" \",\r\n up: \"ArrowUp\",\r\n down: \"ArrowDown\",\r\n delete: \"Delete\"\r\n } as const;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nexport class Collection {\r\n private _items: Array = [];\r\n\r\n onItemAdded: (item: TItem) => void;\r\n onItemRemoved: (item: TItem) => void;\r\n\r\n get(index: number): TItem {\r\n return this._items[index];\r\n }\r\n\r\n add(item: TItem) {\r\n this._items.push(item);\r\n\r\n if (this.onItemAdded) {\r\n this.onItemAdded(item);\r\n }\r\n }\r\n\r\n remove(item: TItem) {\r\n const i = this._items.indexOf(item);\r\n\r\n if (i >= 0) {\r\n this._items = this._items.splice(i, 1);\r\n\r\n if (this.onItemRemoved) {\r\n this.onItemRemoved(item);\r\n }\r\n }\r\n }\r\n\r\n indexOf(item: TItem): number {\r\n return this._items.indexOf(item);\r\n }\r\n\r\n get length(): number {\r\n return this._items.length;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { Constants } from \"./constants\";\r\nimport * as Utils from \"../utils\";\r\nimport { defaultHostConfig, HostConfig } from \"../host-config\";\r\n\r\nexport abstract class PopupControl {\r\n private _isOpen: boolean = false;\r\n private _overlayElement: HTMLElement;\r\n private _popupElement: HTMLElement;\r\n private _hostConfig?: HostConfig;\r\n\r\n protected abstract renderContent(): HTMLElement;\r\n\r\n onClose: (popupControl: PopupControl, wasCancelled: boolean) => void;\r\n\r\n keyDown(e: KeyboardEvent) {\r\n switch (e.key) {\r\n case Constants.keys.escape:\r\n this.closePopup(true);\r\n\r\n break;\r\n }\r\n }\r\n\r\n render(_rootElementBounds: ClientRect): HTMLElement {\r\n const element = document.createElement(\"div\");\r\n element.tabIndex = 0;\r\n element.className = this.hostConfig.makeCssClassName(\"ac-ctrl\", \"ac-ctrl-popup-container\");\r\n element.setAttribute(\"role\", \"dialog\");\r\n element.setAttribute(\"aria-modal\", \"true\");\r\n element.onkeydown = (e) => {\r\n this.keyDown(e);\r\n\r\n return !e.cancelBubble;\r\n };\r\n\r\n element.appendChild(this.renderContent());\r\n\r\n return element;\r\n }\r\n\r\n focus() {\r\n if (this._popupElement) {\r\n (this._popupElement.firstElementChild).focus();\r\n }\r\n }\r\n\r\n popup(rootElement: HTMLElement) {\r\n if (!this._isOpen) {\r\n this._overlayElement = document.createElement(\"div\");\r\n this._overlayElement.className = this.hostConfig.makeCssClassName(\"ac-ctrl-overlay\");\r\n this._overlayElement.tabIndex = 0;\r\n this._overlayElement.style.width = document.documentElement.scrollWidth + \"px\";\r\n this._overlayElement.style.height = document.documentElement.scrollHeight + \"px\";\r\n this._overlayElement.onfocus = (_e) => {\r\n this.closePopup(true);\r\n };\r\n\r\n document.body.appendChild(this._overlayElement);\r\n\r\n const rootElementBounds = rootElement.getBoundingClientRect();\r\n\r\n this._popupElement = this.render(rootElementBounds);\r\n this._popupElement.classList.remove(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideLeftToRight\",\r\n \"ac-ctrl-slideRightToLeft\",\r\n \"ac-ctrl-slideTopToBottom\",\r\n \"ac-ctrl-slideRightToLeft\"\r\n )\r\n );\r\n\r\n window.addEventListener(\"resize\", (_e) => {\r\n this.closePopup(true);\r\n });\r\n\r\n const rootElementLabel = rootElement.getAttribute(\"aria-label\");\r\n if (rootElementLabel) {\r\n this._popupElement.setAttribute(\"aria-label\", rootElementLabel);\r\n }\r\n\r\n this._overlayElement.appendChild(this._popupElement);\r\n\r\n const popupElementBounds = this._popupElement.getBoundingClientRect();\r\n\r\n const availableSpaceBelow = window.innerHeight - rootElementBounds.bottom;\r\n const availableSpaceAbove = rootElementBounds.top;\r\n const availableSpaceRight = window.innerWidth - rootElementBounds.right;\r\n const availableSpaceLeft = rootElementBounds.left;\r\n\r\n let left = rootElementBounds.left + Utils.getScrollX();\r\n let top;\r\n\r\n if (\r\n availableSpaceAbove < popupElementBounds.height &&\r\n availableSpaceBelow < popupElementBounds.height\r\n ) {\r\n // Not enough space above or below root element\r\n const actualPopupHeight = Math.min(popupElementBounds.height, window.innerHeight);\r\n\r\n this._popupElement.style.maxHeight = actualPopupHeight + \"px\";\r\n\r\n if (actualPopupHeight < popupElementBounds.height) {\r\n top = Utils.getScrollY();\r\n } else {\r\n top =\r\n Utils.getScrollY() +\r\n rootElementBounds.top +\r\n (rootElementBounds.height - actualPopupHeight) / 2;\r\n }\r\n\r\n if (\r\n availableSpaceLeft < popupElementBounds.width &&\r\n availableSpaceRight < popupElementBounds.width\r\n ) {\r\n // Not enough space left or right of root element\r\n const actualPopupWidth = Math.min(popupElementBounds.width, window.innerWidth);\r\n\r\n this._popupElement.style.maxWidth = actualPopupWidth + \"px\";\r\n\r\n if (actualPopupWidth < popupElementBounds.width) {\r\n left = Utils.getScrollX();\r\n } else {\r\n left =\r\n Utils.getScrollX() +\r\n rootElementBounds.left +\r\n (rootElementBounds.width - actualPopupWidth) / 2;\r\n }\r\n } else {\r\n // Enough space on the left or right of the root element\r\n if (availableSpaceRight >= popupElementBounds.width) {\r\n left = Utils.getScrollX() + rootElementBounds.right;\r\n\r\n this._popupElement.classList.add(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideLeftToRight\"\r\n )\r\n );\r\n } else {\r\n left =\r\n Utils.getScrollX() + rootElementBounds.left - popupElementBounds.width;\r\n\r\n this._popupElement.classList.add(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideRightToLeft\"\r\n )\r\n );\r\n }\r\n }\r\n } else {\r\n // Enough space above or below root element\r\n if (availableSpaceBelow >= popupElementBounds.height) {\r\n top = Utils.getScrollY() + rootElementBounds.bottom;\r\n\r\n this._popupElement.classList.add(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideTopToBottom\"\r\n )\r\n );\r\n } else {\r\n top = Utils.getScrollY() + rootElementBounds.top - popupElementBounds.height;\r\n\r\n this._popupElement.classList.add(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideBottomToTop\"\r\n )\r\n );\r\n }\r\n\r\n if (availableSpaceRight < popupElementBounds.width) {\r\n left = Utils.getScrollX() + rootElementBounds.right - popupElementBounds.width;\r\n }\r\n }\r\n\r\n this._popupElement.style.left = left + \"px\";\r\n this._popupElement.style.top = top + \"px\";\r\n\r\n this._popupElement.focus();\r\n\r\n this._isOpen = true;\r\n }\r\n }\r\n\r\n closePopup(wasCancelled: boolean) {\r\n if (this._isOpen) {\r\n document.body.removeChild(this._overlayElement);\r\n\r\n this._isOpen = false;\r\n\r\n if (this.onClose) {\r\n this.onClose(this, wasCancelled);\r\n }\r\n }\r\n }\r\n\r\n get hostConfig(): HostConfig {\r\n return this._hostConfig ? this._hostConfig : defaultHostConfig;\r\n }\r\n\r\n set hostConfig(value: HostConfig) {\r\n this._hostConfig = value;\r\n }\r\n\r\n get isOpen(): boolean {\r\n return this._isOpen;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { Constants } from \"./constants\";\r\nimport { Collection } from \"./collection\";\r\nimport { PopupControl } from \"./popup-control\";\r\nimport { MenuItem } from \"./menu-item\";\r\n\r\nexport class PopupMenu extends PopupControl {\r\n private _items: Collection = new Collection();\r\n private _renderedItems: Array = [];\r\n private _selectedIndex: number = -1;\r\n\r\n protected renderContent(): HTMLElement {\r\n const element = document.createElement(\"div\");\r\n element.className = this.hostConfig.makeCssClassName(\"ac-ctrl ac-popup\");\r\n element.setAttribute(\"role\", \"menu\");\r\n\r\n for (let i = 0; i < this._items.length; i++) {\r\n const renderedItem = this._items.get(i).render(this.hostConfig);\r\n renderedItem.tabIndex = 0;\r\n\r\n element.appendChild(renderedItem);\r\n\r\n if (i == 0)\r\n {\r\n renderedItem.setAttribute(\"aria-expanded\", \"true\");\r\n }\r\n\r\n if (i === this.selectedIndex) {\r\n renderedItem.focus();\r\n }\r\n\r\n this._renderedItems.push(renderedItem);\r\n }\r\n\r\n return element;\r\n }\r\n\r\n keyDown(e: KeyboardEvent) {\r\n super.keyDown(e);\r\n\r\n let selectedItemIndex = this._selectedIndex;\r\n\r\n switch (e.key) {\r\n case Constants.keys.tab:\r\n this.closePopup(true);\r\n\r\n break;\r\n /*\r\n case Constants.keys.enter:\r\n if (this.selectedIndex >= 0) {\r\n this.selectedIndex = this.selectedIndex;\r\n\r\n this.close();\r\n }\r\n\r\n break;\r\n */\r\n case Constants.keys.up:\r\n if (selectedItemIndex <= 0) {\r\n selectedItemIndex = this._renderedItems.length - 1;\r\n } else {\r\n selectedItemIndex--;\r\n\r\n if (selectedItemIndex < 0) {\r\n selectedItemIndex = this._renderedItems.length - 1;\r\n }\r\n }\r\n\r\n this.selectedIndex = selectedItemIndex;\r\n this.removeAriaExpanded(selectedItemIndex);\r\n\r\n e.cancelBubble = true;\r\n\r\n break;\r\n case Constants.keys.down:\r\n if (selectedItemIndex < 0) {\r\n selectedItemIndex = 0;\r\n } else {\r\n selectedItemIndex++;\r\n\r\n if (selectedItemIndex >= this._renderedItems.length) {\r\n selectedItemIndex = 0;\r\n }\r\n this.removeAriaExpanded(selectedItemIndex);\r\n }\r\n\r\n this.selectedIndex = selectedItemIndex;\r\n\r\n e.cancelBubble = true;\r\n\r\n break;\r\n }\r\n }\r\n\r\n get items(): Collection {\r\n return this._items;\r\n }\r\n\r\n get selectedIndex(): number {\r\n return this._selectedIndex;\r\n }\r\n\r\n set selectedIndex(index: number) {\r\n if (index >= 0 && index < this._renderedItems.length) {\r\n this._renderedItems[index].focus();\r\n\r\n this._selectedIndex = index;\r\n }\r\n }\r\n\r\n // remove aria-expanded attribute from menu item\r\n private removeAriaExpanded(index: number) {\r\n if (this._renderedItems[index].getAttribute(\"aria-expanded\") === \"true\") {\r\n this._renderedItems[index].removeAttribute(\"aria-expanded\");\r\n }\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { defaultHostConfig, HostConfig } from \"../host-config\";\r\nimport { Constants } from \"./constants\";\r\n\r\nexport class MenuItem {\r\n private _hostConfig?: HostConfig;\r\n private _element: HTMLElement;\r\n private _value: string;\r\n private _iconUrl: string | undefined;\r\n private _isEnabled: boolean = true;\r\n\r\n private click() {\r\n if (this.isEnabled && this.onClick) {\r\n this.onClick(this);\r\n }\r\n }\r\n\r\n private updateCssClasses() {\r\n if (this._element) {\r\n const effectiveHostConfig = this._hostConfig ? this._hostConfig : defaultHostConfig;\r\n\r\n this._element.className = effectiveHostConfig.makeCssClassName(\"ac-ctrl\");\r\n this._element.classList.add(\r\n effectiveHostConfig.makeCssClassName(\r\n this.isEnabled ? \"ac-ctrl-dropdown-item\" : \"ac-ctrl-dropdown-item-disabled\"\r\n )\r\n );\r\n\r\n if (!this.isEnabled) {\r\n this._element.classList.add(effectiveHostConfig.makeCssClassName(\"ac-disabled\"));\r\n }\r\n }\r\n }\r\n\r\n readonly key: string;\r\n\r\n onClick?: (item: MenuItem) => void;\r\n\r\n constructor(key: string, value: string, iconUrl?: string) {\r\n this.key = key;\r\n this._value = value;\r\n this._iconUrl = iconUrl;\r\n }\r\n\r\n toString(): string {\r\n return this.value;\r\n }\r\n\r\n render(hostConfig?: HostConfig): HTMLElement {\r\n this._hostConfig = hostConfig;\r\n\r\n if (!this._element) {\r\n this._element = document.createElement(\"span\");\r\n this._element.setAttribute(\"role\", \"menuitem\");\r\n this._element.style.display = \"flex\";\r\n this._element.style.alignItems = \"center\";\r\n this._element.style.justifyContent = \"left\";\r\n\r\n if (!this.isEnabled) {\r\n this._element.setAttribute(\"aria-disabled\", \"true\");\r\n }\r\n\r\n if (this._iconUrl && this._hostConfig?.actions.showIconInOverflow) {\r\n const iconSize = this._hostConfig?.actions.iconSize ?? 16;\r\n\r\n const iconElement = document.createElement(\"img\");\r\n iconElement.style.width = iconSize + \"px\";\r\n iconElement.style.height = iconSize + \"px\";\r\n iconElement.style.marginRight = \"6px\";\r\n iconElement.setAttribute(\"role\", \"presentation\");\r\n iconElement.src = this._iconUrl;\r\n this._element.appendChild(iconElement);\r\n }\r\n\r\n const textElement = document.createElement(\"span\");\r\n textElement.style.flex = \"0 1 auto\";\r\n textElement.innerText = this.value;\r\n this._element.appendChild(textElement);\r\n\r\n this._element.setAttribute(\"aria-current\", \"false\");\r\n this._element.onmouseup = (_e) => {\r\n this.click();\r\n };\r\n this._element.onkeydown = (e) => {\r\n if (e.key === Constants.keys.enter) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.click();\r\n }\r\n };\r\n\r\n this.updateCssClasses();\r\n }\r\n\r\n return this._element;\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n\r\n set value(newValue: string) {\r\n this._value = newValue;\r\n\r\n if (this._element) {\r\n this._element.innerText = newValue;\r\n }\r\n }\r\n\r\n get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n set isEnabled(value: boolean) {\r\n if (this._isEnabled !== value) {\r\n this._isEnabled = value;\r\n\r\n this.updateCssClasses();\r\n }\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as Enums from \"./enums\";\r\nimport { CarouselEvent } from \"./carousel\";\r\nimport {\r\n PaddingDefinition,\r\n GlobalSettings,\r\n SizeAndUnit,\r\n SpacingDefinition,\r\n ISeparationDefinition,\r\n Dictionary,\r\n StringWithSubstitutions,\r\n ContentTypes,\r\n IInput,\r\n IResourceInformation\r\n} from \"./shared\";\r\nimport * as Utils from \"./utils\";\r\nimport {\r\n HostConfig,\r\n defaultHostConfig,\r\n BaseTextDefinition,\r\n FontTypeDefinition,\r\n ColorSetDefinition,\r\n TextColorDefinition,\r\n ContainerStyleDefinition,\r\n TextStyleDefinition\r\n} from \"./host-config\";\r\nimport * as TextFormatters from \"./text-formatters\";\r\nimport { CardObject, ValidationResults } from \"./card-object\";\r\nimport {\r\n Versions,\r\n Version,\r\n property,\r\n BaseSerializationContext,\r\n SerializableObject,\r\n SerializableObjectSchema,\r\n StringProperty,\r\n BoolProperty,\r\n ValueSetProperty,\r\n EnumProperty,\r\n SerializableObjectCollectionProperty,\r\n SerializableObjectProperty,\r\n PixelSizeProperty,\r\n NumProperty,\r\n PropertyBag,\r\n CustomProperty,\r\n PropertyDefinition,\r\n StringArrayProperty\r\n} from \"./serialization\";\r\nimport { CardObjectRegistry, GlobalRegistry } from \"./registry\";\r\nimport { Strings } from \"./strings\";\r\nimport { MenuItem, PopupMenu } from \"./controls\";\r\n\r\n\r\nfunction clearElement(element: HTMLElement) : void {\r\n const trustedHtml = (typeof window === 'undefined') ? \"\" : (window.trustedTypes?.emptyHTML ?? \"\");\r\n element.innerHTML = trustedHtml as string;\r\n}\r\n\r\nexport function renderSeparation(\r\n hostConfig: HostConfig,\r\n separationDefinition: ISeparationDefinition,\r\n orientation: Enums.Orientation\r\n): HTMLElement | undefined {\r\n if (\r\n separationDefinition.spacing > 0 ||\r\n (separationDefinition.lineThickness && separationDefinition.lineThickness > 0)\r\n ) {\r\n const separator = document.createElement(\"div\");\r\n separator.className = hostConfig.makeCssClassName(\r\n \"ac-\" +\r\n (orientation === Enums.Orientation.Horizontal ? \"horizontal\" : \"vertical\") +\r\n \"-separator\"\r\n );\r\n separator.setAttribute(\"aria-hidden\", \"true\");\r\n\r\n const color = separationDefinition.lineColor\r\n ? Utils.stringToCssColor(separationDefinition.lineColor)\r\n : \"\";\r\n\r\n if (orientation === Enums.Orientation.Horizontal) {\r\n if (separationDefinition.lineThickness) {\r\n separator.style.paddingTop = separationDefinition.spacing / 2 + \"px\";\r\n separator.style.marginBottom = separationDefinition.spacing / 2 + \"px\";\r\n separator.style.borderBottom =\r\n separationDefinition.lineThickness + \"px solid \" + color;\r\n } else {\r\n separator.style.height = separationDefinition.spacing + \"px\";\r\n }\r\n } else {\r\n if (separationDefinition.lineThickness) {\r\n separator.style.paddingLeft = separationDefinition.spacing / 2 + \"px\";\r\n separator.style.marginRight = separationDefinition.spacing / 2 + \"px\";\r\n separator.style.borderRight =\r\n separationDefinition.lineThickness + \"px solid \" + color;\r\n } else {\r\n separator.style.width = separationDefinition.spacing + \"px\";\r\n }\r\n }\r\n\r\n separator.style.overflow = \"hidden\";\r\n separator.style.flex = \"0 0 auto\";\r\n\r\n return separator;\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport type CardElementHeight = \"auto\" | \"stretch\";\r\n\r\nexport abstract class CardElement extends CardObject {\r\n //#region Schema\r\n\r\n static readonly langProperty = new StringProperty(\r\n Versions.v1_1,\r\n \"lang\",\r\n true,\r\n /^[a-z]{2,3}$/gi\r\n );\r\n static readonly isVisibleProperty = new BoolProperty(Versions.v1_2, \"isVisible\", true);\r\n static readonly separatorProperty = new BoolProperty(Versions.v1_0, \"separator\", false);\r\n static readonly heightProperty = new ValueSetProperty(\r\n Versions.v1_1,\r\n \"height\",\r\n [{ value: \"auto\" }, { value: \"stretch\" }],\r\n \"auto\"\r\n );\r\n static readonly horizontalAlignmentProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"horizontalAlignment\",\r\n Enums.HorizontalAlignment\r\n );\r\n static readonly spacingProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"spacing\",\r\n Enums.Spacing,\r\n Enums.Spacing.Default\r\n );\r\n\r\n @property(CardElement.horizontalAlignmentProperty)\r\n horizontalAlignment?: Enums.HorizontalAlignment;\r\n\r\n @property(CardElement.spacingProperty)\r\n spacing: Enums.Spacing;\r\n\r\n @property(CardElement.separatorProperty)\r\n separator: boolean;\r\n\r\n @property(CardElement.heightProperty)\r\n height: CardElementHeight;\r\n\r\n @property(CardElement.langProperty)\r\n get lang(): string | undefined {\r\n const lang = this.getValue(CardElement.langProperty);\r\n\r\n if (lang) {\r\n return lang;\r\n } else {\r\n if (this.parent) {\r\n return this.parent.lang;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n }\r\n\r\n set lang(value: string | undefined) {\r\n this.setValue(CardElement.langProperty, value);\r\n }\r\n\r\n @property(CardElement.isVisibleProperty)\r\n get isVisible(): boolean {\r\n return this.getValue(CardElement.isVisibleProperty);\r\n }\r\n\r\n set isVisible(value: boolean) {\r\n // If the element is going to be hidden, reset any changes that were due\r\n // to overflow truncation (this ensures that if the element is later\r\n // un-hidden it has the right content)\r\n if (GlobalSettings.useAdvancedCardBottomTruncation && !value) {\r\n this.undoOverflowTruncation();\r\n }\r\n\r\n if (this.isVisible !== value) {\r\n this.setValue(CardElement.isVisibleProperty, value);\r\n\r\n this.updateRenderedElementVisibility();\r\n\r\n if (this._renderedElement) {\r\n raiseElementVisibilityChangedEvent(this);\r\n }\r\n }\r\n\r\n if (this._renderedElement) {\r\n this._renderedElement.setAttribute(\"aria-expanded\", value.toString());\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n private _hostConfig?: HostConfig;\r\n private _separatorElement?: HTMLElement;\r\n private _truncatedDueToOverflow: boolean = false;\r\n private _defaultRenderedElementDisplayMode?: string;\r\n private _padding?: PaddingDefinition;\r\n\r\n private internalRenderSeparator(): HTMLElement | undefined {\r\n const renderedSeparator = renderSeparation(\r\n this.hostConfig,\r\n {\r\n spacing: this.hostConfig.getEffectiveSpacing(this.spacing),\r\n lineThickness: this.separator ? this.hostConfig.separator.lineThickness : undefined,\r\n lineColor: this.separator ? this.hostConfig.separator.lineColor : undefined\r\n },\r\n this.separatorOrientation\r\n );\r\n\r\n if (\r\n GlobalSettings.alwaysBleedSeparators &&\r\n renderedSeparator &&\r\n this.separatorOrientation === Enums.Orientation.Horizontal\r\n ) {\r\n // Adjust separator's margins if the option to always bleed separators is turned on\r\n const parentContainer = this.getParentContainer();\r\n\r\n if (parentContainer && parentContainer.getEffectivePadding()) {\r\n const parentPhysicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(\r\n parentContainer.getEffectivePadding()\r\n );\r\n\r\n renderedSeparator.style.marginLeft = \"-\" + parentPhysicalPadding.left + \"px\";\r\n renderedSeparator.style.marginRight = \"-\" + parentPhysicalPadding.right + \"px\";\r\n }\r\n }\r\n\r\n return renderedSeparator;\r\n }\r\n\r\n private updateRenderedElementVisibility() {\r\n const displayMode =\r\n this.isDesignMode() || this.isVisible\r\n ? this._defaultRenderedElementDisplayMode\r\n : \"none\";\r\n\r\n if (this._renderedElement) {\r\n if (displayMode) {\r\n this._renderedElement.style.display = displayMode;\r\n } else {\r\n this._renderedElement.style.removeProperty(\"display\");\r\n }\r\n }\r\n\r\n if (this._separatorElement) {\r\n if (this.parent && this.parent.isFirstElement(this)) {\r\n this._separatorElement.style.display = \"none\";\r\n } else {\r\n if (displayMode) {\r\n this._separatorElement.style.display = displayMode;\r\n } else {\r\n this._separatorElement.style.removeProperty(\"display\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private hideElementDueToOverflow() {\r\n if (this._renderedElement && this.isVisible) {\r\n this._renderedElement.style.visibility = \"hidden\";\r\n\r\n this.isVisible = false;\r\n raiseElementVisibilityChangedEvent(this, false);\r\n }\r\n }\r\n\r\n private showElementHiddenDueToOverflow() {\r\n if (this._renderedElement && !this.isVisible) {\r\n this._renderedElement.style.removeProperty(\"visibility\");\r\n\r\n this.isVisible = true;\r\n raiseElementVisibilityChangedEvent(this, false);\r\n }\r\n }\r\n\r\n // Marked private to emulate internal access\r\n private handleOverflow(maxHeight: number) {\r\n if (this.isVisible || this.isHiddenDueToOverflow()) {\r\n const handled = this.truncateOverflow(maxHeight);\r\n\r\n // Even if we were unable to truncate the element to fit this time,\r\n // it still could have been previously truncated\r\n this._truncatedDueToOverflow = handled || this._truncatedDueToOverflow;\r\n\r\n if (!handled) {\r\n this.hideElementDueToOverflow();\r\n } else if (handled && !this.isVisible) {\r\n this.showElementHiddenDueToOverflow();\r\n }\r\n }\r\n }\r\n\r\n // Marked private to emulate internal access\r\n private resetOverflow(): boolean {\r\n let sizeChanged = false;\r\n\r\n if (this._truncatedDueToOverflow) {\r\n this.undoOverflowTruncation();\r\n this._truncatedDueToOverflow = false;\r\n sizeChanged = true;\r\n }\r\n\r\n if (this.isHiddenDueToOverflow()) {\r\n this.showElementHiddenDueToOverflow();\r\n }\r\n\r\n return sizeChanged;\r\n }\r\n\r\n protected getDefaultSerializationContext(): BaseSerializationContext {\r\n return new SerializationContext();\r\n }\r\n\r\n protected createPlaceholderElement(): HTMLElement {\r\n const styleDefinition = this.getEffectiveStyleDefinition();\r\n const foregroundCssColor = Utils.stringToCssColor(\r\n styleDefinition.foregroundColors.default.subtle\r\n );\r\n\r\n const element = document.createElement(\"div\");\r\n element.style.border = \"1px dashed \" + foregroundCssColor;\r\n element.style.padding = \"4px\";\r\n element.style.minHeight = \"32px\";\r\n element.style.fontSize = \"10px\";\r\n\r\n if (foregroundCssColor) {\r\n element.style.color = foregroundCssColor;\r\n }\r\n\r\n element.innerText = Strings.defaults.emptyElementText(this.getJsonTypeName());\r\n\r\n return element;\r\n }\r\n\r\n protected adjustRenderedElementSize(renderedElement: HTMLElement) {\r\n if (this.height === \"auto\") {\r\n renderedElement.style.flex = \"0 0 auto\";\r\n } else {\r\n renderedElement.style.flex = \"1 1 auto\";\r\n }\r\n }\r\n\r\n /*\r\n * Called when mouse enters or leaves the card.\r\n * Inputs elements need to update their visual state in such events like showing or hiding borders etc.\r\n * It calls Input.updateVisualState(eventType) for all inputs.\r\n * This method on input (updateVisualState) is supposed to be called from card level on mouse events.\r\n */\r\n protected updateInputsVisualState(hover: boolean) {\r\n const allInputs: Input[] = this.getAllInputs();\r\n const inputEventType = !!hover ? InputEventType.MouseEnterOnCard : InputEventType.MouseLeaveOnCard;\r\n allInputs.forEach((input) => input.updateVisualState(inputEventType));\r\n }\r\n\r\n protected isDisplayed(): boolean {\r\n return (\r\n this._renderedElement !== undefined &&\r\n this.isVisible &&\r\n this._renderedElement.offsetHeight > 0\r\n );\r\n }\r\n\r\n protected abstract internalRender(): HTMLElement | undefined;\r\n\r\n protected overrideInternalRender(): HTMLElement | undefined {\r\n return this.internalRender();\r\n }\r\n\r\n protected applyPadding() {\r\n if (this.separatorElement && this.separatorOrientation === Enums.Orientation.Horizontal) {\r\n if (GlobalSettings.alwaysBleedSeparators && !this.isBleeding()) {\r\n const padding = new PaddingDefinition();\r\n\r\n this.getImmediateSurroundingPadding(padding);\r\n\r\n const physicalPadding =\r\n this.hostConfig.paddingDefinitionToSpacingDefinition(padding);\r\n\r\n this.separatorElement.style.marginLeft = \"-\" + physicalPadding.left + \"px\";\r\n this.separatorElement.style.marginRight = \"-\" + physicalPadding.right + \"px\";\r\n } else {\r\n this.separatorElement.style.marginRight = \"0\";\r\n this.separatorElement.style.marginLeft = \"0\";\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Called when this element overflows the bottom of the card.\r\n * maxHeight will be the amount of space still available on the card (0 if\r\n * the element is fully off the card).\r\n */\r\n protected truncateOverflow(_maxHeight: number): boolean {\r\n // Child implementations should return true if the element handled\r\n // the truncation request such that its content fits within maxHeight,\r\n // false if the element should fall back to being hidden\r\n return false;\r\n }\r\n\r\n /*\r\n * This should reverse any changes performed in truncateOverflow().\r\n */\r\n protected undoOverflowTruncation() {\r\n return;\r\n }\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return new PaddingDefinition();\r\n }\r\n\r\n protected getHasBackground(ignoreBackgroundImages: boolean = false): boolean {\r\n return false;\r\n }\r\n\r\n protected getHasBorder(): boolean {\r\n return false;\r\n }\r\n\r\n protected getPadding(): PaddingDefinition | undefined {\r\n return this._padding;\r\n }\r\n\r\n protected setPadding(value: PaddingDefinition | undefined) {\r\n this._padding = value;\r\n }\r\n\r\n protected shouldSerialize(context: SerializationContext): boolean {\r\n return context.elementRegistry.findByName(this.getJsonTypeName()) !== undefined;\r\n }\r\n\r\n protected get useDefaultSizing(): boolean {\r\n return true;\r\n }\r\n\r\n protected get separatorOrientation(): Enums.Orientation {\r\n return Enums.Orientation.Horizontal;\r\n }\r\n\r\n protected get defaultStyle(): string {\r\n return Enums.ContainerStyle.Default;\r\n }\r\n\r\n customCssSelector?: string;\r\n\r\n parse(source: any, context?: SerializationContext) {\r\n super.parse(source, context ? context : new SerializationContext());\r\n }\r\n\r\n asString(): string | undefined {\r\n return \"\";\r\n }\r\n\r\n isBleeding(): boolean {\r\n return false;\r\n }\r\n\r\n getEffectiveStyle(): string {\r\n if (this.parent) {\r\n return this.parent.getEffectiveStyle();\r\n }\r\n\r\n return this.defaultStyle;\r\n }\r\n\r\n getEffectiveStyleDefinition(): ContainerStyleDefinition {\r\n return this.hostConfig.containerStyles.getStyleByName(this.getEffectiveStyle());\r\n }\r\n\r\n getEffectiveTextStyleDefinition(): TextStyleDefinition {\r\n if (this.parent) {\r\n return this.parent.getEffectiveTextStyleDefinition();\r\n }\r\n\r\n return this.hostConfig.textStyles.default;\r\n }\r\n\r\n getForbiddenActionTypes(): ActionType[] {\r\n return [];\r\n }\r\n\r\n getImmediateSurroundingPadding(\r\n result: PaddingDefinition,\r\n processTop: boolean = true,\r\n processRight: boolean = true,\r\n processBottom: boolean = true,\r\n processLeft: boolean = true\r\n ) {\r\n if (this.parent) {\r\n let doProcessTop = processTop && this.parent.isTopElement(this);\r\n let doProcessRight = processRight && this.parent.isRightMostElement(this);\r\n let doProcessBottom = processBottom && this.parent.isBottomElement(this);\r\n let doProcessLeft = processLeft && this.parent.isLeftMostElement(this);\r\n\r\n const effectivePadding = this.parent.getEffectivePadding();\r\n\r\n if (effectivePadding) {\r\n if (doProcessTop && effectivePadding.top !== Enums.Spacing.None) {\r\n result.top = effectivePadding.top;\r\n\r\n doProcessTop = false;\r\n }\r\n\r\n if (doProcessRight && effectivePadding.right !== Enums.Spacing.None) {\r\n result.right = effectivePadding.right;\r\n\r\n doProcessRight = false;\r\n }\r\n\r\n if (doProcessBottom && effectivePadding.bottom !== Enums.Spacing.None) {\r\n result.bottom = effectivePadding.bottom;\r\n\r\n doProcessBottom = false;\r\n }\r\n\r\n if (doProcessLeft && effectivePadding.left !== Enums.Spacing.None) {\r\n result.left = effectivePadding.left;\r\n\r\n doProcessLeft = false;\r\n }\r\n }\r\n\r\n if (doProcessTop || doProcessRight || doProcessBottom || doProcessLeft) {\r\n this.parent.getImmediateSurroundingPadding(\r\n result,\r\n doProcessTop,\r\n doProcessRight,\r\n doProcessBottom,\r\n doProcessLeft\r\n );\r\n }\r\n }\r\n }\r\n\r\n getActionCount(): number {\r\n return 0;\r\n }\r\n\r\n getActionAt(index: number): Action | undefined {\r\n throw new Error(Strings.errors.indexOutOfRange(index));\r\n }\r\n\r\n indexOfAction(action: Action): number {\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n if (this.getActionAt(i) === action) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n remove(): boolean {\r\n if (this.parent && this.parent instanceof CardElementContainer) {\r\n return this.parent.removeItem(this);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n this._renderedElement = this.overrideInternalRender();\r\n this._separatorElement = this.internalRenderSeparator();\r\n\r\n if (this._renderedElement) {\r\n if (this.id) {\r\n this._renderedElement.id = this.id;\r\n }\r\n\r\n if (this.customCssSelector) {\r\n this._renderedElement.classList.add(this.customCssSelector);\r\n }\r\n\r\n this._renderedElement.style.boxSizing = \"border-box\";\r\n this._defaultRenderedElementDisplayMode = this._renderedElement.style.display\r\n ? this._renderedElement.style.display\r\n : undefined;\r\n\r\n this.adjustRenderedElementSize(this._renderedElement);\r\n this.updateLayout(false);\r\n } else if (this.isDesignMode()) {\r\n this._renderedElement = this.createPlaceholderElement();\r\n }\r\n\r\n return this._renderedElement;\r\n }\r\n\r\n updateLayout(_processChildren: boolean = true) {\r\n this.updateRenderedElementVisibility();\r\n this.applyPadding();\r\n }\r\n\r\n updateActionsEnabledState() {\r\n const allActions = this.getRootElement().getAllActions();\r\n\r\n for (let action of allActions) {\r\n action.updateEnabledState();\r\n }\r\n }\r\n\r\n indexOf(_cardElement: CardElement): number {\r\n return -1;\r\n }\r\n\r\n isDesignMode(): boolean {\r\n const rootElement = this.getRootElement();\r\n\r\n return rootElement instanceof AdaptiveCard && rootElement.designMode;\r\n }\r\n\r\n isFirstElement(_element: CardElement): boolean {\r\n return true;\r\n }\r\n\r\n isLastElement(_element: CardElement): boolean {\r\n return true;\r\n }\r\n\r\n isAtTheVeryLeft(): boolean {\r\n return this.parent\r\n ? this.parent.isLeftMostElement(this) && this.parent.isAtTheVeryLeft()\r\n : true;\r\n }\r\n\r\n isAtTheVeryRight(): boolean {\r\n return this.parent\r\n ? this.parent.isRightMostElement(this) && this.parent.isAtTheVeryRight()\r\n : true;\r\n }\r\n\r\n isAtTheVeryTop(): boolean {\r\n return this.parent\r\n ? this.parent.isFirstElement(this) && this.parent.isAtTheVeryTop()\r\n : true;\r\n }\r\n\r\n isAtTheVeryBottom(): boolean {\r\n return this.parent\r\n ? this.parent.isLastElement(this) && this.parent.isAtTheVeryBottom()\r\n : true;\r\n }\r\n\r\n isBleedingAtTop(): boolean {\r\n return false;\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n return false;\r\n }\r\n\r\n isLeftMostElement(_element: CardElement): boolean {\r\n return true;\r\n }\r\n\r\n isRightMostElement(_element: CardElement): boolean {\r\n return true;\r\n }\r\n\r\n isTopElement(element: CardElement): boolean {\r\n return this.isFirstElement(element);\r\n }\r\n\r\n isBottomElement(element: CardElement): boolean {\r\n return this.isLastElement(element);\r\n }\r\n\r\n isHiddenDueToOverflow(): boolean {\r\n return (\r\n this._renderedElement !== undefined &&\r\n this._renderedElement.style.visibility === \"hidden\"\r\n );\r\n }\r\n\r\n getRootElement(): CardElement {\r\n return this.getRootObject() as CardElement;\r\n }\r\n\r\n getParentContainer(): Container | undefined {\r\n let currentElement = this.parent;\r\n\r\n while (currentElement) {\r\n if (currentElement instanceof Container) {\r\n return currentElement;\r\n }\r\n\r\n currentElement = currentElement.parent;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return [];\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result: Action[] = [];\r\n\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n let action = this.getActionAt(i);\r\n\r\n if (action) {\r\n result.push(action);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n return [];\r\n }\r\n\r\n getElementById(id: string): CardElement | undefined {\r\n return this.id === id ? this : undefined;\r\n }\r\n\r\n getActionById(_id: string): Action | undefined {\r\n return undefined;\r\n }\r\n \r\n getElementByIdFromAction(id: string): CardElement | undefined {\r\n let result = undefined;\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n const action = this.getActionAt(i);\r\n\r\n if (action instanceof ShowCardAction) {\r\n result = action.card.getElementById(id);\r\n\r\n if (result) {\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n getEffectivePadding(): PaddingDefinition {\r\n const padding = this.getPadding();\r\n\r\n return padding ? padding : this.getDefaultPadding();\r\n }\r\n\r\n getEffectiveHorizontalAlignment(): Enums.HorizontalAlignment {\r\n if (this.horizontalAlignment !== undefined) {\r\n return this.horizontalAlignment;\r\n }\r\n\r\n if (this.parent) {\r\n return this.parent.getEffectiveHorizontalAlignment();\r\n }\r\n\r\n return Enums.HorizontalAlignment.Left;\r\n }\r\n\r\n get hostConfig(): HostConfig {\r\n if (this._hostConfig) {\r\n return this._hostConfig;\r\n } else {\r\n if (this.parent) {\r\n return this.parent.hostConfig;\r\n } else {\r\n return defaultHostConfig;\r\n }\r\n }\r\n }\r\n\r\n set hostConfig(value: HostConfig) {\r\n this._hostConfig = value;\r\n }\r\n\r\n get index(): number {\r\n if (this.parent) {\r\n return this.parent.indexOf(this);\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n get isInteractive(): boolean {\r\n return false;\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return true;\r\n }\r\n\r\n get isInline(): boolean {\r\n return false;\r\n }\r\n\r\n get hasVisibleSeparator(): boolean {\r\n if (this.parent && this.separatorElement) {\r\n return !this.parent.isFirstElement(this) && (this.isVisible || this.isDesignMode());\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n get separatorElement(): HTMLElement | undefined {\r\n return this._separatorElement;\r\n }\r\n\r\n get parent(): CardElement | undefined {\r\n return this._parent;\r\n }\r\n}\r\n\r\nexport class ActionProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: SerializationContext\r\n ): Action | undefined {\r\n const parent = sender;\r\n\r\n return context.parseAction(\r\n parent,\r\n source[this.name],\r\n this.forbiddenActionTypes,\r\n parent.isDesignMode()\r\n );\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: Action | undefined,\r\n context: SerializationContext\r\n ) {\r\n context.serializeValue(\r\n target,\r\n this.name,\r\n value ? value.toJSON(context) : undefined,\r\n undefined,\r\n true\r\n );\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly forbiddenActionTypes: string[] = []\r\n ) {\r\n super(targetVersion, name, undefined);\r\n }\r\n}\r\n\r\nexport abstract class BaseTextBlock extends CardElement {\r\n //#region Schema\r\n\r\n static readonly textProperty = new StringProperty(Versions.v1_0, \"text\", true);\r\n static readonly sizeProperty = new EnumProperty(Versions.v1_0, \"size\", Enums.TextSize);\r\n static readonly weightProperty = new EnumProperty(Versions.v1_0, \"weight\", Enums.TextWeight);\r\n static readonly colorProperty = new EnumProperty(Versions.v1_0, \"color\", Enums.TextColor);\r\n static readonly isSubtleProperty = new BoolProperty(Versions.v1_0, \"isSubtle\");\r\n static readonly fontTypeProperty = new EnumProperty(Versions.v1_2, \"fontType\", Enums.FontType);\r\n static readonly selectActionProperty = new ActionProperty(Versions.v1_1, \"selectAction\", [\r\n \"Action.ShowCard\"\r\n ]);\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n // selectAction is declared on BaseTextBlock but is only exposed on TextRun,\r\n // so the property is removed from the BaseTextBlock schema.\r\n schema.remove(BaseTextBlock.selectActionProperty);\r\n }\r\n\r\n @property(BaseTextBlock.sizeProperty)\r\n size?: Enums.TextSize;\r\n\r\n @property(BaseTextBlock.weightProperty)\r\n weight?: Enums.TextWeight;\r\n\r\n @property(BaseTextBlock.colorProperty)\r\n color?: Enums.TextColor;\r\n\r\n @property(BaseTextBlock.fontTypeProperty)\r\n fontType?: Enums.FontType;\r\n\r\n @property(BaseTextBlock.isSubtleProperty)\r\n isSubtle?: boolean;\r\n\r\n @property(BaseTextBlock.textProperty)\r\n get text(): string | undefined {\r\n return this.getValue(BaseTextBlock.textProperty);\r\n }\r\n\r\n set text(value: string | undefined) {\r\n this.setText(value);\r\n }\r\n\r\n @property(BaseTextBlock.selectActionProperty)\r\n selectAction?: Action;\r\n\r\n //#endregion\r\n\r\n protected getFontSize(fontType: FontTypeDefinition): number {\r\n switch (this.effectiveSize) {\r\n case Enums.TextSize.Small:\r\n return fontType.fontSizes.small;\r\n case Enums.TextSize.Medium:\r\n return fontType.fontSizes.medium;\r\n case Enums.TextSize.Large:\r\n return fontType.fontSizes.large;\r\n case Enums.TextSize.ExtraLarge:\r\n return fontType.fontSizes.extraLarge;\r\n default:\r\n return fontType.fontSizes.default;\r\n }\r\n }\r\n\r\n protected getColorDefinition(\r\n colorSet: ColorSetDefinition,\r\n color: Enums.TextColor\r\n ): TextColorDefinition {\r\n switch (color) {\r\n case Enums.TextColor.Accent:\r\n return colorSet.accent;\r\n case Enums.TextColor.Dark:\r\n return colorSet.dark;\r\n case Enums.TextColor.Light:\r\n return colorSet.light;\r\n case Enums.TextColor.Good:\r\n return colorSet.good;\r\n case Enums.TextColor.Warning:\r\n return colorSet.warning;\r\n case Enums.TextColor.Attention:\r\n return colorSet.attention;\r\n default:\r\n return colorSet.default;\r\n }\r\n }\r\n\r\n protected setText(value: string | undefined) {\r\n this.setValue(BaseTextBlock.textProperty, value);\r\n }\r\n\r\n ariaHidden: boolean = false;\r\n\r\n constructor(text?: string) {\r\n super();\r\n\r\n if (text) {\r\n this.text = text;\r\n }\r\n }\r\n\r\n init(textDefinition: BaseTextDefinition) {\r\n this.size = textDefinition.size;\r\n this.weight = textDefinition.weight;\r\n this.color = textDefinition.color;\r\n this.isSubtle = textDefinition.isSubtle;\r\n }\r\n\r\n asString(): string | undefined {\r\n return this.text;\r\n }\r\n\r\n applyStylesTo(targetElement: HTMLElement) {\r\n const fontType = this.hostConfig.getFontTypeDefinition(this.effectiveFontType);\r\n\r\n if (fontType.fontFamily) {\r\n targetElement.style.fontFamily = fontType.fontFamily;\r\n }\r\n\r\n let fontSize: number;\r\n\r\n switch (this.effectiveSize) {\r\n case Enums.TextSize.Small:\r\n fontSize = fontType.fontSizes.small;\r\n break;\r\n case Enums.TextSize.Medium:\r\n fontSize = fontType.fontSizes.medium;\r\n break;\r\n case Enums.TextSize.Large:\r\n fontSize = fontType.fontSizes.large;\r\n break;\r\n case Enums.TextSize.ExtraLarge:\r\n fontSize = fontType.fontSizes.extraLarge;\r\n break;\r\n default:\r\n fontSize = fontType.fontSizes.default;\r\n break;\r\n }\r\n\r\n targetElement.style.fontSize = fontSize + \"px\";\r\n\r\n const colorDefinition = this.getColorDefinition(\r\n this.getEffectiveStyleDefinition().foregroundColors,\r\n this.effectiveColor\r\n );\r\n\r\n const targetColor = Utils.stringToCssColor(\r\n this.effectiveIsSubtle ? colorDefinition.subtle : colorDefinition.default\r\n );\r\n if (targetColor) {\r\n targetElement.style.color = targetColor;\r\n }\r\n\r\n let fontWeight: number;\r\n\r\n switch (this.effectiveWeight) {\r\n case Enums.TextWeight.Lighter:\r\n fontWeight = fontType.fontWeights.lighter;\r\n break;\r\n case Enums.TextWeight.Bolder:\r\n fontWeight = fontType.fontWeights.bolder;\r\n break;\r\n default:\r\n fontWeight = fontType.fontWeights.default;\r\n break;\r\n }\r\n\r\n targetElement.style.fontWeight = fontWeight.toString();\r\n\r\n if (this.ariaHidden) {\r\n targetElement.setAttribute(\"aria-hidden\", \"true\");\r\n }\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n if (this.selectAction) {\r\n result.push(this.selectAction);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get effectiveColor(): Enums.TextColor {\r\n return this.color !== undefined ? this.color : this.getEffectiveTextStyleDefinition().color;\r\n }\r\n\r\n get effectiveFontType(): Enums.FontType {\r\n return this.fontType !== undefined\r\n ? this.fontType\r\n : this.getEffectiveTextStyleDefinition().fontType;\r\n }\r\n\r\n get effectiveIsSubtle(): boolean {\r\n return this.isSubtle !== undefined\r\n ? this.isSubtle\r\n : this.getEffectiveTextStyleDefinition().isSubtle;\r\n }\r\n\r\n get effectiveSize(): Enums.TextSize {\r\n return this.size !== undefined ? this.size : this.getEffectiveTextStyleDefinition().size;\r\n }\r\n\r\n get effectiveWeight(): Enums.TextWeight {\r\n return this.weight !== undefined\r\n ? this.weight\r\n : this.getEffectiveTextStyleDefinition().weight;\r\n }\r\n}\r\n\r\nexport type TextBlockStyle = \"default\" | \"heading\" | \"columnHeader\";\r\n\r\nexport class TextBlock extends BaseTextBlock {\r\n //#region Schema\r\n\r\n static readonly wrapProperty = new BoolProperty(Versions.v1_0, \"wrap\", false);\r\n static readonly maxLinesProperty = new NumProperty(Versions.v1_0, \"maxLines\");\r\n static readonly styleProperty = new ValueSetProperty(Versions.v1_5, \"style\", [\r\n { value: \"default\" },\r\n { value: \"columnHeader\" },\r\n { value: \"heading\" }\r\n ]);\r\n\r\n @property(TextBlock.wrapProperty)\r\n wrap: boolean = false;\r\n\r\n @property(TextBlock.maxLinesProperty)\r\n maxLines?: number;\r\n\r\n @property(TextBlock.styleProperty)\r\n style?: TextBlockStyle;\r\n\r\n //#endregion\r\n\r\n private _computedLineHeight: number;\r\n private _originalInnerHtml: string;\r\n private _processedText?: string;\r\n private _treatAsPlainText: boolean = true;\r\n\r\n private restoreOriginalContent() {\r\n if (this.renderedElement !== undefined) {\r\n if (this.maxLines && this.maxLines > 0) {\r\n this.renderedElement.style.maxHeight =\r\n this._computedLineHeight * this.maxLines + \"px\";\r\n }\r\n\r\n const originalHtml = TextBlock._ttRoundtripPolicy?.createHTML(this._originalInnerHtml) ?? this._originalInnerHtml;\r\n this.renderedElement.innerHTML = originalHtml as string;\r\n }\r\n }\r\n\r\n private truncateIfSupported(maxHeight: number): boolean {\r\n if (this.renderedElement !== undefined) {\r\n // For now, only truncate TextBlocks that contain just a single\r\n // paragraph -- since the maxLines calculation doesn't take into\r\n // account Markdown lists\r\n const children = this.renderedElement.children;\r\n const isTextOnly = !children.length;\r\n const truncationSupported =\r\n isTextOnly ||\r\n (children.length === 1 && (children[0]).tagName.toLowerCase() === \"p\" && !(children[0]).children.length);\r\n\r\n if (truncationSupported) {\r\n const element = isTextOnly ? this.renderedElement : children[0];\r\n\r\n Utils.truncateText(element, maxHeight, this._computedLineHeight);\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // Markdown processing is handled outside of Adaptive Cards. It's up to the host to ensure that markdown is safely\r\n // processed.\r\n private static readonly _ttMarkdownPolicy = (typeof window === 'undefined') ? undefined : window.trustedTypes?.createPolicy(\r\n \"adaptivecards#markdownPassthroughPolicy\",\r\n { createHTML: (value) => value }\r\n );\r\n\r\n // When \"advanced\" truncation is enabled (see GlobalSettings.useAdvancedCardBottomTruncation and\r\n // GlobalSettings.useAdvancedTextBlockTruncation), we store the original pre-truncation content in\r\n // _originalInnerHtml so that we can restore/recalculate truncation later if space availability has changed (see\r\n // TextBlock.restoreOriginalContent())\r\n private static readonly _ttRoundtripPolicy = (typeof window === 'undefined') ? undefined : window.trustedTypes?.createPolicy(\r\n \"adaptivecards#restoreContentsPolicy\",\r\n { createHTML: (value) => value }\r\n );\r\n\r\n protected setText(value: string) {\r\n super.setText(value);\r\n\r\n this._processedText = undefined;\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._processedText = undefined;\r\n\r\n if (this.text) {\r\n const preProcessedText = this.preProcessPropertyValue(BaseTextBlock.textProperty);\r\n const hostConfig = this.hostConfig;\r\n\r\n let element: HTMLElement;\r\n\r\n if (this.forElementId) {\r\n const labelElement = document.createElement(\"label\");\r\n labelElement.htmlFor = this.forElementId;\r\n\r\n element = labelElement;\r\n } else {\r\n element = document.createElement(\"div\");\r\n }\r\n\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-textBlock\"));\r\n element.style.overflow = \"hidden\";\r\n\r\n this.applyStylesTo(element);\r\n\r\n if (this.style === \"heading\") {\r\n element.setAttribute(\"role\", \"heading\");\r\n\r\n const headingLevel = this.hostConfig.textBlock.headingLevel;\r\n\r\n if (headingLevel !== undefined && headingLevel > 0) {\r\n element.setAttribute(\"aria-level\", headingLevel.toString());\r\n }\r\n }\r\n\r\n if (this.selectAction && hostConfig.supportsInteractivity) {\r\n element.onclick = (e) => {\r\n if (this.selectAction && this.selectAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.selectAction.execute();\r\n }\r\n };\r\n\r\n this.selectAction.setupElementForAccessibility(element);\r\n\r\n if (this.selectAction.isEffectivelyEnabled()) {\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-selectable\"));\r\n }\r\n }\r\n\r\n if (!this._processedText) {\r\n this._treatAsPlainText = true;\r\n\r\n let formattedText = TextFormatters.formatText(this.lang, preProcessedText);\r\n\r\n if (this.useMarkdown && formattedText) {\r\n if (GlobalSettings.allowMarkForTextHighlighting) {\r\n formattedText = formattedText\r\n .replace(//g, \"===\")\r\n .replace(/<\\/mark>/g, \"/==/\");\r\n }\r\n\r\n const markdownProcessingResult = AdaptiveCard.applyMarkdown(formattedText);\r\n\r\n if (\r\n markdownProcessingResult.didProcess &&\r\n markdownProcessingResult.outputHtml\r\n ) {\r\n this._processedText = markdownProcessingResult.outputHtml;\r\n this._treatAsPlainText = false;\r\n\r\n // Only process tag if markdown processing was applied because\r\n // markdown processing is also responsible for sanitizing the input string\r\n if (GlobalSettings.allowMarkForTextHighlighting && this._processedText) {\r\n let markStyle: string = \"\";\r\n const effectiveStyle = this.getEffectiveStyleDefinition();\r\n\r\n if (effectiveStyle.highlightBackgroundColor) {\r\n markStyle +=\r\n \"background-color: \" +\r\n effectiveStyle.highlightBackgroundColor +\r\n \";\";\r\n }\r\n\r\n if (effectiveStyle.highlightForegroundColor) {\r\n markStyle +=\r\n \"color: \" + effectiveStyle.highlightForegroundColor + \";\";\r\n }\r\n\r\n if (markStyle) {\r\n markStyle = 'style=\"' + markStyle + '\"';\r\n }\r\n\r\n this._processedText = this._processedText\r\n .replace(/===/g, \"\")\r\n .replace(/\\/==\\//g, \"\");\r\n }\r\n } else {\r\n this._processedText = formattedText;\r\n this._treatAsPlainText = true;\r\n }\r\n } else {\r\n this._processedText = formattedText;\r\n this._treatAsPlainText = true;\r\n }\r\n }\r\n\r\n if (!this._processedText) {\r\n this._processedText = \"\";\r\n }\r\n\r\n if (this._treatAsPlainText) {\r\n element.innerText = this._processedText;\r\n } else {\r\n const processedHtml =\r\n TextBlock._ttMarkdownPolicy?.createHTML(this._processedText) ??\r\n this._processedText;\r\n element.innerHTML = processedHtml as string;\r\n }\r\n\r\n if (element.firstElementChild instanceof HTMLElement) {\r\n const firstElementChild = element.firstElementChild;\r\n firstElementChild.style.marginTop = \"0px\";\r\n firstElementChild.style.width = \"100%\";\r\n\r\n if (!this.wrap) {\r\n firstElementChild.style.overflow = \"hidden\";\r\n firstElementChild.style.textOverflow = \"ellipsis\";\r\n }\r\n }\r\n\r\n if (element.lastElementChild instanceof HTMLElement) {\r\n element.lastElementChild.style.marginBottom = \"0px\";\r\n }\r\n\r\n const anchors = element.getElementsByTagName(\"a\");\r\n\r\n for (const anchor of Array.from(anchors)) {\r\n anchor.classList.add(hostConfig.makeCssClassName(\"ac-anchor\"));\r\n anchor.target = \"_blank\";\r\n anchor.onclick = (e: MouseEvent) => {\r\n if (raiseAnchorClickedEvent(this, anchor, e)) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n }\r\n };\r\n anchor.oncontextmenu = (e: MouseEvent) => {\r\n if (raiseAnchorClickedEvent(this, anchor, e)) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n\r\n if (this.wrap) {\r\n element.style.wordWrap = \"break-word\";\r\n\r\n if (this.maxLines && this.maxLines > 0) {\r\n element.style.overflow = \"hidden\";\r\n\r\n if (Utils.isInternetExplorer() || !GlobalSettings.useWebkitLineClamp) {\r\n element.style.maxHeight = this._computedLineHeight * this.maxLines + \"px\";\r\n } else {\r\n // While non standard, --webkit-line-clamp works in every browser (except IE)\r\n // and is a great solution to support the maxLines feature with ellipsis\r\n // truncation. With --webkit-line-clamp there is need to use explicit line heights\r\n element.style.removeProperty(\"line-height\");\r\n element.style.display = \"-webkit-box\";\r\n element.style.webkitBoxOrient = \"vertical\";\r\n element.style.webkitLineClamp = this.maxLines.toString();\r\n }\r\n }\r\n } else {\r\n element.style.whiteSpace = \"nowrap\";\r\n element.style.textOverflow = \"ellipsis\";\r\n }\r\n\r\n if (\r\n GlobalSettings.useAdvancedTextBlockTruncation ||\r\n GlobalSettings.useAdvancedCardBottomTruncation\r\n ) {\r\n this._originalInnerHtml = element.innerHTML;\r\n }\r\n\r\n return element;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected truncateOverflow(maxHeight: number): boolean {\r\n if (maxHeight >= this._computedLineHeight) {\r\n return this.truncateIfSupported(maxHeight);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected undoOverflowTruncation() {\r\n this.restoreOriginalContent();\r\n\r\n if (GlobalSettings.useAdvancedTextBlockTruncation && this.maxLines) {\r\n const maxHeight = this._computedLineHeight * this.maxLines;\r\n\r\n this.truncateIfSupported(maxHeight);\r\n }\r\n }\r\n\r\n useMarkdown: boolean = true;\r\n forElementId?: string;\r\n\r\n applyStylesTo(targetElement: HTMLElement) {\r\n super.applyStylesTo(targetElement);\r\n\r\n switch (this.getEffectiveHorizontalAlignment()) {\r\n case Enums.HorizontalAlignment.Center:\r\n targetElement.style.textAlign = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n targetElement.style.textAlign = \"end\";\r\n break;\r\n default:\r\n targetElement.style.textAlign = \"start\";\r\n break;\r\n }\r\n\r\n const lineHeights = this.hostConfig.lineHeights;\r\n\r\n if (lineHeights) {\r\n switch (this.effectiveSize) {\r\n case Enums.TextSize.Small:\r\n this._computedLineHeight = lineHeights.small;\r\n break;\r\n case Enums.TextSize.Medium:\r\n this._computedLineHeight = lineHeights.medium;\r\n break;\r\n case Enums.TextSize.Large:\r\n this._computedLineHeight = lineHeights.large;\r\n break;\r\n case Enums.TextSize.ExtraLarge:\r\n this._computedLineHeight = lineHeights.extraLarge;\r\n break;\r\n default:\r\n this._computedLineHeight = lineHeights.default;\r\n break;\r\n }\r\n } else {\r\n // Looks like 1.33 is the magic number to compute line-height\r\n // from font size.\r\n this._computedLineHeight =\r\n this.getFontSize(this.hostConfig.getFontTypeDefinition(this.effectiveFontType)) *\r\n 1.33;\r\n }\r\n\r\n targetElement.style.lineHeight = this._computedLineHeight + \"px\";\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"TextBlock\";\r\n }\r\n\r\n getEffectiveTextStyleDefinition(): TextStyleDefinition {\r\n if (this.style) {\r\n return this.hostConfig.textStyles.getStyleByName(this.style);\r\n }\r\n\r\n return super.getEffectiveTextStyleDefinition();\r\n }\r\n\r\n updateLayout(processChildren: boolean = false) {\r\n super.updateLayout(processChildren);\r\n\r\n if (GlobalSettings.useAdvancedTextBlockTruncation && this.maxLines && this.isDisplayed()) {\r\n // Reset the element's innerHTML in case the available room for\r\n // content has increased\r\n this.restoreOriginalContent();\r\n this.truncateIfSupported(this._computedLineHeight * this.maxLines);\r\n }\r\n }\r\n}\r\n\r\nexport class TextRun extends BaseTextBlock {\r\n //#region Schema\r\n\r\n static readonly italicProperty = new BoolProperty(Versions.v1_2, \"italic\", false);\r\n static readonly strikethroughProperty = new BoolProperty(Versions.v1_2, \"strikethrough\", false);\r\n static readonly highlightProperty = new BoolProperty(Versions.v1_2, \"highlight\", false);\r\n static readonly underlineProperty = new BoolProperty(Versions.v1_3, \"underline\", false);\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n schema.add(BaseTextBlock.selectActionProperty);\r\n }\r\n\r\n @property(TextRun.italicProperty)\r\n italic: boolean = false;\r\n\r\n @property(TextRun.strikethroughProperty)\r\n strikethrough: boolean = false;\r\n\r\n @property(TextRun.highlightProperty)\r\n highlight: boolean = false;\r\n\r\n @property(TextRun.underlineProperty)\r\n underline: boolean = false;\r\n\r\n //#endregion\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n if (this.text) {\r\n const preProcessedText = this.preProcessPropertyValue(BaseTextBlock.textProperty);\r\n const hostConfig = this.hostConfig;\r\n\r\n let formattedText = TextFormatters.formatText(this.lang, preProcessedText);\r\n\r\n if (!formattedText) {\r\n formattedText = \"\";\r\n }\r\n\r\n const element = document.createElement(\"span\");\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-textRun\"));\r\n\r\n this.applyStylesTo(element);\r\n\r\n if (this.selectAction && hostConfig.supportsInteractivity) {\r\n const anchor = document.createElement(\"a\");\r\n anchor.classList.add(hostConfig.makeCssClassName(\"ac-anchor\"));\r\n\r\n const href = this.selectAction.getHref();\r\n\r\n anchor.href = href ? href : \"\";\r\n anchor.target = \"_blank\";\r\n anchor.onclick = (e) => {\r\n if (this.selectAction && this.selectAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.selectAction.execute();\r\n }\r\n };\r\n\r\n this.selectAction.setupElementForAccessibility(anchor);\r\n\r\n anchor.innerText = formattedText;\r\n\r\n element.appendChild(anchor);\r\n } else {\r\n element.innerText = formattedText;\r\n }\r\n\r\n return element;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n applyStylesTo(targetElement: HTMLElement) {\r\n super.applyStylesTo(targetElement);\r\n\r\n if (this.italic) {\r\n targetElement.style.fontStyle = \"italic\";\r\n }\r\n\r\n if (this.strikethrough) {\r\n targetElement.style.textDecoration = \"line-through\";\r\n }\r\n\r\n if (this.highlight) {\r\n const colorDefinition = this.getColorDefinition(\r\n this.getEffectiveStyleDefinition().foregroundColors,\r\n this.effectiveColor\r\n );\r\n\r\n const backgroundColor = Utils.stringToCssColor(\r\n this.effectiveIsSubtle\r\n ? colorDefinition.highlightColors.subtle\r\n : colorDefinition.highlightColors.default\r\n );\r\n if (backgroundColor) {\r\n targetElement.style.backgroundColor = backgroundColor;\r\n }\r\n }\r\n\r\n if (this.underline) {\r\n targetElement.style.textDecoration = \"underline\";\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"TextRun\";\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n\r\n get isInline(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport class RichTextBlock extends CardElement {\r\n private _inlines: CardElement[] = [];\r\n\r\n private internalAddInline(inline: CardElement, forceAdd: boolean = false) {\r\n if (!inline.isInline) {\r\n throw new Error(Strings.errors.elementCannotBeUsedAsInline());\r\n }\r\n\r\n const doAdd: boolean = inline.parent === undefined || forceAdd;\r\n\r\n if (!doAdd && inline.parent !== this) {\r\n throw new Error(Strings.errors.inlineAlreadyParented());\r\n } else {\r\n inline.setParent(this);\r\n\r\n this._inlines.push(inline);\r\n }\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this._inlines = [];\r\n\r\n if (Array.isArray(source[\"inlines\"])) {\r\n for (const jsonInline of source[\"inlines\"]) {\r\n let inline: CardElement | undefined;\r\n\r\n if (typeof jsonInline === \"string\") {\r\n const textRun = new TextRun();\r\n textRun.text = jsonInline;\r\n\r\n inline = textRun;\r\n } else {\r\n // No fallback for inlines in 1.2\r\n inline = context.parseElement(this, jsonInline, [], false);\r\n }\r\n\r\n if (inline) {\r\n this.internalAddInline(inline, true);\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 if (this._inlines.length > 0) {\r\n const jsonInlines: any[] = [];\r\n\r\n for (const inline of this._inlines) {\r\n jsonInlines.push(inline.toJSON(context));\r\n }\r\n\r\n context.serializeValue(target, \"inlines\", jsonInlines);\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n if (this._inlines.length > 0) {\r\n let element: HTMLElement;\r\n\r\n if (this.forElementId) {\r\n const labelElement = document.createElement(\"label\");\r\n labelElement.htmlFor = this.forElementId;\r\n\r\n element = labelElement;\r\n } else {\r\n element = document.createElement(\"div\");\r\n }\r\n\r\n element.className = this.hostConfig.makeCssClassName(\"ac-richTextBlock\");\r\n\r\n switch (this.getEffectiveHorizontalAlignment()) {\r\n case Enums.HorizontalAlignment.Center:\r\n element.style.textAlign = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n element.style.textAlign = \"end\";\r\n break;\r\n default:\r\n element.style.textAlign = \"start\";\r\n break;\r\n }\r\n\r\n let renderedInlines: number = 0;\r\n\r\n for (const inline of this._inlines) {\r\n const renderedInline = inline.render();\r\n\r\n if (renderedInline) {\r\n element.appendChild(renderedInline);\r\n\r\n renderedInlines++;\r\n }\r\n }\r\n\r\n if (renderedInlines > 0) {\r\n return element;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n forElementId?: string;\r\n\r\n asString(): string | undefined {\r\n let result = \"\";\r\n\r\n for (const inline of this._inlines) {\r\n result += inline.asString();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"RichTextBlock\";\r\n }\r\n\r\n getInlineCount(): number {\r\n return this._inlines.length;\r\n }\r\n\r\n getInlineAt(index: number): CardElement {\r\n if (index >= 0 && index < this._inlines.length) {\r\n return this._inlines[index];\r\n } else {\r\n throw new Error(Strings.errors.indexOutOfRange(index));\r\n }\r\n }\r\n\r\n addInline(inline: CardElement | string) {\r\n if (typeof inline === \"string\") {\r\n this.internalAddInline(new TextRun(inline));\r\n } else {\r\n this.internalAddInline(inline);\r\n }\r\n }\r\n\r\n removeInline(inline: CardElement): boolean {\r\n const index = this._inlines.indexOf(inline);\r\n\r\n if (index >= 0) {\r\n this._inlines[index].setParent(undefined);\r\n this._inlines.splice(index, 1);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nexport class Fact extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly titleProperty = new StringProperty(Versions.v1_0, \"title\");\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n\r\n // For historic reasons, the \"title\" schema property is exposed as \"name\" in the OM.\r\n @property(Fact.titleProperty)\r\n name?: string;\r\n\r\n @property(Fact.valueProperty)\r\n value?: string;\r\n\r\n //#endregion\r\n\r\n protected getSchemaKey(): string {\r\n return \"Fact\";\r\n }\r\n\r\n constructor(name?: string, value?: string) {\r\n super();\r\n\r\n this.name = name;\r\n this.value = value;\r\n }\r\n}\r\n\r\nexport class FactSet extends CardElement {\r\n //#region Schema\r\n\r\n static readonly factsProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_0,\r\n \"facts\",\r\n Fact\r\n );\r\n\r\n @property(FactSet.factsProperty)\r\n facts: Fact[];\r\n\r\n //#endregion\r\n\r\n protected get useDefaultSizing(): boolean {\r\n return false;\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n let element: HTMLElement | undefined = undefined;\r\n const hostConfig = this.hostConfig;\r\n\r\n if (this.facts.length > 0) {\r\n element = document.createElement(\"table\");\r\n element.style.borderWidth = \"0px\";\r\n element.style.borderSpacing = \"0px\";\r\n element.style.borderStyle = \"none\";\r\n element.style.borderCollapse = \"collapse\";\r\n element.style.display = \"block\";\r\n element.style.overflow = \"hidden\";\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-factset\"));\r\n element.setAttribute(\"role\", \"presentation\");\r\n\r\n for (let i = 0; i < this.facts.length; i++) {\r\n const trElement = document.createElement(\"tr\");\r\n\r\n if (i > 0) {\r\n trElement.style.marginTop = hostConfig.factSet.spacing + \"px\";\r\n }\r\n\r\n // Title column\r\n let tdElement = document.createElement(\"td\");\r\n tdElement.style.padding = \"0\";\r\n tdElement.classList.add(hostConfig.makeCssClassName(\"ac-fact-title\"));\r\n\r\n if (hostConfig.factSet.title.maxWidth) {\r\n tdElement.style.maxWidth = hostConfig.factSet.title.maxWidth + \"px\";\r\n }\r\n\r\n tdElement.style.verticalAlign = \"top\";\r\n\r\n let textBlock = new TextBlock();\r\n textBlock.setParent(this);\r\n textBlock.text =\r\n !this.facts[i].name && this.isDesignMode() ? \"Title\" : this.facts[i].name;\r\n textBlock.size = hostConfig.factSet.title.size;\r\n textBlock.color = hostConfig.factSet.title.color;\r\n textBlock.isSubtle = hostConfig.factSet.title.isSubtle;\r\n textBlock.weight = hostConfig.factSet.title.weight;\r\n textBlock.wrap = hostConfig.factSet.title.wrap;\r\n textBlock.spacing = Enums.Spacing.None;\r\n\r\n Utils.appendChild(tdElement, textBlock.render());\r\n Utils.appendChild(trElement, tdElement);\r\n\r\n // Spacer column\r\n tdElement = document.createElement(\"td\");\r\n tdElement.style.width = \"10px\";\r\n\r\n Utils.appendChild(trElement, tdElement);\r\n\r\n // Value column\r\n tdElement = document.createElement(\"td\");\r\n tdElement.style.padding = \"0\";\r\n tdElement.style.verticalAlign = \"top\";\r\n tdElement.classList.add(hostConfig.makeCssClassName(\"ac-fact-value\"));\r\n\r\n textBlock = new TextBlock();\r\n textBlock.setParent(this);\r\n textBlock.text = this.facts[i].value;\r\n textBlock.size = hostConfig.factSet.value.size;\r\n textBlock.color = hostConfig.factSet.value.color;\r\n textBlock.isSubtle = hostConfig.factSet.value.isSubtle;\r\n textBlock.weight = hostConfig.factSet.value.weight;\r\n textBlock.wrap = hostConfig.factSet.value.wrap;\r\n textBlock.spacing = Enums.Spacing.None;\r\n\r\n Utils.appendChild(tdElement, textBlock.render());\r\n Utils.appendChild(trElement, tdElement);\r\n Utils.appendChild(element, trElement);\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"FactSet\";\r\n }\r\n}\r\n\r\nclass ImageDimensionProperty extends PropertyDefinition {\r\n getInternalName(): string {\r\n return this.internalName;\r\n }\r\n\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 sourceValue = source[this.name];\r\n\r\n if (sourceValue === undefined) {\r\n return this.defaultValue;\r\n }\r\n\r\n let isValid = false;\r\n\r\n if (typeof sourceValue === \"string\") {\r\n try {\r\n const size = SizeAndUnit.parse(sourceValue, 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 // Swallow the exception\r\n }\r\n\r\n // If the source value isn't valid per this property definition,\r\n // check its validity per the fallback property, if specified\r\n if (!isValid && this.fallbackProperty) {\r\n isValid = this.fallbackProperty.isValidValue(sourceValue, context);\r\n }\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(sourceValue, this.name)\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 constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly internalName: string,\r\n readonly fallbackProperty?: ValueSetProperty\r\n ) {\r\n super(targetVersion, name);\r\n }\r\n}\r\n\r\nexport class Image extends CardElement {\r\n //#region Schema\r\n\r\n static readonly urlProperty = new StringProperty(Versions.v1_0, \"url\");\r\n static readonly altTextProperty = new StringProperty(Versions.v1_0, \"altText\");\r\n static readonly backgroundColorProperty = new StringProperty(Versions.v1_1, \"backgroundColor\");\r\n static readonly styleProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"style\",\r\n Enums.ImageStyle,\r\n Enums.ImageStyle.Default\r\n );\r\n static readonly sizeProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"size\",\r\n Enums.Size,\r\n Enums.Size.Auto\r\n );\r\n static readonly pixelWidthProperty = new ImageDimensionProperty(\r\n Versions.v1_1,\r\n \"width\",\r\n \"pixelWidth\"\r\n );\r\n static readonly pixelHeightProperty = new ImageDimensionProperty(\r\n Versions.v1_1,\r\n \"height\",\r\n \"pixelHeight\",\r\n CardElement.heightProperty\r\n );\r\n static readonly selectActionProperty = new ActionProperty(Versions.v1_1, \"selectAction\", [\r\n \"Action.ShowCard\"\r\n ]);\r\n static readonly shouldForceLoadProperty = new BoolProperty(Versions.v1_6, \"forceLoad\", false);\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n schema.remove(CardElement.heightProperty);\r\n }\r\n\r\n public renderedImageElement?: HTMLElement;\r\n\r\n @property(Image.urlProperty)\r\n url?: string;\r\n\r\n @property(Image.altTextProperty)\r\n altText?: string;\r\n\r\n @property(Image.backgroundColorProperty)\r\n backgroundColor?: string;\r\n\r\n @property(Image.sizeProperty)\r\n size: Enums.Size = Enums.Size.Auto;\r\n\r\n @property(Image.styleProperty)\r\n style: Enums.ImageStyle = Enums.ImageStyle.Default;\r\n\r\n @property(Image.pixelWidthProperty)\r\n pixelWidth?: number;\r\n\r\n @property(Image.pixelHeightProperty)\r\n pixelHeight?: number;\r\n\r\n @property(Image.selectActionProperty)\r\n selectAction?: Action;\r\n\r\n @property(Image.shouldForceLoadProperty)\r\n forceLoad: boolean;\r\n\r\n //#endregion\r\n\r\n private applySize(element: HTMLElement) {\r\n if (this.pixelWidth || this.pixelHeight) {\r\n if (this.pixelWidth) {\r\n element.style.width = this.pixelWidth + \"px\";\r\n }\r\n\r\n if (this.pixelHeight) {\r\n element.style.height = this.pixelHeight + \"px\";\r\n }\r\n } else {\r\n if (this.maxHeight) {\r\n // If the image is constrained in height, we set its height property and\r\n // auto and stretch are ignored (default to medium). THis is necessary for\r\n // ImageSet which uses a maximum image height as opposed to the cards width\r\n // as a constraining dimension\r\n element.style.height = this.hostConfig.getEffectiveImageSize(this.size) + \"px\";\r\n element.style.maxHeight = this.maxHeight + \"px\";\r\n } else {\r\n switch (this.size) {\r\n case Enums.Size.Stretch:\r\n element.style.width = \"100%\";\r\n break;\r\n case Enums.Size.Auto:\r\n element.style.maxWidth = \"100%\";\r\n break;\r\n default:\r\n element.style.width = this.hostConfig.getEffectiveImageSize(this.size) + \"px\";\r\n break;\r\n }\r\n\r\n element.style.maxHeight = \"100%\";\r\n }\r\n }\r\n }\r\n\r\n protected get useDefaultSizing() {\r\n return false;\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n let element: HTMLElement | undefined = undefined;\r\n\r\n if (this.url) {\r\n element = document.createElement(\"div\");\r\n element.style.display = \"flex\";\r\n element.style.alignItems = \"flex-start\";\r\n\r\n // Cache hostConfig to avoid walking the parent hierarchy multiple times\r\n const hostConfig = this.hostConfig;\r\n\r\n switch (this.getEffectiveHorizontalAlignment()) {\r\n case Enums.HorizontalAlignment.Center:\r\n element.style.justifyContent = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n element.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n element.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n\r\n const imageElement = document.createElement(\"img\");\r\n\r\n this.renderedImageElement = imageElement;\r\n\r\n imageElement.onload = (_e: Event) => {\r\n raiseImageLoadedEvent(this);\r\n };\r\n imageElement.onerror = (_e: Event) => {\r\n if (this.renderedElement) {\r\n const card = this.getRootElement() as AdaptiveCard;\r\n\r\n clearElement(this.renderedElement);\r\n\r\n if (card && card.designMode) {\r\n const errorElement = document.createElement(\"div\");\r\n errorElement.style.display = \"flex\";\r\n errorElement.style.alignItems = \"center\";\r\n errorElement.style.justifyContent = \"center\";\r\n errorElement.style.backgroundColor = \"#EEEEEE\";\r\n errorElement.style.color = \"black\";\r\n errorElement.innerText = \":-(\";\r\n errorElement.style.padding = \"10px\";\r\n\r\n this.applySize(errorElement);\r\n\r\n this.renderedElement.appendChild(errorElement);\r\n }\r\n }\r\n\r\n raiseImageLoadedEvent(this);\r\n };\r\n imageElement.style.minWidth = \"0\";\r\n imageElement.classList.add(hostConfig.makeCssClassName(\"ac-image\"));\r\n\r\n if (this.selectAction && hostConfig.supportsInteractivity) {\r\n imageElement.onkeypress = (e) => {\r\n if (\r\n this.selectAction &&\r\n this.selectAction.isEffectivelyEnabled() &&\r\n (e.code === \"Enter\" || e.code === \"Space\")\r\n ) {\r\n // enter or space pressed\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.selectAction.execute();\r\n }\r\n };\r\n\r\n imageElement.onclick = (e) => {\r\n if (this.selectAction && this.selectAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.selectAction.execute();\r\n }\r\n };\r\n\r\n this.selectAction.setupElementForAccessibility(imageElement);\r\n\r\n if (this.selectAction.isEffectivelyEnabled()) {\r\n imageElement.classList.add(hostConfig.makeCssClassName(\"ac-selectable\"));\r\n }\r\n }\r\n\r\n this.applySize(imageElement);\r\n\r\n if (this.style === Enums.ImageStyle.Person) {\r\n imageElement.style.borderRadius = \"50%\";\r\n imageElement.style.backgroundPosition = \"50% 50%\";\r\n imageElement.style.backgroundRepeat = \"no-repeat\";\r\n }\r\n\r\n const backgroundColor = Utils.stringToCssColor(this.backgroundColor);\r\n if (backgroundColor) {\r\n imageElement.style.backgroundColor = backgroundColor;\r\n }\r\n\r\n this.setImageSource(imageElement); \r\n\r\n const altTextProperty = this.preProcessPropertyValue(Image.altTextProperty);\r\n if (altTextProperty) {\r\n imageElement.alt = altTextProperty;\r\n }\r\n\r\n element.appendChild(imageElement);\r\n }\r\n\r\n return element;\r\n }\r\n\r\n maxHeight?: number;\r\n\r\n getJsonTypeName(): string {\r\n return \"Image\";\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n if (this.selectAction) {\r\n result.push(this.selectAction);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getActionById(id: string) {\r\n let result = super.getActionById(id);\r\n\r\n if (!result && this.selectAction) {\r\n result = this.selectAction.getActionById(id);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n return this.url ? [{ url: this.url, mimeType: \"image\" }] : [];\r\n }\r\n\r\n private setImageSource(imageElement: HTMLImageElement): void {\r\n const imageForceLoader: ImageForceLoader = new ImageForceLoader(this.forceLoad, this.url);\r\n imageForceLoader.configureImage(this);\r\n imageElement.src = this.preProcessPropertyValue(Image.urlProperty);\r\n imageForceLoader.resetImage(this);\r\n } \r\n}\r\n\r\n// configures Image element to fetch a new image data from url source instead of relying on cache\r\n// currently rudimentary refreshing scheme is used\r\n// by attaching unique query string to url, we bypass the cache usage\r\nclass ImageForceLoader{\r\n private uniqueHash : string;\r\n public readonly urlWithForceLoadOption : string;\r\n constructor(\r\n readonly doForceLoad: boolean,\r\n readonly url : string | undefined,\r\n )\r\n {\r\n if (url && url.length && doForceLoad) {\r\n // we can do better by appending unique key such as uuid instead of epoch\r\n // however the current usage is for front-end ui and networking, \r\n // since ui is running in single main thread, this is sufficient mechanism\r\n // without needing to depend on external library for our small use cases.\r\n this.uniqueHash = '?' + Date.now();\r\n this.urlWithForceLoadOption = url + this.uniqueHash;\r\n }\r\n }\r\n\r\n public configureImage(image: Image): void {\r\n if (this.urlWithForceLoadOption && this.urlWithForceLoadOption.length) {\r\n image.url = this.urlWithForceLoadOption;\r\n }\r\n }\r\n\r\n public resetImage(image: Image): void {\r\n image.url = this.url;\r\n }\r\n}\r\n\r\nexport abstract class CardElementContainer extends CardElement {\r\n //#region Schema\r\n\r\n static readonly selectActionProperty = new ActionProperty(Versions.v1_1, \"selectAction\", [\r\n \"Action.ShowCard\"\r\n ]);\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n if (!this.isSelectable) {\r\n schema.remove(CardElementContainer.selectActionProperty);\r\n }\r\n }\r\n\r\n @property(CardElementContainer.selectActionProperty)\r\n protected _selectAction?: Action;\r\n\r\n //#endregion\r\n\r\n protected isElementAllowed(element: CardElement) {\r\n return this.hostConfig.supportsInteractivity || !element.isInteractive;\r\n }\r\n\r\n protected applyPadding() {\r\n super.applyPadding();\r\n\r\n if (!this.renderedElement) {\r\n return;\r\n }\r\n\r\n let physicalPadding = new SpacingDefinition();\r\n\r\n if (this.getEffectivePadding()) {\r\n physicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(\r\n this.getEffectivePadding()\r\n );\r\n }\r\n\r\n this.renderedElement.style.paddingTop = physicalPadding.top + \"px\";\r\n this.renderedElement.style.paddingRight = physicalPadding.right + \"px\";\r\n this.renderedElement.style.paddingBottom = physicalPadding.bottom + \"px\";\r\n this.renderedElement.style.paddingLeft = physicalPadding.left + \"px\";\r\n\r\n this.renderedElement.style.marginRight = \"0\";\r\n this.renderedElement.style.marginLeft = \"0\";\r\n }\r\n\r\n protected get isSelectable(): boolean {\r\n return false;\r\n }\r\n\r\n protected forbiddenChildElements(): string[] {\r\n return [];\r\n }\r\n\r\n abstract getItemCount(): number;\r\n abstract getItemAt(index: number): CardElement;\r\n abstract getFirstVisibleRenderedItem(): CardElement | undefined;\r\n abstract getLastVisibleRenderedItem(): CardElement | undefined;\r\n abstract removeItem(item: CardElement): boolean;\r\n\r\n allowVerticalOverflow: boolean = false;\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n this.getItemAt(i).releaseDOMResources();\r\n }\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n const item = this.getItemAt(i);\r\n\r\n if (!this.hostConfig.supportsInteractivity && item.isInteractive) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.InteractivityNotAllowed,\r\n Strings.errors.interactivityNotAllowed()\r\n );\r\n }\r\n\r\n if (!this.isElementAllowed(item)) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.InteractivityNotAllowed,\r\n Strings.errors.elementTypeNotAllowed(item.getJsonTypeName())\r\n );\r\n }\r\n\r\n item.internalValidateProperties(context);\r\n }\r\n\r\n if (this._selectAction) {\r\n this._selectAction.internalValidateProperties(context);\r\n }\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n const element = super.render();\r\n\r\n if (element) {\r\n const hostConfig = this.hostConfig;\r\n\r\n if (this.allowVerticalOverflow) {\r\n element.style.overflowX = \"hidden\";\r\n element.style.overflowY = \"auto\";\r\n }\r\n\r\n if (\r\n element &&\r\n this.isSelectable &&\r\n this._selectAction &&\r\n hostConfig.supportsInteractivity\r\n ) {\r\n element.onclick = (e) => {\r\n if (this._selectAction && this._selectAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this._selectAction.execute();\r\n }\r\n };\r\n\r\n element.onkeypress = (e) => {\r\n if (\r\n this._selectAction &&\r\n this._selectAction.isEffectivelyEnabled() &&\r\n (e.code === \"Enter\" || e.code === \"Space\")\r\n ) {\r\n // Enter or space pressed\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this._selectAction.execute();\r\n }\r\n };\r\n\r\n this._selectAction.setupElementForAccessibility(element);\r\n\r\n if (this._selectAction.isEffectivelyEnabled()) {\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-selectable\"));\r\n }\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n updateLayout(processChildren: boolean = true) {\r\n super.updateLayout(processChildren);\r\n\r\n if (processChildren) {\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n this.getItemAt(i).updateLayout();\r\n }\r\n }\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n let result: Input[] = [];\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n result.push(...this.getItemAt(i).getAllInputs(processActions));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n result.push(...this.getItemAt(i).getAllActions());\r\n }\r\n\r\n if (this._selectAction) {\r\n result.push(this._selectAction);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n let result: IResourceInformation[] = [];\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n result.push(...this.getItemAt(i).getResourceInformation());\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getElementById(id: string): CardElement | undefined {\r\n let result = super.getElementById(id);\r\n\r\n if (!result) {\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n result = this.getItemAt(i).getElementById(id);\r\n\r\n if (result) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n findDOMNodeOwner(node: Node): CardObject | undefined {\r\n let target: CardObject | undefined = undefined;\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n // recur through child elements\r\n target = this.getItemAt(i).findDOMNodeOwner(node);\r\n\r\n if (target) {\r\n return target;\r\n }\r\n }\r\n\r\n // If not found in children, check the actions\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n target = this.getActionAt(i)?.findDOMNodeOwner(node);\r\n\r\n if (target) {\r\n return target;\r\n }\r\n }\r\n\r\n // if not found in children or actions, defer to parent implementation\r\n return super.findDOMNodeOwner(node);\r\n }\r\n}\r\n\r\nexport class ImageSet extends CardElementContainer {\r\n //#region Schema\r\n\r\n static readonly imagesProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_0,\r\n \"images\",\r\n Image,\r\n (sender: SerializableObject, item: Image) => {\r\n item.setParent(sender);\r\n }\r\n );\r\n\r\n static readonly imageSizeProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"imageSize\",\r\n Enums.ImageSize,\r\n Enums.ImageSize.Medium\r\n );\r\n\r\n static readonly imagePresentationStyle = new EnumProperty(\r\n Versions.v1_6,\r\n \"style\",\r\n Enums.ImageSetPresentationStyle,\r\n Enums.ImageSetPresentationStyle.Default\r\n );\r\n\r\n static readonly pixelOffset = new NumProperty(\r\n Versions.v1_6,\r\n \"offset\",\r\n 0,\r\n undefined\r\n );\r\n\r\n @property(ImageSet.imagesProperty)\r\n private _images: Image[] = [];\r\n\r\n @property(ImageSet.imageSizeProperty)\r\n imageSize: Enums.ImageSize = Enums.ImageSize.Medium;\r\n\r\n @property(ImageSet.imagePresentationStyle)\r\n presentationStyle: Enums.ImageSetPresentationStyle = Enums.ImageSetPresentationStyle.Default;\r\n\r\n @property(ImageSet.pixelOffset)\r\n pixelOffset: number = 0;\r\n\r\n //#endregion\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n let element: HTMLElement | undefined = undefined;\r\n\r\n if (this._images.length > 0) {\r\n const imageSetIsGrid = (this.presentationStyle === Enums.ImageSetPresentationStyle.Grid);\r\n\r\n element = document.createElement(\"div\");\r\n element.style.display = \"flex\";\r\n element.style.flexWrap = \"wrap\";\r\n element.classList.add(this.hostConfig.makeCssClassName(\"ac-imageSet\"));\r\n element.classList.toggle(this.hostConfig.makeCssClassName(\"ac-imageSetStyle-grid\"), imageSetIsGrid);\r\n element.style.gap = \"5px\";\r\n\r\n let renderImageSize : Enums.Size;\r\n switch (this.imageSize) {\r\n case Enums.ImageSize.Small:\r\n renderImageSize = Enums.Size.Small;\r\n break;\r\n case Enums.ImageSize.Large:\r\n renderImageSize = Enums.Size.Large;\r\n break;\r\n default:\r\n renderImageSize = Enums.Size.Medium;\r\n break;\r\n }\r\n\r\n const effectiveImageSize = this.hostConfig.getEffectiveImageSize(renderImageSize);\r\n\r\n for (const image of this._images) {\r\n image.maxHeight = this.hostConfig.imageSet.maxImageHeight;\r\n\r\n if (imageSetIsGrid) {\r\n image.pixelWidth = effectiveImageSize;\r\n } else {\r\n image.size = renderImageSize;\r\n }\r\n\r\n const imageContainer = image.render();\r\n\r\n if (imageContainer) {\r\n imageContainer.style.display = \"inline-flex\";\r\n imageContainer.style.margin = \"0px\";\r\n\r\n if (imageSetIsGrid) {\r\n imageContainer.style.flexBasis = effectiveImageSize + \"px\";\r\n imageContainer.style.height = effectiveImageSize + \"px\";\r\n imageContainer.style.flexGrow = \"0\";\r\n imageContainer.style.flexShrink = \"0\";\r\n\r\n const renderedImageStyle = image.renderedImageElement?.style;\r\n if (renderedImageStyle) {\r\n renderedImageStyle.width = \"100%\";\r\n renderedImageStyle.height = \"100%\";\r\n renderedImageStyle.objectFit = \"cover\";\r\n renderedImageStyle.verticalAlign = \"middle\";\r\n }\r\n }\r\n\r\n Utils.appendChild(element, imageContainer);\r\n }\r\n }\r\n\r\n if (this.presentationStyle == Enums.ImageSetPresentationStyle.Stacked) {\r\n this.applyStackedPresentationStyle();\r\n }\r\n }\r\n \r\n\r\n return element;\r\n }\r\n\r\n applyStackedPresentationStyle() {\r\n if (this._images[0].renderedImageElement) {\r\n let dimension = StackedImageConfigurator.parseNumericPixelDimension(this._images[0].renderedImageElement.style.height);\r\n let bgColor = this.getEffectiveBackgroundColor();\r\n if (dimension) {\r\n let stackedImageConfigurator = new StackedImageConfigurator(this.pixelOffset, \r\n dimension, bgColor);\r\n stackedImageConfigurator.configureImagesArrayAsStackedLayout(this._images);\r\n }\r\n }\r\n }\r\n\r\n getEffectiveBackgroundColor() : string | undefined {\r\n let parentContainer = this.getParentContainer();\r\n let style = parentContainer?.getEffectiveStyle();\r\n\r\n const styleDefinition = this.hostConfig.containerStyles.getStyleByName(\r\n style,\r\n this.hostConfig.containerStyles.getStyleByName(this.defaultStyle)\r\n );\r\n\r\n return Utils.stringToCssColor(styleDefinition.backgroundColor);\r\n }\r\n\r\n getItemCount(): number {\r\n return this._images.length;\r\n }\r\n\r\n getItemAt(index: number): CardElement {\r\n return this._images[index];\r\n }\r\n\r\n getFirstVisibleRenderedItem(): CardElement | undefined {\r\n return this._images && this._images.length > 0 ? this._images[0] : undefined;\r\n }\r\n\r\n getLastVisibleRenderedItem(): CardElement | undefined {\r\n return this._images && this._images.length > 0\r\n ? this._images[this._images.length - 1]\r\n : undefined;\r\n }\r\n\r\n removeItem(item: CardElement): boolean {\r\n if (item instanceof Image) {\r\n const itemIndex = this._images.indexOf(item);\r\n\r\n if (itemIndex >= 0) {\r\n this._images.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\r\n return false;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"ImageSet\";\r\n }\r\n\r\n addImage(image: Image) {\r\n if (!image.parent) {\r\n this._images.push(image);\r\n\r\n image.setParent(this);\r\n } else {\r\n throw new Error(\"This image already belongs to another ImageSet\");\r\n }\r\n }\r\n\r\n indexOf(cardElement: CardElement): number {\r\n return cardElement instanceof Image ? this._images.indexOf(cardElement) : -1;\r\n }\r\n}\r\n\r\nclass StackedImageConfigurator {\r\n private sign45 = 0.7071;\r\n private maxImageCounts: number = 2;\r\n private offset: number = 0;\r\n private normalizationConstant: number = 0;\r\n private border: number = 5;\r\n private dimension: number = 0;\r\n private style: string;\r\n\r\n constructor(offset: number, dimension: number, style: string | undefined) {\r\n this.dimension = dimension;\r\n this.normalizationConstant = (dimension * this.sign45 - 0.5 * dimension) * 2;\r\n // offset determines how far images are placed from each other\r\n // at zero, images are separated only by the border\r\n // there is no restriction on how far they are apart in positive values, their actual\r\n // positioning is limited by maximum size imposed by Image renderer\r\n // a negative value can decrease upto the diameter of the image since a value less than the diameter\r\n // put the images past each other, and the use of such value is not reasonable request\r\n // users should change image positions in such case.\r\n this.offset = this.sign45 * (Math.max(offset, -dimension) - this.normalizationConstant);\r\n this.style = style ? style : \"\";\r\n }\r\n\r\n private moveImageRight(element: HTMLElement) {\r\n element.style.marginLeft = this.offset + \"px\";\r\n }\r\n\r\n private moveImageUp(element: HTMLElement) {\r\n element.style.marginBottom = this.offset + this.dimension+ \"px\";\r\n }\r\n\r\n private moveImageDown(element: HTMLElement) {\r\n element.style.marginTop = this.offset + this.dimension + \"px\";\r\n }\r\n\r\n private makeImageRound(element: HTMLElement) {\r\n element.style.borderRadius = \"50%\";\r\n element.style.backgroundPosition = \"50% 50%\";\r\n element.style.backgroundRepeat = \"no-repeat\";\r\n }\r\n\r\n private applyBorder(element: HTMLElement) {\r\n element.style.height = (this.dimension + this.border * 2) + \"px\";\r\n element.style.border = this.border + \"px\" + \" solid \" + this.style;\r\n }\r\n\r\n private configureImageForBottomLeft(element: HTMLElement) {\r\n this.moveImageDown(element);\r\n this.makeImageRound(element); \r\n this.applyBorder(element);\r\n element.style.zIndex = \"2\";\r\n }\r\n\r\n private configureImageForTopRight(element: HTMLElement) {\r\n this.moveImageUp(element);\r\n this.moveImageRight(element);\r\n this.makeImageRound(element); \r\n element.style.zIndex = \"1\";\r\n }\r\n\r\n // stacked layout is applied when there are two images in ImageSet,\r\n // first image in the ImageSet is put bottom left of ImageSet,\r\n // second image is placed top right diagonally to the first image at 45 angle\r\n // first image is placed over the second image should the overlap to occur.\r\n public configureImagesArrayAsStackedLayout(elements: Array) {\r\n if (elements.length == 1) {\r\n if (elements[0].renderedImageElement) {\r\n this.makeImageRound(elements[0].renderedImageElement); \r\n }\r\n }\r\n else if (elements.length <= this.maxImageCounts) {\r\n if (elements[0].renderedImageElement && elements[1].renderedImageElement) {\r\n this.configureImageForBottomLeft(elements[0].renderedImageElement);\r\n this.configureImageForTopRight(elements[1].renderedImageElement);\r\n }\r\n }\r\n }\r\n\r\n public static parseNumericPixelDimension(dimension: string): number | undefined {\r\n if (dimension?.substring(dimension.length - 2) == 'px') {\r\n return parseInt(dimension.substring(0, dimension.length - 2));\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport abstract class ContentSource extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly mimeTypeProperty = new StringProperty(Versions.v1_1, \"mimeType\");\r\n static readonly urlProperty = new StringProperty(Versions.v1_1, \"url\");\r\n\r\n @property(ContentSource.mimeTypeProperty)\r\n mimeType?: string;\r\n\r\n @property(ContentSource.urlProperty)\r\n url?: string;\r\n\r\n //#endregion\r\n\r\n constructor(url?: string, mimeType?: string) {\r\n super();\r\n\r\n this.url = url;\r\n this.mimeType = mimeType;\r\n }\r\n\r\n isValid(): boolean {\r\n return this.mimeType && this.url ? true : false;\r\n }\r\n}\r\n\r\nexport class CaptionSource extends ContentSource {\r\n //#region Schema\r\n\r\n static readonly labelProperty = new StringProperty(Versions.v1_6, \"label\");\r\n\r\n @property(CaptionSource.labelProperty)\r\n label?: string;\r\n\r\n //#endregion\r\n\r\n constructor(url?: string, mimeType?: string, label?: string) {\r\n super(url, mimeType);\r\n\r\n this.label = label;\r\n }\r\n\r\n protected getSchemaKey(): string {\r\n return \"CaptionSource\";\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n let result: HTMLTrackElement | undefined = undefined;\r\n\r\n if (this.isValid()) {\r\n result = document.createElement(\"track\");\r\n result.src = this.url!;\r\n result.kind = \"captions\";\r\n result.label = this.label!;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport class MediaSource extends ContentSource {\r\n protected getSchemaKey(): string {\r\n return \"MediaSource\";\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n let result: HTMLSourceElement | undefined = undefined;\r\n\r\n if (this.isValid()) {\r\n result = document.createElement(\"source\");\r\n result.src = this.url!;\r\n result.type = this.mimeType!;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport abstract class MediaPlayer {\r\n private _posterUrl?: string;\r\n\r\n abstract canPlay(): boolean;\r\n abstract render(): HTMLElement;\r\n abstract fetchVideoDetails(): Promise;\r\n\r\n play() {\r\n // Do nothing in base implementation\r\n }\r\n\r\n get posterUrl(): string | undefined {\r\n return this._posterUrl;\r\n }\r\n\r\n protected set posterUrl(value: string | undefined) {\r\n this._posterUrl = value;\r\n }\r\n\r\n get selectedMediaType(): string | undefined {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport class HTML5MediaPlayer extends MediaPlayer {\r\n private _selectedMediaType?: string;\r\n private _selectedSources: MediaSource[] = [];\r\n private _captionSources: CaptionSource[] = [];\r\n private _mediaElement?: HTMLMediaElement;\r\n\r\n private processSources() {\r\n this._selectedSources = [];\r\n this._captionSources = [];\r\n this._selectedMediaType = undefined;\r\n\r\n for (const source of this.owner.sources) {\r\n const mimeComponents = source.mimeType ? source.mimeType.split(\"/\") : [];\r\n\r\n if (mimeComponents.length === 2) {\r\n if (!this._selectedMediaType) {\r\n const index = HTML5MediaPlayer.supportedMediaTypes.indexOf(mimeComponents[0]);\r\n\r\n if (index >= 0) {\r\n this._selectedMediaType = HTML5MediaPlayer.supportedMediaTypes[index];\r\n }\r\n }\r\n if (mimeComponents[0] === this._selectedMediaType) {\r\n this._selectedSources.push(source);\r\n }\r\n }\r\n }\r\n\r\n this._captionSources.push(...this.owner.captionSources);\r\n }\r\n\r\n static readonly supportedMediaTypes = [\"audio\", \"video\"];\r\n\r\n constructor(readonly owner: Media) {\r\n super();\r\n\r\n this.processSources();\r\n }\r\n\r\n canPlay(): boolean {\r\n return this._selectedSources.length > 0;\r\n }\r\n\r\n async fetchVideoDetails() {\r\n // Nothing to fetch for the HTML5 media player\r\n }\r\n\r\n render(): HTMLElement {\r\n if (this._selectedMediaType === \"video\") {\r\n this._mediaElement = document.createElement(\"video\");\r\n } else {\r\n this._mediaElement = document.createElement(\"audio\");\r\n }\r\n\r\n this._mediaElement.setAttribute(\r\n \"aria-label\",\r\n this.owner.altText ? this.owner.altText : Strings.defaults.mediaPlayerAriaLabel()\r\n );\r\n this._mediaElement.setAttribute(\"webkit-playsinline\", \"\");\r\n this._mediaElement.setAttribute(\"playsinline\", \"\");\r\n // We enable crossorigin for cases where the caption file has a different domain than\r\n // the video file. If the caption file lives in a different domain than the video file\r\n // and crossorigin is not set, then the caption file will fail to load.\r\n this._mediaElement.setAttribute(\"crossorigin\", \"\");\r\n this._mediaElement.autoplay = true;\r\n this._mediaElement.controls = true;\r\n\r\n if (Utils.isMobileOS()) {\r\n this._mediaElement.muted = true;\r\n }\r\n\r\n this._mediaElement.preload = \"none\";\r\n this._mediaElement.style.width = \"100%\";\r\n\r\n for (const source of this.owner.sources) {\r\n const renderedSource = source.render();\r\n\r\n Utils.appendChild(this._mediaElement, renderedSource);\r\n }\r\n\r\n for (const captionSource of this.owner.captionSources) {\r\n if (captionSource.mimeType == \"vtt\") {\r\n const renderedCaptionSource = captionSource.render();\r\n\r\n Utils.appendChild(this._mediaElement, renderedCaptionSource);\r\n }\r\n }\r\n\r\n return this._mediaElement;\r\n }\r\n\r\n play() {\r\n if (this._mediaElement) {\r\n this._mediaElement.play();\r\n }\r\n }\r\n\r\n get selectedMediaType(): string | undefined {\r\n return this._selectedMediaType;\r\n }\r\n}\r\n\r\nexport abstract class CustomMediaPlayer extends MediaPlayer {\r\n constructor(matches: RegExpExecArray) {\r\n super();\r\n }\r\n}\r\n\r\nexport abstract class IFrameMediaMediaPlayer extends CustomMediaPlayer {\r\n private _videoId?: string;\r\n\r\n constructor(matches: RegExpExecArray, readonly iFrameTitle?: string) {\r\n super(matches);\r\n\r\n if (matches.length >= 2) {\r\n this._videoId = matches[1];\r\n }\r\n }\r\n\r\n abstract getEmbedVideoUrl(): string;\r\n\r\n canPlay(): boolean {\r\n return this._videoId !== undefined;\r\n }\r\n\r\n render(): HTMLElement {\r\n let container = document.createElement(\"div\");\r\n container.style.position = \"relative\";\r\n container.style.width = \"100%\";\r\n container.style.height = \"0\";\r\n container.style.paddingBottom = \"56.25%\";\r\n\r\n let iFrame = document.createElement(\"iframe\");\r\n iFrame.style.position = \"absolute\";\r\n iFrame.style.top = \"0\";\r\n iFrame.style.left = \"0\";\r\n iFrame.style.width = \"100%\";\r\n iFrame.style.height = \"100%\";\r\n iFrame.src = this.getEmbedVideoUrl();\r\n iFrame.frameBorder = \"0\";\r\n\r\n if (this.iFrameTitle) {\r\n iFrame.title = this.iFrameTitle;\r\n }\r\n\r\n iFrame.allow =\r\n \"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\";\r\n iFrame.allowFullscreen = true;\r\n\r\n container.appendChild(iFrame);\r\n\r\n return container;\r\n }\r\n\r\n get videoId(): string | undefined {\r\n return this._videoId;\r\n }\r\n}\r\n\r\nexport class VimeoPlayer extends IFrameMediaMediaPlayer {\r\n async fetchVideoDetails(): Promise {\r\n const oEmbedUrl = `https://vimeo.com/api/oembed.json?url=${this.getEmbedVideoUrl()}`;\r\n\r\n let response = await fetch(oEmbedUrl);\r\n\r\n if (response.ok) {\r\n let json = await response.json();\r\n\r\n this.posterUrl = json[\"thumbnail_url\"];\r\n }\r\n }\r\n\r\n getEmbedVideoUrl(): string {\r\n return `https://player.vimeo.com/video/${this.videoId}?autoplay=1`;\r\n }\r\n}\r\n\r\nexport class DailymotionPlayer extends IFrameMediaMediaPlayer {\r\n async fetchVideoDetails(): Promise {\r\n const apiUrl = `https://api.dailymotion.com/video/${this.videoId}?fields=thumbnail_720_url`;\r\n\r\n let response = await fetch(apiUrl);\r\n\r\n if (response.ok) {\r\n let json = await response.json();\r\n\r\n this.posterUrl = json[\"thumbnail_720_url\"];\r\n }\r\n }\r\n\r\n getEmbedVideoUrl(): string {\r\n return `https://www.dailymotion.com/embed/video/${this.videoId}?autoplay=1`;\r\n }\r\n}\r\n\r\nexport class YouTubePlayer extends IFrameMediaMediaPlayer {\r\n private _startTimeIndex?: number;\r\n\r\n constructor(matches: RegExpExecArray, readonly iFrameTitle?: string) {\r\n super(matches, iFrameTitle);\r\n\r\n if (matches.length >= 3 && matches[2] !== undefined) {\r\n this._startTimeIndex = parseInt(matches[2]);\r\n }\r\n }\r\n\r\n async fetchVideoDetails(): Promise {\r\n this.posterUrl = this.videoId\r\n ? `https://img.youtube.com/vi/${this.videoId}/maxresdefault.jpg`\r\n : undefined;\r\n }\r\n\r\n getEmbedVideoUrl(): string {\r\n let url = `https://www.youtube.com/embed/${this.videoId}?autoplay=1`;\r\n\r\n if (this._startTimeIndex !== undefined) {\r\n url += `&start=${this._startTimeIndex}`;\r\n }\r\n\r\n return url;\r\n }\r\n}\r\n\r\nexport interface ICustomMediaPlayer {\r\n urlPatterns: RegExp[];\r\n createMediaPlayer: (matches: RegExpExecArray) => CustomMediaPlayer;\r\n}\r\n\r\nexport class Media extends CardElement {\r\n static customMediaPlayers: ICustomMediaPlayer[] = [\r\n {\r\n urlPatterns: [\r\n /^(?:https?:\\/\\/)?(?:www.)?youtube.com\\/watch\\?(?=.*v=([\\w\\d-_]+))(?=(?:.*t=(\\d+))?).*/gi,\r\n /^(?:https?:\\/\\/)?youtu.be\\/([\\w\\d-_]+)(?:\\?t=(\\d+))?/gi\r\n ],\r\n createMediaPlayer: (matches) =>\r\n new YouTubePlayer(matches, Strings.defaults.youTubeVideoPlayer())\r\n },\r\n {\r\n urlPatterns: [/^(?:https?:\\/\\/)?vimeo.com\\/([\\w\\d-_]+).*/gi],\r\n createMediaPlayer: (matches) =>\r\n new VimeoPlayer(matches, Strings.defaults.vimeoVideoPlayer())\r\n },\r\n {\r\n urlPatterns: [/^(?:https?:\\/\\/)?(?:www.)?dailymotion.com\\/video\\/([\\w\\d-_]+).*/gi],\r\n createMediaPlayer: (matches) =>\r\n new DailymotionPlayer(matches, Strings.defaults.dailymotionVideoPlayer())\r\n }\r\n ];\r\n\r\n //#region Schema\r\n\r\n static readonly sourcesProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_1,\r\n \"sources\",\r\n MediaSource\r\n );\r\n static readonly captionSourcesProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_6,\r\n \"captionSources\",\r\n CaptionSource\r\n );\r\n static readonly posterProperty = new StringProperty(Versions.v1_1, \"poster\");\r\n static readonly altTextProperty = new StringProperty(Versions.v1_1, \"altText\");\r\n\r\n @property(Media.sourcesProperty)\r\n sources: MediaSource[] = [];\r\n\r\n @property(Media.captionSourcesProperty)\r\n captionSources: CaptionSource[] = [];\r\n\r\n @property(Media.posterProperty)\r\n poster?: string;\r\n\r\n @property(Media.altTextProperty)\r\n altText?: string;\r\n\r\n //#endregion\r\n\r\n private _mediaPlayer: MediaPlayer;\r\n\r\n private createMediaPlayer(): MediaPlayer {\r\n for (let provider of Media.customMediaPlayers) {\r\n for (let source of this.sources) {\r\n if (source.url) {\r\n for (let pattern of provider.urlPatterns) {\r\n let matches = pattern.exec(source.url);\r\n\r\n if (matches !== null) {\r\n return provider.createMediaPlayer(matches);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return new HTML5MediaPlayer(this);\r\n }\r\n\r\n private handlePlayButtonInvoke(event: UIEvent): void {\r\n if (this.hostConfig.media.allowInlinePlayback) {\r\n event.preventDefault();\r\n event.cancelBubble = true;\r\n\r\n if (this.renderedElement) {\r\n const mediaPlayerElement = this._mediaPlayer.render();\r\n clearElement(this.renderedElement);\r\n this.renderedElement.appendChild(mediaPlayerElement);\r\n\r\n this._mediaPlayer.play();\r\n\r\n mediaPlayerElement.focus();\r\n }\r\n } else {\r\n if (Media.onPlay) {\r\n event.preventDefault();\r\n event.cancelBubble = true;\r\n\r\n Media.onPlay(this);\r\n }\r\n }\r\n }\r\n\r\n private async displayPoster() {\r\n if (this.renderedElement) {\r\n const playButtonArrowWidth = 12;\r\n const playButtonArrowHeight = 15;\r\n\r\n const posterRootElement = document.createElement(\"div\");\r\n posterRootElement.className = this.hostConfig.makeCssClassName(\"ac-media-poster\");\r\n posterRootElement.setAttribute(\"role\", \"contentinfo\");\r\n posterRootElement.setAttribute(\r\n \"aria-label\",\r\n this.altText ? this.altText : Strings.defaults.mediaPlayerAriaLabel()\r\n );\r\n posterRootElement.style.position = \"relative\";\r\n posterRootElement.style.display = \"flex\";\r\n\r\n let posterUrl = this.poster ? this.poster : this._mediaPlayer.posterUrl;\r\n\r\n if (!posterUrl) {\r\n posterUrl = this.hostConfig.media.defaultPoster;\r\n }\r\n\r\n if (posterUrl) {\r\n const posterImageElement = document.createElement(\"img\");\r\n posterImageElement.style.width = \"100%\";\r\n posterImageElement.style.height = \"100%\";\r\n posterImageElement.setAttribute(\"role\", \"presentation\");\r\n\r\n posterImageElement.onerror = (_e: Event) => {\r\n if (posterImageElement.parentNode) {\r\n posterImageElement.parentNode.removeChild(posterImageElement);\r\n }\r\n\r\n posterRootElement.classList.add(\"empty\");\r\n posterRootElement.style.minHeight = \"150px\";\r\n };\r\n\r\n posterImageElement.src = posterUrl;\r\n\r\n posterRootElement.appendChild(posterImageElement);\r\n } else {\r\n posterRootElement.classList.add(\"empty\");\r\n posterRootElement.style.minHeight = \"150px\";\r\n }\r\n\r\n if (this.hostConfig.supportsInteractivity && this._mediaPlayer.canPlay()) {\r\n const playButtonOuterElement = document.createElement(\"div\");\r\n playButtonOuterElement.tabIndex = 0;\r\n playButtonOuterElement.setAttribute(\"role\", \"button\");\r\n playButtonOuterElement.setAttribute(\r\n \"aria-label\",\r\n Strings.defaults.mediaPlayerPlayMedia()\r\n );\r\n playButtonOuterElement.className =\r\n this.hostConfig.makeCssClassName(\"ac-media-playButton\");\r\n playButtonOuterElement.style.display = \"flex\";\r\n playButtonOuterElement.style.alignItems = \"center\";\r\n playButtonOuterElement.style.justifyContent = \"center\";\r\n playButtonOuterElement.onclick = (e) => {\r\n this.handlePlayButtonInvoke(e);\r\n };\r\n\r\n playButtonOuterElement.onkeypress = (e: KeyboardEvent) => {\r\n if (e.code === \"Enter\" || e.code === \"Space\") {\r\n // space or enter\r\n this.handlePlayButtonInvoke(e);\r\n }\r\n };\r\n\r\n const playButtonInnerElement = document.createElement(\"div\");\r\n playButtonInnerElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-media-playButton-arrow\"\r\n );\r\n playButtonInnerElement.style.width = playButtonArrowWidth + \"px\";\r\n playButtonInnerElement.style.height = playButtonArrowHeight + \"px\";\r\n playButtonInnerElement.style.borderTopWidth = playButtonArrowHeight / 2 + \"px\";\r\n playButtonInnerElement.style.borderBottomWidth = playButtonArrowHeight / 2 + \"px\";\r\n playButtonInnerElement.style.borderLeftWidth = playButtonArrowWidth + \"px\";\r\n playButtonInnerElement.style.borderRightWidth = \"0\";\r\n playButtonInnerElement.style.borderStyle = \"solid\";\r\n playButtonInnerElement.style.borderTopColor = \"transparent\";\r\n playButtonInnerElement.style.borderRightColor = \"transparent\";\r\n playButtonInnerElement.style.borderBottomColor = \"transparent\";\r\n playButtonInnerElement.style.transform =\r\n \"translate(\" + playButtonArrowWidth / 10 + \"px,0px)\";\r\n\r\n playButtonOuterElement.appendChild(playButtonInnerElement);\r\n\r\n const playButtonContainer = document.createElement(\"div\");\r\n playButtonContainer.style.position = \"absolute\";\r\n playButtonContainer.style.left = \"0\";\r\n playButtonContainer.style.top = \"0\";\r\n playButtonContainer.style.width = \"100%\";\r\n playButtonContainer.style.height = \"100%\";\r\n playButtonContainer.style.display = \"flex\";\r\n playButtonContainer.style.justifyContent = \"center\";\r\n playButtonContainer.style.alignItems = \"center\";\r\n\r\n playButtonContainer.appendChild(playButtonOuterElement);\r\n posterRootElement.appendChild(playButtonContainer);\r\n }\r\n\r\n clearElement(this.renderedElement);\r\n this.renderedElement.appendChild(posterRootElement);\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const element = document.createElement(\"div\");\r\n element.className = this.hostConfig.makeCssClassName(\"ac-media\");\r\n\r\n return element;\r\n }\r\n\r\n static onPlay?: (sender: Media) => void;\r\n\r\n render(): HTMLElement | undefined {\r\n let result = super.render();\r\n\r\n if (result) {\r\n this._mediaPlayer = this.createMediaPlayer();\r\n\r\n this._mediaPlayer.fetchVideoDetails().then(() => this.displayPoster());\r\n }\r\n\r\n return result;\r\n }\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n this.displayPoster();\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Media\";\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n const result: IResourceInformation[] = [];\r\n\r\n if (this._mediaPlayer) {\r\n const posterUrl = this.poster ? this.poster : this.hostConfig.media.defaultPoster;\r\n\r\n if (posterUrl) {\r\n result.push({ url: posterUrl, mimeType: \"image\" });\r\n }\r\n }\r\n\r\n for (const mediaSource of this.sources) {\r\n if (mediaSource.isValid()) {\r\n result.push({\r\n /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion -- `mediaSource.url` is of type `string | undefined`, but is validated by `isValid()` call */\r\n url: mediaSource.url!,\r\n mimeType: mediaSource.mimeType!\r\n /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion */\r\n });\r\n }\r\n }\r\n\r\n for (const captionSource of this.captionSources) {\r\n if (captionSource.isValid()) {\r\n result.push({\r\n /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion -- `captionSource.url` is of type `string | undefined`, but is validated by `isValid()` call */\r\n url: captionSource.url!,\r\n mimeType: captionSource.mimeType!\r\n /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion */\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get selectedMediaType(): string | undefined {\r\n return this._mediaPlayer.selectedMediaType;\r\n }\r\n}\r\n\r\nenum InputEventType {\r\n InitialRender,\r\n MouseEnterOnCard,\r\n MouseLeaveOnCard,\r\n FocusLeave\r\n}\r\n\r\nexport abstract class Input extends CardElement implements IInput {\r\n \r\n //#region Schema\r\n static readonly labelProperty = new StringProperty(Versions.v1_3, \"label\", true);\r\n static readonly isRequiredProperty = new BoolProperty(Versions.v1_3, \"isRequired\", false);\r\n static readonly errorMessageProperty = new StringProperty(Versions.v1_3, \"errorMessage\", true);\r\n static readonly inputStyleProperty = new EnumProperty(\r\n Versions.v1_6,\r\n \"inputStyle\",\r\n Enums.InputStyle,\r\n Enums.InputStyle.Default,\r\n [\r\n { value: Enums.InputStyle.RevealOnHover },\r\n { value: Enums.InputStyle.Default }\r\n ]\r\n );\r\n static readonly labelWidthProperty = new CustomProperty(\r\n Versions.v1_6,\r\n \"labelWidth\",\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 | undefined = prop.defaultValue;\r\n const value = source[prop.name];\r\n let invalidLabelWidth = false;\r\n \r\n if (typeof value === \"number\" && !isNaN(value)) {\r\n result = new SizeAndUnit(value, Enums.SizeUnit.Weight);\r\n if (result.physicalSize < 0 || result.physicalSize > 100) {\r\n invalidLabelWidth = true;\r\n }\r\n }\r\n else if (typeof value === \"string\") {\r\n try {\r\n result = SizeAndUnit.parse(value);\r\n } catch (e) {\r\n invalidLabelWidth = true;\r\n }\r\n } else {\r\n invalidLabelWidth = true;\r\n }\r\n\r\n if (invalidLabelWidth) {\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidInputLabelWidth()\r\n );\r\n result = undefined;\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 | undefined,\r\n context: BaseSerializationContext\r\n ) => {\r\n if (value instanceof SizeAndUnit) {\r\n if (value.unit === Enums.SizeUnit.Pixel) {\r\n context.serializeValue(target, \"labelWidth\", value.physicalSize + \"px\");\r\n } else {\r\n context.serializeNumber(target, \"labelWidth\", value.physicalSize);\r\n }\r\n }\r\n },\r\n undefined\r\n );\r\n\r\n static readonly labelPositionProperty = new EnumProperty(\r\n Versions.v1_6,\r\n \"labelPosition\",\r\n Enums.InputLabelPosition,\r\n Enums.InputLabelPosition.Above,\r\n [\r\n { value: Enums.InputLabelPosition.Inline },\r\n { value: Enums.InputLabelPosition.Above }\r\n ]\r\n );\r\n\r\n @property(Input.labelProperty)\r\n label?: string;\r\n\r\n @property(Input.isRequiredProperty)\r\n isRequired: boolean;\r\n\r\n @property(Input.errorMessageProperty)\r\n errorMessage?: string;\r\n\r\n @property(Input.inputStyleProperty)\r\n inputStyle: Enums.InputStyle = Enums.InputStyle.Default;\r\n \r\n @property(Input.labelWidthProperty)\r\n labelWidth?: SizeAndUnit;\r\n\r\n @property(Input.labelPositionProperty)\r\n labelPosition?: Enums.InputLabelPosition;\r\n\r\n //#endregion\r\n\r\n private _outerContainerElement: HTMLElement;\r\n private _inputControlContainerElement: HTMLElement;\r\n private _renderedErrorMessageElement?: HTMLElement;\r\n private _renderedLabelElement?: HTMLElement;\r\n private _renderedInputControlElement?: HTMLElement;\r\n private _oldValue: any;\r\n\r\n protected getAllLabelIds(): string[] {\r\n const labelIds: string[] = [];\r\n\r\n if (this.labelledBy) {\r\n labelIds.push(this.labelledBy);\r\n }\r\n\r\n if (this._renderedLabelElement) {\r\n labelIds.push(this._renderedLabelElement.id);\r\n }\r\n\r\n if (this._renderedErrorMessageElement) {\r\n labelIds.push(this._renderedErrorMessageElement.id);\r\n }\r\n\r\n return labelIds;\r\n }\r\n\r\n protected updateInputControlAriaLabelledBy() {\r\n if (this._renderedInputControlElement) {\r\n const labelIds: string[] = this.getAllLabelIds();\r\n\r\n if (labelIds.length > 0) {\r\n this._renderedInputControlElement.setAttribute(\r\n \"aria-labelledby\",\r\n labelIds.join(\" \")\r\n );\r\n } else {\r\n this._renderedInputControlElement.removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n }\r\n\r\n protected get isNullable(): boolean {\r\n return true;\r\n }\r\n\r\n protected get renderedInputControlElement(): HTMLElement | undefined {\r\n return this._renderedInputControlElement;\r\n }\r\n\r\n protected get inputControlContainerElement(): HTMLElement {\r\n return this._inputControlContainerElement;\r\n }\r\n\r\n protected overrideInternalRender(): HTMLElement | undefined {\r\n const hostConfig = this.hostConfig;\r\n\r\n this._outerContainerElement = document.createElement(\"div\");\r\n this._outerContainerElement.style.display = \"flex\";\r\n if (this.labelPosition === Enums.InputLabelPosition.Inline) {\r\n this._outerContainerElement.style.flexDirection = \"row\";\r\n } else {\r\n this._outerContainerElement.style.flexDirection = \"column\";\r\n }\r\n\r\n const renderedInputControlId = Utils.generateUniqueId();\r\n\r\n if (this.label) {\r\n const labelRichTextBlock = new RichTextBlock();\r\n labelRichTextBlock.setParent(this);\r\n labelRichTextBlock.forElementId = renderedInputControlId;\r\n\r\n const labelInline = new TextRun(this.label);\r\n labelRichTextBlock.addInline(labelInline);\r\n\r\n if (this.isRequired) {\r\n labelInline.init(hostConfig.inputs.label.requiredInputs);\r\n\r\n const isRequiredCueInline = new TextRun(\r\n hostConfig.inputs.label.requiredInputs.suffix\r\n );\r\n isRequiredCueInline.color = hostConfig.inputs.label.requiredInputs.suffixColor;\r\n isRequiredCueInline.ariaHidden = true;\r\n\r\n labelRichTextBlock.addInline(isRequiredCueInline);\r\n } else {\r\n labelInline.init(hostConfig.inputs.label.optionalInputs);\r\n }\r\n\r\n this._renderedLabelElement = labelRichTextBlock.render();\r\n\r\n if (this._renderedLabelElement) {\r\n this._renderedLabelElement.id = Utils.generateUniqueId();\r\n if (this.labelPosition === Enums.InputLabelPosition.Inline) {\r\n // For inline label position: label should be in center of the div and no extra spacing needed\r\n this._renderedLabelElement.style.alignSelf = \"center\";\r\n } else {\r\n this._renderedLabelElement.style.marginBottom =\r\n hostConfig.getEffectiveSpacing(hostConfig.inputs.label.inputSpacing) + \"px\";\r\n }\r\n this._outerContainerElement.appendChild(this._renderedLabelElement);\r\n }\r\n }\r\n\r\n this._inputControlContainerElement = document.createElement(\"div\");\r\n this._inputControlContainerElement.className =\r\n hostConfig.makeCssClassName(\"ac-input-container\");\r\n this._inputControlContainerElement.style.display = \"flex\";\r\n\r\n if (this.height === \"stretch\") {\r\n this._inputControlContainerElement.style.alignItems = \"stretch\";\r\n this._inputControlContainerElement.style.flex = \"1 1 auto\";\r\n }\r\n\r\n this._renderedInputControlElement = this.internalRender();\r\n\r\n if (this._renderedInputControlElement) {\r\n this._renderedInputControlElement.id = renderedInputControlId;\r\n this._renderedInputControlElement.style.minWidth = \"0px\";\r\n\r\n if (this.isNullable && this.isRequired) {\r\n this._renderedInputControlElement.classList.add(\r\n hostConfig.makeCssClassName(\"ac-input-required\")\r\n );\r\n\r\n if (this._renderedInputControlElement instanceof HTMLInputElement ||\r\n this._renderedInputControlElement instanceof HTMLSelectElement\r\n ) {\r\n this._renderedInputControlElement.setAttribute(\"aria-required\", \"true\");\r\n }\r\n }\r\n\r\n this._inputControlContainerElement.appendChild(this._renderedInputControlElement);\r\n this._outerContainerElement.appendChild(this._inputControlContainerElement);\r\n\r\n if (this._renderedLabelElement && this.labelPosition === Enums.InputLabelPosition.Inline) {\r\n if (!this.labelWidth) {\r\n const defaultLabelWidth = hostConfig.inputs.label.width;\r\n this._renderedLabelElement.style.width = defaultLabelWidth.toString() + \"%\";\r\n this._inputControlContainerElement.style.width = (100 - defaultLabelWidth) + \"%\";\r\n }\r\n else if (this.labelWidth.unit == Enums.SizeUnit.Weight) {\r\n const labelWidthInPercent = this.labelWidth.physicalSize;\r\n this._renderedLabelElement.style.width = labelWidthInPercent.toString() + \"%\";\r\n this._inputControlContainerElement.style.width = (100 - labelWidthInPercent).toString() + \"%\";\r\n }\r\n else if (this.labelWidth.unit == Enums.SizeUnit.Pixel) {\r\n const labelWidthInPixel = this.labelWidth.physicalSize;\r\n this._renderedLabelElement.style.width = labelWidthInPixel.toString() + \"px\";\r\n }\r\n }\r\n\r\n this.updateVisualState(InputEventType.InitialRender);\r\n if (this._renderedInputControlElement) {\r\n this._renderedInputControlElement.onblur = (ev: MouseEvent) => {\r\n this.updateVisualState(InputEventType.FocusLeave);\r\n };\r\n }\r\n this.updateInputControlAriaLabelledBy();\r\n\r\n return this._outerContainerElement;\r\n }\r\n\r\n this.resetDirtyState();\r\n\r\n return undefined;\r\n }\r\n\r\n protected valueChanged() {\r\n this.getRootElement().updateActionsEnabledState();\r\n\r\n if (this.isValid()) {\r\n this.resetValidationFailureCue();\r\n }\r\n\r\n if (this.onValueChanged) {\r\n this.onValueChanged(this);\r\n }\r\n\r\n raiseInputValueChangedEvent(this);\r\n }\r\n\r\n protected resetValidationFailureCue() {\r\n if (this.renderedInputControlElement) {\r\n if (this instanceof ChoiceSetInput && this.isDynamicTypeahead()) {\r\n this.removeValidationFailureCue();\r\n } else {\r\n this.renderedInputControlElement.classList.remove(\r\n this.hostConfig.makeCssClassName(\"ac-input-validation-failed\")\r\n );\r\n }\r\n\r\n this.updateInputControlAriaLabelledBy();\r\n\r\n if (this._renderedErrorMessageElement) {\r\n this._outerContainerElement.removeChild(this._renderedErrorMessageElement);\r\n\r\n this._renderedErrorMessageElement = undefined;\r\n }\r\n }\r\n }\r\n\r\n protected showValidationErrorMessage() {\r\n if (\r\n this.renderedElement &&\r\n this.errorMessage &&\r\n GlobalSettings.displayInputValidationErrors\r\n ) {\r\n const errorMessageTextBlock = new TextBlock();\r\n errorMessageTextBlock.setParent(this);\r\n errorMessageTextBlock.text = this.errorMessage;\r\n errorMessageTextBlock.wrap = true;\r\n errorMessageTextBlock.init(this.hostConfig.inputs.errorMessage);\r\n\r\n this._renderedErrorMessageElement = errorMessageTextBlock.render();\r\n\r\n if (this._renderedErrorMessageElement) {\r\n this._renderedErrorMessageElement.id = Utils.generateUniqueId();\r\n this._outerContainerElement.appendChild(this._renderedErrorMessageElement);\r\n\r\n this.updateInputControlAriaLabelledBy();\r\n }\r\n }\r\n }\r\n\r\n protected get allowRevealOnHoverStyle() {\r\n return this.hostConfig.inputs && this.hostConfig.inputs.allowRevealOnHoverStyle;\r\n }\r\n\r\n protected shouldHideInputAdornersForRevealOnHover(input: HTMLElement, eventType: InputEventType) {\r\n // show/hide input adorners (date picker, time picker, select dropdown picker) with inputStyle RevealOnHover\r\n // 1. intial render of card: hide input adorners\r\n // 2. mouse hover on the card: show input adorners\r\n // 3. mouse hover outside the card: hide input adorners unless input is still in focus state\r\n // 4. input loses focus: hide the input adorners unless mouse is still hovering on the card\r\n \r\n // check if input still has the focus\r\n const isInputInFocus = input === document.activeElement;\r\n \r\n // check if mouse is still on the card\r\n const inputHoverClassName = this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onhover\");\r\n const isMouseOverCard = input.classList.contains(inputHoverClassName);\r\n \r\n const hideInputAdorners = (eventType === InputEventType.InitialRender) ||\r\n (eventType === InputEventType.FocusLeave && !isMouseOverCard) ||\r\n (eventType === InputEventType.MouseLeaveOnCard && !isInputInFocus);\r\n return hideInputAdorners;\r\n }\r\n\r\n updateVisualState(eventType: InputEventType): void {\r\n if (!this.allowRevealOnHoverStyle || \r\n !this._renderedInputControlElement || \r\n this.inputStyle !== Enums.InputStyle.RevealOnHover) {\r\n return;\r\n }\r\n if (eventType === InputEventType.InitialRender) {\r\n // on initial render, we will show input fields as read only view\r\n this._renderedInputControlElement.classList.add(this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onrender\"));\r\n }\r\n else if (eventType === InputEventType.MouseEnterOnCard) {\r\n // on hover on the card, we will reveal the inputs by showing borders etc\r\n // ac-inputStyle-revealOnHover-onhover class is also used to identify if mouse is hovering on the card\r\n this._renderedInputControlElement.classList.add(this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onhover\"));\r\n } else if (eventType === InputEventType.MouseLeaveOnCard) {\r\n this._renderedInputControlElement.classList.remove(this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onhover\"));\r\n }\r\n }\r\n\r\n onValueChanged: (sender: Input) => void;\r\n\r\n labelledBy?: string;\r\n\r\n abstract isSet(): boolean;\r\n\r\n focus() {\r\n if (this._renderedInputControlElement) {\r\n this._renderedInputControlElement.focus();\r\n }\r\n }\r\n\r\n isValid(): boolean {\r\n return true;\r\n }\r\n\r\n isDirty(): boolean {\r\n return this.value !== this._oldValue;\r\n }\r\n\r\n resetDirtyState() {\r\n this._oldValue = this.value;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (!this.id) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.inputsMustHaveUniqueId()\r\n );\r\n }\r\n\r\n if (this.isRequired) {\r\n if (!this.label) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.RequiredInputsShouldHaveLabel,\r\n \"Required inputs should have a label\"\r\n );\r\n }\r\n\r\n if (!this.errorMessage) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.RequiredInputsShouldHaveErrorMessage,\r\n \"Required inputs should have an error message\"\r\n );\r\n }\r\n }\r\n }\r\n\r\n validateValue(): boolean {\r\n this.resetValidationFailureCue();\r\n\r\n const result = this.isRequired ? this.isSet() && this.isValid() : this.isValid();\r\n\r\n if (!result && this.renderedInputControlElement) {\r\n if (this instanceof ChoiceSetInput && this.isDynamicTypeahead()) {\r\n this.showValidationFailureCue();\r\n } else {\r\n this.renderedInputControlElement.classList.add(\r\n this.hostConfig.makeCssClassName(\"ac-input-validation-failed\")\r\n );\r\n }\r\n this.showValidationErrorMessage();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return [this];\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n let result = super.render();\r\n\r\n this.resetDirtyState();\r\n\r\n return result;\r\n }\r\n\r\n abstract get value(): any;\r\n\r\n get isInteractive(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport class TextInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n static readonly maxLengthProperty = new NumProperty(Versions.v1_0, \"maxLength\");\r\n static readonly isMultilineProperty = new BoolProperty(Versions.v1_0, \"isMultiline\", false);\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly styleProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"style\",\r\n Enums.InputTextStyle,\r\n Enums.InputTextStyle.Text,\r\n [\r\n { value: Enums.InputTextStyle.Text },\r\n { value: Enums.InputTextStyle.Tel },\r\n { value: Enums.InputTextStyle.Url },\r\n { value: Enums.InputTextStyle.Email },\r\n { value: Enums.InputTextStyle.Password, targetVersion: Versions.v1_5 }\r\n ]\r\n );\r\n static readonly inlineActionProperty = new ActionProperty(Versions.v1_0, \"inlineAction\", [\r\n \"Action.ShowCard\"\r\n ]);\r\n static readonly regexProperty = new StringProperty(Versions.v1_3, \"regex\", true);\r\n\r\n @property(TextInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(TextInput.maxLengthProperty)\r\n maxLength?: number;\r\n\r\n @property(TextInput.isMultilineProperty)\r\n isMultiline: boolean = false;\r\n\r\n @property(TextInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n @property(TextInput.styleProperty)\r\n style: Enums.InputTextStyle = Enums.InputTextStyle.Text;\r\n\r\n @property(TextInput.inlineActionProperty)\r\n inlineAction?: Action;\r\n\r\n @property(TextInput.regexProperty)\r\n regex?: string;\r\n\r\n //#endregion\r\n\r\n private setupInput(input: HTMLInputElement | HTMLTextAreaElement) {\r\n input.style.flex = \"1 1 auto\";\r\n\r\n input.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (this.placeholder) {\r\n input.placeholder = this.placeholder;\r\n input.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n if (this.defaultValue) {\r\n input.value = this.defaultValue;\r\n }\r\n\r\n if (this.maxLength && this.maxLength > 0) {\r\n input.maxLength = this.maxLength;\r\n }\r\n\r\n input.oninput = () => {\r\n this.valueChanged();\r\n };\r\n input.onkeypress = (e: KeyboardEvent) => {\r\n // Ctrl+Enter pressed\r\n if (\r\n e.ctrlKey &&\r\n e.code === \"Enter\" &&\r\n this.inlineAction &&\r\n this.inlineAction.isEffectivelyEnabled()\r\n ) {\r\n this.inlineAction.execute();\r\n }\r\n };\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n let result: HTMLInputElement | HTMLTextAreaElement;\r\n\r\n if (this.isMultiline && this.style !== Enums.InputTextStyle.Password) {\r\n result = document.createElement(\"textarea\");\r\n result.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-textInput\",\r\n \"ac-multiline\"\r\n );\r\n\r\n if (this.height === \"stretch\") {\r\n result.style.height = \"initial\";\r\n }\r\n } else {\r\n result = document.createElement(\"input\");\r\n result.className = this.hostConfig.makeCssClassName(\"ac-input\", \"ac-textInput\");\r\n result.type = Enums.InputTextStyle[this.style].toLowerCase();\r\n }\r\n\r\n this.setupInput(result);\r\n\r\n return result;\r\n }\r\n\r\n protected overrideInternalRender(): HTMLElement | undefined {\r\n const renderedInputControl = super.overrideInternalRender();\r\n\r\n if (this.inlineAction) {\r\n const button = document.createElement(\"button\");\r\n button.className = this.hostConfig.makeCssClassName(\r\n this.inlineAction.isEffectivelyEnabled()\r\n ? \"ac-inlineActionButton\"\r\n : \"ac-inlineActionButton-disabled\"\r\n );\r\n\r\n button.onclick = (e) => {\r\n if (this.inlineAction && this.inlineAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.inlineAction.execute();\r\n }\r\n };\r\n\r\n if (this.inlineAction.iconUrl) {\r\n button.classList.add(\"iconOnly\");\r\n\r\n const icon = document.createElement(\"img\");\r\n icon.style.height = \"100%\";\r\n icon.setAttribute(\"role\", \"presentation\");\r\n\r\n // The below trick is necessary as a workaround in Chrome where the icon is initially displayed\r\n // at its native size then resized to 100% of the button's height. This cfreates an unpleasant\r\n // flicker. On top of that, Chrome's flex implementation fails to prperly re-layout the button\r\n // after the image has loaded and been gicven its final size. The below trick also fixes that.\r\n icon.style.display = \"none\";\r\n icon.onload = () => {\r\n icon.style.removeProperty(\"display\");\r\n };\r\n icon.onerror = () => {\r\n button.removeChild(icon);\r\n button.classList.remove(\"iconOnly\");\r\n button.classList.add(\"textOnly\");\r\n button.textContent =\r\n this.inlineAction && this.inlineAction.title\r\n ? this.inlineAction.title\r\n : Strings.defaults.inlineActionTitle();\r\n };\r\n\r\n icon.src = this.inlineAction.iconUrl;\r\n\r\n button.appendChild(icon);\r\n button.title = this.inlineAction.title\r\n ? this.inlineAction.title\r\n : Strings.defaults.inlineActionTitle();\r\n } else {\r\n button.classList.add(\"textOnly\");\r\n button.textContent = this.inlineAction.title\r\n ? this.inlineAction.title\r\n : Strings.defaults.inlineActionTitle();\r\n }\r\n\r\n this.inlineAction.setupElementForAccessibility(button, true);\r\n\r\n button.style.marginLeft = \"8px\";\r\n\r\n this.inputControlContainerElement.appendChild(button);\r\n }\r\n\r\n return renderedInputControl;\r\n }\r\n\r\n updateVisualState(eventType: InputEventType): void {\r\n if (!this.allowRevealOnHoverStyle) {\r\n return;\r\n }\r\n\r\n if (!(this.inlineAction || this.isMultiline)) {\r\n super.updateVisualState(eventType);\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Text\";\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n if (this.inlineAction) {\r\n result.push(this.inlineAction);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getActionById(id: string) {\r\n let result = super.getActionById(id);\r\n\r\n if (!result && this.inlineAction) {\r\n result = this.inlineAction.getActionById(id);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value ? true : false;\r\n }\r\n\r\n isValid(): boolean {\r\n if (!this.value) {\r\n return true;\r\n }\r\n\r\n if (this.regex) {\r\n return new RegExp(this.regex, \"g\").test(this.value);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n get value(): string | undefined {\r\n if (this.renderedInputControlElement) {\r\n if (this.isMultiline) {\r\n return (this.renderedInputControlElement).value;\r\n } else {\r\n return (this.renderedInputControlElement).value;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nexport class ToggleInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n static readonly titleProperty = new StringProperty(Versions.v1_0, \"title\");\r\n static readonly valueOnProperty = new StringProperty(\r\n Versions.v1_0,\r\n \"valueOn\",\r\n true,\r\n undefined,\r\n \"true\",\r\n (sender: SerializableObject) => {\r\n return \"true\";\r\n }\r\n );\r\n static readonly valueOffProperty = new StringProperty(\r\n Versions.v1_0,\r\n \"valueOff\",\r\n true,\r\n undefined,\r\n \"false\",\r\n (sender: SerializableObject) => {\r\n return \"false\";\r\n }\r\n );\r\n static readonly wrapProperty = new BoolProperty(Versions.v1_2, \"wrap\", false);\r\n\r\n @property(ToggleInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(ToggleInput.titleProperty)\r\n title?: string;\r\n\r\n @property(ToggleInput.valueOnProperty)\r\n valueOn: string = \"true\";\r\n\r\n @property(ToggleInput.valueOffProperty)\r\n valueOff: string = \"false\";\r\n\r\n @property(ToggleInput.wrapProperty)\r\n wrap: boolean = false;\r\n\r\n //#endregion\r\n\r\n private _checkboxInputElement: HTMLInputElement;\r\n private _checkboxInputLabelElement: HTMLElement | undefined;\r\n private _oldCheckboxValue: boolean;\r\n\r\n protected updateInputControlAriaLabelledBy() {\r\n if (this._checkboxInputElement) {\r\n let joinedLabelIds = this.getAllLabelIds().join(\" \");\r\n\r\n if (this._checkboxInputLabelElement && this._checkboxInputLabelElement.id) {\r\n joinedLabelIds += \" \" + this._checkboxInputLabelElement.id;\r\n }\r\n\r\n if (joinedLabelIds) {\r\n this._checkboxInputElement.setAttribute(\"aria-labelledby\", joinedLabelIds);\r\n } else {\r\n this._checkboxInputElement.removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const element = document.createElement(\"div\");\r\n element.className = this.hostConfig.makeCssClassName(\"ac-input\", \"ac-toggleInput\");\r\n element.style.width = \"100%\";\r\n element.style.display = \"flex\";\r\n element.style.alignItems = \"center\";\r\n\r\n this._checkboxInputElement = document.createElement(\"input\");\r\n this._checkboxInputElement.id = Utils.generateUniqueId();\r\n this._checkboxInputElement.type = \"checkbox\";\r\n this._checkboxInputElement.style.display = \"inline-block\";\r\n this._checkboxInputElement.style.verticalAlign = \"middle\";\r\n this._checkboxInputElement.style.margin = \"0\";\r\n this._checkboxInputElement.style.flex = \"0 0 auto\";\r\n\r\n if (this.title) {\r\n this._checkboxInputElement.setAttribute(\"aria-label\", this.title);\r\n }\r\n\r\n if (this.isRequired) {\r\n this._checkboxInputElement.setAttribute(\"aria-required\", \"true\");\r\n }\r\n\r\n this._checkboxInputElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (this.defaultValue === this.valueOn) {\r\n this._checkboxInputElement.checked = true;\r\n }\r\n\r\n this._oldCheckboxValue = this._checkboxInputElement.checked;\r\n\r\n this._checkboxInputElement.onchange = () => {\r\n this.valueChanged();\r\n };\r\n\r\n Utils.appendChild(element, this._checkboxInputElement);\r\n\r\n if (this.title || this.isDesignMode()) {\r\n const label = new TextBlock();\r\n label.setParent(this);\r\n label.forElementId = this._checkboxInputElement.id;\r\n label.hostConfig = this.hostConfig;\r\n label.text = !this.title ? this.getJsonTypeName() : this.title;\r\n label.useMarkdown = GlobalSettings.useMarkdownInRadioButtonAndCheckbox;\r\n label.wrap = this.wrap;\r\n\r\n this._checkboxInputLabelElement = label.render();\r\n\r\n if (this._checkboxInputLabelElement) {\r\n this._checkboxInputLabelElement.id = Utils.generateUniqueId();\r\n this._checkboxInputLabelElement.style.display = \"inline-block\";\r\n this._checkboxInputLabelElement.style.flex = \"1 1 auto\";\r\n this._checkboxInputLabelElement.style.marginLeft = \"6px\";\r\n this._checkboxInputLabelElement.style.verticalAlign = \"middle\";\r\n\r\n const spacerElement = document.createElement(\"div\");\r\n spacerElement.style.width = \"6px\";\r\n\r\n Utils.appendChild(element, spacerElement);\r\n Utils.appendChild(element, this._checkboxInputLabelElement);\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n protected get isNullable(): boolean {\r\n return false;\r\n }\r\n\r\n updateVisualState(eventType: InputEventType): void {\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Toggle\";\r\n }\r\n\r\n focus() {\r\n if (this._checkboxInputElement) {\r\n this._checkboxInputElement.focus();\r\n }\r\n }\r\n\r\n isSet(): boolean {\r\n if (this.isRequired) {\r\n return this.value === this.valueOn;\r\n }\r\n\r\n return this.value ? true : false;\r\n }\r\n\r\n isDirty(): boolean {\r\n return this._checkboxInputElement\r\n ? this._checkboxInputElement.checked !== this._oldCheckboxValue\r\n : false;\r\n }\r\n\r\n get value(): string | undefined {\r\n if (this._checkboxInputElement) {\r\n return this._checkboxInputElement.checked ? this.valueOn : this.valueOff;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nexport class Choice extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly titleProperty = new StringProperty(Versions.v1_0, \"title\");\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n\r\n @property(Choice.titleProperty)\r\n title?: string;\r\n\r\n @property(Choice.valueProperty)\r\n value?: string;\r\n\r\n //#endregion\r\n\r\n protected getSchemaKey(): string {\r\n return \"Choice\";\r\n }\r\n\r\n constructor(title?: string, value?: string) {\r\n super();\r\n\r\n this.title = title;\r\n this.value = value;\r\n }\r\n}\r\n\r\n/**\r\n * DataQuery class is declared later in the file and derives from subsequent base classes\r\n * Hence, it cannot be used in ChoiceSetInput.\r\n * Refactor is needed to separate elements and actions in separate files.\r\n */\r\nexport class ChoiceSetInputDataQuery extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly typeProperty = new StringProperty(\r\n Versions.v1_6,\r\n \"type\",\r\n true,\r\n new RegExp(\"^Data.Query$\")\r\n );\r\n static readonly datasetProperty = new StringProperty(Versions.v1_6, \"dataset\");\r\n static readonly countProperty = new NumProperty(Versions.v1_6, \"count\");\r\n static readonly skipProperty = new NumProperty(Versions.v1_6, \"skip\");\r\n\r\n @property(ChoiceSetInputDataQuery.typeProperty)\r\n type: string;\r\n\r\n @property(ChoiceSetInputDataQuery.datasetProperty)\r\n dataset: string;\r\n\r\n @property(ChoiceSetInputDataQuery.countProperty)\r\n count?: number;\r\n\r\n @property(ChoiceSetInputDataQuery.skipProperty)\r\n skip?: number;\r\n\r\n //#endregion\r\n\r\n protected getSchemaKey(): string {\r\n return \"choices.data\";\r\n }\r\n}\r\n\r\nexport type FetchedChoice = {\r\n title: string;\r\n value: string;\r\n};\r\n\r\nexport class ChoiceSetInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n static readonly choicesProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_0,\r\n \"choices\",\r\n Choice\r\n );\r\n static readonly choicesDataProperty = new SerializableObjectProperty(\r\n Versions.v1_6,\r\n \"choices.data\",\r\n ChoiceSetInputDataQuery\r\n );\r\n static readonly styleProperty = new ValueSetProperty(\r\n Versions.v1_0,\r\n \"style\",\r\n [\r\n { value: \"compact\" },\r\n { value: \"expanded\" },\r\n { value: \"filtered\", targetVersion: Versions.v1_5 }\r\n ],\r\n \"compact\"\r\n );\r\n static readonly isMultiSelectProperty = new BoolProperty(Versions.v1_0, \"isMultiSelect\", false);\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly wrapProperty = new BoolProperty(Versions.v1_2, \"wrap\", false);\r\n\r\n @property(ChoiceSetInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(ChoiceSetInput.styleProperty)\r\n style?: \"compact\" | \"expanded\" | \"filtered\";\r\n\r\n get isCompact(): boolean {\r\n return !this.style || this.style === \"compact\";\r\n }\r\n\r\n set isCompact(value: boolean) {\r\n this.style = value ? undefined : \"expanded\";\r\n }\r\n\r\n @property(ChoiceSetInput.isMultiSelectProperty)\r\n isMultiSelect: boolean = false;\r\n\r\n @property(ChoiceSetInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n @property(ChoiceSetInput.wrapProperty)\r\n wrap: boolean = false;\r\n\r\n @property(ChoiceSetInput.choicesProperty)\r\n choices: Choice[] = [];\r\n\r\n @property(ChoiceSetInput.choicesDataProperty)\r\n choicesData?: ChoiceSetInputDataQuery;\r\n\r\n //#endregion\r\n\r\n private static _uniqueCategoryCounter = 0;\r\n\r\n private static getUniqueCategoryName(): string {\r\n const uniqueCategoryName = \"__ac-category\" + ChoiceSetInput._uniqueCategoryCounter;\r\n\r\n ChoiceSetInput._uniqueCategoryCounter++;\r\n\r\n return uniqueCategoryName;\r\n }\r\n\r\n private _uniqueCategoryName: string;\r\n private _selectElement: HTMLSelectElement | undefined;\r\n private _textInput: HTMLInputElement | undefined;\r\n private _toggleInputs: HTMLInputElement[] | undefined;\r\n private _labels: Array;\r\n private _filteredChoiceSet?: FilteredChoiceSet;\r\n\r\n isDynamicTypeahead(): boolean {\r\n return (\r\n this.hostConfig.inputs.allowDynamicallyFilteredChoiceSet &&\r\n !!this.choicesData &&\r\n !!this.choicesData.dataset &&\r\n this.choicesData.type === \"Data.Query\"\r\n );\r\n }\r\n\r\n getFilterForDynamicSearch(): string | undefined {\r\n return this._textInput?.value;\r\n }\r\n\r\n getDropdownElement() {\r\n return this._filteredChoiceSet?.dropdown;\r\n }\r\n\r\n renderChoices(filter: string, fetchedChoices: FetchedChoice[]) {\r\n this._filteredChoiceSet?.processResponse(filter, fetchedChoices);\r\n }\r\n\r\n showLoadingIndicator() {\r\n this._filteredChoiceSet?.showLoadingIndicator();\r\n }\r\n\r\n removeLoadingIndicator() {\r\n this._filteredChoiceSet?.removeLoadingIndicator();\r\n }\r\n\r\n showErrorIndicator(filter: string, error: string) {\r\n this._filteredChoiceSet?.showErrorIndicator(filter, error);\r\n }\r\n\r\n showValidationFailureCue() {\r\n this._textInput?.classList.add(\r\n this.hostConfig.makeCssClassName(\"ac-input-validation-failed\")\r\n );\r\n }\r\n\r\n removeValidationFailureCue() {\r\n this._textInput?.classList.remove(\r\n this.hostConfig.makeCssClassName(\"ac-input-validation-failed\")\r\n );\r\n }\r\n\r\n private createPlaceholderOptionWhenValueDoesNotExist(): HTMLElement | undefined {\r\n if (!this.value) {\r\n const placeholderOption = document.createElement(\"option\");\r\n placeholderOption.selected = true;\r\n placeholderOption.disabled = true;\r\n placeholderOption.hidden = true;\r\n placeholderOption.value = \"\";\r\n\r\n if (this.placeholder) {\r\n placeholderOption.text = this.placeholder;\r\n }\r\n return placeholderOption;\r\n }\r\n return undefined;\r\n }\r\n\r\n // Make sure `aria-current` is applied to the currently-selected item\r\n private internalApplyAriaCurrent(): void {\r\n if (this._selectElement) {\r\n const options = this._selectElement.options;\r\n\r\n if (options) {\r\n for (const option of Array.from(options)) {\r\n if (option.selected) {\r\n option.setAttribute(\"aria-current\", \"true\");\r\n } else {\r\n option.removeAttribute(\"aria-current\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private renderCompoundInput(\r\n cssClassName: string,\r\n type: \"checkbox\" | \"radio\",\r\n defaultValues: string[] | undefined\r\n ): HTMLElement {\r\n const element = document.createElement(\"div\");\r\n element.className = this.hostConfig.makeCssClassName(\"ac-input\", cssClassName);\r\n element.style.width = \"100%\";\r\n\r\n this._toggleInputs = [];\r\n this._labels = [];\r\n\r\n for (const choice of this.choices) {\r\n const input = document.createElement(\"input\");\r\n input.id = Utils.generateUniqueId();\r\n input.type = type;\r\n input.style.margin = \"0\";\r\n input.style.display = \"inline-block\";\r\n input.style.verticalAlign = \"middle\";\r\n input.style.flex = \"0 0 auto\";\r\n input.name = this.id ? this.id : this._uniqueCategoryName;\r\n\r\n if (this.isRequired) {\r\n input.setAttribute(\"aria-required\", \"true\");\r\n }\r\n\r\n input.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (choice.value) {\r\n input.value = choice.value;\r\n }\r\n\r\n if (choice.title) {\r\n input.setAttribute(\"aria-label\", choice.title);\r\n }\r\n\r\n if (defaultValues && choice.value) {\r\n if (defaultValues.indexOf(choice.value) >= 0) {\r\n input.checked = true;\r\n }\r\n }\r\n\r\n input.onchange = () => {\r\n this.valueChanged();\r\n };\r\n\r\n this._toggleInputs.push(input);\r\n\r\n const compoundInput = document.createElement(\"div\");\r\n compoundInput.style.display = \"flex\";\r\n compoundInput.style.alignItems = \"center\";\r\n\r\n Utils.appendChild(compoundInput, input);\r\n\r\n const label = new TextBlock();\r\n label.setParent(this);\r\n label.forElementId = input.id;\r\n label.hostConfig = this.hostConfig;\r\n label.text = choice.title ? choice.title : \"Choice \" + this._toggleInputs.length;\r\n label.useMarkdown = GlobalSettings.useMarkdownInRadioButtonAndCheckbox;\r\n label.wrap = this.wrap;\r\n\r\n const labelElement = label.render();\r\n\r\n this._labels.push(labelElement);\r\n\r\n if (labelElement) {\r\n labelElement.id = Utils.generateUniqueId();\r\n labelElement.style.display = \"inline-block\";\r\n labelElement.style.flex = \"1 1 auto\";\r\n labelElement.style.marginLeft = \"6px\";\r\n labelElement.style.verticalAlign = \"middle\";\r\n\r\n const spacerElement = document.createElement(\"div\");\r\n spacerElement.style.width = \"6px\";\r\n\r\n Utils.appendChild(compoundInput, spacerElement);\r\n Utils.appendChild(compoundInput, labelElement);\r\n }\r\n\r\n Utils.appendChild(element, compoundInput);\r\n }\r\n\r\n return element;\r\n }\r\n\r\n protected updateInputControlAriaLabelledBy() {\r\n if (\r\n (this.isMultiSelect || this.style === \"expanded\") &&\r\n this._toggleInputs &&\r\n this._labels\r\n ) {\r\n const labelIds: string[] = this.getAllLabelIds();\r\n\r\n for (let i = 0; i < this._toggleInputs.length; i++) {\r\n let joinedLabelIds = \"\";\r\n\r\n // Only include the overall information for the first input\r\n if (i === 0) {\r\n joinedLabelIds = labelIds.join(\" \");\r\n }\r\n\r\n const label = this._labels[i];\r\n\r\n if (label && label.id) {\r\n joinedLabelIds += \" \" + label.id;\r\n }\r\n\r\n if (joinedLabelIds !== \"\") {\r\n this._toggleInputs[i].setAttribute(\"aria-labelledby\", joinedLabelIds);\r\n } else {\r\n this._toggleInputs[i].removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n } else {\r\n super.updateInputControlAriaLabelledBy();\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._uniqueCategoryName = ChoiceSetInput.getUniqueCategoryName();\r\n if (this.isDynamicTypeahead()) {\r\n const filteredChoiceSet = new FilteredChoiceSet(\r\n ChoiceSetInput._uniqueCategoryCounter,\r\n this.choices,\r\n this.hostConfig\r\n );\r\n filteredChoiceSet.render();\r\n\r\n if (filteredChoiceSet.textInput) {\r\n this._textInput = filteredChoiceSet.textInput;\r\n if (this.defaultValue) {\r\n this._textInput.value = this.defaultValue;\r\n }\r\n if (this.placeholder && !this._textInput.value) {\r\n this._textInput.placeholder = this.placeholder;\r\n this._textInput.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n this._textInput.tabIndex = this.isDesignMode() ? -1 : 0;\r\n const onInputChangeEventHandler = Utils.debounce(() => {\r\n filteredChoiceSet.processChoices();\r\n this.valueChanged();\r\n if (this._textInput) {\r\n // Remove aria-label when value is not empty so narration software doesn't\r\n // read the placeholder\r\n if (this.value) {\r\n this._textInput.removeAttribute(\"placeholder\");\r\n this._textInput.removeAttribute(\"aria-label\");\r\n } else if (this.placeholder) {\r\n this._textInput.placeholder = this.placeholder;\r\n this._textInput.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n }\r\n }, this.hostConfig.inputs.debounceTimeInMilliSeconds);\r\n this._textInput.onclick = onInputChangeEventHandler;\r\n this._textInput.oninput = onInputChangeEventHandler;\r\n }\r\n filteredChoiceSet.parent = this;\r\n this._filteredChoiceSet = filteredChoiceSet;\r\n return filteredChoiceSet.renderedElement;\r\n } else if (this.isMultiSelect) {\r\n // Render as a list of toggle inputs\r\n return this.renderCompoundInput(\r\n \"ac-choiceSetInput-multiSelect\",\r\n \"checkbox\",\r\n this.defaultValue\r\n ? this.defaultValue.split(this.hostConfig.choiceSetInputValueSeparator)\r\n : undefined\r\n );\r\n } else {\r\n if (this.style === \"expanded\") {\r\n // Render as a series of radio buttons\r\n return this.renderCompoundInput(\r\n \"ac-choiceSetInput-expanded\",\r\n \"radio\",\r\n this.defaultValue ? [this.defaultValue] : undefined\r\n );\r\n } else if (this.style === \"filtered\") {\r\n // Render as a text input coupled with a datalist\r\n const inputContainer = document.createElement(\"div\");\r\n inputContainer.style.width = \"100%\";\r\n\r\n this._textInput = document.createElement(\"input\");\r\n this._textInput.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-multichoiceInput\",\r\n \"ac-choiceSetInput-filtered\"\r\n );\r\n this._textInput.type = \"text\";\r\n this._textInput.style.width = \"100%\";\r\n this._textInput.oninput = () => {\r\n this.valueChanged();\r\n\r\n if (this._textInput) {\r\n // Remove aria-label when value is not empty so narration software doesn't\r\n // read the placeholder\r\n if (this.value) {\r\n this._textInput.removeAttribute(\"placeholder\");\r\n this._textInput.removeAttribute(\"aria-label\");\r\n } else if (this.placeholder) {\r\n this._textInput.placeholder = this.placeholder;\r\n this._textInput.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n }\r\n };\r\n\r\n if (this.defaultValue) {\r\n this._textInput.value = this.defaultValue;\r\n }\r\n\r\n if (this.placeholder && !this._textInput.value) {\r\n this._textInput.placeholder = this.placeholder;\r\n this._textInput.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n this._textInput.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n const dataList = document.createElement(\"datalist\");\r\n dataList.id = Utils.generateUniqueId();\r\n\r\n for (const choice of this.choices) {\r\n const option = document.createElement(\"option\");\r\n // To fix https://stackoverflow.com/questions/29882361/show-datalist-labels-but-submit-the-actual-value\r\n // value is mapped to choice.title other than choice.value\r\n if (choice.title) {\r\n option.value = choice.title;\r\n option.setAttribute(\"aria-label\", choice.title);\r\n }\r\n\r\n option.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n dataList.appendChild(option);\r\n }\r\n\r\n this._textInput.setAttribute(\"list\", dataList.id);\r\n\r\n inputContainer.append(this._textInput, dataList);\r\n\r\n return inputContainer;\r\n } else {\r\n // Render as a combo box\r\n this._selectElement = document.createElement(\"select\");\r\n this._selectElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-multichoiceInput\",\r\n \"ac-choiceSetInput-compact\"\r\n );\r\n this._selectElement.style.width = \"100%\";\r\n\r\n this._selectElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n const placeholderOption = this.createPlaceholderOptionWhenValueDoesNotExist();\r\n\r\n Utils.appendChild(this._selectElement, placeholderOption);\r\n\r\n for (const choice of this.choices) {\r\n const option = document.createElement(\"option\");\r\n option.value = choice.value!;\r\n\r\n if (choice.title) {\r\n option.text = choice.title;\r\n option.setAttribute(\"aria-label\", choice.title);\r\n }\r\n\r\n option.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (choice.value === this.defaultValue) {\r\n option.selected = true;\r\n }\r\n\r\n Utils.appendChild(this._selectElement, option);\r\n }\r\n\r\n this._selectElement.onchange = () => {\r\n this.internalApplyAriaCurrent();\r\n this.valueChanged();\r\n };\r\n\r\n this.internalApplyAriaCurrent();\r\n\r\n return this._selectElement;\r\n }\r\n }\r\n }\r\n\r\n updateVisualState(eventType: InputEventType): void {\r\n if (!this.allowRevealOnHoverStyle) {\r\n return;\r\n }\r\n\r\n if (!this.isMultiSelect && this.isCompact) {\r\n super.updateVisualState(eventType);\r\n\r\n if (this._selectElement && this.inputStyle === Enums.InputStyle.RevealOnHover) {\r\n const hideDropDownPicker = this.shouldHideInputAdornersForRevealOnHover(this._selectElement, eventType);\r\n \r\n if (hideDropDownPicker) {\r\n this._selectElement.style.appearance = \"none\";\r\n this._selectElement.classList.remove(this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onfocus\"));\r\n } else {\r\n this._selectElement.style.appearance = \"auto\";\r\n this._selectElement.classList.add(this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onfocus\"));\r\n }\t\t\t\r\n }\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.ChoiceSet\";\r\n }\r\n\r\n focus() {\r\n if (this._toggleInputs && (this.isMultiSelect || this.style === \"expanded\")) {\r\n if (this._toggleInputs.length > 0) {\r\n this._toggleInputs[0].focus();\r\n }\r\n } else if (this._textInput) {\r\n this._textInput.focus();\r\n } else {\r\n super.focus();\r\n }\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (this.choices.length === 0) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.CollectionCantBeEmpty,\r\n Strings.errors.choiceSetMustHaveAtLeastOneChoice()\r\n );\r\n }\r\n\r\n for (const choice of this.choices) {\r\n if (!choice.title || !choice.value) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.choiceSetChoicesMustHaveTitleAndValue()\r\n );\r\n }\r\n }\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value ? true : false;\r\n }\r\n\r\n isValid(): boolean {\r\n if (this._textInput) {\r\n if (this.value === \"\" || this.value === this.placeholder) {\r\n return true;\r\n }\r\n for (const choice of this.choices) {\r\n if (this.value === choice.value) {\r\n return true;\r\n }\r\n }\r\n if (this.dynamicChoices) {\r\n for (const choice of this.dynamicChoices) {\r\n if (this.value === choice) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n return super.isValid();\r\n }\r\n\r\n get value(): string | undefined {\r\n if (!this.isMultiSelect) {\r\n if (this._selectElement) {\r\n return this._selectElement.selectedIndex > 0\r\n ? this._selectElement.value\r\n : undefined;\r\n } else if (this._textInput) {\r\n for (const choice of this.choices) {\r\n if (choice.title && this._textInput.value === choice.title) {\r\n return choice.value;\r\n }\r\n }\r\n return this._textInput.value;\r\n } else if (this._toggleInputs && this._toggleInputs.length > 0) {\r\n for (const toggleInput of this._toggleInputs) {\r\n if (toggleInput.checked) {\r\n return toggleInput.value;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n } else {\r\n if (!this._toggleInputs || this._toggleInputs.length === 0) {\r\n return undefined;\r\n }\r\n\r\n let result: string = \"\";\r\n\r\n for (const toggleInput of this._toggleInputs) {\r\n if (toggleInput.checked) {\r\n if (result !== \"\") {\r\n result += this.hostConfig.choiceSetInputValueSeparator;\r\n }\r\n\r\n result += toggleInput.value;\r\n }\r\n }\r\n\r\n return result ? result : undefined;\r\n }\r\n }\r\n\r\n get dynamicChoices() {\r\n return this._filteredChoiceSet?.dynamicChoices;\r\n }\r\n}\r\n\r\nexport class FilteredChoiceSet {\r\n private _parent?: CardObject;\r\n private _choiceSetId: number;\r\n private _choices: Choice[];\r\n private _dynamicChoices: FetchedChoice[];\r\n private _visibleChoiceCount: number;\r\n private _highlightedChoiceId: number;\r\n private _textInput?: HTMLInputElement;\r\n private _dropdown?: HTMLDivElement;\r\n private _loadingIndicator?: HTMLDivElement;\r\n private _errorIndicator?: HTMLDivElement;\r\n private _renderedElement?: HTMLElement;\r\n private _hostConfig?: HostConfig;\r\n\r\n constructor(choiceSetId: number, choices: Choice[], hostConfig?: HostConfig) {\r\n this._choiceSetId = choiceSetId;\r\n this._choices = choices;\r\n this._dynamicChoices = [];\r\n this._visibleChoiceCount = 0;\r\n this._highlightedChoiceId = -1;\r\n this._hostConfig = hostConfig;\r\n }\r\n\r\n render() {\r\n const choiceSetContainer = document.createElement(\"div\");\r\n choiceSetContainer.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-choiceSetInput-filtered-container\"\r\n );\r\n\r\n this._textInput = document.createElement(\"input\");\r\n this._textInput.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-choiceSetInput-filtered-textbox\"\r\n );\r\n this._textInput.type = \"text\";\r\n\r\n this._textInput.onkeydown = (event) => {\r\n if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n this.highlightChoice(this._highlightedChoiceId + 1);\r\n } else if (event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n this.highlightChoice(this._highlightedChoiceId - 1);\r\n } else if (event.key === \"Enter\") {\r\n const choice = document.getElementById(\r\n `ac-choiceSetInput-${this._choiceSetId}-choice-${this._highlightedChoiceId}`\r\n );\r\n choice?.click();\r\n }\r\n };\r\n\r\n this._dropdown = document.createElement(\"div\");\r\n this._dropdown.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-choiceSetInput-filtered-dropdown\"\r\n );\r\n\r\n choiceSetContainer.append(this._textInput, this._dropdown);\r\n\r\n this._renderedElement = choiceSetContainer;\r\n }\r\n\r\n private createChoice(value: string, filter: string, id: number): HTMLSpanElement {\r\n const choice = document.createElement(\"span\");\r\n choice.className = this.hostConfig.makeCssClassName(\"ac-input\", \"ac-choiceSetInput-choice\");\r\n choice.id = `ac-choiceSetInput-${this._choiceSetId}-choice-${id}`;\r\n \r\n const startIndex = value.indexOf(filter);\r\n if (startIndex === -1) {\r\n // Filter wasn't found, add the value as is\r\n const valueSpan = document.createElement(\"span\");\r\n valueSpan.innerText = value;\r\n choice.appendChild(valueSpan);\r\n } else {\r\n if (startIndex > 0) {\r\n // Add a span with the beginning unmatched text\r\n const unmatchedBeg = value.substring(0, startIndex);\r\n const unmatchedBegSpan = document.createElement(\"span\");\r\n unmatchedBegSpan.innerText = unmatchedBeg;\r\n choice.appendChild(unmatchedBegSpan);\r\n }\r\n\r\n // Add the matched filter with bold styling\r\n const filterSpan = document.createElement(\"span\");\r\n filterSpan.innerText = filter;\r\n filterSpan.style.fontWeight = \"bold\";\r\n choice.appendChild(filterSpan);\r\n\r\n if (startIndex + filter.length < value.length) {\r\n // Add a span with the ending unmatched text\r\n const unmatchedEnd = value.substring(startIndex + filter.length);\r\n const unmatchedEndSpan = document.createElement(\"span\");\r\n unmatchedEndSpan.innerText = unmatchedEnd;\r\n choice.appendChild(unmatchedEndSpan);\r\n }\r\n }\r\n\r\n choice.tabIndex = -1;\r\n\r\n choice.onclick = () => {\r\n choice.classList.remove(\r\n this.hostConfig.makeCssClassName(\"ac-choiceSetInput-choice-highlighted\")\r\n );\r\n this._highlightedChoiceId = -1;\r\n if (this._textInput) {\r\n this._textInput.value = choice.innerText;\r\n this._textInput.focus();\r\n }\r\n if (this._dropdown) {\r\n this._dropdown.classList.remove(\r\n this.hostConfig.makeCssClassName(\"ac-choiceSetInput-filtered-dropdown-open\")\r\n );\r\n }\r\n };\r\n choice.onmousemove = () => {\r\n if (this._highlightedChoiceId !== id) {\r\n this.highlightChoice(id, false);\r\n }\r\n };\r\n\r\n return choice;\r\n }\r\n\r\n private highlightChoice(id: number, scrollIntoView: boolean = true) {\r\n if (this._visibleChoiceCount > 0) {\r\n const currentHighlightedChoice = document.getElementById(\r\n `ac-choiceSetInput-${this._choiceSetId}-choice-${this._highlightedChoiceId}`\r\n );\r\n const nextHighlightedChoice = document.getElementById(\r\n `ac-choiceSetInput-${this._choiceSetId}-choice-${id}`\r\n );\r\n if (nextHighlightedChoice) {\r\n currentHighlightedChoice?.classList.remove(\r\n this.hostConfig.makeCssClassName(\"ac-choiceSetInput-choice-highlighted\")\r\n );\r\n nextHighlightedChoice.classList.add(\r\n this.hostConfig.makeCssClassName(\"ac-choiceSetInput-choice-highlighted\")\r\n );\r\n if (scrollIntoView) {\r\n nextHighlightedChoice.scrollIntoView();\r\n }\r\n this._highlightedChoiceId = id;\r\n } else if (currentHighlightedChoice && this._highlightedChoiceId !== 0) {\r\n this.highlightChoice(0);\r\n } else {\r\n this.highlightChoice(this._visibleChoiceCount - 1);\r\n }\r\n }\r\n }\r\n\r\n private filterChoices() {\r\n const filter = this._textInput?.value.toLowerCase().trim() || \"\";\r\n const choices = [...this._choices, ...this._dynamicChoices];\r\n for (const choice of choices) {\r\n if (choice.title) {\r\n const matchIndex = choice.title.toLowerCase().indexOf(filter);\r\n if (matchIndex !== -1) {\r\n const matchedText = choice.title.substring(\r\n matchIndex,\r\n matchIndex + filter.length\r\n );\r\n const choiceContainer = this.createChoice(\r\n choice.title,\r\n matchedText,\r\n this._visibleChoiceCount++\r\n );\r\n this._dropdown?.appendChild(choiceContainer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getStatusIndicator(error?: string): HTMLDivElement {\r\n if (error) {\r\n if (!this._errorIndicator) {\r\n const errorIndicator = document.createElement(\"div\");\r\n errorIndicator.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-choiceSetInput-statusIndicator\",\r\n \"ac-choiceSetInput-errorIndicator\"\r\n );\r\n this._errorIndicator = errorIndicator;\r\n }\r\n this._errorIndicator.innerText = error;\r\n return this._errorIndicator;\r\n } else {\r\n if (!this._loadingIndicator) {\r\n const loadingIndicator = document.createElement(\"div\");\r\n loadingIndicator.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-choiceSetInput-statusIndicator\"\r\n );\r\n this._loadingIndicator = loadingIndicator;\r\n }\r\n this._loadingIndicator.innerText =\r\n this._visibleChoiceCount === 0 ? \"Loading...\" : \"Loading more...\";\r\n return this._loadingIndicator;\r\n }\r\n }\r\n\r\n private resetDropdown() {\r\n if (this._dropdown) {\r\n Utils.clearElementChildren(this._dropdown);\r\n this._visibleChoiceCount = 0;\r\n this._highlightedChoiceId = -1;\r\n }\r\n }\r\n\r\n private showDropdown() {\r\n if (this._dropdown?.hasChildNodes()) {\r\n this._dropdown.classList.add(\r\n this.hostConfig.makeCssClassName(\"ac-choiceSetInput-filtered-dropdown-open\")\r\n );\r\n }\r\n }\r\n\r\n processChoices() {\r\n this.resetDropdown();\r\n this.filterChoices();\r\n this.showDropdown();\r\n }\r\n\r\n processResponse(filter: string, fetchedChoices: FetchedChoice[]) {\r\n if (filter === this._textInput?.value) {\r\n this.resetDropdown();\r\n this._dynamicChoices = fetchedChoices;\r\n this.filterChoices();\r\n if (this._visibleChoiceCount === 0) {\r\n this.showErrorIndicator(filter, \"No results found\");\r\n }\r\n }\r\n }\r\n\r\n showLoadingIndicator() {\r\n const loadingIndicator = this.getStatusIndicator();\r\n this._dropdown?.appendChild(loadingIndicator);\r\n this.showDropdown();\r\n }\r\n\r\n removeLoadingIndicator() {\r\n if (this._loadingIndicator && this._dropdown?.contains(this._loadingIndicator)) {\r\n this._dropdown?.removeChild(this._loadingIndicator);\r\n }\r\n }\r\n\r\n showErrorIndicator(filter: string, error: string) {\r\n if (filter === this._textInput?.value) {\r\n this.processChoices();\r\n const errorIndicator = this.getStatusIndicator(error);\r\n this._dropdown?.appendChild(errorIndicator);\r\n errorIndicator.scrollIntoView();\r\n }\r\n }\r\n\r\n get dynamicChoices() {\r\n return this._dynamicChoices?.map((choice) => choice.title);\r\n }\r\n\r\n get hostConfig(): HostConfig {\r\n if (this._hostConfig) {\r\n return this._hostConfig;\r\n } else {\r\n if (this.parent) {\r\n return this.parent.hostConfig;\r\n } else {\r\n return defaultHostConfig;\r\n }\r\n }\r\n }\r\n\r\n set parent(value: CardObject | undefined) {\r\n this._parent = value;\r\n }\r\n\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n get renderedElement() {\r\n return this._renderedElement;\r\n }\r\n\r\n get textInput() {\r\n return this._textInput;\r\n }\r\n\r\n get dropdown() {\r\n return this._dropdown;\r\n }\r\n}\r\n\r\nexport class NumberInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new NumProperty(Versions.v1_0, \"value\");\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly minProperty = new NumProperty(Versions.v1_0, \"min\");\r\n static readonly maxProperty = new NumProperty(Versions.v1_0, \"max\");\r\n\r\n @property(NumberInput.valueProperty)\r\n defaultValue?: number;\r\n\r\n @property(NumberInput.minProperty)\r\n min?: number;\r\n\r\n @property(NumberInput.maxProperty)\r\n max?: number;\r\n\r\n @property(NumberInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n //#endregion\r\n\r\n private _numberInputElement: HTMLInputElement;\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._numberInputElement = document.createElement(\"input\");\r\n this._numberInputElement.setAttribute(\"type\", \"number\");\r\n\r\n if (this.min !== undefined) {\r\n this._numberInputElement.setAttribute(\"min\", this.min.toString());\r\n }\r\n\r\n if (this.max !== undefined) {\r\n this._numberInputElement.setAttribute(\"max\", this.max.toString());\r\n }\r\n\r\n this._numberInputElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-numberInput\"\r\n );\r\n this._numberInputElement.style.width = \"100%\";\r\n\r\n this._numberInputElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (this.defaultValue !== undefined) {\r\n this._numberInputElement.valueAsNumber = this.defaultValue;\r\n }\r\n\r\n if (this.placeholder) {\r\n this._numberInputElement.placeholder = this.placeholder;\r\n this._numberInputElement.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n this._numberInputElement.oninput = () => {\r\n this.valueChanged();\r\n };\r\n\r\n return this._numberInputElement;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Number\";\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value !== undefined && !isNaN(this.value);\r\n }\r\n\r\n isValid(): boolean {\r\n if (this.value === undefined) {\r\n return !this.isRequired;\r\n }\r\n\r\n let result = true;\r\n\r\n if (this.min !== undefined) {\r\n result = result && this.value >= this.min;\r\n }\r\n\r\n if (this.max !== undefined) {\r\n result = result && this.value <= this.max;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get value(): number | undefined {\r\n return this._numberInputElement ? this._numberInputElement.valueAsNumber : undefined;\r\n }\r\n\r\n set value(value: number | undefined) {\r\n if (value && this._numberInputElement) {\r\n this._numberInputElement.value = value.toString();\r\n }\r\n }\r\n}\r\n\r\nexport class DateInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly minProperty = new StringProperty(Versions.v1_0, \"min\");\r\n static readonly maxProperty = new StringProperty(Versions.v1_0, \"max\");\r\n\r\n @property(DateInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(DateInput.minProperty)\r\n min?: string;\r\n\r\n @property(DateInput.maxProperty)\r\n max?: string;\r\n\r\n @property(DateInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n //#endregion\r\n\r\n private _dateInputElement: HTMLInputElement;\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._dateInputElement = document.createElement(\"input\");\r\n this._dateInputElement.setAttribute(\"type\", \"date\");\r\n\r\n if (this.min) {\r\n this._dateInputElement.setAttribute(\"min\", this.min);\r\n }\r\n\r\n if (this.max) {\r\n this._dateInputElement.setAttribute(\"max\", this.max);\r\n }\r\n\r\n if (this.placeholder) {\r\n this._dateInputElement.placeholder = this.placeholder;\r\n this._dateInputElement.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n this._dateInputElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n this._dateInputElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-dateInput\"\r\n );\r\n this._dateInputElement.style.width = \"100%\";\r\n\r\n this._dateInputElement.oninput = () => {\r\n this.valueChanged();\r\n };\r\n\r\n if (this.defaultValue) {\r\n this._dateInputElement.value = this.defaultValue;\r\n }\r\n\r\n return this._dateInputElement;\r\n }\r\n\r\n updateVisualState(eventType: InputEventType): void {\r\n if (!this.allowRevealOnHoverStyle) {\r\n return;\r\n }\r\n\r\n super.updateVisualState(eventType);\r\n\r\n if (this._dateInputElement && this.inputStyle === Enums.InputStyle.RevealOnHover) {\r\n const hideDatePicker = this.shouldHideInputAdornersForRevealOnHover(this._dateInputElement, eventType);\r\n\r\n if (hideDatePicker) {\r\n this._dateInputElement.classList.remove(this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onfocus\"));\r\n } else {\r\n this._dateInputElement.classList.add(this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onfocus\"));\r\n }\r\n\r\n updateInputAdornersVisibility(this._dateInputElement, hideDatePicker /*hide*/);\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Date\";\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value ? true : false;\r\n }\r\n\r\n isValid(): boolean {\r\n if (!this.value) {\r\n return !this.isRequired;\r\n }\r\n\r\n const valueAsDate = new Date(this.value);\r\n\r\n let result = true;\r\n\r\n if (this.min) {\r\n const minDate = new Date(this.min);\r\n\r\n result = result && valueAsDate >= minDate;\r\n }\r\n\r\n if (this.max) {\r\n const maxDate = new Date(this.max);\r\n\r\n result = result && valueAsDate <= maxDate;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get value(): string | undefined {\r\n return this._dateInputElement ? this._dateInputElement.value : undefined;\r\n }\r\n}\r\n\r\nexport class TimeProperty extends CustomProperty {\r\n constructor(readonly targetVersion: Version, readonly name: string) {\r\n super(\r\n targetVersion,\r\n name,\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n const value = source[prop.name];\r\n\r\n if (typeof value === \"string\" && value && /^[0-9]{2}:[0-9]{2}$/.test(value)) {\r\n return value;\r\n }\r\n\r\n return undefined;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: string | undefined,\r\n context: BaseSerializationContext\r\n ) => {\r\n context.serializeValue(target, prop.name, value);\r\n }\r\n );\r\n }\r\n}\r\n\r\nexport class TimeInput extends Input {\r\n private static convertTimeStringToDate(timeString: string): Date {\r\n return new Date(\"1973-09-04T\" + timeString + \":00Z\");\r\n }\r\n\r\n //#region Schema\r\n\r\n static readonly valueProperty = new TimeProperty(Versions.v1_0, \"value\");\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly minProperty = new TimeProperty(Versions.v1_0, \"min\");\r\n static readonly maxProperty = new TimeProperty(Versions.v1_0, \"max\");\r\n\r\n @property(TimeInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(TimeInput.minProperty)\r\n min?: string;\r\n\r\n @property(TimeInput.maxProperty)\r\n max?: string;\r\n\r\n @property(TimeInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n //#endregion\r\n\r\n private _timeInputElement: HTMLInputElement;\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._timeInputElement = document.createElement(\"input\");\r\n this._timeInputElement.setAttribute(\"type\", \"time\");\r\n\r\n if (this.min) {\r\n this._timeInputElement.setAttribute(\"min\", this.min);\r\n }\r\n\r\n if (this.max) {\r\n this._timeInputElement.setAttribute(\"max\", this.max);\r\n }\r\n\r\n this._timeInputElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-timeInput\"\r\n );\r\n this._timeInputElement.style.width = \"100%\";\r\n this._timeInputElement.oninput = () => {\r\n this.valueChanged();\r\n };\r\n\r\n if (this.placeholder) {\r\n this._timeInputElement.placeholder = this.placeholder;\r\n this._timeInputElement.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n this._timeInputElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (this.defaultValue) {\r\n this._timeInputElement.value = this.defaultValue;\r\n }\r\n\r\n return this._timeInputElement;\r\n }\r\n\r\n updateVisualState(eventType: InputEventType): void {\r\n if (!this.allowRevealOnHoverStyle) {\r\n return;\r\n }\r\n \r\n super.updateVisualState(eventType);\r\n\r\n if (this._timeInputElement && this.inputStyle === Enums.InputStyle.RevealOnHover) {\r\n const hideTimePicker = this.shouldHideInputAdornersForRevealOnHover(this._timeInputElement, eventType);\r\n\r\n if (hideTimePicker) {\r\n this._timeInputElement.classList.remove(this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onfocus\"));\r\n } else {\r\n this._timeInputElement.classList.add(this.hostConfig.makeCssClassName(\"ac-inputStyle-revealOnHover-onfocus\"));\r\n }\r\n\r\n updateInputAdornersVisibility(this._timeInputElement, hideTimePicker /*hide*/);\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Time\";\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value ? true : false;\r\n }\r\n\r\n isValid(): boolean {\r\n if (!this.value) {\r\n return !this.isRequired;\r\n }\r\n\r\n const valueAsDate = TimeInput.convertTimeStringToDate(this.value);\r\n\r\n let result = true;\r\n\r\n if (this.min) {\r\n const minDate = TimeInput.convertTimeStringToDate(this.min);\r\n\r\n result = result && valueAsDate >= minDate;\r\n }\r\n\r\n if (this.max) {\r\n const maxDate = TimeInput.convertTimeStringToDate(this.max);\r\n\r\n result = result && valueAsDate <= maxDate;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get value(): string | undefined {\r\n return this._timeInputElement ? this._timeInputElement.value : undefined;\r\n }\r\n}\r\n\r\nexport const enum ActionButtonState {\r\n Normal,\r\n Expanded,\r\n Subdued\r\n}\r\n\r\nexport type ActionType = { new (): Action };\r\n\r\nexport abstract class Action extends CardObject {\r\n //#region Schema\r\n\r\n static readonly titleProperty = new StringProperty(Versions.v1_0, \"title\");\r\n static readonly iconUrlProperty = new StringProperty(Versions.v1_1, \"iconUrl\");\r\n static readonly styleProperty = new ValueSetProperty(\r\n Versions.v1_2,\r\n \"style\",\r\n [\r\n { value: Enums.ActionStyle.Default },\r\n { value: Enums.ActionStyle.Positive },\r\n { value: Enums.ActionStyle.Destructive }\r\n ],\r\n Enums.ActionStyle.Default\r\n );\r\n static readonly modeProperty = new ValueSetProperty(\r\n Versions.v1_5,\r\n \"mode\",\r\n [{ value: Enums.ActionMode.Primary }, { value: Enums.ActionMode.Secondary }],\r\n Enums.ActionMode.Primary\r\n );\r\n static readonly tooltipProperty = new StringProperty(Versions.v1_5, \"tooltip\");\r\n static readonly isEnabledProperty = new BoolProperty(Versions.v1_5, \"isEnabled\", true);\r\n static readonly roleProperty = new EnumProperty(Versions.v1_6, \"role\", Enums.ActionRole);\r\n\r\n @property(Action.titleProperty)\r\n title?: string;\r\n\r\n @property(Action.iconUrlProperty)\r\n iconUrl?: string;\r\n\r\n @property(Action.styleProperty)\r\n style: string = Enums.ActionStyle.Default;\r\n\r\n @property(Action.modeProperty)\r\n mode: string = Enums.ActionMode.Primary;\r\n\r\n @property(Action.tooltipProperty)\r\n tooltip?: string;\r\n\r\n @property(Action.isEnabledProperty)\r\n isEnabled: boolean;\r\n \r\n @property(Action.roleProperty)\r\n role?: Enums.ActionRole;\r\n\r\n //#endregion\r\n\r\n private renderButtonContent() {\r\n if (this.renderedElement) {\r\n // Cache hostConfig for perf\r\n const hostConfig = this.hostConfig;\r\n\r\n const titleElement = document.createElement(\"div\");\r\n titleElement.style.overflow = \"hidden\";\r\n titleElement.style.textOverflow = \"ellipsis\";\r\n\r\n if (\r\n !(\r\n hostConfig.actions.iconPlacement === Enums.ActionIconPlacement.AboveTitle ||\r\n hostConfig.actions.allowTitleToWrap\r\n )\r\n ) {\r\n titleElement.style.whiteSpace = \"nowrap\";\r\n }\r\n\r\n if (this.title) {\r\n titleElement.innerText = this.title;\r\n }\r\n\r\n if (!this.iconUrl) {\r\n this.renderedElement.classList.add(\"noIcon\");\r\n this.renderedElement.appendChild(titleElement);\r\n } else {\r\n const iconElement = document.createElement(\"img\");\r\n iconElement.src = this.iconUrl;\r\n iconElement.style.width = hostConfig.actions.iconSize + \"px\";\r\n iconElement.style.height = hostConfig.actions.iconSize + \"px\";\r\n iconElement.style.flex = \"0 0 auto\";\r\n iconElement.setAttribute(\"role\", \"presentation\");\r\n\r\n if (hostConfig.actions.iconPlacement === Enums.ActionIconPlacement.AboveTitle) {\r\n this.renderedElement.classList.add(\"iconAbove\");\r\n this.renderedElement.style.flexDirection = \"column\";\r\n\r\n if (this.title) {\r\n iconElement.style.marginBottom = \"6px\";\r\n }\r\n } else {\r\n this.renderedElement.classList.add(\"iconLeft\");\r\n\r\n iconElement.style.maxHeight = \"100%\";\r\n\r\n if (this.title) {\r\n iconElement.style.marginRight = \"6px\";\r\n }\r\n }\r\n\r\n this.renderedElement.appendChild(iconElement);\r\n this.renderedElement.appendChild(titleElement);\r\n }\r\n }\r\n }\r\n\r\n private getParentContainer(): Container | undefined {\r\n if (this.parent instanceof Container) {\r\n return this.parent;\r\n }\r\n\r\n return this.parent ? this.parent.getParentContainer() : undefined;\r\n }\r\n\r\n private _state: ActionButtonState = ActionButtonState.Normal;\r\n private _actionCollection?: ActionCollection; // hold the reference to its action collection\r\n private _isFocusable: boolean = true;\r\n\r\n isDesignMode(): boolean {\r\n const rootElement = this.getRootObject();\r\n\r\n return rootElement instanceof CardElement && rootElement.isDesignMode();\r\n }\r\n\r\n protected updateCssClasses() {\r\n if (this.parent && this.renderedElement) {\r\n const hostConfig = this.parent.hostConfig;\r\n\r\n this.renderedElement.className = hostConfig.makeCssClassName(\r\n this.isEffectivelyEnabled() ? \"ac-pushButton\" : \"ac-pushButton-disabled\"\r\n );\r\n\r\n const parentContainer = this.getParentContainer();\r\n\r\n if (parentContainer) {\r\n const parentContainerStyle = parentContainer.getEffectiveStyle();\r\n\r\n if (parentContainerStyle) {\r\n this.renderedElement.classList.add(\"style-\" + parentContainerStyle);\r\n }\r\n }\r\n\r\n this.renderedElement.tabIndex = !this.isDesignMode() && this.isFocusable ? 0 : -1;\r\n\r\n switch (this._state) {\r\n case ActionButtonState.Normal:\r\n // No additional classes needed\r\n break;\r\n\r\n case ActionButtonState.Expanded:\r\n this.renderedElement.classList.add(hostConfig.makeCssClassName(\"expanded\"));\r\n break;\r\n case ActionButtonState.Subdued:\r\n this.renderedElement.classList.add(hostConfig.makeCssClassName(\"subdued\"));\r\n break;\r\n }\r\n\r\n if (this.style && this.isEffectivelyEnabled()) {\r\n if (this.style === Enums.ActionStyle.Positive) {\r\n this.renderedElement.classList.add(\r\n ...hostConfig.makeCssClassNames(\"primary\", \"style-positive\")\r\n );\r\n } else {\r\n this.renderedElement.classList.add(\r\n ...hostConfig.makeCssClassNames(\"style-\" + this.style.toLowerCase())\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected getDefaultSerializationContext(): BaseSerializationContext {\r\n return new SerializationContext();\r\n }\r\n\r\n protected internalGetReferencedInputs(): Dictionary {\r\n return {};\r\n }\r\n\r\n protected internalPrepareForExecution(_inputs: Dictionary | undefined) {\r\n // Do nothing in base implementation\r\n }\r\n\r\n protected internalValidateInputs(referencedInputs: Dictionary | undefined): Input[] {\r\n const result: Input[] = [];\r\n\r\n if (referencedInputs) {\r\n for (const key of Object.keys(referencedInputs)) {\r\n const input = referencedInputs[key];\r\n\r\n if (!input.validateValue()) {\r\n result.push(input);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n protected shouldSerialize(context: SerializationContext): boolean {\r\n return context.actionRegistry.findByName(this.getJsonTypeName()) !== undefined;\r\n }\r\n\r\n protected raiseExecuteActionEvent() {\r\n if (this.onExecute) {\r\n this.onExecute(this);\r\n }\r\n\r\n raiseExecuteActionEvent(this);\r\n }\r\n\r\n protected internalAfterExecute() {\r\n let rootObject = this.getRootObject();\r\n\r\n if (rootObject instanceof CardElement) {\r\n rootObject.updateActionsEnabledState();\r\n }\r\n }\r\n\r\n onExecute: (sender: Action) => void;\r\n\r\n getHref(): string | undefined {\r\n return \"\";\r\n }\r\n\r\n getAriaRole(): string {\r\n let ariaRole = this.getAriaRoleFromEnum();\r\n return ariaRole ?? \"button\";\r\n }\r\n \r\n getAriaRoleFromEnum(): string | undefined {\r\n switch (this.role) {\r\n case Enums.ActionRole.Button:\r\n return \"button\";\r\n case Enums.ActionRole.Link:\r\n return \"link\";\r\n case Enums.ActionRole.Menu:\r\n return \"menu\";\r\n case Enums.ActionRole.MenuItem:\r\n return \"menuitem\";\r\n case Enums.ActionRole.Tab:\r\n return \"tab\";\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n setupElementForAccessibility(element: HTMLElement, promoteTooltipToLabel: boolean = false) {\r\n element.tabIndex = this.isEffectivelyEnabled() && !this.isDesignMode() ? 0 : -1;\r\n\r\n element.setAttribute(\"role\", this.getAriaRole());\r\n\r\n if (element instanceof HTMLButtonElement) {\r\n element.disabled = !this.isEffectivelyEnabled();\r\n }\r\n\r\n if (!this.isEffectivelyEnabled()) {\r\n element.setAttribute(\"aria-disabled\", \"true\");\r\n } else {\r\n element.removeAttribute(\"aria-disabled\");\r\n element.classList.add(this.hostConfig.makeCssClassName(\"ac-selectable\"));\r\n }\r\n\r\n if (this.title) {\r\n element.setAttribute(\"aria-label\", this.title);\r\n element.title = this.title;\r\n } else {\r\n element.removeAttribute(\"aria-label\");\r\n element.removeAttribute(\"title\");\r\n }\r\n\r\n if (this.tooltip) {\t\t\t\r\n if (promoteTooltipToLabel && !this.title) {\r\n element.setAttribute(\"aria-label\", this.tooltip);\r\n }\r\n element.title = this.tooltip;\r\n }\r\n }\r\n\r\n parse(source: any, context?: SerializationContext) {\r\n return super.parse(source, context ? context : new SerializationContext());\r\n }\r\n\r\n render() {\r\n const buttonElement = document.createElement(\"button\");\r\n buttonElement.type = \"button\";\r\n buttonElement.style.display = \"flex\";\r\n buttonElement.style.alignItems = \"center\";\r\n buttonElement.style.justifyContent = \"center\";\r\n buttonElement.onclick = (e) => {\r\n if (this.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.execute();\r\n }\r\n };\r\n\r\n this._renderedElement = buttonElement;\r\n\r\n this.renderButtonContent();\r\n this.updateCssClasses();\r\n this.setupElementForAccessibility(buttonElement);\r\n }\r\n\r\n execute() {\r\n if (this._actionCollection) {\r\n this._actionCollection.actionExecuted(this);\r\n }\r\n\r\n this.raiseExecuteActionEvent();\r\n this.internalAfterExecute();\r\n }\r\n\r\n prepareForExecution(): boolean {\r\n const referencedInputs = this.getReferencedInputs();\r\n const invalidInputs = this.internalValidateInputs(referencedInputs);\r\n\r\n if (invalidInputs.length > 0) {\r\n invalidInputs[0].focus();\r\n\r\n return false;\r\n }\r\n\r\n this.internalPrepareForExecution(referencedInputs);\r\n\r\n return true;\r\n }\r\n\r\n remove(): boolean {\r\n if (this._actionCollection) {\r\n return this._actionCollection.removeAction(this);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return [];\r\n }\r\n\r\n getAllActions(): Action[] {\r\n return [this];\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n return this.iconUrl ? [{ url: this.iconUrl, mimeType: \"image\" }] : [];\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n return this.id === id ? this : undefined;\r\n }\r\n\r\n getReferencedInputs(): Dictionary | undefined {\r\n return this.internalGetReferencedInputs();\r\n }\r\n\r\n /**\r\n * Validates the inputs associated with this action.\r\n *\r\n * @returns A list of inputs that failed validation, or an empty array if no input failed validation.\r\n */\r\n validateInputs(): Input[] {\r\n return this.internalValidateInputs(this.getReferencedInputs());\r\n }\r\n\r\n updateEnabledState() {\r\n // Do nothing in base implementation\r\n }\r\n\r\n isEffectivelyEnabled(): boolean {\r\n return this.isEnabled;\r\n }\r\n\r\n get isPrimary(): boolean {\r\n return this.style === Enums.ActionStyle.Positive;\r\n }\r\n\r\n set isPrimary(value: boolean) {\r\n if (value) {\r\n this.style = Enums.ActionStyle.Positive;\r\n } else {\r\n if (this.style === Enums.ActionStyle.Positive) {\r\n this.style = Enums.ActionStyle.Default;\r\n }\r\n }\r\n }\r\n\r\n get hostConfig(): HostConfig {\r\n return this.parent ? this.parent.hostConfig : defaultHostConfig;\r\n }\r\n\r\n get parent(): CardElement | undefined {\r\n return this._parent;\r\n }\r\n\r\n get state(): ActionButtonState {\r\n return this._state;\r\n }\r\n\r\n set state(value: ActionButtonState) {\r\n if (this._state !== value) {\r\n this._state = value;\r\n\r\n this.updateCssClasses();\r\n }\r\n }\r\n\r\n get isFocusable(): boolean {\r\n return this._isFocusable;\r\n }\r\n\r\n set isFocusable(value: boolean) {\r\n if (this._isFocusable !== value) {\r\n this._isFocusable = value;\r\n\r\n this.updateCssClasses();\r\n }\r\n }\r\n}\r\n\r\nexport abstract class SubmitActionBase extends Action {\r\n //#region Schema\r\n\r\n static readonly dataProperty = new PropertyDefinition(Versions.v1_0, \"data\");\r\n static readonly associatedInputsProperty = new CustomProperty(\r\n Versions.v1_3,\r\n \"associatedInputs\",\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n const value = source[prop.name];\r\n\r\n if (value !== undefined && typeof value === \"string\") {\r\n return value.toLowerCase() === \"none\" ? \"none\" : \"auto\";\r\n }\r\n\r\n return undefined;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: string | undefined,\r\n context: BaseSerializationContext\r\n ) => {\r\n context.serializeValue(target, prop.name, value);\r\n }\r\n );\r\n static readonly disabledUnlessAssociatedInputsChangeProperty = new BoolProperty(\r\n Versions.v1_6,\r\n \"disabledUnlessAssociatedInputsChange\",\r\n false\r\n );\r\n\r\n @property(SubmitActionBase.dataProperty)\r\n private _originalData?: PropertyBag;\r\n\r\n @property(SubmitActionBase.associatedInputsProperty)\r\n associatedInputs?: \"auto\" | \"none\";\r\n\r\n @property(SubmitActionBase.disabledUnlessAssociatedInputsChangeProperty)\r\n disabledUnlessAssociatedInputsChange: boolean = false;\r\n\r\n //#endregion\r\n\r\n private _isPrepared: boolean = false;\r\n private _processedData?: PropertyBag;\r\n private _areReferencedInputsDirty: boolean = false;\r\n\r\n protected internalGetReferencedInputs(): Dictionary {\r\n const result: Dictionary = {};\r\n\r\n if (this.associatedInputs !== \"none\") {\r\n let current: CardElement | undefined = this.parent;\r\n let inputs: Input[] = [];\r\n\r\n while (current) {\r\n inputs.push(...current.getAllInputs(false));\r\n\r\n current = current.parent;\r\n }\r\n\r\n for (const input of inputs) {\r\n if (input.id) {\r\n result[input.id] = input;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n protected internalPrepareForExecution(inputs: Dictionary | undefined) {\r\n if (this._originalData) {\r\n this._processedData = JSON.parse(JSON.stringify(this._originalData));\r\n } else {\r\n this._processedData = {};\r\n }\r\n\r\n if (this._processedData && inputs) {\r\n for (const key of Object.keys(inputs)) {\r\n const input = inputs[key];\r\n\r\n if (input.id && input.isSet()) {\r\n this._processedData[input.id] =\r\n typeof input.value === \"string\" ? input.value : input.value.toString();\r\n }\r\n }\r\n }\r\n\r\n this._isPrepared = true;\r\n }\r\n\r\n protected internalAfterExecute() {\r\n if (GlobalSettings.resetInputsDirtyStateAfterActionExecution) {\r\n this.resetReferencedInputsDirtyState();\r\n }\r\n }\r\n\r\n resetReferencedInputsDirtyState() {\r\n let referencedInputs = this.getReferencedInputs();\r\n\r\n this._areReferencedInputsDirty = false;\r\n\r\n if (referencedInputs) {\r\n for (const key of Object.keys(referencedInputs)) {\r\n const input = referencedInputs[key];\r\n\r\n input.resetDirtyState();\r\n }\r\n }\r\n }\r\n\r\n updateEnabledState() {\r\n this._areReferencedInputsDirty = false;\r\n\r\n let referencedInputs = this.getReferencedInputs();\r\n\r\n if (referencedInputs) {\r\n for (const key of Object.keys(referencedInputs)) {\r\n const input = referencedInputs[key];\r\n\r\n if (input.isDirty()) {\r\n this._areReferencedInputsDirty = true;\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.updateCssClasses();\r\n\r\n if (this._renderedElement) {\r\n this.setupElementForAccessibility(this._renderedElement);\r\n }\r\n }\r\n\r\n isEffectivelyEnabled(): boolean {\r\n let result = super.isEffectivelyEnabled();\r\n\r\n return this.disabledUnlessAssociatedInputsChange\r\n ? result && this._areReferencedInputsDirty\r\n : result;\r\n }\r\n\r\n get data(): object | undefined {\r\n return this._isPrepared ? this._processedData : this._originalData;\r\n }\r\n\r\n set data(value: object | undefined) {\r\n this._originalData = value;\r\n this._isPrepared = false;\r\n }\r\n}\r\n\r\nexport class SubmitAction extends SubmitActionBase {\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.Submit\" = \"Action.Submit\";\r\n\r\n getJsonTypeName(): string {\r\n return SubmitAction.JsonTypeName;\r\n }\r\n}\r\n\r\nexport abstract class UniversalAction extends SubmitActionBase {\r\n // This is the base class for all actions that can be executed via the\r\n // adaptiveCards/action activity\r\n}\r\n\r\nexport class ExecuteAction extends UniversalAction {\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.Execute\" = \"Action.Execute\";\r\n\r\n //#region Schema\r\n\r\n static readonly verbProperty = new StringProperty(Versions.v1_4, \"verb\");\r\n\r\n @property(ExecuteAction.verbProperty)\r\n verb: string;\r\n\r\n //#endregion\r\n\r\n getJsonTypeName(): string {\r\n return ExecuteAction.JsonTypeName;\r\n }\r\n}\r\n\r\nexport class DataQuery extends UniversalAction {\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Data.Query\" = \"Data.Query\";\r\n\r\n //#region Schema\r\n\r\n static readonly datasetProperty = new StringProperty(Versions.v1_6, \"dataset\");\r\n static readonly filterProperty = new StringProperty(Versions.v1_6, \"filter\");\r\n static readonly countProperty = new NumProperty(Versions.v1_6, \"count\");\r\n static readonly skipProperty = new NumProperty(Versions.v1_6, \"skip\");\r\n\r\n @property(DataQuery.datasetProperty)\r\n dataset: string;\r\n\r\n @property(DataQuery.filterProperty)\r\n filter: string;\r\n\r\n @property(DataQuery.countProperty)\r\n count?: number;\r\n\r\n @property(DataQuery.skipProperty)\r\n skip?: number;\r\n\r\n //#endregion\r\n\r\n getJsonTypeName(): string {\r\n return DataQuery.JsonTypeName;\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nexport class OpenUrlAction extends Action {\r\n //#region Schema\r\n\r\n static readonly urlProperty = new StringProperty(Versions.v1_0, \"url\");\r\n\r\n @property(OpenUrlAction.urlProperty)\r\n url?: string;\r\n\r\n //#endregion\r\n\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.OpenUrl\" = \"Action.OpenUrl\";\r\n\r\n getJsonTypeName(): string {\r\n return OpenUrlAction.JsonTypeName;\r\n }\r\n\r\n getAriaRole(): string {\r\n let ariaRole = this.getAriaRoleFromEnum();\r\n return ariaRole ?? \"link\";\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (!this.url) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"url\")\r\n );\r\n }\r\n }\r\n\r\n getHref(): string | undefined {\r\n return this.url;\r\n }\r\n}\r\n\r\nexport class ToggleVisibilityAction extends Action {\r\n //#region Schema\r\n\r\n static readonly targetElementsProperty = new CustomProperty(\r\n Versions.v1_2,\r\n \"targetElements\",\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n const result: PropertyBag = {};\r\n\r\n if (Array.isArray(source[prop.name])) {\r\n for (const item of source[prop.name]) {\r\n if (typeof item === \"string\") {\r\n result[item] = undefined;\r\n } else if (typeof item === \"object\") {\r\n const elementId = item[\"elementId\"];\r\n\r\n if (typeof elementId === \"string\") {\r\n result[elementId] = Utils.parseBool(item[\"isVisible\"]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n const targetElements: any[] = [];\r\n\r\n for (const id of Object.keys(value)) {\r\n if (typeof value[id] === \"boolean\") {\r\n targetElements.push({\r\n elementId: id,\r\n isVisible: value[id]\r\n });\r\n } else {\r\n targetElements.push(id);\r\n }\r\n }\r\n\r\n context.serializeArray(target, prop.name, targetElements);\r\n },\r\n {},\r\n (sender: SerializableObject) => {\r\n return {};\r\n }\r\n );\r\n\r\n @property(ToggleVisibilityAction.targetElementsProperty)\r\n targetElements: { [key: string]: any } = {};\r\n\r\n //#endregion\r\n\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.ToggleVisibility\" = \"Action.ToggleVisibility\";\r\n\r\n private updateAriaControlsAttribute() {\r\n // apply aria labels to make it clear which elements this action will toggle\r\n if (this.targetElements) {\r\n const elementIds = Object.keys(this.targetElements);\r\n\r\n if (this._renderedElement) {\r\n if (elementIds.length > 0) {\r\n this._renderedElement.setAttribute(\"aria-controls\", elementIds.join(\" \"));\r\n } else {\r\n this._renderedElement.removeAttribute(\"aria-controls\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (!this.targetElements) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"targetElements\")\r\n );\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return ToggleVisibilityAction.JsonTypeName;\r\n }\r\n\r\n render() {\r\n super.render();\r\n\r\n this.updateAriaControlsAttribute();\r\n }\r\n\r\n execute() {\r\n super.execute();\r\n if (this.parent) {\r\n for (const elementId of Object.keys(this.targetElements)) {\r\n const targetElement = this.parent.getRootElement().getElementById(elementId);\r\n\r\n if (targetElement) {\r\n if (typeof this.targetElements[elementId] === \"boolean\") {\r\n targetElement.isVisible = this.targetElements[elementId];\r\n } else {\r\n targetElement.isVisible = !targetElement.isVisible;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n addTargetElement(elementId: string, isVisible: boolean | undefined = undefined) {\r\n this.targetElements[elementId] = isVisible;\r\n this.updateAriaControlsAttribute();\r\n }\r\n\r\n removeTargetElement(elementId: string) {\r\n delete this.targetElements[elementId];\r\n this.updateAriaControlsAttribute();\r\n }\r\n}\r\n\r\nclass StringWithSubstitutionProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): StringWithSubstitutions {\r\n const result = new StringWithSubstitutions();\r\n result.set(Utils.parseString(source[this.name]));\r\n\r\n return result;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: StringWithSubstitutions,\r\n context: BaseSerializationContext\r\n ): void {\r\n context.serializeValue(target, this.name, value.getOriginal());\r\n }\r\n\r\n constructor(readonly targetVersion: Version, readonly name: string) {\r\n super(targetVersion, name, undefined, () => {\r\n return new StringWithSubstitutions();\r\n });\r\n }\r\n}\r\n\r\nexport class HttpHeader extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly nameProperty = new StringProperty(Versions.v1_0, \"name\");\r\n static readonly valueProperty = new StringWithSubstitutionProperty(Versions.v1_0, \"value\");\r\n\r\n protected getSchemaKey(): string {\r\n return \"HttpHeader\";\r\n }\r\n\r\n @property(HttpHeader.nameProperty)\r\n name: string;\r\n\r\n @property(HttpHeader.valueProperty)\r\n private _value: StringWithSubstitutions;\r\n\r\n //#endregion\r\n\r\n constructor(name: string = \"\", value: string = \"\") {\r\n super();\r\n\r\n this.name = name;\r\n this.value = value;\r\n }\r\n\r\n getReferencedInputs(inputs: Input[], referencedInputs: Dictionary) {\r\n this._value.getReferencedInputs(inputs, referencedInputs);\r\n }\r\n\r\n prepareForExecution(inputs: Dictionary) {\r\n this._value.substituteInputValues(inputs, ContentTypes.applicationXWwwFormUrlencoded);\r\n }\r\n\r\n get value(): string | undefined {\r\n return this._value.get();\r\n }\r\n\r\n set value(newValue: string | undefined) {\r\n this._value.set(newValue);\r\n }\r\n}\r\n\r\nexport class HttpAction extends Action {\r\n //#region Schema\r\n\r\n static readonly urlProperty = new StringWithSubstitutionProperty(Versions.v1_0, \"url\");\r\n static readonly bodyProperty = new StringWithSubstitutionProperty(Versions.v1_0, \"body\");\r\n static readonly methodProperty = new StringProperty(Versions.v1_0, \"method\");\r\n static readonly headersProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_0,\r\n \"headers\",\r\n HttpHeader\r\n );\r\n static readonly ignoreInputValidationProperty = new BoolProperty(\r\n Versions.v1_3,\r\n \"ignoreInputValidation\",\r\n false\r\n );\r\n\r\n @property(HttpAction.urlProperty)\r\n private _url: StringWithSubstitutions;\r\n\r\n @property(HttpAction.bodyProperty)\r\n private _body: StringWithSubstitutions;\r\n\r\n @property(HttpAction.methodProperty)\r\n method?: string;\r\n\r\n @property(HttpAction.headersProperty)\r\n headers: HttpHeader[];\r\n\r\n @property(HttpAction.ignoreInputValidationProperty)\r\n private _ignoreInputValidation: boolean = false;\r\n\r\n //#endregion\r\n\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.Http\" = \"Action.Http\";\r\n\r\n protected internalGetReferencedInputs(): Dictionary {\r\n const allInputs = this.parent ? this.parent.getRootElement().getAllInputs() : [];\r\n const result: Dictionary = {};\r\n\r\n this._url.getReferencedInputs(allInputs, result);\r\n\r\n for (const header of this.headers) {\r\n header.getReferencedInputs(allInputs, result);\r\n }\r\n\r\n this._body.getReferencedInputs(allInputs, result);\r\n\r\n return result;\r\n }\r\n\r\n protected internalPrepareForExecution(inputs: Dictionary | undefined) {\r\n if (inputs) {\r\n this._url.substituteInputValues(inputs, ContentTypes.applicationXWwwFormUrlencoded);\r\n\r\n let contentType = ContentTypes.applicationJson;\r\n\r\n for (const header of this.headers) {\r\n header.prepareForExecution(inputs);\r\n\r\n if (header.name && header.name.toLowerCase() === \"content-type\") {\r\n contentType = header.value!;\r\n }\r\n }\r\n\r\n this._body.substituteInputValues(inputs, contentType);\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return HttpAction.JsonTypeName;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (!this.url) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"url\")\r\n );\r\n }\r\n\r\n if (this.headers.length > 0) {\r\n for (const header of this.headers) {\r\n if (!header.name) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.actionHttpHeadersMustHaveNameAndValue()\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n get ignoreInputValidation(): boolean {\r\n return this._ignoreInputValidation;\r\n }\r\n\r\n set ignoreInputValidation(value: boolean) {\r\n this._ignoreInputValidation = value;\r\n }\r\n\r\n get url(): string | undefined {\r\n return this._url.get();\r\n }\r\n\r\n set url(value: string | undefined) {\r\n this._url.set(value);\r\n }\r\n\r\n get body(): string | undefined {\r\n return this._body.get();\r\n }\r\n\r\n set body(value: string | undefined) {\r\n this._body.set(value);\r\n }\r\n}\r\n\r\nexport class ShowCardAction extends Action {\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.ShowCard\" = \"Action.ShowCard\";\r\n\r\n protected updateCssClasses() {\r\n super.updateCssClasses();\r\n\r\n if (this.renderedElement) {\r\n const effectiveHostConfig = this.parent ? this.parent.hostConfig : defaultHostConfig;\r\n\r\n this.renderedElement.classList.add(effectiveHostConfig.makeCssClassName(\"expandable\"));\r\n this.renderedElement.setAttribute(\r\n \"aria-expanded\",\r\n (this.state === ActionButtonState.Expanded).toString()\r\n );\r\n }\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n const jsonCard = source[\"card\"];\r\n\r\n if (jsonCard) {\r\n this.card.parse(jsonCard, context);\r\n } else {\r\n context.logParseEvent(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.showCardMustHaveCard()\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 if (this.card) {\r\n context.serializeValue(target, \"card\", this.card.toJSON(context));\r\n }\r\n }\r\n\r\n protected raiseExecuteActionEvent() {\r\n if (this.hostConfig.actions.showCard.actionMode === Enums.ShowCardActionMode.Popup) {\r\n // Only raise the event in Popup mode.\r\n super.raiseExecuteActionEvent();\r\n }\r\n }\r\n\r\n readonly card: AdaptiveCard = new InlineAdaptiveCard();\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n this.card.releaseDOMResources();\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return ShowCardAction.JsonTypeName;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n this.card.internalValidateProperties(context);\r\n }\r\n\r\n setParent(value: CardElement) {\r\n super.setParent(value);\r\n\r\n this.card.setParent(value);\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return this.card.getAllInputs(processActions);\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n result.push(...this.card.getAllActions());\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n let result = super.getResourceInformation();\r\n\r\n result.push(...this.card.getResourceInformation());\r\n\r\n return result;\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n let result = super.getActionById(id);\r\n\r\n if (!result) {\r\n result = this.card.getActionById(id);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nclass OverflowAction extends Action {\r\n static readonly JsonTypeName: \"Action.Overflow\" = \"Action.Overflow\";\r\n private _actions: Action[];\r\n\r\n constructor(actions: Action[]) {\r\n super();\r\n this._actions = actions;\r\n\r\n this.title = Strings.defaults.overflowButtonText();\r\n this.tooltip = Strings.defaults.overflowButtonTooltip();\r\n }\r\n\r\n getActions(): readonly Action[] {\r\n return this._actions;\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n result.push(...this._actions);\r\n\r\n return result;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return ShowCardAction.JsonTypeName;\r\n }\r\n\r\n execute() {\r\n const shouldDisplayPopupMenu = !raiseDisplayOverflowActionMenuEvent(\r\n this,\r\n this.renderedElement\r\n );\r\n\r\n if (shouldDisplayPopupMenu && this.renderedElement) {\r\n const contextMenu = new PopupMenu();\r\n contextMenu.hostConfig = this.hostConfig;\r\n\r\n for (let i = 0; i < this._actions.length; i++) {\r\n const menuItem = new MenuItem(i.toString(), this._actions[i].title ?? \"\", this._actions[i].iconUrl);\r\n menuItem.isEnabled = this._actions[i].isEnabled;\r\n menuItem.onClick = () => {\r\n const actionToExecute = this._actions[i];\r\n\r\n contextMenu.closePopup(false);\r\n\r\n if (actionToExecute.isEnabled) {\r\n actionToExecute.execute();\r\n }\r\n };\r\n\r\n contextMenu.items.add(menuItem);\r\n }\r\n\r\n contextMenu.onClose = () => {\r\n this.renderedElement?.focus();\r\n this.renderedElement?.setAttribute(\"aria-expanded\", \"false\");\r\n }\r\n\r\n this.renderedElement.setAttribute(\"aria-expanded\", \"true\");\r\n contextMenu.popup(this.renderedElement);\r\n contextMenu.selectedIndex = 0;\r\n }\r\n }\r\n \r\n setupElementForAccessibility(element: HTMLElement, promoteTooltipToLabel: boolean = false) {\r\n super.setupElementForAccessibility(element, promoteTooltipToLabel);\r\n\r\n element.setAttribute(\"aria-label\", Strings.defaults.overflowButtonTooltip());\r\n element.setAttribute(\"aria-expanded\", \"false\");\r\n }\r\n}\r\n\r\nclass ActionCollection {\r\n private _owner: CardElement;\r\n private _actionCardContainer: HTMLDivElement;\r\n private _expandedAction?: ShowCardAction;\r\n private _actionCard?: HTMLElement;\r\n\r\n private isActionAllowed(action: Action): boolean {\r\n const forbiddenTypes = this._owner.getForbiddenActionTypes();\r\n\r\n if (forbiddenTypes) {\r\n for (const forbiddenType of forbiddenTypes) {\r\n if (action.constructor === forbiddenType) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private refreshContainer() {\r\n clearElement(this._actionCardContainer);\r\n\r\n if (!this._actionCard) {\r\n this._actionCardContainer.style.marginTop = \"0px\";\r\n\r\n return;\r\n }\r\n\r\n this._actionCardContainer.style.marginTop =\r\n this.renderedActionCount > 0\r\n ? this._owner.hostConfig.actions.showCard.inlineTopMargin + \"px\"\r\n : \"0px\";\r\n\r\n const padding = this._owner.getEffectivePadding();\r\n\r\n this._owner.getImmediateSurroundingPadding(padding);\r\n\r\n const physicalPadding =\r\n this._owner.hostConfig.paddingDefinitionToSpacingDefinition(padding);\r\n\r\n if (this._actionCard) {\r\n this._actionCard.style.paddingLeft = physicalPadding.left + \"px\";\r\n this._actionCard.style.paddingRight = physicalPadding.right + \"px\";\r\n\r\n this._actionCard.style.marginLeft = \"-\" + physicalPadding.left + \"px\";\r\n this._actionCard.style.marginRight = \"-\" + physicalPadding.right + \"px\";\r\n\r\n if (physicalPadding.bottom !== 0 && !this._owner.isDesignMode()) {\r\n this._actionCard.style.paddingBottom = physicalPadding.bottom + \"px\";\r\n this._actionCard.style.marginBottom = \"-\" + physicalPadding.bottom + \"px\";\r\n }\r\n\r\n Utils.appendChild(this._actionCardContainer, this._actionCard);\r\n }\r\n }\r\n\r\n private layoutChanged() {\r\n this._owner.getRootElement().updateLayout();\r\n }\r\n\r\n private showActionCard(\r\n action: ShowCardAction,\r\n suppressStyle: boolean = false,\r\n raiseEvent: boolean = true\r\n ) {\r\n (action.card).suppressStyle = suppressStyle;\r\n\r\n // Always re-render a ShowCard action in design mode; reuse already rendered ShowCard (if available) otherwise\r\n const renderedCard =\r\n action.card.renderedElement && !this._owner.isDesignMode()\r\n ? action.card.renderedElement\r\n : action.card.render();\r\n\r\n this._actionCard = renderedCard;\r\n this._expandedAction = action;\r\n\r\n this.refreshContainer();\r\n\r\n if (raiseEvent) {\r\n this.layoutChanged();\r\n\r\n raiseInlineCardExpandedEvent(action, true);\r\n }\r\n }\r\n\r\n private collapseExpandedAction() {\r\n for (const action of this._renderedActions) {\r\n action.state = ActionButtonState.Normal;\r\n }\r\n\r\n const previouslyExpandedAction = this._expandedAction;\r\n\r\n this._expandedAction = undefined;\r\n this._actionCard = undefined;\r\n\r\n this.refreshContainer();\r\n\r\n if (previouslyExpandedAction) {\r\n this.layoutChanged();\r\n\r\n raiseInlineCardExpandedEvent(previouslyExpandedAction, false);\r\n }\r\n }\r\n\r\n private expandShowCardAction(action: ShowCardAction, raiseEvent: boolean) {\r\n let afterSelectedAction = false;\r\n\r\n for (const renderedAction of this._renderedActions) {\r\n // Remove actions after selected action from tabOrder if the actions are oriented horizontally, to skip focus directly to expanded card\r\n if (\r\n this._owner.hostConfig.actions.actionsOrientation == Enums.Orientation.Horizontal &&\r\n afterSelectedAction\r\n ) {\r\n renderedAction.isFocusable = false;\r\n }\r\n\r\n if (renderedAction !== action) {\r\n renderedAction.state = ActionButtonState.Subdued;\r\n } else {\r\n renderedAction.state = ActionButtonState.Expanded;\r\n\r\n afterSelectedAction = true;\r\n\r\n if (renderedAction.renderedElement) {\r\n renderedAction.renderedElement.onblur = (_e) => {\r\n for (const ra of this._renderedActions) {\r\n ra.isFocusable = true;\r\n }\r\n };\r\n }\r\n }\r\n }\r\n\r\n this.showActionCard(\r\n action,\r\n !(this._owner.isAtTheVeryLeft() && this._owner.isAtTheVeryRight()),\r\n raiseEvent\r\n );\r\n }\r\n\r\n private _items: Action[] = [];\r\n private _overflowAction?: OverflowAction;\r\n private _renderedActions: Action[] = [];\r\n\r\n constructor(owner: CardElement) {\r\n this._owner = owner;\r\n }\r\n\r\n releaseDOMResources() {\r\n for (let action of this._renderedActions) {\r\n action.releaseDOMResources();\r\n }\r\n }\r\n\r\n actionExecuted(action: Action) {\r\n if (!(action instanceof ShowCardAction)) {\r\n this.collapseExpandedAction();\r\n } else {\r\n if (action === this._expandedAction) {\r\n this.collapseExpandedAction();\r\n } else if (\r\n this._owner.hostConfig.actions.showCard.actionMode ===\r\n Enums.ShowCardActionMode.Inline\r\n ) {\r\n this.expandShowCardAction(action, true);\r\n }\r\n }\r\n }\r\n\r\n parse(source: any, context: SerializationContext) {\r\n this.clear();\r\n\r\n if (Array.isArray(source)) {\r\n for (const jsonAction of source) {\r\n let forbiddenActions: string[] = [];\r\n\r\n // If the action owner is a ContainerWithActions, we should check for forbidden actions\r\n if (this._owner instanceof ContainerWithActions) {\r\n forbiddenActions = this._owner.getForbiddenActionNames();\r\n }\r\n\r\n const action = context.parseAction(\r\n this._owner,\r\n jsonAction,\r\n forbiddenActions,\r\n !this._owner.isDesignMode()\r\n );\r\n\r\n if (action) {\r\n this.addAction(action);\r\n }\r\n }\r\n }\r\n }\r\n\r\n toJSON(target: PropertyBag, propertyName: string, context: SerializationContext): any {\r\n context.serializeArray(target, propertyName, this._items);\r\n }\r\n\r\n getActionAt(id: number): Action | undefined {\r\n return this._items[id];\r\n }\r\n\r\n getActionCount(): number {\r\n return this._items.length;\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n let result: Action | undefined = undefined;\r\n\r\n for (const item of this._items) {\r\n result = item.getActionById(id);\r\n\r\n if (result) {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n validateProperties(context: ValidationResults) {\r\n if (\r\n this._owner.hostConfig.actions.maxActions &&\r\n this._items.length > this._owner.hostConfig.actions.maxActions\r\n ) {\r\n context.addFailure(\r\n this._owner,\r\n Enums.ValidationEvent.TooManyActions,\r\n Strings.errors.tooManyActions(this._owner.hostConfig.actions.maxActions)\r\n );\r\n }\r\n\r\n if (this._items.length > 0 && !this._owner.hostConfig.supportsInteractivity) {\r\n context.addFailure(\r\n this._owner,\r\n Enums.ValidationEvent.InteractivityNotAllowed,\r\n Strings.errors.interactivityNotAllowed()\r\n );\r\n }\r\n\r\n for (const item of this._items) {\r\n if (!this.isActionAllowed(item)) {\r\n context.addFailure(\r\n this._owner,\r\n Enums.ValidationEvent.ActionTypeNotAllowed,\r\n Strings.errors.actionTypeNotAllowed(item.getJsonTypeName())\r\n );\r\n }\r\n\r\n item.internalValidateProperties(context);\r\n }\r\n }\r\n\r\n render(orientation: Enums.Orientation): HTMLElement | undefined {\r\n // Cache hostConfig for better perf\r\n const hostConfig = this._owner.hostConfig;\r\n\r\n if (!hostConfig.supportsInteractivity) {\r\n return undefined;\r\n }\r\n\r\n const element = document.createElement(\"div\");\r\n const maxActions = hostConfig.actions.maxActions\r\n ? Math.min(hostConfig.actions.maxActions, this._items.length)\r\n : this._items.length;\r\n\r\n this._actionCardContainer = document.createElement(\"div\");\r\n this._renderedActions = [];\r\n\r\n if (\r\n hostConfig.actions.preExpandSingleShowCardAction &&\r\n maxActions === 1 &&\r\n this._items[0] instanceof ShowCardAction &&\r\n this.isActionAllowed(this._items[0])\r\n ) {\r\n this.showActionCard(this._items[0], true);\r\n this._renderedActions.push(this._items[0]);\r\n } else {\r\n const buttonStrip = document.createElement(\"div\");\r\n buttonStrip.className = hostConfig.makeCssClassName(\"ac-actionSet\");\r\n buttonStrip.style.display = \"flex\";\r\n\r\n if (orientation === Enums.Orientation.Horizontal) {\r\n buttonStrip.style.flexDirection = \"row\";\r\n\r\n if (\r\n this._owner.horizontalAlignment &&\r\n hostConfig.actions.actionAlignment !== Enums.ActionAlignment.Stretch\r\n ) {\r\n switch (this._owner.horizontalAlignment) {\r\n case Enums.HorizontalAlignment.Center:\r\n buttonStrip.style.justifyContent = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n buttonStrip.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n buttonStrip.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n } else {\r\n switch (hostConfig.actions.actionAlignment) {\r\n case Enums.ActionAlignment.Center:\r\n buttonStrip.style.justifyContent = \"center\";\r\n break;\r\n case Enums.ActionAlignment.Right:\r\n buttonStrip.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n buttonStrip.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n }\r\n } else {\r\n buttonStrip.style.flexDirection = \"column\";\r\n\r\n if (\r\n this._owner.horizontalAlignment &&\r\n hostConfig.actions.actionAlignment !== Enums.ActionAlignment.Stretch\r\n ) {\r\n switch (this._owner.horizontalAlignment) {\r\n case Enums.HorizontalAlignment.Center:\r\n buttonStrip.style.alignItems = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n buttonStrip.style.alignItems = \"flex-end\";\r\n break;\r\n default:\r\n buttonStrip.style.alignItems = \"flex-start\";\r\n break;\r\n }\r\n } else {\r\n switch (hostConfig.actions.actionAlignment) {\r\n case Enums.ActionAlignment.Center:\r\n buttonStrip.style.alignItems = \"center\";\r\n break;\r\n case Enums.ActionAlignment.Right:\r\n buttonStrip.style.alignItems = \"flex-end\";\r\n break;\r\n case Enums.ActionAlignment.Stretch:\r\n buttonStrip.style.alignItems = \"stretch\";\r\n break;\r\n default:\r\n buttonStrip.style.alignItems = \"flex-start\";\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const allowedActions = this._items.filter(this.isActionAllowed.bind(this));\r\n\r\n let primaryActions: Action[] = [];\r\n const secondaryActions: Action[] = [];\r\n\r\n if (!this._owner.isDesignMode()) {\r\n allowedActions.forEach((action) =>\r\n action.mode === Enums.ActionMode.Secondary\r\n ? secondaryActions.push(action)\r\n : primaryActions.push(action)\r\n );\r\n\r\n // If primaryActions.length > maxActions, extra actions are moved to overflow\r\n const overflowPrimaryActions = primaryActions.splice(hostConfig.actions.maxActions);\r\n\r\n if (GlobalSettings.allowMoreThanMaxActionsInOverflowMenu) {\r\n secondaryActions.push(...overflowPrimaryActions);\r\n }\r\n\r\n let shouldRenderOverflowActionButton = true;\r\n\r\n if (secondaryActions.length > 0) {\r\n if (!this._overflowAction) {\r\n this._overflowAction = new OverflowAction(secondaryActions);\r\n this._overflowAction.setParent(this._owner);\r\n this._overflowAction[\"_actionCollection\"] = this;\r\n }\r\n\r\n const isRootAction = this._owner instanceof AdaptiveCard && !this._owner.parent;\r\n shouldRenderOverflowActionButton = !raiseRenderOverflowActionsEvent(\r\n this._overflowAction,\r\n isRootAction\r\n );\r\n }\r\n\r\n if (this._overflowAction && shouldRenderOverflowActionButton) {\r\n primaryActions.push(this._overflowAction);\r\n }\r\n } else {\r\n primaryActions = allowedActions;\r\n }\r\n\r\n for (let i = 0; i < primaryActions.length; i++) {\r\n const action = primaryActions[i];\r\n action.render();\r\n\r\n if (action.renderedElement) {\r\n if (\r\n hostConfig.actions.actionsOrientation === Enums.Orientation.Horizontal &&\r\n hostConfig.actions.actionAlignment === Enums.ActionAlignment.Stretch\r\n ) {\r\n action.renderedElement.style.flex = \"0 1 100%\";\r\n } else {\r\n action.renderedElement.style.flex = \"0 1 auto\";\r\n }\r\n\r\n buttonStrip.appendChild(action.renderedElement);\r\n\r\n this._renderedActions.push(action);\r\n\r\n if (i < primaryActions.length - 1 && hostConfig.actions.buttonSpacing > 0) {\r\n const spacer = document.createElement(\"div\");\r\n\r\n if (orientation === Enums.Orientation.Horizontal) {\r\n spacer.style.flex = \"0 0 auto\";\r\n spacer.style.width = hostConfig.actions.buttonSpacing + \"px\";\r\n } else {\r\n spacer.style.height = hostConfig.actions.buttonSpacing + \"px\";\r\n }\r\n\r\n Utils.appendChild(buttonStrip, spacer);\r\n }\r\n }\r\n }\r\n\r\n const buttonStripContainer = document.createElement(\"div\");\r\n buttonStripContainer.style.overflow = \"hidden\";\r\n buttonStripContainer.appendChild(buttonStrip);\r\n\r\n Utils.appendChild(element, buttonStripContainer);\r\n }\r\n\r\n Utils.appendChild(element, this._actionCardContainer);\r\n\r\n for (const renderedAction of this._renderedActions) {\r\n if (renderedAction.state === ActionButtonState.Expanded) {\r\n this.expandShowCardAction(renderedAction, false);\r\n\r\n break;\r\n }\r\n }\r\n\r\n return this._renderedActions.length > 0 ? element : undefined;\r\n }\r\n\r\n addAction(action: Action) {\r\n if (!action) {\r\n throw new Error(\"The action parameter cannot be null.\");\r\n }\r\n\r\n if ((!action.parent || action.parent === this._owner) && this._items.indexOf(action) < 0) {\r\n this._items.push(action);\r\n\r\n if (!action.parent) {\r\n action.setParent(this._owner);\r\n }\r\n\r\n action[\"_actionCollection\"] = this;\r\n } else {\r\n throw new Error(Strings.errors.actionAlreadyParented());\r\n }\r\n }\r\n\r\n removeAction(action: Action): boolean {\r\n if (this.expandedAction && this._expandedAction === action) {\r\n this.collapseExpandedAction();\r\n }\r\n\r\n const actionIndex = this._items.indexOf(action);\r\n\r\n if (actionIndex >= 0) {\r\n this._items.splice(actionIndex, 1);\r\n\r\n action.setParent(undefined);\r\n\r\n action[\"_actionCollection\"] = undefined;\r\n\r\n for (let i = 0; i < this._renderedActions.length; i++) {\r\n if (this._renderedActions[i] === action) {\r\n this._renderedActions.splice(i, 1);\r\n\r\n break;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n clear() {\r\n this._items = [];\r\n this._renderedActions = [];\r\n this._expandedAction = undefined;\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n let result: Input[] = [];\r\n\r\n if (processActions) {\r\n for (const action of this._items) {\r\n result.push(...action.getAllInputs());\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n let result: IResourceInformation[] = [];\r\n\r\n for (const action of this._items) {\r\n result.push(...action.getResourceInformation());\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get renderedActionCount(): number {\r\n return this._renderedActions.length;\r\n }\r\n\r\n get expandedAction(): ShowCardAction | undefined {\r\n return this._expandedAction;\r\n }\r\n}\r\n\r\nexport class ActionSet extends CardElement {\r\n //#region Schema\r\n\r\n static readonly orientationProperty = new EnumProperty(\r\n Versions.v1_1,\r\n \"orientation\",\r\n Enums.Orientation\r\n );\r\n\r\n @property(ActionSet.orientationProperty)\r\n orientation?: Enums.Orientation;\r\n\r\n //#endregion\r\n\r\n private _actionCollection: ActionCollection;\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this._actionCollection.parse(source[\"actions\"], context);\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n this._actionCollection.toJSON(target, \"actions\", context);\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n return this._actionCollection.render(\r\n this.orientation !== undefined\r\n ? this.orientation\r\n : this.hostConfig.actions.actionsOrientation\r\n );\r\n }\r\n\r\n constructor() {\r\n super();\r\n\r\n this._actionCollection = new ActionCollection(this);\r\n }\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n this._actionCollection.releaseDOMResources();\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n if (this._actionCollection.renderedActionCount === 0) {\r\n return super.isBleedingAtBottom();\r\n } else {\r\n if (this._actionCollection.getActionCount() === 1) {\r\n return (\r\n this._actionCollection.expandedAction !== undefined &&\r\n !this.hostConfig.actions.preExpandSingleShowCardAction\r\n );\r\n } else {\r\n return this._actionCollection.expandedAction !== undefined;\r\n }\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"ActionSet\";\r\n }\r\n\r\n getActionCount(): number {\r\n return this._actionCollection.getActionCount();\r\n }\r\n\r\n getActionAt(index: number): Action | undefined {\r\n if (index >= 0 && index < this.getActionCount()) {\r\n return this._actionCollection.getActionAt(index);\r\n } else {\r\n return super.getActionAt(index);\r\n }\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n const result: Action | undefined = this._actionCollection.getActionById(id);\r\n\r\n return result ? result : super.getActionById(id);\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n let action = this.getActionAt(i);\r\n\r\n if (action) {\r\n result.push(action);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n this._actionCollection.validateProperties(context);\r\n }\r\n\r\n addAction(action: Action) {\r\n this._actionCollection.addAction(action);\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return processActions ? this._actionCollection.getAllInputs() : [];\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n return this._actionCollection.getResourceInformation();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n findDOMNodeOwner(node: Node): CardObject | undefined {\r\n let target: CardObject | undefined = undefined;\r\n\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n const action = this.getActionAt(i);\r\n\r\n if (action) {\r\n // recur through each Action\r\n target = action.findDOMNodeOwner(node);\r\n\r\n if (target) {\r\n return target;\r\n }\r\n }\r\n }\r\n\r\n // if not found in any Action, defer to parent implementation\r\n return super.findDOMNodeOwner(node);\r\n }\r\n\r\n getElementById(id: string): CardElement | undefined {\r\n let result = super.getElementById(id);\r\n\r\n if (!result) {\r\n result = this.getElementByIdFromAction(id);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get isInteractive(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport class ContainerStyleProperty extends ValueSetProperty {\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\r\n ) {\r\n super(\r\n targetVersion,\r\n name,\r\n [\r\n { value: Enums.ContainerStyle.Default },\r\n { value: Enums.ContainerStyle.Emphasis },\r\n { targetVersion: Versions.v1_2, value: Enums.ContainerStyle.Accent },\r\n { targetVersion: Versions.v1_2, value: Enums.ContainerStyle.Good },\r\n { targetVersion: Versions.v1_2, value: Enums.ContainerStyle.Attention },\r\n { targetVersion: Versions.v1_2, value: Enums.ContainerStyle.Warning }\r\n ],\r\n defaultValue,\r\n onGetInitialValue\r\n );\r\n }\r\n}\r\n\r\nexport abstract class StylableCardElementContainer extends CardElementContainer {\r\n //#region Schema\r\n\r\n static readonly styleProperty = new ContainerStyleProperty(Versions.v1_0, \"style\");\r\n\r\n @property(StylableCardElementContainer.styleProperty)\r\n get style(): string | undefined {\r\n if (this.allowCustomStyle) {\r\n const style = this.getValue(StylableCardElementContainer.styleProperty);\r\n\r\n if (style && this.hostConfig.containerStyles.getStyleByName(style)) {\r\n return style;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n set style(value: string | undefined) {\r\n this.setValue(StylableCardElementContainer.styleProperty, value);\r\n }\r\n\r\n //#endregion\r\n\r\n protected get allowCustomStyle(): boolean {\r\n return true;\r\n }\r\n\r\n protected get hasExplicitStyle(): boolean {\r\n return this.getValue(StylableCardElementContainer.styleProperty) !== undefined;\r\n }\r\n\r\n protected applyBorder() {\r\n // No border in base implementation\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 = Utils.stringToCssColor(styleDefinition.backgroundColor);\r\n if (bgColor) {\r\n this.renderedElement.style.backgroundColor = bgColor;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected applyPadding() {\r\n super.applyPadding();\r\n\r\n if (!this.renderedElement) {\r\n return;\r\n }\r\n\r\n let physicalPadding = new SpacingDefinition();\r\n\r\n if (this.getEffectivePadding()) {\r\n physicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(\r\n this.getEffectivePadding()\r\n );\r\n }\r\n\r\n this.renderedElement.style.paddingTop = physicalPadding.top + \"px\";\r\n this.renderedElement.style.paddingRight = physicalPadding.right + \"px\";\r\n this.renderedElement.style.paddingBottom = physicalPadding.bottom + \"px\";\r\n this.renderedElement.style.paddingLeft = physicalPadding.left + \"px\";\r\n\r\n if (this.isBleeding()) {\r\n // Bleed into the first parent that does have padding\r\n const padding = new PaddingDefinition();\r\n\r\n this.getImmediateSurroundingPadding(padding);\r\n\r\n const surroundingPadding =\r\n this.hostConfig.paddingDefinitionToSpacingDefinition(padding);\r\n\r\n this.renderedElement.style.marginRight = \"-\" + surroundingPadding.right + \"px\";\r\n this.renderedElement.style.marginLeft = \"-\" + surroundingPadding.left + \"px\";\r\n\r\n if (!this.isDesignMode()) {\r\n this.renderedElement.style.marginTop = \"-\" + surroundingPadding.top + \"px\";\r\n this.renderedElement.style.marginBottom = \"-\" + surroundingPadding.bottom + \"px\";\r\n }\r\n\r\n if (\r\n this.separatorElement &&\r\n this.separatorOrientation === Enums.Orientation.Horizontal\r\n ) {\r\n this.separatorElement.style.marginLeft = \"-\" + surroundingPadding.left + \"px\";\r\n this.separatorElement.style.marginRight = \"-\" + surroundingPadding.right + \"px\";\r\n }\r\n } else {\r\n this.renderedElement.style.marginRight = \"0\";\r\n this.renderedElement.style.marginLeft = \"0\";\r\n this.renderedElement.style.marginTop = \"0\";\r\n this.renderedElement.style.marginBottom = \"0\";\r\n\r\n if (\r\n this.separatorElement &&\r\n this.separatorOrientation === Enums.Orientation.Horizontal\r\n ) {\r\n this.separatorElement.style.marginRight = \"0\";\r\n this.separatorElement.style.marginLeft = \"0\";\r\n }\r\n }\r\n }\r\n\r\n protected getHasBackground(ignoreBackgroundImages: boolean = false): boolean {\r\n let currentElement: CardElement | undefined = this.parent;\r\n\r\n while (currentElement) {\r\n let currentElementHasBackgroundImage: boolean = false;\r\n\r\n if (ignoreBackgroundImages) {\r\n currentElementHasBackgroundImage = false;\r\n } else {\r\n currentElementHasBackgroundImage =\r\n currentElement instanceof Container\r\n ? currentElement.backgroundImage.isValid()\r\n : false;\r\n }\r\n\r\n if (currentElement instanceof StylableCardElementContainer) {\r\n if (\r\n this.hasExplicitStyle &&\r\n (currentElement.getEffectiveStyle() !== this.getEffectiveStyle() ||\r\n currentElementHasBackgroundImage)\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n currentElement = currentElement.parent;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return this.getHasBackground() || this.getHasBorder()\r\n ? new PaddingDefinition(\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding\r\n )\r\n : super.getDefaultPadding();\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n const explicitStyle = this.getValue(StylableCardElementContainer.styleProperty);\r\n\r\n if (explicitStyle !== undefined) {\r\n const styleDefinition = this.hostConfig.containerStyles.getStyleByName(explicitStyle);\r\n\r\n if (!styleDefinition) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidPropertyValue(explicitStyle, \"style\")\r\n );\r\n }\r\n }\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n const renderedElement = super.render();\r\n\r\n if (renderedElement && this.getHasBackground()) {\r\n this.applyBackground();\r\n }\r\n\r\n this.applyBorder();\r\n\r\n return renderedElement;\r\n }\r\n\r\n getEffectiveStyle(): string {\r\n const effectiveStyle = this.style;\r\n\r\n return effectiveStyle ? effectiveStyle : super.getEffectiveStyle();\r\n }\r\n}\r\n\r\nexport abstract class ContainerBase extends StylableCardElementContainer {\r\n //#region Schema\r\n\r\n static readonly bleedProperty = new BoolProperty(Versions.v1_2, \"bleed\", false);\r\n static readonly minHeightProperty = new PixelSizeProperty(Versions.v1_2, \"minHeight\");\r\n\r\n @property(ContainerBase.bleedProperty)\r\n private _bleed: boolean = false;\r\n\r\n @property(ContainerBase.minHeightProperty)\r\n minPixelHeight?: number;\r\n\r\n //#endregion\r\n\r\n protected adjustRenderedElementSize(renderedElement: HTMLElement) {\r\n super.adjustRenderedElementSize(renderedElement);\r\n\r\n if (this.minPixelHeight) {\r\n renderedElement.style.minHeight = this.minPixelHeight + \"px\";\r\n }\r\n }\r\n\r\n protected getHasExpandedAction(): boolean {\r\n return false;\r\n }\r\n\r\n protected getBleed(): boolean {\r\n return this._bleed;\r\n }\r\n\r\n protected setBleed(value: boolean) {\r\n this._bleed = value;\r\n }\r\n\r\n protected get renderedActionCount(): number {\r\n return 0;\r\n }\r\n\r\n isBleeding(): boolean {\r\n return (this.getHasBackground() || this.hostConfig.alwaysAllowBleed) && this.getBleed();\r\n }\r\n}\r\n\r\nexport class BackgroundImage extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly urlProperty = new StringProperty(Versions.v1_0, \"url\");\r\n static readonly fillModeProperty = new EnumProperty(\r\n Versions.v1_2,\r\n \"fillMode\",\r\n Enums.FillMode,\r\n Enums.FillMode.Cover\r\n );\r\n static readonly horizontalAlignmentProperty = new EnumProperty(\r\n Versions.v1_2,\r\n \"horizontalAlignment\",\r\n Enums.HorizontalAlignment,\r\n Enums.HorizontalAlignment.Left\r\n );\r\n static readonly verticalAlignmentProperty = new EnumProperty(\r\n Versions.v1_2,\r\n \"verticalAlignment\",\r\n Enums.VerticalAlignment,\r\n Enums.VerticalAlignment.Top\r\n );\r\n\r\n @property(BackgroundImage.urlProperty)\r\n url?: string;\r\n\r\n @property(BackgroundImage.fillModeProperty)\r\n fillMode: Enums.FillMode;\r\n\r\n @property(BackgroundImage.horizontalAlignmentProperty)\r\n horizontalAlignment: Enums.HorizontalAlignment;\r\n\r\n @property(BackgroundImage.verticalAlignmentProperty)\r\n verticalAlignment: Enums.VerticalAlignment;\r\n\r\n //#endregion\r\n\r\n protected getSchemaKey(): string {\r\n return \"BackgroundImage\";\r\n }\r\n\r\n protected internalParse(source: any, context: BaseSerializationContext) {\r\n if (typeof source === \"string\") {\r\n this.resetDefaultValues();\r\n this.url = source;\r\n } else {\r\n return super.internalParse(source, context);\r\n }\r\n }\r\n\r\n apply(element: CardElement) {\r\n if (this.url && element.renderedElement) {\r\n element.renderedElement.style.backgroundImage =\r\n \"url('\" +\r\n element.preProcessPropertyValue(BackgroundImage.urlProperty, this.url) +\r\n \"')\";\r\n\r\n switch (this.fillMode) {\r\n case Enums.FillMode.Repeat:\r\n element.renderedElement.style.backgroundRepeat = \"repeat\";\r\n break;\r\n case Enums.FillMode.RepeatHorizontally:\r\n element.renderedElement.style.backgroundRepeat = \"repeat-x\";\r\n break;\r\n case Enums.FillMode.RepeatVertically:\r\n element.renderedElement.style.backgroundRepeat = \"repeat-y\";\r\n break;\r\n case Enums.FillMode.Cover:\r\n default:\r\n element.renderedElement.style.backgroundRepeat = \"no-repeat\";\r\n element.renderedElement.style.backgroundSize = \"cover\";\r\n break;\r\n }\r\n\r\n switch (this.horizontalAlignment) {\r\n case Enums.HorizontalAlignment.Left:\r\n break;\r\n case Enums.HorizontalAlignment.Center:\r\n element.renderedElement.style.backgroundPositionX = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n element.renderedElement.style.backgroundPositionX = \"right\";\r\n break;\r\n }\r\n\r\n switch (this.verticalAlignment) {\r\n case Enums.VerticalAlignment.Top:\r\n break;\r\n case Enums.VerticalAlignment.Center:\r\n element.renderedElement.style.backgroundPositionY = \"center\";\r\n break;\r\n case Enums.VerticalAlignment.Bottom:\r\n element.renderedElement.style.backgroundPositionY = \"bottom\";\r\n break;\r\n }\r\n }\r\n }\r\n\r\n isValid(): boolean {\r\n return this.url ? true : false;\r\n }\r\n}\r\n\r\nexport class Container extends ContainerBase {\r\n //#region Schema\r\n static readonly backgroundImageProperty = new SerializableObjectProperty(\r\n Versions.v1_0,\r\n \"backgroundImage\",\r\n BackgroundImage\r\n );\r\n static readonly verticalContentAlignmentProperty = new EnumProperty(\r\n Versions.v1_1,\r\n \"verticalContentAlignment\",\r\n Enums.VerticalAlignment\r\n );\r\n static readonly rtlProperty = new BoolProperty(Versions.v1_0, \"rtl\");\r\n\r\n @property(Container.backgroundImageProperty)\r\n get backgroundImage(): BackgroundImage {\r\n return this.getValue(Container.backgroundImageProperty);\r\n }\r\n\r\n @property(Container.verticalContentAlignmentProperty)\r\n verticalContentAlignment?: Enums.VerticalAlignment;\r\n\r\n @property(Container.rtlProperty)\r\n rtl?: boolean;\r\n\r\n //#endregion\r\n\r\n private _items: CardElement[] = [];\r\n private _renderedItems: CardElement[] = [];\r\n\r\n protected insertItemAt(item: CardElement, index: number, forceInsert: boolean) {\r\n if (!item.parent || forceInsert) {\r\n if (item.isStandalone) {\r\n if (index < 0 || index >= this._items.length) {\r\n this._items.push(item);\r\n } else {\r\n this._items.splice(index, 0, item);\r\n }\r\n\r\n item.setParent(this);\r\n } else {\r\n throw new Error(Strings.errors.elementTypeNotStandalone(item.getJsonTypeName()));\r\n }\r\n } else {\r\n throw new Error(Strings.errors.elementAlreadyParented());\r\n }\r\n }\r\n\r\n protected getItemsCollectionPropertyName(): string {\r\n return \"items\";\r\n }\r\n\r\n protected applyBackground() {\r\n if (this.backgroundImage.isValid() && this.renderedElement) {\r\n this.backgroundImage.apply(this);\r\n }\r\n\r\n super.applyBackground();\r\n }\r\n\r\n protected applyRTL(element: HTMLElement) {\r\n if (this.rtl !== undefined) {\r\n element.dir = this.rtl ? \"rtl\" : \"ltr\";\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._renderedItems = [];\r\n\r\n // Cache hostConfig to avoid walking the parent hierarchy several times\r\n const hostConfig = this.hostConfig;\r\n\r\n const element = document.createElement(\"div\");\r\n\r\n this.applyRTL(element);\r\n\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-container\"));\r\n element.style.display = \"flex\";\r\n element.style.flexDirection = \"column\";\r\n\r\n if (GlobalSettings.useAdvancedCardBottomTruncation) {\r\n // Forces the container to be at least as tall as its content.\r\n //\r\n // Fixes a quirk in Chrome where, for nested flex elements, the\r\n // inner element's height would never exceed the outer element's\r\n // height. This caused overflow truncation to break -- containers\r\n // would always be measured as not overflowing, since their heights\r\n // were constrained by their parents as opposed to truly reflecting\r\n // the height of their content.\r\n //\r\n // See the \"Browser Rendering Notes\" section of this answer:\r\n // https://stackoverflow.com/questions/36247140/why-doesnt-flex-item-shrink-past-content-size\r\n element.style.minHeight = \"-webkit-min-content\";\r\n }\r\n\r\n switch (this.getEffectiveVerticalContentAlignment()) {\r\n case Enums.VerticalAlignment.Center:\r\n element.style.justifyContent = \"center\";\r\n break;\r\n case Enums.VerticalAlignment.Bottom:\r\n element.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n element.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n\r\n if (this._items.length > 0) {\r\n for (const item of this._items) {\r\n const renderedItem = this.isElementAllowed(item) ? item.render() : undefined;\r\n\r\n if (renderedItem) {\r\n if (this._renderedItems.length > 0 && item.separatorElement) {\r\n item.separatorElement.style.flex = \"0 0 auto\";\r\n\r\n Utils.appendChild(element, item.separatorElement);\r\n }\r\n\r\n Utils.appendChild(element, renderedItem);\r\n\r\n this._renderedItems.push(item);\r\n }\r\n }\r\n } else {\r\n if (this.isDesignMode()) {\r\n const placeholderElement = this.createPlaceholderElement();\r\n placeholderElement.style.width = \"100%\";\r\n placeholderElement.style.height = \"100%\";\r\n\r\n element.appendChild(placeholderElement);\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n protected truncateOverflow(maxHeight: number): boolean {\r\n if (this.renderedElement) {\r\n // Add 1 to account for rounding differences between browsers\r\n const boundary = this.renderedElement.offsetTop + maxHeight + 1;\r\n\r\n const handleElement = (cardElement: CardElement) => {\r\n const elt = cardElement.renderedElement;\r\n\r\n if (elt) {\r\n switch (Utils.getFitStatus(elt, boundary)) {\r\n case Enums.ContainerFitStatus.FullyInContainer:\r\n const sizeChanged = cardElement[\"resetOverflow\"]();\r\n // If the element's size changed after resetting content,\r\n // we have to check if it still fits fully in the card\r\n if (sizeChanged) {\r\n handleElement(cardElement);\r\n }\r\n break;\r\n case Enums.ContainerFitStatus.Overflowing:\r\n const containerMaxHeight = boundary - elt.offsetTop;\r\n cardElement[\"handleOverflow\"](containerMaxHeight);\r\n break;\r\n case Enums.ContainerFitStatus.FullyOutOfContainer:\r\n cardElement[\"handleOverflow\"](0);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n for (const item of this._items) {\r\n handleElement(item);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected undoOverflowTruncation() {\r\n for (const item of this._items) {\r\n item[\"resetOverflow\"]();\r\n }\r\n }\r\n\r\n protected getHasBackground(ignoreBackgroundImages: boolean = false): boolean {\r\n let result = ignoreBackgroundImages ? false : this.backgroundImage.isValid();\r\n\r\n return result || super.getHasBackground(ignoreBackgroundImages);\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this.clear();\r\n this.setShouldFallback(false);\r\n\r\n let jsonItems = source[this.getItemsCollectionPropertyName()];\r\n\r\n if (Array.isArray(jsonItems)) {\r\n for (const item of jsonItems) {\r\n const element = context.parseElement(\r\n this,\r\n item,\r\n this.forbiddenChildElements(),\r\n !this.isDesignMode()\r\n );\r\n\r\n if (element) {\r\n this.insertItemAt(element, -1, true);\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 const collectionPropertyName = this.getItemsCollectionPropertyName();\r\n\r\n context.serializeArray(target, collectionPropertyName, this._items);\r\n }\r\n\r\n protected get isSelectable(): boolean {\r\n return true;\r\n }\r\n\r\n getEffectivePadding(): PaddingDefinition {\r\n if (\r\n GlobalSettings.removePaddingFromContainersWithBackgroundImage &&\r\n !this.getHasBackground(true)\r\n ) {\r\n return new PaddingDefinition();\r\n }\r\n\r\n return super.getEffectivePadding();\r\n }\r\n\r\n getEffectiveVerticalContentAlignment(): Enums.VerticalAlignment {\r\n if (this.verticalContentAlignment !== undefined) {\r\n return this.verticalContentAlignment;\r\n }\r\n\r\n const parentContainer = this.getParentContainer();\r\n\r\n return parentContainer\r\n ? parentContainer.getEffectiveVerticalContentAlignment()\r\n : Enums.VerticalAlignment.Top;\r\n }\r\n\r\n getItemCount(): number {\r\n return this._items.length;\r\n }\r\n\r\n getItemAt(index: number): CardElement {\r\n return this._items[index];\r\n }\r\n\r\n getFirstVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedItems && this._renderedItems.length > 0) {\r\n for (const item of this._renderedItems) {\r\n if (item.isVisible) {\r\n return item;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getLastVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedItems && this._renderedItems.length > 0) {\r\n for (let i = this._renderedItems.length - 1; i >= 0; i--) {\r\n if (this._renderedItems[i].isVisible) {\r\n return this._renderedItems[i];\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Container\";\r\n }\r\n\r\n isFirstElement(element: CardElement): boolean {\r\n const designMode = this.isDesignMode();\r\n\r\n for (const item of this._items) {\r\n if (item.isVisible || designMode) {\r\n return item === element;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isLastElement(element: CardElement): boolean {\r\n const designMode = this.isDesignMode();\r\n\r\n for (let i = this._items.length - 1; i >= 0; i--) {\r\n if (this._items[i].isVisible || designMode) {\r\n return this._items[i] === element;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isRtl(): boolean {\r\n if (this.rtl !== undefined) {\r\n return this.rtl;\r\n } else {\r\n const parentContainer = this.getParentContainer();\r\n\r\n return parentContainer ? parentContainer.isRtl() : false;\r\n }\r\n }\r\n\r\n isBleedingAtTop(): boolean {\r\n const firstRenderedItem = this.getFirstVisibleRenderedItem();\r\n\r\n return (\r\n this.isBleeding() || (firstRenderedItem ? firstRenderedItem.isBleedingAtTop() : false)\r\n );\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n const lastRenderedItem = this.getLastVisibleRenderedItem();\r\n\r\n return (\r\n this.isBleeding() ||\r\n (lastRenderedItem\r\n ? lastRenderedItem.isBleedingAtBottom() &&\r\n lastRenderedItem.getEffectiveStyle() === this.getEffectiveStyle()\r\n : false)\r\n );\r\n }\r\n\r\n indexOf(cardElement: CardElement): number {\r\n return this._items.indexOf(cardElement);\r\n }\r\n\r\n addItem(item: CardElement) {\r\n this.insertItemAt(item, -1, false);\r\n }\r\n\r\n insertItemBefore(item: CardElement, insertBefore: CardElement) {\r\n this.insertItemAt(item, this._items.indexOf(insertBefore), false);\r\n }\r\n\r\n insertItemAfter(item: CardElement, insertAfter: CardElement) {\r\n this.insertItemAt(item, this._items.indexOf(insertAfter) + 1, false);\r\n }\r\n\r\n removeItem(item: CardElement): 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 clear() {\r\n this._items = [];\r\n this._renderedItems = [];\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n const result = super.getResourceInformation();\r\n\r\n if (this.backgroundImage.isValid()) {\r\n result.push({\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- validated by `isValid()`\r\n url: this.backgroundImage.url!,\r\n mimeType: \"image\"\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n let result: Action | undefined = super.getActionById(id);\r\n\r\n if (!result) {\r\n if (this.selectAction) {\r\n result = this.selectAction.getActionById(id);\r\n }\r\n\r\n if (!result) {\r\n for (const item of this._items) {\r\n result = item.getActionById(id);\r\n\r\n if (result) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get padding(): PaddingDefinition | undefined {\r\n return this.getPadding();\r\n }\r\n\r\n set padding(value: PaddingDefinition | undefined) {\r\n this.setPadding(value);\r\n }\r\n\r\n get selectAction(): Action | undefined {\r\n return this._selectAction;\r\n }\r\n\r\n set selectAction(value: Action | undefined) {\r\n this._selectAction = value;\r\n }\r\n\r\n get bleed(): boolean {\r\n return this.getBleed();\r\n }\r\n\r\n set bleed(value: boolean) {\r\n this.setBleed(value);\r\n }\r\n}\r\n\r\nexport type ColumnWidth = SizeAndUnit | \"auto\" | \"stretch\";\r\n\r\nexport class Column extends Container {\r\n //#region Schema\r\n\r\n static readonly widthProperty = new CustomProperty(\r\n Versions.v1_0,\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: ColumnWidth = 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, Enums.SizeUnit.Weight);\r\n } else if (value === \"auto\" || value === \"stretch\") {\r\n result = value;\r\n } else if (typeof value === \"string\") {\r\n try {\r\n result = SizeAndUnit.parse(value);\r\n\r\n if (\r\n result.unit === Enums.SizeUnit.Pixel &&\r\n prop.targetVersion.compareTo(context.targetVersion) > 0\r\n ) {\r\n invalidWidth = true;\r\n }\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 Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidColumnWidth(value)\r\n );\r\n\r\n result = \"auto\";\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: ColumnWidth,\r\n context: BaseSerializationContext\r\n ) => {\r\n if (value instanceof SizeAndUnit) {\r\n if (value.unit === Enums.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 } else {\r\n context.serializeValue(target, \"width\", value);\r\n }\r\n },\r\n \"stretch\"\r\n );\r\n\r\n @property(Column.widthProperty)\r\n width: ColumnWidth = \"stretch\";\r\n\r\n //#endregion\r\n\r\n private _computedWeight: number = 0;\r\n\r\n protected adjustRenderedElementSize(renderedElement: HTMLElement) {\r\n const minDesignTimeColumnHeight = 20;\r\n\r\n if (this.isDesignMode()) {\r\n renderedElement.style.minWidth = \"20px\";\r\n renderedElement.style.minHeight =\r\n (!this.minPixelHeight\r\n ? minDesignTimeColumnHeight\r\n : Math.max(this.minPixelHeight, minDesignTimeColumnHeight)) + \"px\";\r\n } else {\r\n renderedElement.style.minWidth = \"0\";\r\n\r\n if (this.minPixelHeight) {\r\n renderedElement.style.minHeight = this.minPixelHeight + \"px\";\r\n }\r\n }\r\n\r\n if (this.width === \"auto\") {\r\n renderedElement.style.flex = \"0 1 auto\";\r\n } else if (this.width === \"stretch\") {\r\n renderedElement.style.flex = \"1 1 50px\";\r\n } else if (this.width instanceof SizeAndUnit) {\r\n if (this.width.unit === Enums.SizeUnit.Pixel) {\r\n renderedElement.style.flex = \"0 0 auto\";\r\n renderedElement.style.width = this.width.physicalSize + \"px\";\r\n } else {\r\n renderedElement.style.flex =\r\n \"1 1 \" +\r\n (this._computedWeight > 0 ? this._computedWeight : this.width.physicalSize) +\r\n \"%\";\r\n }\r\n }\r\n }\r\n\r\n protected shouldSerialize(_context: SerializationContext): boolean {\r\n return true;\r\n }\r\n\r\n protected get separatorOrientation(): Enums.Orientation {\r\n return Enums.Orientation.Vertical;\r\n }\r\n\r\n constructor(width: ColumnWidth = \"stretch\") {\r\n super();\r\n\r\n this.width = width;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Column\";\r\n }\r\n\r\n get hasVisibleSeparator(): boolean {\r\n if (this.parent && this.parent instanceof ColumnSet) {\r\n return this.separatorElement !== undefined && !this.parent.isLeftMostElement(this);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nexport class ColumnSet extends ContainerBase {\r\n private _columns: Column[] = [];\r\n private _renderedColumns: Column[];\r\n\r\n private createColumnInstance(source: any, context: SerializationContext): Column | undefined {\r\n return context.parseCardObject(\r\n this,\r\n source,\r\n [],\r\n !this.isDesignMode(),\r\n (typeName: string) => {\r\n return !typeName || typeName === \"Column\" ? new Column() : undefined;\r\n },\r\n (typeName: string, _errorType: Enums.TypeErrorType) => {\r\n context.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.ElementTypeNotAllowed,\r\n Strings.errors.elementTypeNotAllowed(typeName)\r\n );\r\n }\r\n );\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._renderedColumns = [];\r\n\r\n if (this._columns.length > 0) {\r\n // Cache hostConfig to avoid walking the parent hierarchy several times\r\n const hostConfig = this.hostConfig;\r\n\r\n const element = document.createElement(\"div\");\r\n element.className = hostConfig.makeCssClassName(\"ac-columnSet\");\r\n element.style.display = \"flex\";\r\n\r\n if (GlobalSettings.useAdvancedCardBottomTruncation) {\r\n // See comment in Container.internalRender()\r\n element.style.minHeight = \"-webkit-min-content\";\r\n }\r\n\r\n switch (this.getEffectiveHorizontalAlignment()) {\r\n case Enums.HorizontalAlignment.Center:\r\n element.style.justifyContent = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n element.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n element.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n\r\n let totalWeight: number = 0;\r\n\r\n for (const column of this._columns) {\r\n if (\r\n column.width instanceof SizeAndUnit &&\r\n column.width.unit === Enums.SizeUnit.Weight\r\n ) {\r\n totalWeight += column.width.physicalSize;\r\n }\r\n }\r\n\r\n for (const column of this._columns) {\r\n if (\r\n column.width instanceof SizeAndUnit &&\r\n column.width.unit === Enums.SizeUnit.Weight &&\r\n totalWeight > 0\r\n ) {\r\n const computedWeight = (100 / totalWeight) * column.width.physicalSize;\r\n\r\n // Best way to emulate \"internal\" access I know of\r\n column[\"_computedWeight\"] = computedWeight;\r\n }\r\n\r\n const renderedColumn = column.render();\r\n\r\n if (renderedColumn) {\r\n if (this._renderedColumns.length > 0 && column.separatorElement) {\r\n column.separatorElement.style.flex = \"0 0 auto\";\r\n\r\n Utils.appendChild(element, column.separatorElement);\r\n }\r\n\r\n Utils.appendChild(element, renderedColumn);\r\n\r\n this._renderedColumns.push(column);\r\n }\r\n }\r\n\r\n return this._renderedColumns.length > 0 ? element : undefined;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected truncateOverflow(maxHeight: number): boolean {\r\n for (const column of this._columns) {\r\n column[\"handleOverflow\"](maxHeight);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected undoOverflowTruncation() {\r\n for (const column of this._columns) {\r\n column[\"resetOverflow\"]();\r\n }\r\n }\r\n\r\n protected get isSelectable(): boolean {\r\n return true;\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this._columns = [];\r\n this._renderedColumns = [];\r\n\r\n const jsonColumns = source[\"columns\"];\r\n\r\n if (Array.isArray(jsonColumns)) {\r\n for (const item of jsonColumns) {\r\n const column = this.createColumnInstance(item, context);\r\n\r\n if (column) {\r\n this._columns.push(column);\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, \"columns\", this._columns);\r\n }\r\n\r\n isFirstElement(element: CardElement): boolean {\r\n for (const column of this._columns) {\r\n if (column.isVisible) {\r\n return column === element;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isBleedingAtTop(): boolean {\r\n if (this.isBleeding()) {\r\n return true;\r\n }\r\n\r\n if (this._renderedColumns && this._renderedColumns.length > 0) {\r\n for (const column of this._columns) {\r\n if (column.isBleedingAtTop()) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n if (this.isBleeding()) {\r\n return true;\r\n }\r\n\r\n if (this._renderedColumns && this._renderedColumns.length > 0) {\r\n for (const column of this._columns) {\r\n if (column.isBleedingAtBottom()) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getItemCount(): number {\r\n return this._columns.length;\r\n }\r\n\r\n getFirstVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedColumns && this._renderedColumns.length > 0) {\r\n return this._renderedColumns[0];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n getLastVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedColumns && this._renderedColumns.length > 0) {\r\n return this._renderedColumns[this._renderedColumns.length - 1];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n getColumnAt(index: number): Column {\r\n return this._columns[index];\r\n }\r\n\r\n getItemAt(index: number): CardElement {\r\n return this.getColumnAt(index);\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"ColumnSet\";\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n let weightedColumns: number = 0;\r\n let stretchedColumns: number = 0;\r\n\r\n for (const column of this._columns) {\r\n if (typeof column.width === \"number\") {\r\n weightedColumns++;\r\n } else if (column.width === \"stretch\") {\r\n stretchedColumns++;\r\n }\r\n }\r\n\r\n if (weightedColumns > 0 && stretchedColumns > 0) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.Hint,\r\n Strings.hints.dontUseWeightedAndStrecthedColumnsInSameSet()\r\n );\r\n }\r\n }\r\n\r\n addColumn(column: Column) {\r\n if (!column.parent) {\r\n this._columns.push(column);\r\n\r\n column.setParent(this);\r\n } else {\r\n throw new Error(Strings.errors.columnAlreadyBelongsToAnotherSet());\r\n }\r\n }\r\n\r\n removeItem(item: CardElement): boolean {\r\n if (item instanceof Column) {\r\n const itemIndex = this._columns.indexOf(item);\r\n\r\n if (itemIndex >= 0) {\r\n this._columns.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\r\n return false;\r\n }\r\n\r\n indexOf(cardElement: CardElement): number {\r\n return cardElement instanceof Column ? this._columns.indexOf(cardElement) : -1;\r\n }\r\n\r\n isLeftMostElement(element: CardElement): boolean {\r\n return this._columns.indexOf(element) === 0;\r\n }\r\n\r\n isRightMostElement(element: CardElement): boolean {\r\n return this._columns.indexOf(element) === this._columns.length - 1;\r\n }\r\n\r\n isTopElement(element: CardElement): boolean {\r\n return this._columns.indexOf(element) >= 0;\r\n }\r\n\r\n isBottomElement(element: CardElement): boolean {\r\n return this._columns.indexOf(element) >= 0;\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n let result: Action | undefined = undefined;\r\n\r\n for (const column of this._columns) {\r\n result = column.getActionById(id);\r\n\r\n if (result) {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get bleed(): boolean {\r\n return this.getBleed();\r\n }\r\n\r\n set bleed(value: boolean) {\r\n this.setBleed(value);\r\n }\r\n\r\n get padding(): PaddingDefinition | undefined {\r\n return this.getPadding();\r\n }\r\n\r\n set padding(value: PaddingDefinition | undefined) {\r\n this.setPadding(value);\r\n }\r\n\r\n get selectAction(): Action | undefined {\r\n return this._selectAction;\r\n }\r\n\r\n set selectAction(value: Action | undefined) {\r\n this._selectAction = value;\r\n }\r\n}\r\n\r\nfunction raiseImageLoadedEvent(image: Image) {\r\n const card = image.getRootElement() as AdaptiveCard;\r\n const onImageLoadedHandler =\r\n card && card.onImageLoaded ? card.onImageLoaded : AdaptiveCard.onImageLoaded;\r\n\r\n if (onImageLoadedHandler) {\r\n onImageLoadedHandler(image);\r\n }\r\n}\r\n\r\nfunction raiseAnchorClickedEvent(\r\n element: CardElement,\r\n anchor: HTMLAnchorElement,\r\n ev?: MouseEvent\r\n): boolean {\r\n const card = element.getRootElement() as AdaptiveCard;\r\n const onAnchorClickedHandler =\r\n card && card.onAnchorClicked ? card.onAnchorClicked : AdaptiveCard.onAnchorClicked;\r\n\r\n return onAnchorClickedHandler !== undefined\r\n ? onAnchorClickedHandler(element, anchor, ev)\r\n : false;\r\n}\r\n\r\nfunction raiseExecuteActionEvent(action: Action) {\r\n const card = action.parent ? (action.parent.getRootElement() as AdaptiveCard) : undefined;\r\n const onExecuteActionHandler =\r\n card && card.onExecuteAction ? card.onExecuteAction : AdaptiveCard.onExecuteAction;\r\n\r\n if (action.prepareForExecution() && onExecuteActionHandler) {\r\n onExecuteActionHandler(action);\r\n }\r\n}\r\n\r\nfunction raiseInlineCardExpandedEvent(action: ShowCardAction, isExpanded: boolean) {\r\n const card = action.parent ? (action.parent.getRootElement() as AdaptiveCard) : undefined;\r\n const onInlineCardExpandedHandler =\r\n card && card.onInlineCardExpanded\r\n ? card.onInlineCardExpanded\r\n : AdaptiveCard.onInlineCardExpanded;\r\n\r\n if (onInlineCardExpandedHandler) {\r\n onInlineCardExpandedHandler(action, isExpanded);\r\n }\r\n}\r\n\r\nfunction raiseInputValueChangedEvent(input: Input) {\r\n const card = input.getRootElement() as AdaptiveCard;\r\n const onInputValueChangedHandler =\r\n card && card.onInputValueChanged\r\n ? card.onInputValueChanged\r\n : AdaptiveCard.onInputValueChanged;\r\n\r\n if (onInputValueChangedHandler) {\r\n onInputValueChangedHandler(input);\r\n }\r\n}\r\n\r\nfunction raiseElementVisibilityChangedEvent(\r\n element: CardElement,\r\n shouldUpdateLayout: boolean = true\r\n) {\r\n const rootElement = element.getRootElement();\r\n\r\n if (shouldUpdateLayout) {\r\n rootElement.updateLayout();\r\n }\r\n\r\n const card = rootElement as AdaptiveCard;\r\n const onElementVisibilityChangedHandler =\r\n card && card.onElementVisibilityChanged\r\n ? card.onElementVisibilityChanged\r\n : AdaptiveCard.onElementVisibilityChanged;\r\n\r\n if (onElementVisibilityChangedHandler !== undefined) {\r\n onElementVisibilityChangedHandler(element);\r\n }\r\n}\r\n\r\nfunction updateInputAdornersVisibility(input: HTMLInputElement, hide: boolean) {\r\n if (!!hide) {\r\n // hides the time/date picker icon\r\n input.readOnly = true;\r\n // hides the cross button icon\r\n input.required = true;\r\n } else {\r\n // shows the time/date picker icon\r\n input.readOnly = false;\r\n // shows the cross button icon\r\n input.required = false;\r\n }\r\n \r\n}\r\n\r\n/**\r\n * @returns return false to continue with default context menu; return true to skip SDK default context menu\r\n */\r\nfunction raiseDisplayOverflowActionMenuEvent(\r\n action: OverflowAction,\r\n target?: HTMLElement\r\n): boolean {\r\n const card = action.parent ? (action.parent.getRootElement() as AdaptiveCard) : undefined;\r\n const onDisplayOverflowActionMenuHandler =\r\n card && card.onDisplayOverflowActionMenu\r\n ? card.onDisplayOverflowActionMenu\r\n : AdaptiveCard.onDisplayOverflowActionMenu;\r\n\r\n return onDisplayOverflowActionMenuHandler !== undefined\r\n ? onDisplayOverflowActionMenuHandler(action.getActions(), target)\r\n : false;\r\n}\r\n\r\n/**\r\n * @returns return false to continue with default action button; return true to skip SDK default action button\r\n */\r\nfunction raiseRenderOverflowActionsEvent(\r\n action: OverflowAction,\r\n isAtRootLevelActions: boolean\r\n): boolean {\r\n const card = action.parent ? (action.parent.getRootElement() as AdaptiveCard) : undefined;\r\n const onRenderOverflowActionsHandler =\r\n card && card.onRenderOverflowActions\r\n ? card.onRenderOverflowActions\r\n : AdaptiveCard.onRenderOverflowActions;\r\n\r\n return onRenderOverflowActionsHandler !== undefined\r\n ? onRenderOverflowActionsHandler(action.getActions(), isAtRootLevelActions)\r\n : false;\r\n}\r\n\r\nexport abstract class ContainerWithActions extends Container {\r\n private _actionCollection: ActionCollection;\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this.parseActions(source, context);\r\n }\r\n\r\n protected parseActions(source: any, context: SerializationContext) {\r\n this._actionCollection.parse(source[\"actions\"], context);\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n this._actionCollection.toJSON(target, \"actions\", context);\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const element = super.internalRender();\r\n\r\n if (element) {\r\n const renderedActions = this._actionCollection.render(\r\n this.hostConfig.actions.actionsOrientation\r\n );\r\n\r\n if (renderedActions) {\r\n Utils.appendChild(\r\n element,\r\n renderSeparation(\r\n this.hostConfig,\r\n {\r\n spacing: this.hostConfig.getEffectiveSpacing(\r\n this.hostConfig.actions.spacing\r\n )\r\n },\r\n Enums.Orientation.Horizontal\r\n )\r\n );\r\n Utils.appendChild(element, renderedActions);\r\n }\r\n\r\n if (this.renderIfEmpty) {\r\n return element;\r\n } else {\r\n return element.children.length > 0 ? element : undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected getHasExpandedAction(): boolean {\r\n if (this.renderedActionCount === 0) {\r\n return false;\r\n } else if (this.renderedActionCount === 1) {\r\n return (\r\n this._actionCollection.expandedAction !== undefined &&\r\n !this.hostConfig.actions.preExpandSingleShowCardAction\r\n );\r\n } else {\r\n return this._actionCollection.expandedAction !== undefined;\r\n }\r\n }\r\n\r\n protected get renderedActionCount(): number {\r\n return this._actionCollection.renderedActionCount;\r\n }\r\n\r\n protected get renderIfEmpty(): boolean {\r\n return false;\r\n }\r\n\r\n constructor() {\r\n super();\r\n\r\n this._actionCollection = new ActionCollection(this);\r\n }\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n this._actionCollection.releaseDOMResources();\r\n }\r\n\r\n getActionCount(): number {\r\n return this._actionCollection.getActionCount();\r\n }\r\n\r\n getActionAt(index: number): Action | undefined {\r\n if (index >= 0 && index < this.getActionCount()) {\r\n return this._actionCollection.getActionAt(index);\r\n } else {\r\n return super.getActionAt(index);\r\n }\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n const result: Action | undefined = this._actionCollection.getActionById(id);\r\n\r\n return result ? result : super.getActionById(id);\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (this._actionCollection) {\r\n this._actionCollection.validateProperties(context);\r\n }\r\n }\r\n\r\n isLastElement(element: CardElement): boolean {\r\n return super.isLastElement(element) && this._actionCollection.getActionCount() === 0;\r\n }\r\n\r\n addAction(action: Action) {\r\n this._actionCollection.addAction(action);\r\n }\r\n\r\n clear() {\r\n super.clear();\r\n\r\n this._actionCollection.clear();\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n let result = super.getAllInputs(processActions);\r\n\r\n if (processActions) {\r\n result.push(...this._actionCollection.getAllInputs(processActions));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n let result = super.getResourceInformation();\r\n\r\n result.push(...this._actionCollection.getResourceInformation());\r\n\r\n return result;\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n if (this._actionCollection.renderedActionCount === 0) {\r\n return super.isBleedingAtBottom();\r\n } else {\r\n if (this._actionCollection.getActionCount() === 1) {\r\n return (\r\n this._actionCollection.expandedAction !== undefined &&\r\n !this.hostConfig.actions.preExpandSingleShowCardAction\r\n );\r\n } else {\r\n return this._actionCollection.expandedAction !== undefined;\r\n }\r\n }\r\n }\r\n\r\n getForbiddenActionNames(): string[] {\r\n return [];\r\n }\r\n \r\n getElementById(id: string): CardElement | undefined {\r\n let result = super.getElementById(id);\r\n\r\n if (!result) {\r\n result = this.getElementByIdFromAction(id);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nexport interface IMarkdownProcessingResult {\r\n didProcess: boolean;\r\n outputHtml?: any;\r\n}\r\n\r\nexport class RefreshActionProperty extends PropertyDefinition {\r\n parse(\r\n sender: RefreshDefinition,\r\n source: PropertyBag,\r\n context: SerializationContext\r\n ): ExecuteAction | undefined {\r\n const action = context.parseAction(sender.parent, source[this.name], [], false);\r\n\r\n if (action !== undefined) {\r\n if (action instanceof ExecuteAction) {\r\n return action;\r\n }\r\n\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.ActionTypeNotAllowed,\r\n Strings.errors.actionTypeNotAllowed(action.getJsonTypeName())\r\n );\r\n }\r\n\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"action\")\r\n );\r\n\r\n return undefined;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: ExecuteAction | undefined,\r\n context: SerializationContext\r\n ) {\r\n context.serializeValue(\r\n target,\r\n this.name,\r\n value ? value.toJSON(context) : undefined,\r\n undefined,\r\n true\r\n );\r\n }\r\n\r\n constructor(readonly targetVersion: Version, readonly name: string) {\r\n super(targetVersion, name, undefined);\r\n }\r\n}\r\n\r\nexport class RefreshDefinition extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly actionProperty = new RefreshActionProperty(Versions.v1_4, \"action\");\r\n static readonly userIdsProperty = new StringArrayProperty(Versions.v1_4, \"userIds\");\r\n\r\n @property(RefreshDefinition.actionProperty)\r\n get action(): ExecuteAction {\r\n return this.getValue(RefreshDefinition.actionProperty);\r\n }\r\n\r\n set action(value: ExecuteAction) {\r\n this.setValue(RefreshDefinition.actionProperty, value);\r\n\r\n if (value) {\r\n value.setParent(this.parent);\r\n }\r\n }\r\n\r\n @property(RefreshDefinition.userIdsProperty)\r\n userIds?: string[];\r\n\r\n protected getSchemaKey(): string {\r\n return \"RefreshDefinition\";\r\n }\r\n\r\n //#endregion\r\n\r\n parent: CardElement;\r\n}\r\n\r\nexport class AuthCardButton extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly typeProperty = new StringProperty(Versions.v1_4, \"type\");\r\n static readonly titleProperty = new StringProperty(Versions.v1_4, \"title\");\r\n static readonly imageProperty = new StringProperty(Versions.v1_4, \"image\");\r\n static readonly valueProperty = new StringProperty(Versions.v1_4, \"value\");\r\n\r\n protected getSchemaKey(): string {\r\n return \"AuthCardButton\";\r\n }\r\n\r\n //#endregion\r\n\r\n @property(AuthCardButton.typeProperty)\r\n type: string;\r\n\r\n @property(AuthCardButton.titleProperty)\r\n title?: string;\r\n\r\n @property(AuthCardButton.imageProperty)\r\n image?: string;\r\n\r\n @property(AuthCardButton.valueProperty)\r\n value: string;\r\n}\r\n\r\nexport class TokenExchangeResource extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly idProperty = new StringProperty(Versions.v1_4, \"id\");\r\n static readonly uriProperty = new StringProperty(Versions.v1_4, \"uri\");\r\n static readonly providerIdProperty = new StringProperty(Versions.v1_4, \"providerId\");\r\n\r\n protected getSchemaKey(): string {\r\n return \"TokenExchangeResource\";\r\n }\r\n\r\n //#endregion\r\n\r\n @property(TokenExchangeResource.idProperty)\r\n id?: string;\r\n\r\n @property(TokenExchangeResource.uriProperty)\r\n uri?: string;\r\n\r\n @property(TokenExchangeResource.providerIdProperty)\r\n providerId?: string;\r\n}\r\n\r\nexport class Authentication extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly textProperty = new StringProperty(Versions.v1_4, \"text\");\r\n static readonly connectionNameProperty = new StringProperty(Versions.v1_4, \"connectionName\");\r\n static readonly buttonsProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_4,\r\n \"buttons\",\r\n AuthCardButton\r\n );\r\n static readonly tokenExchangeResourceProperty = new SerializableObjectProperty(\r\n Versions.v1_4,\r\n \"tokenExchangeResource\",\r\n TokenExchangeResource,\r\n true\r\n );\r\n\r\n protected getSchemaKey(): string {\r\n return \"Authentication\";\r\n }\r\n\r\n //#endregion\r\n\r\n @property(Authentication.textProperty)\r\n text?: string;\r\n\r\n @property(Authentication.connectionNameProperty)\r\n connectionName?: string;\r\n\r\n @property(Authentication.buttonsProperty)\r\n buttons: AuthCardButton[];\r\n\r\n @property(Authentication.tokenExchangeResourceProperty)\r\n tokenExchangeResource?: TokenExchangeResource;\r\n}\r\n\r\n// @dynamic\r\nexport class AdaptiveCard extends ContainerWithActions {\r\n static readonly schemaUrl = \"http://adaptivecards.io/schemas/adaptive-card.json\";\r\n\r\n //#region Schema\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected static readonly $schemaProperty = new CustomProperty(\r\n Versions.v1_0,\r\n \"$schema\",\r\n (\r\n sender: SerializableObject,\r\n property: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n return AdaptiveCard.schemaUrl;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: Versions | undefined,\r\n context: BaseSerializationContext\r\n ) => {\r\n context.serializeValue(target, prop.name, AdaptiveCard.schemaUrl);\r\n }\r\n );\r\n\r\n static readonly versionProperty = new CustomProperty(\r\n Versions.v1_0,\r\n \"version\",\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n let version = Version.parse(source[prop.name], context);\r\n\r\n if (version === undefined) {\r\n version = Versions.latest;\r\n\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidCardVersion(version.toString())\r\n );\r\n }\r\n\r\n return version;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: Version | undefined,\r\n context: BaseSerializationContext\r\n ) => {\r\n if (value !== undefined) {\r\n context.serializeValue(target, prop.name, value.toString());\r\n }\r\n },\r\n Versions.v1_0\r\n );\r\n\r\n static readonly fallbackTextProperty = new StringProperty(Versions.v1_0, \"fallbackText\");\r\n static readonly speakProperty = new StringProperty(Versions.v1_0, \"speak\");\r\n static readonly refreshProperty = new SerializableObjectProperty(\r\n Versions.v1_4,\r\n \"refresh\",\r\n RefreshDefinition,\r\n true\r\n );\r\n static readonly authenticationProperty = new SerializableObjectProperty(\r\n Versions.v1_4,\r\n \"authentication\",\r\n Authentication,\r\n true\r\n );\r\n\r\n @property(AdaptiveCard.versionProperty)\r\n version: Version;\r\n\r\n @property(AdaptiveCard.fallbackTextProperty)\r\n fallbackText?: string;\r\n\r\n @property(AdaptiveCard.speakProperty)\r\n speak?: string;\r\n\r\n @property(AdaptiveCard.refreshProperty)\r\n get refresh(): RefreshDefinition | undefined {\r\n return this.getValue(AdaptiveCard.refreshProperty);\r\n }\r\n\r\n set refresh(value: RefreshDefinition | undefined) {\r\n this.setValue(AdaptiveCard.refreshProperty, value);\r\n\r\n if (value) {\r\n value.parent = this;\r\n }\r\n }\r\n\r\n @property(AdaptiveCard.authenticationProperty)\r\n authentication?: Authentication;\r\n\r\n //#endregion\r\n\r\n private static _haveWarnedAboutNoMarkdownProcessing = false;\r\n\r\n static onAnchorClicked?: (\r\n element: CardElement,\r\n anchor: HTMLAnchorElement,\r\n ev?: MouseEvent\r\n ) => boolean;\r\n static onExecuteAction?: (action: Action) => void;\r\n static onElementVisibilityChanged?: (element: CardElement) => void;\r\n static onImageLoaded?: (image: Image) => void;\r\n static onInlineCardExpanded?: (action: ShowCardAction, isExpanded: boolean) => void;\r\n static onInputValueChanged?: (input: Input) => void;\r\n static onCarouselEvent?: (carouselEvent: CarouselEvent) => void;\r\n static onProcessMarkdown?: (text: string, result: IMarkdownProcessingResult) => void;\r\n static onDisplayOverflowActionMenu?: (\r\n actions: readonly Action[],\r\n target?: HTMLElement\r\n ) => boolean;\r\n static onRenderOverflowActions?: (\r\n actions: readonly Action[],\r\n isRootLevelActions: boolean\r\n ) => boolean;\r\n\r\n static get processMarkdown(): (text: string) => string {\r\n throw new Error(Strings.errors.processMarkdownEventRemoved());\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n static set processMarkdown(_value: (text: string) => string) {\r\n throw new Error(Strings.errors.processMarkdownEventRemoved());\r\n }\r\n\r\n static applyMarkdown(text: string): IMarkdownProcessingResult {\r\n const result: IMarkdownProcessingResult = {\r\n didProcess: false\r\n };\r\n\r\n if (AdaptiveCard.onProcessMarkdown) {\r\n AdaptiveCard.onProcessMarkdown(text, result);\r\n } else if ((window).markdownit) {\r\n // Check for markdownit\r\n const markdownIt: any = (window).markdownit;\r\n result.outputHtml = markdownIt().render(text);\r\n result.didProcess = true;\r\n } else if (!AdaptiveCard._haveWarnedAboutNoMarkdownProcessing) {\r\n // eslint-disable-next-line no-console\r\n console.warn(Strings.errors.markdownProcessingNotEnabled);\r\n AdaptiveCard._haveWarnedAboutNoMarkdownProcessing = true;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _fallbackCard?: AdaptiveCard;\r\n\r\n private isVersionSupported(): boolean {\r\n if (this.bypassVersionCheck) {\r\n return true;\r\n } else {\r\n const unsupportedVersion: boolean =\r\n !this.version ||\r\n !this.version.isValid ||\r\n this.maxVersion.major < this.version.major ||\r\n (this.maxVersion.major === this.version.major &&\r\n this.maxVersion.minor < this.version.minor);\r\n\r\n return !unsupportedVersion;\r\n }\r\n }\r\n\r\n protected getDefaultSerializationContext(): BaseSerializationContext {\r\n return new SerializationContext(this.version);\r\n }\r\n\r\n protected getItemsCollectionPropertyName(): string {\r\n return \"body\";\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n this._fallbackCard = undefined;\r\n\r\n const fallbackElement = context.parseElement(\r\n undefined,\r\n source[\"fallback\"],\r\n this.forbiddenChildElements(),\r\n !this.isDesignMode()\r\n );\r\n\r\n if (fallbackElement) {\r\n this._fallbackCard = new AdaptiveCard();\r\n this._fallbackCard.addItem(fallbackElement);\r\n }\r\n\r\n super.internalParse(source, context);\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n this.setValue(AdaptiveCard.versionProperty, context.targetVersion);\r\n\r\n super.internalToJSON(target, context);\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const renderedElement = super.internalRender();\r\n\r\n if (GlobalSettings.useAdvancedCardBottomTruncation && renderedElement) {\r\n // Unlike containers, the root card element should be allowed to\r\n // be shorter than its content (otherwise the overflow truncation\r\n // logic would never get triggered)\r\n renderedElement.style.removeProperty(\"minHeight\");\r\n }\r\n\r\n return renderedElement;\r\n }\r\n\r\n protected getHasBackground(ignoreBackgroundImages: boolean = false): boolean {\r\n return true;\r\n }\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return new PaddingDefinition(\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding\r\n );\r\n }\r\n\r\n protected shouldSerialize(_context: SerializationContext): boolean {\r\n return true;\r\n }\r\n\r\n protected get renderIfEmpty(): boolean {\r\n return true;\r\n }\r\n\r\n protected get bypassVersionCheck(): boolean {\r\n return false;\r\n }\r\n\r\n protected get allowCustomStyle() {\r\n return this.hostConfig.adaptiveCard && this.hostConfig.adaptiveCard.allowCustomStyle;\r\n }\r\n\r\n protected get hasBackground(): boolean {\r\n return true;\r\n }\r\n\r\n onAnchorClicked?: (element: CardElement, anchor: HTMLAnchorElement, ev?: MouseEvent) => boolean;\r\n onExecuteAction?: (action: Action) => void;\r\n onElementVisibilityChanged?: (element: CardElement) => void;\r\n onImageLoaded?: (image: Image) => void;\r\n onInlineCardExpanded?: (action: ShowCardAction, isExpanded: boolean) => void;\r\n onInputValueChanged?: (input: Input) => void;\r\n onCarouselEvent?: (carouselEvent: CarouselEvent) => void;\r\n onDisplayOverflowActionMenu?: (actions: readonly Action[], target?: HTMLElement) => boolean;\r\n onRenderOverflowActions?: (actions: readonly Action[], isRootLevelActions: boolean) => boolean;\r\n\r\n designMode: boolean = false;\r\n\r\n getJsonTypeName(): string {\r\n return \"AdaptiveCard\";\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (this.getValue(CardElement.typeNameProperty) !== \"AdaptiveCard\") {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.MissingCardType,\r\n Strings.errors.invalidCardType()\r\n );\r\n }\r\n\r\n if (!this.bypassVersionCheck && !this.version) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"version\")\r\n );\r\n } else if (!this.isVersionSupported()) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.UnsupportedCardVersion,\r\n Strings.errors.unsupportedCardVersion(\r\n this.version.toString(),\r\n this.maxVersion.toString()\r\n )\r\n );\r\n }\r\n }\r\n\r\n render(target?: HTMLElement): HTMLElement | undefined {\r\n let renderedCard: HTMLElement | undefined;\r\n\r\n if (this.shouldFallback() && this._fallbackCard) {\r\n this._fallbackCard.hostConfig = this.hostConfig;\r\n\r\n renderedCard = this._fallbackCard.render();\r\n } else {\r\n renderedCard = super.render();\r\n\r\n if (renderedCard) {\r\n renderedCard.classList.add(this.hostConfig.makeCssClassName(\"ac-adaptiveCard\"));\r\n\r\n // Having a tabIndex on the root container for a card can mess up accessibility in some scenarios.\r\n // However, we've shipped this behavior before, and so can't just turn it off in a point release. For\r\n // now, to unblock accessibility scenarios for our customers, we've got an option to turn it off. In a\r\n // future release, we should strongly consider flipping the default such that we *don't* emit a tabIndex\r\n // by default.\r\n if (GlobalSettings.setTabIndexAtCardRoot) {\r\n renderedCard.tabIndex = 0;\r\n }\r\n\r\n if (this.speak) {\r\n renderedCard.setAttribute(\"aria-label\", this.speak);\r\n }\r\n\r\n renderedCard.onmouseenter = (ev: MouseEvent) => {\r\n this.updateInputsVisualState(true /* hover */);\r\n };\r\n\r\n renderedCard.onmouseleave = (ev: MouseEvent) => {\r\n this.updateInputsVisualState(false /* hover */);\r\n };\r\n\r\n this.getRootElement().updateActionsEnabledState();\r\n }\r\n }\r\n\r\n if (target) {\r\n Utils.appendChild(target, renderedCard);\r\n\r\n this.updateLayout();\r\n }\r\n\r\n const inputElements = this.getAllInputs();\r\n document.onclick = (event) => {\r\n inputElements.forEach((input) => {\r\n if (\r\n input instanceof ChoiceSetInput &&\r\n !input.renderedElement?.contains(event.target as Node)\r\n ) {\r\n input\r\n .getDropdownElement()\r\n ?.classList.remove(\r\n this.hostConfig.makeCssClassName(\r\n \"ac-choiceSetInput-filtered-dropdown-open\"\r\n )\r\n );\r\n }\r\n });\r\n };\r\n\r\n return renderedCard;\r\n }\r\n\r\n updateLayout(processChildren: boolean = true) {\r\n super.updateLayout(processChildren);\r\n\r\n if (GlobalSettings.useAdvancedCardBottomTruncation && this.isDisplayed()) {\r\n const padding = this.hostConfig.getEffectiveSpacing(Enums.Spacing.Default);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n this[\"handleOverflow\"](this.renderedElement!.offsetHeight - padding);\r\n }\r\n }\r\n\r\n shouldFallback(): boolean {\r\n return super.shouldFallback() || !this.isVersionSupported();\r\n }\r\n\r\n get hasVisibleSeparator(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nclass InlineAdaptiveCard extends AdaptiveCard {\r\n //#region Schema\r\n\r\n protected getSchemaKey(): string {\r\n return \"InlineAdaptiveCard\";\r\n }\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n schema.remove(AdaptiveCard.$schemaProperty, AdaptiveCard.versionProperty);\r\n }\r\n\r\n //#endregion\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return new PaddingDefinition(\r\n this.suppressStyle ? Enums.Spacing.None : Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n this.suppressStyle ? Enums.Spacing.None : Enums.Spacing.Padding,\r\n Enums.Spacing.Padding\r\n );\r\n }\r\n\r\n protected get bypassVersionCheck(): boolean {\r\n return true;\r\n }\r\n\r\n protected get defaultStyle(): string {\r\n if (this.suppressStyle) {\r\n return Enums.ContainerStyle.Default;\r\n } else {\r\n return this.hostConfig.actions.showCard.style\r\n ? this.hostConfig.actions.showCard.style\r\n : Enums.ContainerStyle.Emphasis;\r\n }\r\n }\r\n\r\n suppressStyle: boolean = false;\r\n\r\n render(target?: HTMLElement): HTMLElement | undefined {\r\n const renderedCard = super.render(target);\r\n\r\n if (renderedCard) {\r\n renderedCard.setAttribute(\"aria-live\", \"polite\");\r\n renderedCard.removeAttribute(\"tabindex\");\r\n }\r\n\r\n return renderedCard;\r\n }\r\n}\r\n\r\nexport class SerializationContext extends BaseSerializationContext {\r\n private _elementRegistry?: CardObjectRegistry;\r\n private _actionRegistry?: CardObjectRegistry;\r\n\r\n private _forbiddenTypes: Set = new Set();\r\n private internalParseCardObject(\r\n parent: CardElement | undefined,\r\n source: any,\r\n forbiddenTypes: Set,\r\n allowFallback: boolean,\r\n createInstanceCallback: (typeName: string | undefined) => T | undefined,\r\n logParseEvent: (typeName: string | undefined, errorType: Enums.TypeErrorType) => void\r\n ): T | undefined {\r\n let result: T | undefined = undefined;\r\n\r\n if (source && typeof source === \"object\") {\r\n const oldForbiddenTypes = new Set();\r\n this._forbiddenTypes.forEach((type) => {\r\n oldForbiddenTypes.add(type);\r\n });\r\n forbiddenTypes.forEach((type) => {\r\n this._forbiddenTypes.add(type);\r\n });\r\n\r\n const typeName = Utils.parseString(source[\"type\"]);\r\n\r\n if (typeName && this._forbiddenTypes.has(typeName)) {\r\n logParseEvent(typeName, Enums.TypeErrorType.ForbiddenType);\r\n } else {\r\n let tryToFallback = false;\r\n\r\n result = createInstanceCallback(typeName);\r\n\r\n if (!result) {\r\n tryToFallback = GlobalSettings.enableFallback && allowFallback;\r\n\r\n logParseEvent(typeName, Enums.TypeErrorType.UnknownType);\r\n } else {\r\n result.setParent(parent);\r\n result.parse(source, this);\r\n\r\n tryToFallback =\r\n GlobalSettings.enableFallback && allowFallback && result.shouldFallback();\r\n }\r\n\r\n if (tryToFallback) {\r\n const fallback = source[\"fallback\"];\r\n\r\n if (!fallback && parent) {\r\n parent.setShouldFallback(true);\r\n }\r\n if (typeof fallback === \"string\" && fallback.toLowerCase() === \"drop\") {\r\n result = undefined;\r\n } else if (typeof fallback === \"object\") {\r\n result = this.internalParseCardObject(\r\n parent,\r\n fallback,\r\n forbiddenTypes,\r\n true,\r\n createInstanceCallback,\r\n logParseEvent\r\n );\r\n }\r\n }\r\n }\r\n\r\n this._forbiddenTypes = oldForbiddenTypes;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n protected cardObjectParsed(o: SerializableObject, source: any) {\r\n if (o instanceof Action && this.onParseAction) {\r\n this.onParseAction(o, source, this);\r\n } else if (o instanceof CardElement && this.onParseElement) {\r\n this.onParseElement(o, source, this);\r\n }\r\n }\r\n\r\n onParseAction?: (action: Action, source: any, context: SerializationContext) => void;\r\n onParseElement?: (element: CardElement, source: any, context: SerializationContext) => void;\r\n\r\n shouldSerialize(o: SerializableObject): boolean {\r\n if (o instanceof Action) {\r\n return this.actionRegistry.findByName(o.getJsonTypeName()) !== undefined;\r\n } else if (o instanceof CardElement) {\r\n return this.elementRegistry.findByName(o.getJsonTypeName()) !== undefined;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n parseCardObject(\r\n parent: CardElement | undefined,\r\n source: any,\r\n forbiddenTypeNames: string[],\r\n allowFallback: boolean,\r\n createInstanceCallback: (typeName: string) => T | undefined,\r\n logParseEvent: (typeName: string, errorType: Enums.TypeErrorType) => void\r\n ): T | undefined {\r\n const forbiddenTypes = new Set(forbiddenTypeNames);\r\n const result = this.internalParseCardObject(\r\n parent,\r\n source,\r\n forbiddenTypes,\r\n allowFallback,\r\n createInstanceCallback,\r\n logParseEvent\r\n );\r\n\r\n if (result !== undefined) {\r\n this.cardObjectParsed(result, source);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n parseElement(\r\n parent: CardElement | undefined,\r\n source: any,\r\n forbiddenTypes: string[],\r\n allowFallback: boolean\r\n ): CardElement | undefined {\r\n return this.parseCardObject(\r\n parent,\r\n source,\r\n forbiddenTypes,\r\n allowFallback,\r\n (typeName: string) => {\r\n return this.elementRegistry.createInstance(typeName, this.targetVersion);\r\n },\r\n (typeName: string, errorType: Enums.TypeErrorType) => {\r\n if (errorType === Enums.TypeErrorType.UnknownType) {\r\n this.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.UnknownElementType,\r\n Strings.errors.unknownElementType(typeName)\r\n );\r\n } else {\r\n this.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.ElementTypeNotAllowed,\r\n Strings.errors.elementTypeNotAllowed(typeName)\r\n );\r\n }\r\n }\r\n );\r\n }\r\n\r\n parseAction(\r\n parent: CardElement,\r\n source: any,\r\n forbiddenActionTypes: string[],\r\n allowFallback: boolean\r\n ): Action | undefined {\r\n return this.parseCardObject(\r\n parent,\r\n source,\r\n forbiddenActionTypes,\r\n allowFallback,\r\n (typeName: string) => {\r\n return this.actionRegistry.createInstance(typeName, this.targetVersion);\r\n },\r\n (typeName: string, errorType: Enums.TypeErrorType) => {\r\n if (errorType === Enums.TypeErrorType.UnknownType) {\r\n this.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.UnknownActionType,\r\n Strings.errors.unknownActionType(typeName)\r\n );\r\n } else {\r\n this.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.ActionTypeNotAllowed,\r\n Strings.errors.actionTypeNotAllowed(typeName)\r\n );\r\n }\r\n }\r\n );\r\n }\r\n\r\n get elementRegistry(): CardObjectRegistry {\r\n return this._elementRegistry ?? GlobalRegistry.elements;\r\n }\r\n\r\n // Not using a property setter here because the setter should accept \"undefined\"\r\n // whereas the getter should never return undefined.\r\n setElementRegistry(value: CardObjectRegistry | undefined) {\r\n this._elementRegistry = value;\r\n }\r\n\r\n get actionRegistry(): CardObjectRegistry {\r\n return this._actionRegistry ?? GlobalRegistry.actions;\r\n }\r\n\r\n // Not using a property setter here because the setter should accept \"undefined\"\r\n // whereas the getter should never return undefined.\r\n setActionRegistry(value: CardObjectRegistry | undefined) {\r\n this._actionRegistry = value;\r\n }\r\n}\r\n\r\nGlobalRegistry.defaultElements.register(\"Container\", Container);\r\nGlobalRegistry.defaultElements.register(\"TextBlock\", TextBlock);\r\nGlobalRegistry.defaultElements.register(\"RichTextBlock\", RichTextBlock, Versions.v1_2);\r\nGlobalRegistry.defaultElements.register(\"TextRun\", TextRun, Versions.v1_2);\r\nGlobalRegistry.defaultElements.register(\"Image\", Image);\r\nGlobalRegistry.defaultElements.register(\"ImageSet\", ImageSet);\r\nGlobalRegistry.defaultElements.register(\"Media\", Media, Versions.v1_1);\r\nGlobalRegistry.defaultElements.register(\"FactSet\", FactSet);\r\nGlobalRegistry.defaultElements.register(\"ColumnSet\", ColumnSet);\r\nGlobalRegistry.defaultElements.register(\"ActionSet\", ActionSet, Versions.v1_2);\r\nGlobalRegistry.defaultElements.register(\"Input.Text\", TextInput);\r\nGlobalRegistry.defaultElements.register(\"Input.Date\", DateInput);\r\nGlobalRegistry.defaultElements.register(\"Input.Time\", TimeInput);\r\nGlobalRegistry.defaultElements.register(\"Input.Number\", NumberInput);\r\nGlobalRegistry.defaultElements.register(\"Input.ChoiceSet\", ChoiceSetInput);\r\nGlobalRegistry.defaultElements.register(\"Input.Toggle\", ToggleInput);\r\n\r\nGlobalRegistry.defaultActions.register(OpenUrlAction.JsonTypeName, OpenUrlAction);\r\nGlobalRegistry.defaultActions.register(SubmitAction.JsonTypeName, SubmitAction);\r\nGlobalRegistry.defaultActions.register(ShowCardAction.JsonTypeName, ShowCardAction);\r\nGlobalRegistry.defaultActions.register(\r\n ToggleVisibilityAction.JsonTypeName,\r\n ToggleVisibilityAction,\r\n Versions.v1_2\r\n);\r\nGlobalRegistry.defaultActions.register(ExecuteAction.JsonTypeName, ExecuteAction, Versions.v1_4);\r\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, getSlideTransformEl as g, elementIndex as h, classesToTokens as i, getTranslate as j, elementTransitionEnd as k, isObject as l, makeElementsArray as m, nextTick as n, elementStyle as o, elementNextAll as p, elementPrevAll as q, animateCSSModeScroll as r, setCSSProperty as s, showWarning as t, extend as u, deleteProps as v };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, o as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, p as elementNextAll, q as elementPrevAll, j as getTranslate, r as animateCSSModeScroll, n as nextTick, t as showWarning, c as createElement, d as now, u as extend, h as elementIndex, v as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n if (isFullyVisible) {\n slides[i].classList.add(params.slideFullyVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n if (gridEnabled) {\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n } else {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n }\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial || swiper.destroyed) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides\n } = swiper.params;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (centeredSlides) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (needLoopFix) {\n const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides\n } = params;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { a as elementParents, b as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const el = swiper.el;\n const swiperWidth = el.clientWidth;\n const swiperHeight = el.clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = elementOffset(el);\n if (rtl) swiperOffset.left -= el.scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n document.addEventListener('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n document.removeEventListener('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}\n\nexport { Keyboard as default };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (swiper.enabled) {\n update();\n return;\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}\n\nexport { Navigation as default };\n","function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, f as elementOuterSize, h as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { m as makeElementsArray, i as classesToTokens, c as createElement, n as nextTick, b as elementOffset } from '../shared/utils.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { c as classesToSelector } from '../shared/classes-to-selector.mjs';\n\nfunction Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n if (swiper.isHorizontal()) {\n dragEl.style.width = `${dragSize}px`;\n } else {\n dragEl.style.height = `${dragSize}px`;\n }\n if (divider >= 1) {\n el.style.display = 'none';\n } else {\n el.style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n el.style.opacity = 0;\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) {\n el.style.opacity = 1;\n }\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n function events(method) {\n const {\n scrollbar,\n params\n } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const {\n scrollbar,\n el: swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n if (!el.length) return;\n } else if (!el) {\n el = params.el;\n }\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n el = swiperEl.querySelector(params.el);\n }\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector(classesToSelector(swiper.params.scrollbar.dragClass));\n if (!dragEl) {\n dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el,\n dragEl\n });\n if (params.draggable) {\n enableDraggable();\n }\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) {\n el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));\n }\n disableDraggable();\n }\n on('changeDirection', () => {\n if (!swiper.scrollbar || !swiper.scrollbar.el) return;\n const params = swiper.params.scrollbar;\n let {\n el\n } = swiper.scrollbar;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock changeDirection', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n el\n } = swiper.scrollbar;\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n }\n });\n on('destroy', () => {\n destroy();\n });\n const enable = () => {\n swiper.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n }\n init();\n updateSize();\n setTranslate();\n };\n const disable = () => {\n swiper.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}\n\nexport { Scrollbar as default };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElement, h as elementIndex, m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction A11y(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.innerHTML = '';\n notification.innerHTML = message;\n }\n function getRandomNumber(size) {\n if (size === void 0) {\n size = 16;\n }\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '0');\n });\n }\n function makeElNotFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '-1');\n });\n }\n function addElRole(el, role) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('role', role);\n });\n }\n function addElRoleDescription(el, description) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-roledescription', description);\n });\n }\n function addElControls(el, controls) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-controls', controls);\n });\n }\n function addElLabel(el, label) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-label', label);\n });\n }\n function addElId(el, id) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('id', id);\n });\n }\n function addElLive(el, live) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-live', live);\n });\n }\n function disableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', true);\n });\n }\n function enableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', false);\n });\n }\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const targetEl = e.target;\n if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n }\n if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {\n targetEl.click();\n }\n }\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (prevEl) {\n if (swiper.isBeginning) {\n disableEl(prevEl);\n makeElNotFocusable(prevEl);\n } else {\n enableEl(prevEl);\n makeElFocusable(prevEl);\n }\n }\n if (nextEl) {\n if (swiper.isEnd) {\n disableEl(nextEl);\n makeElNotFocusable(nextEl);\n } else {\n enableEl(nextEl);\n makeElFocusable(nextEl);\n }\n }\n }\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.forEach(bulletEl => {\n if (swiper.params.pagination.clickable) {\n makeElFocusable(bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n addElRole(bulletEl, 'button');\n addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, elementIndex(bulletEl) + 1));\n }\n }\n if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {\n bulletEl.setAttribute('aria-current', 'true');\n } else {\n bulletEl.removeAttribute('aria-current');\n }\n });\n }\n const initNavEl = (el, wrapperId, message) => {\n makeElFocusable(el);\n if (el.tagName !== 'BUTTON') {\n addElRole(el, 'button');\n el.addEventListener('keydown', onEnterOrSpaceKey);\n }\n addElLabel(el, message);\n addElControls(el, wrapperId);\n };\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n const initSlides = () => {\n const params = swiper.params.a11y;\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n }\n if (params.slideRole) {\n addElRole(swiper.slides, params.slideRole);\n }\n const slidesLength = swiper.slides.length;\n if (params.slideLabelMessage) {\n swiper.slides.forEach((slideEl, index) => {\n const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel(slideEl, ariaLabelMessage);\n });\n }\n };\n const init = () => {\n const params = swiper.params.a11y;\n swiper.el.append(liveRegion);\n\n // Container\n const containerEl = swiper.el;\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n addElLabel(containerEl, params.containerMessage);\n }\n\n // Wrapper\n const wrapperEl = swiper.wrapperEl;\n const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId(wrapperEl, wrapperId);\n addElLive(wrapperEl, live);\n\n // Slide\n initSlides();\n\n // Navigation\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));\n }\n if (prevEl) {\n prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = makeElementsArray(swiper.pagination.el);\n paginationEl.forEach(el => {\n el.addEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.addEventListener('focus', handleFocus, true);\n swiper.el.addEventListener('pointerdown', handlePointerDown, true);\n swiper.el.addEventListener('pointerup', handlePointerUp, true);\n };\n function destroy() {\n if (liveRegion) liveRegion.remove();\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n if (prevEl) {\n prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = makeElementsArray(swiper.pagination.el);\n paginationEl.forEach(el => {\n el.removeEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.removeEventListener('focus', handleFocus, true);\n swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n }\n on('beforeInit', () => {\n liveRegion = createElement('span', swiper.params.a11y.notificationClass);\n liveRegion.setAttribute('aria-live', 'assertive');\n liveRegion.setAttribute('aria-atomic', 'true');\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}\n\nexport { A11y as default };\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\n\nfunction History(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n keepQuery: false\n }\n });\n let initialized = false;\n let paths = {};\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${index}\"]`) : swiper.slides[index];\n let value = slugify(slide.getAttribute('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key ? `${key}/` : ''}${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key ? `${key}/` : ''}${value}`;\n }\n if (swiper.params.history.keepQuery) {\n value += location.search;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides[i];\n const slideHistory = slugify(slide.getAttribute('data-history'));\n if (slideHistory === value) {\n const index = swiper.getSlideIndex(slide);\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) {\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n return;\n }\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n const destroy = () => {\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}\n\nexport { History as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit,\n params\n } = _ref;\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: false,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime();\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n let pausedByPointerEnter;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n if (pausedByPointerEnter) {\n return;\n }\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n autoplayStartTime = new Date().getTime();\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pausedByPointerEnter = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByPointerEnter = false;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('_freeModeStaticRelease', () => {\n if (pausedByTouch || pausedByInteraction) {\n resume();\n }\n });\n on('_freeModeNoMomentumRelease', () => {\n if (!swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}\n\nexport { Autoplay as default };\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport {\r\n AdaptiveCard,\r\n ActionType,\r\n CardElement,\r\n Container,\r\n SerializationContext,\r\n ShowCardAction,\r\n ToggleVisibilityAction\r\n} from \"./card-elements\";\r\nimport * as Enums from \"./enums\";\r\nimport {\r\n BoolProperty,\r\n NumProperty,\r\n EnumProperty,\r\n property,\r\n PropertyBag,\r\n SerializableObjectSchema,\r\n Versions,\r\n PixelSizeProperty\r\n} from \"./serialization\";\r\nimport { GlobalRegistry } from \"./registry\";\r\nimport { TypeErrorType, ValidationEvent } from \"./enums\";\r\nimport { Strings } from \"./strings\";\r\nimport Swiper from \"swiper\";\r\nimport { SwiperOptions } from \"swiper/types\";\r\nimport {\r\n A11y,\r\n Autoplay,\r\n History,\r\n Keyboard,\r\n Navigation,\r\n Pagination,\r\n Scrollbar,\r\n} from \"swiper/modules\";\r\nimport * as Utils from \"./utils\";\r\nimport { GlobalSettings } from \"./shared\";\r\n\r\n// Note: to function correctly, consumers need to have CSS from swiper/css, swiper/css/pagination, and\r\n// swiper/css/navigation\r\n\r\nexport class CarouselPage extends Container {\r\n //#region Schema\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n // `style`, `bleed`, `isVisible` are not supported in CarouselPage\r\n schema.remove(Container.styleProperty);\r\n schema.remove(Container.bleedProperty);\r\n schema.remove(Container.isVisibleProperty);\r\n }\r\n //#endregion\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const carouselSlide: HTMLElement = document.createElement(\"div\");\r\n carouselSlide.className = this.hostConfig.makeCssClassName(\"swiper-slide\");\r\n // `isRtl()` will set the correct value of rtl by reading the value from the parents\r\n this.rtl = this.isRtl();\r\n const renderedElement = super.internalRender();\r\n Utils.appendChild(carouselSlide, renderedElement);\r\n return carouselSlide;\r\n }\r\n\r\n getForbiddenActionTypes(): ActionType[] {\r\n return [ShowCardAction, ToggleVisibilityAction];\r\n }\r\n\r\n getForbiddenChildElements(): string[] {\r\n return this.forbiddenChildElements();\r\n }\r\n\r\n protected forbiddenChildElements(): string[] {\r\n return [\r\n ToggleVisibilityAction.JsonTypeName,\r\n ShowCardAction.JsonTypeName,\r\n \"Media\",\r\n \"ActionSet\",\r\n \"Input.Text\",\r\n \"Input.Date\",\r\n \"Input.Time\",\r\n \"Input.Number\",\r\n \"Input.ChoiceSet\",\r\n \"Input.Toggle\",\r\n \"Carousel\",\r\n ...super.forbiddenChildElements()\r\n ];\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this.setShouldFallback(false);\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 \"CarouselPage\";\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n\r\n get hasVisibleSeparator(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nexport class Carousel extends Container {\r\n //#region Schema\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n // `style`, `bleed`, `isVisible` are not supported in Carousel\r\n schema.remove(Container.styleProperty);\r\n schema.remove(Container.bleedProperty);\r\n schema.remove(Container.isVisibleProperty);\r\n }\r\n\r\n static readonly timerProperty = new NumProperty(Versions.v1_6, \"timer\", undefined);\r\n @property(Carousel.timerProperty)\r\n get timer(): number | undefined {\r\n let timer = this.getValue(Carousel.timerProperty);\r\n\r\n if (timer && timer < this.hostConfig.carousel.minAutoplayDelay) {\r\n console.warn(Strings.errors.tooLittleTimeDelay);\r\n timer = this.hostConfig.carousel.minAutoplayDelay;\r\n }\r\n\r\n return timer;\r\n }\r\n\r\n set timer(value: number | undefined) {\r\n if (value && value < this.hostConfig.carousel.minAutoplayDelay) {\r\n console.warn(Strings.errors.tooLittleTimeDelay);\r\n this.setValue(Carousel.timerProperty, this.hostConfig.carousel.minAutoplayDelay);\r\n } else {\r\n this.setValue(Carousel.timerProperty, value);\r\n }\r\n }\r\n\r\n static readonly initialPageProperty = new NumProperty(Versions.v1_6, \"initialPage\", 0);\r\n @property(Carousel.initialPageProperty)\r\n get initialPageIndex(): number {\r\n return this.getValue(Carousel.initialPageProperty); \r\n }\r\n\r\n set initialPageIndex(value: number) { \r\n if (this.isValidParsedPageIndex(value)) { \r\n this.setValue(Carousel.initialPageProperty, value);\r\n } else { \r\n console.warn(Strings.errors.invalidInitialPageIndex(value));\r\n this.setValue(Carousel.initialPageProperty, 0); \r\n }\r\n }\r\n\r\n static readonly loopProperty = new BoolProperty(Versions.v1_6, \"loop\", true);\r\n @property(Carousel.loopProperty)\r\n carouselLoop: boolean = true;\r\n \r\n static readonly orientationProperty = new EnumProperty(\r\n Versions.v1_6,\r\n \"orientation\",\r\n Enums.Orientation,\r\n Enums.Orientation.Horizontal\r\n );\r\n @property(Carousel.orientationProperty)\r\n carouselOrientation: Enums.Orientation = Enums.Orientation.Horizontal; \r\n\r\n static readonly carouselHeightProperty = new PixelSizeProperty(\r\n Versions.v1_6,\r\n \"heightInPixels\"\r\n );\r\n @property(Carousel.carouselHeightProperty)\r\n carouselHeight?: number;\r\n \r\n private isValidParsedPageIndex(index: number) : boolean {\r\n return this._pages ? this.isValidPageIndex(index, this._pages.length) : false;\r\n }\r\n\r\n private isValidRenderedPageIndex(index: number) : boolean {\r\n return this._renderedPages ? this.isValidPageIndex(index, this._renderedPages.length) : false;\r\n }\r\n\r\n private isValidPageIndex(index: number, collectionSize: number) {\r\n return (collectionSize > 0 && 0 <= index && index < collectionSize);\r\n }\r\n\r\n //#endregion\r\n\r\n get previousEventType(): Enums.CarouselInteractionEvent {\r\n return this._previousEventType;\r\n }\r\n\r\n set previousEventType(eventType: Enums.CarouselInteractionEvent) {\r\n this._previousEventType = eventType;\r\n }\r\n\r\n private _pages: CarouselPage[] = [];\r\n private _renderedPages: CarouselPage[];\r\n private _carouselPageContainer: HTMLElement;\r\n private _containerForAdorners: HTMLElement;\r\n private _currentIndex: number = 0;\r\n private _previousEventType: Enums.CarouselInteractionEvent = Enums.CarouselInteractionEvent.Pagination;\r\n private _observer: ResizeObserver | null;\r\n private _carousel: Swiper | null;\r\n\r\n // Question: Why do we place this on the Carousel instead of the CarouselPage?\r\n protected forbiddenChildElements(): string[] {\r\n return [\r\n ToggleVisibilityAction.JsonTypeName,\r\n ShowCardAction.JsonTypeName,\r\n \"Media\",\r\n \"ActionSet\",\r\n \"Input.Text\",\r\n \"Input.Date\",\r\n \"Input.Time\",\r\n \"Input.Number\",\r\n \"Input.ChoiceSet\",\r\n \"Input.Toggle\",\r\n ...super.forbiddenChildElements()\r\n ];\r\n }\r\n\r\n protected adjustRenderedElementSize(renderedElement: HTMLElement) {\r\n super.adjustRenderedElementSize(renderedElement);\r\n if (this.height == \"stretch\" && this._containerForAdorners !== undefined) { \r\n this._containerForAdorners.style.height = \"100%\";\r\n }\r\n\r\n // Assign the explicit height to carouselPageContainer if given\r\n if (this.carouselHeight) {\r\n this._carouselPageContainer.style.height = this.carouselHeight + \"px\";\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Carousel\";\r\n }\r\n\r\n getItemCount(): number {\r\n return this._pages.length;\r\n }\r\n\r\n getItemAt(index: number): CardElement {\r\n return this._pages[index];\r\n }\r\n\r\n addPage(page: CarouselPage) {\r\n this._pages.push(page);\r\n page.setParent(this);\r\n }\r\n\r\n removeItem(item: CardElement): boolean {\r\n if (item instanceof CarouselPage) {\r\n const itemIndex = this._pages.indexOf(item);\r\n\r\n if (itemIndex >= 0) {\r\n this._pages.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\r\n return false;\r\n }\r\n\r\n getFirstVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedPages?.length > 0) {\r\n return this._renderedPages[0];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n getLastVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedPages?.length > 0) {\r\n return this._renderedPages[this._renderedPages.length - 1];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n get currentPageId(): string | undefined {\r\n if (this._carousel?.slides?.length) {\r\n const activeSlide = this._carousel.slides[this._carousel.activeIndex] as HTMLElement;\r\n return activeSlide.id;\r\n }\r\n return undefined;\r\n }\r\n\r\n get currentPageIndex(): number | undefined {\r\n return this._carousel?.realIndex;\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this._pages = [];\r\n\r\n const jsonPages = source[\"pages\"];\r\n if (Array.isArray(jsonPages)) {\r\n for (const item of jsonPages) {\r\n const page = this.createCarouselPageInstance(item, context);\r\n if (page) {\r\n this._pages.push(page);\r\n }\r\n }\r\n }\r\n\r\n // everything is parsed do validate on initial page index\r\n this.validateParsing(context);\r\n }\r\n\r\n private validateParsing(context: SerializationContext) {\r\n if (!this.isValidParsedPageIndex(this.initialPageIndex)) {\r\n context.logParseEvent(\r\n this,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidInitialPageIndex(this.initialPageIndex)\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, \"pages\", this._pages);\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._renderedPages = [];\r\n\r\n if (this._pages.length <= 0) {\r\n return undefined;\r\n }\r\n\r\n this.validateOrientationProperties();\r\n\r\n const cardLevelContainer: HTMLElement = document.createElement(\"div\");\r\n cardLevelContainer.className = this.hostConfig.makeCssClassName(\"ac-carousel-card-level-container\");\r\n\r\n const carouselContainer: HTMLElement = document.createElement(\"div\");\r\n carouselContainer.className = this.hostConfig.makeCssClassName(\"swiper\", \"ac-carousel\");\r\n this._carouselPageContainer = carouselContainer;\r\n\r\n const containerForAdorners: HTMLElement = document.createElement(\"div\");\r\n containerForAdorners.className = this.hostConfig.makeCssClassName(\"ac-carousel-container\");\r\n this._containerForAdorners = containerForAdorners;\r\n\r\n cardLevelContainer.appendChild(containerForAdorners);\r\n\r\n const carouselWrapper: HTMLElement = document.createElement(\"div\");\r\n carouselWrapper.className = this.hostConfig.makeCssClassName(\r\n \"swiper-wrapper\",\r\n \"ac-carousel-card-container\"\r\n );\r\n carouselWrapper.style.display = \"flex\";\r\n\r\n switch (this.getEffectiveVerticalContentAlignment()) {\r\n case Enums.VerticalAlignment.Top:\r\n carouselWrapper.style.alignItems = \"flex-start\";\r\n break;\r\n case Enums.VerticalAlignment.Bottom:\r\n carouselWrapper.style.alignItems = \"flex-end\";\r\n break;\r\n default:\r\n carouselWrapper.style.alignItems = \"center\";\r\n break;\r\n }\r\n\r\n if (GlobalSettings.useAdvancedCardBottomTruncation) {\r\n // Forces the container to be at least as tall as its content.\r\n //\r\n // Fixes a quirk in Chrome where, for nested flex elements, the\r\n // inner element's height would never exceed the outer element's\r\n // height. This caused overflow truncation to break -- containers\r\n // would always be measured as not overflowing, since their heights\r\n // were constrained by their parents as opposed to truly reflecting\r\n // the height of their content.\r\n //\r\n // See the \"Browser Rendering Notes\" section of this answer:\r\n // https://stackoverflow.com/questions/36247140/why-doesnt-flex-item-shrink-past-content-size\r\n carouselWrapper.style.minHeight = \"-webkit-min-content\";\r\n }\r\n\r\n const navigationContainer: HTMLElement = document.createElement(\"div\");\r\n navigationContainer.className = this.hostConfig.makeCssClassName(\"ac-carousel-navigation\");\r\n\r\n const prevElementDiv: HTMLElement = document.createElement(\"div\");\r\n prevElementDiv.className = this.hostConfig.makeCssClassName(\r\n \"swiper-button-prev\"\r\n );\r\n\r\n const nextElementDiv: HTMLElement = document.createElement(\"div\");\r\n nextElementDiv.className = this.hostConfig.makeCssClassName(\r\n \"swiper-button-next\"\r\n );\r\n\r\n if (this.carouselOrientation === Enums.Orientation.Horizontal) {\r\n this.updateCssForHorizontalCarousel(prevElementDiv, nextElementDiv);\r\n } else {\r\n this.updateCssForVerticalCarousel(navigationContainer, prevElementDiv, nextElementDiv);\r\n }\r\n\r\n const pagination: HTMLElement = document.createElement(\"div\");\r\n pagination.className = this.hostConfig.makeCssClassName(\r\n \"swiper-pagination\",\r\n \"ac-carousel-pagination\"\r\n );\r\n\r\n navigationContainer.appendChild(prevElementDiv);\r\n Utils.addCancelSelectActionEventHandler(prevElementDiv);\r\n\r\n navigationContainer.appendChild(pagination);\r\n Utils.addCancelSelectActionEventHandler(pagination);\r\n\r\n navigationContainer.appendChild(nextElementDiv);\r\n Utils.addCancelSelectActionEventHandler(nextElementDiv);\r\n\r\n if (this.isDesignMode()) {\r\n // If we are in design mode, we need to ensure these elements are in front of the peers\r\n prevElementDiv.style.zIndex = \"20\";\r\n nextElementDiv.style.zIndex = \"20\";\r\n pagination.style.zIndex = \"20\";\r\n }\r\n\r\n const requestedNumberOfPages: number = Math.min(\r\n this._pages.length,\r\n this.hostConfig.carousel.maxCarouselPages\r\n );\r\n if (this._pages.length > this.hostConfig.carousel.maxCarouselPages) {\r\n console.warn(Strings.errors.tooManyCarouselPages);\r\n }\r\n\r\n if (this._pages.length > 0) {\r\n for (let i = 0; i < requestedNumberOfPages; i++) {\r\n const page = this._pages[i];\r\n const renderedItem = this.isElementAllowed(page) ? page.render() : undefined;\r\n renderedItem?.classList.add(\"ac-carousel-page\");\r\n renderedItem?.children[0]?.classList.add(\"ac-carousel-page-container\");\r\n\r\n if (renderedItem) {\r\n Utils.appendChild(carouselWrapper, renderedItem);\r\n this._renderedPages.push(page);\r\n }\r\n }\r\n }\r\n\r\n carouselContainer.appendChild(carouselWrapper);\r\n\r\n carouselContainer.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n containerForAdorners.appendChild(carouselContainer);\r\n containerForAdorners.appendChild(navigationContainer);\r\n\r\n // `isRtl()` will set the correct value of rtl by reading the value from the parents\r\n this.rtl = this.isRtl();\r\n this.applyRTL(pagination);\r\n\r\n if (!this.isDesignMode()) {\r\n if (this.isValidRenderedPageIndex(this.initialPageIndex)) {\r\n this._currentIndex = this.initialPageIndex;\r\n } else {\r\n console.warn(Strings.errors.invalidInitialPageIndex(this.initialPageIndex));\r\n this._currentIndex = 0\r\n }\r\n }\r\n\r\n this.initializeCarouselControl(\r\n carouselContainer,\r\n nextElementDiv,\r\n prevElementDiv,\r\n pagination,\r\n this.rtl\r\n );\r\n\r\n return this._renderedPages.length > 0 ? cardLevelContainer : undefined;\r\n }\r\n\r\n applyRTL(pagination: HTMLElement) {\r\n super.applyRTL(this._carouselPageContainer);\r\n if (this.rtl) {\r\n pagination.classList.add(this.hostConfig.makeCssClassName(\r\n \"ac-carousel-pagination-rtl\"\r\n ));\r\n }\r\n }\r\n\r\n validateOrientationProperties() {\r\n if (!this.carouselHeight) {\r\n this.carouselOrientation = Enums.Orientation.Horizontal;\r\n }\r\n }\r\n\r\n updateCssForHorizontalCarousel(\r\n prevElementDiv: HTMLElement,\r\n nextElementDiv: HTMLElement\r\n ) {\r\n prevElementDiv.classList.add(this.hostConfig.makeCssClassName(\r\n \"ac-carousel-left\"\r\n ));\r\n nextElementDiv.classList.add(this.hostConfig.makeCssClassName(\r\n \"ac-carousel-right\"\r\n ));\r\n }\r\n\r\n updateCssForVerticalCarousel(\r\n navigationContainer: HTMLElement,\r\n prevElementDiv: HTMLElement,\r\n nextElementDiv: HTMLElement\r\n ) {\r\n this._containerForAdorners.classList.add(this.hostConfig.makeCssClassName(\r\n \"ac-carousel-container-vertical\"\r\n ));\r\n navigationContainer.classList.add(this.hostConfig.makeCssClassName(\r\n \"ac-carousel-navigation-vertical\"\r\n ))\r\n\r\n prevElementDiv.classList.add(this.hostConfig.makeCssClassName(\r\n \"ac-carousel-up\"\r\n ));\r\n nextElementDiv.classList.add(this.hostConfig.makeCssClassName(\r\n \"ac-carousel-down\"\r\n ));\r\n }\r\n\r\n private initializeCarouselControl(\r\n carouselContainer: HTMLElement,\r\n nextElement: HTMLElement,\r\n prevElement: HTMLElement,\r\n paginationElement: HTMLElement,\r\n rtl: boolean | undefined\r\n ): void {\r\n\r\n const nextElementAdjustedForRtl = (rtl === undefined || !rtl ? nextElement : prevElement);\r\n const prevElementAdjustedForRtl = (rtl === undefined || !rtl ? prevElement : nextElement);\r\n\r\n const prevElementAdjustedForOrientation = (Enums.Orientation.Horizontal === this.carouselOrientation) ? prevElementAdjustedForRtl : prevElement;\r\n const nextElementAdjustedForOrientation = (Enums.Orientation.Horizontal === this.carouselOrientation) ? nextElementAdjustedForRtl : nextElement;\r\n\r\n const swiperOptions : SwiperOptions = {\r\n loop: !this.isDesignMode() && this.carouselLoop,\r\n modules: [Navigation, Pagination, Scrollbar, A11y, History, Keyboard],\r\n pagination: {\r\n el: paginationElement,\r\n clickable: true\r\n },\r\n navigation: {\r\n prevEl: prevElementAdjustedForOrientation,\r\n nextEl: nextElementAdjustedForOrientation\r\n },\r\n a11y: {\r\n enabled: true\r\n },\r\n keyboard: {\r\n enabled: false,\r\n onlyInViewport: true\r\n },\r\n direction: this.carouselOrientation === Enums.Orientation.Horizontal ? \"horizontal\" : \"vertical\",\r\n resizeObserver: false,\r\n initialSlide: this._currentIndex\r\n };\r\n\r\n if (this.timer && !this.isDesignMode()) {\r\n swiperOptions.modules?.push(Autoplay);\r\n swiperOptions.autoplay = { delay: this.timer, pauseOnMouseEnter: true };\r\n }\r\n\r\n const carousel: Swiper = new Swiper(carouselContainer, swiperOptions);\r\n\r\n // While the 'pauseOnMouseEnter' option should resume autoplay on\r\n // mouse exit it doesn't do it, so adding custom events to handle it\r\n\r\n carouselContainer.addEventListener(\"mouseenter\", function (_event) {\r\n carousel.autoplay?.stop();\r\n });\r\n\r\n carouselContainer.addEventListener(\"mouseleave\", function (_event) {\r\n carousel.autoplay?.start();\r\n });\r\n\r\n carousel.on('navigationNext', (swiper: Swiper) => {\r\n this.raiseCarouselEvent(Enums.CarouselInteractionEvent.NavigationNext);\r\n });\r\n\r\n carousel.on('navigationPrev', (swiper: Swiper) => {\r\n this.raiseCarouselEvent(Enums.CarouselInteractionEvent.NavigationPrevious);\r\n });\r\n\r\n carousel.on('slideChangeTransitionEnd', (swiper: Swiper) => {\r\n this.currentIndex = swiper.realIndex;\r\n this.raiseCarouselEvent(Enums.CarouselInteractionEvent.Pagination); \r\n });\r\n\r\n carousel.on('autoplay', () => {\r\n this.raiseCarouselEvent(Enums.CarouselInteractionEvent.Autoplay);\r\n });\r\n\r\n carousel.on('paginationRender', (swiper : Swiper) => {\r\n swiper.pagination.bullets.forEach((bullet, index) => {\r\n bullet.addEventListener(\"keypress\", function(event : KeyboardEvent) {\r\n if (event.key == \"Enter\") {\r\n event.preventDefault();\r\n swiper.slideTo(index + 1);\r\n }\r\n });\r\n });\r\n });\r\n\r\n carousel.on('destroy', () => {\r\n this.destroyResizeObserver();\r\n });\r\n\r\n prevElement.title = prevElement.ariaLabel ?? Strings.defaults.carouselNavigationPreviousTooltip();\r\n\r\n nextElement.title = nextElement.ariaLabel ?? Strings.defaults.carouselNavigationNextTooltip();\r\n\r\n this._carousel = carousel;\r\n\r\n this.createResizeObserver();\r\n }\r\n\r\n private createCarouselPageInstance(\r\n source: any,\r\n context: SerializationContext\r\n ): CarouselPage | undefined {\r\n return context.parseCardObject(\r\n this,\r\n source,\r\n this.forbiddenChildElements(),\r\n !this.isDesignMode(),\r\n (typeName: string) => {\r\n return !typeName || typeName === \"CarouselPage\" ? new CarouselPage() : undefined;\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 slideTo(index: number) {\r\n this._carousel?.slideTo(index);\r\n }\r\n\r\n get carouselPageContainer() {\r\n return this._carouselPageContainer;\r\n }\r\n\r\n get currentIndex(): number {\r\n return this._currentIndex;\r\n }\r\n\r\n set currentIndex(currentIndex: number) {\r\n this._currentIndex = currentIndex;\r\n }\r\n\r\n private createCarouselEvent (type : Enums.CarouselInteractionEvent): CarouselEvent\r\n {\r\n let currentPageId : string | undefined;\r\n if (this.currentPageIndex != undefined) {\r\n currentPageId = this.getItemAt(this.currentPageIndex).id;\r\n }\r\n return new CarouselEvent(type, this.id, currentPageId, this.currentPageIndex); \r\n }\r\n\r\n private raiseCarouselEvent(eventType : Enums.CarouselInteractionEvent) {\r\n const card = this.parent ? (this.parent.getRootElement() as AdaptiveCard) : undefined;\r\n const onCarouselEventHandler = \r\n card && card.onCarouselEvent\r\n ? card.onCarouselEvent\r\n : AdaptiveCard.onCarouselEvent;\r\n // pagination event is triggered on slide transition end event \r\n if (onCarouselEventHandler && eventType == Enums.CarouselInteractionEvent.Pagination) {\r\n // returns the event type that causes slide transition\r\n onCarouselEventHandler(this.createCarouselEvent(this.previousEventType));\r\n }\r\n this.previousEventType = eventType;\r\n }\r\n\r\n /// Swiper version 8 added requestAnimationFrame() call in its resize observer code\r\n /// The new call causes flickering issue,\r\n /// We've copied resize observer code from Swiper version 7 with some modifications\r\n private createResizeObserver() : void {\r\n\r\n if (!this.checkIfCarouselInValidStateForResizeEvent()) {\r\n return;\r\n }\r\n\r\n this._observer = new ResizeObserver((entries) => {\r\n const width = this._carousel?.width;\r\n const height = this._carousel?.height;\r\n let newWidth = width;\r\n let newHeight = height;\r\n entries.forEach(({ contentBoxSize, contentRect, target }) => {\r\n if (target && target !== this._carousel?.el) {\r\n return;\r\n }\r\n\r\n newWidth = contentRect\r\n ? contentRect.width\r\n : (contentBoxSize[0] || contentBoxSize).inlineSize;\r\n\r\n newHeight = contentRect\r\n ? contentRect.height\r\n : (contentBoxSize[0] || contentBoxSize).blockSize;\r\n });\r\n\r\n if (newWidth !== width || newHeight !== height) {\r\n if (this.checkIfCarouselInValidStateForResizeEvent()) {\r\n this._carousel?.emit('beforeResize');\r\n this._carousel?.emit('resize');\r\n }\r\n }\r\n\r\n });\r\n\r\n this._observer.observe(this._carousel?.el!);\r\n }\r\n\r\n private destroyResizeObserver(): void {\r\n if (this._observer && this._observer.unobserve && this._carousel?.el) {\r\n this._observer.unobserve(this._carousel.el);\r\n this._observer = null;\r\n }\r\n };\r\n\r\n private checkIfCarouselInValidStateForResizeEvent()\r\n {\r\n return this._carousel && !this._carousel.destroyed;\r\n }\r\n}\r\n\r\nexport class CarouselEvent {\r\n constructor(public type : Enums.CarouselInteractionEvent,\r\n public carouselId : string | undefined,\r\n public activeCarouselPageId : string | undefined,\r\n public activeCarouselPageIndex : number | undefined) {}\r\n}\r\n\r\nGlobalRegistry.defaultElements.register(\r\n \"Carousel\",\r\n Carousel,\r\n Versions.v1_6\r\n);\r\n\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport {\r\n Authentication,\r\n AuthCardButton,\r\n UniversalAction,\r\n TokenExchangeResource\r\n} from \"./card-elements\";\r\n\r\nexport enum ActivityRequestTrigger {\r\n Automatic = \"automatic\",\r\n Manual = \"manual\"\r\n}\r\n\r\nexport interface IActivityRequest {\r\n readonly action: UniversalAction;\r\n readonly trigger: ActivityRequestTrigger;\r\n readonly attemptNumber: number;\r\n readonly consecutiveActions: number;\r\n\r\n authCode?: string;\r\n authToken?: string;\r\n\r\n retryAsync(): void;\r\n}\r\n\r\nexport class ActivityRequestError {\r\n constructor(readonly code?: string, readonly message?: string) {}\r\n}\r\n\r\nexport abstract class ActivityResponse {\r\n constructor(readonly request: IActivityRequest) {}\r\n}\r\n\r\nexport class SuccessResponse extends ActivityResponse {\r\n constructor(readonly request: IActivityRequest, readonly rawContent?: string) {\r\n super(request);\r\n }\r\n}\r\n\r\nexport class ErrorResponse extends ActivityResponse {\r\n constructor(readonly request: IActivityRequest, readonly error: ActivityRequestError) {\r\n super(request);\r\n }\r\n}\r\n\r\nexport class LoginRequestResponse extends ActivityResponse {\r\n private _auth: Authentication;\r\n readonly signinButton?: AuthCardButton;\r\n\r\n constructor(readonly request: IActivityRequest, auth: Authentication) {\r\n super(request);\r\n this._auth = auth;\r\n\r\n for (const button of this._auth.buttons) {\r\n if (button.type === \"signin\" && button.value !== undefined) {\r\n try {\r\n new URL(button.value);\r\n\r\n this.signinButton = button;\r\n\r\n break;\r\n } catch (e) {\r\n // Ignore parsing error\r\n }\r\n }\r\n }\r\n }\r\n\r\n get tokenExchangeResource(): TokenExchangeResource | undefined {\r\n return this._auth.tokenExchangeResource;\r\n }\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(\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(\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 {\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 {\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 { ActivityResponse, IActivityRequest } from \"./activity-request\";\r\n\r\nexport abstract class ChannelAdapter {\r\n abstract sendRequestAsync(request: IActivityRequest): Promise;\r\n}\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 Utils from \"./utils\";\r\nimport { GlobalSettings } from \"./shared\";\r\nimport { ChannelAdapter } from \"./channel-adapter\";\r\nimport {\r\n ActivityResponse,\r\n IActivityRequest,\r\n ActivityRequestTrigger,\r\n SuccessResponse,\r\n ErrorResponse,\r\n LoginRequestResponse\r\n} from \"./activity-request\";\r\nimport { Strings } from \"./strings\";\r\nimport {\r\n SubmitAction,\r\n ExecuteAction,\r\n SerializationContext,\r\n AdaptiveCard,\r\n Action,\r\n Input,\r\n TokenExchangeResource,\r\n AuthCardButton,\r\n UniversalAction,\r\n ChoiceSetInput,\r\n DataQuery\r\n} from \"./card-elements\";\r\nimport { Versions } from \"./serialization\";\r\nimport { HostConfig } from \"./host-config\";\r\n\r\nfunction logEvent(level: Enums.LogLevel, message?: any, ...optionalParams: any[]) {\r\n if (GlobalSettings.applets.logEnabled) {\r\n if (GlobalSettings.applets.onLogEvent) {\r\n GlobalSettings.applets.onLogEvent(level, message, optionalParams);\r\n } else {\r\n /* eslint-disable no-console */\r\n switch (level) {\r\n case Enums.LogLevel.Warning:\r\n console.warn(message, optionalParams);\r\n break;\r\n case Enums.LogLevel.Error:\r\n console.error(message, optionalParams);\r\n break;\r\n default:\r\n console.log(message, optionalParams);\r\n break;\r\n }\r\n /* eslint-enable no-console */\r\n }\r\n }\r\n}\r\n\r\nclass ActivityRequest implements IActivityRequest {\r\n constructor(\r\n readonly action: UniversalAction,\r\n readonly trigger: ActivityRequestTrigger,\r\n readonly consecutiveActions: number\r\n ) {}\r\n\r\n authCode?: string;\r\n authToken?: string;\r\n attemptNumber: number = 0;\r\n\r\n onSend: (sender: ActivityRequest) => void;\r\n\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async retryAsync(): Promise {\r\n if (this.onSend) {\r\n this.onSend(this);\r\n }\r\n }\r\n}\r\n\r\nexport class AdaptiveApplet {\r\n private static readonly _submitMagicCodeActionId = \"submitMagicCode\";\r\n private static readonly _cancelMagicCodeAuthActionId = \"cancelMagicCodeAuth\";\r\n\r\n private _card?: AdaptiveCard;\r\n private _cardPayload: any;\r\n private _choiceSet?: ChoiceSetInput;\r\n private _allowAutomaticCardUpdate: boolean = false;\r\n private _refreshButtonHostElement: HTMLElement;\r\n private _cardHostElement: HTMLElement;\r\n private _progressOverlay?: HTMLElement;\r\n\r\n private displayCard(card: AdaptiveCard) {\r\n if (card.renderedElement) {\r\n Utils.clearElementChildren(this._cardHostElement);\r\n\r\n this._refreshButtonHostElement.style.display = \"none\";\r\n\r\n this._cardHostElement.appendChild(card.renderedElement);\r\n } else {\r\n throw new Error(\"displayCard: undefined card.\");\r\n }\r\n }\r\n\r\n private showManualRefreshButton(refreshAction: ExecuteAction) {\r\n const displayBuiltInManualRefreshButton = this.onShowManualRefreshButton\r\n ? this.onShowManualRefreshButton(this)\r\n : true;\r\n\r\n if (displayBuiltInManualRefreshButton) {\r\n this._refreshButtonHostElement.style.display = \"none\";\r\n\r\n let renderedRefreshButton: HTMLElement | undefined = undefined;\r\n\r\n if (this.onRenderManualRefreshButton) {\r\n renderedRefreshButton = this.onRenderManualRefreshButton(this);\r\n } else {\r\n let message = Strings.runtime.refreshThisCard();\r\n\r\n if (GlobalSettings.applets.refresh.mode === Enums.RefreshMode.Automatic) {\r\n let autoRefreshPausedMessage = Strings.runtime.automaticRefreshPaused();\r\n\r\n if (autoRefreshPausedMessage[autoRefreshPausedMessage.length - 1] !== \" \") {\r\n autoRefreshPausedMessage += \" \";\r\n }\r\n\r\n message = Strings.runtime.clckToRestartAutomaticRefresh();\r\n }\r\n\r\n const cardPayload = {\r\n type: \"AdaptiveCard\",\r\n version: \"1.2\",\r\n body: [\r\n {\r\n type: \"RichTextBlock\",\r\n horizontalAlignment: \"right\",\r\n inlines: [\r\n {\r\n type: \"TextRun\",\r\n text: message,\r\n selectAction: {\r\n type: \"Action.Submit\",\r\n id: \"refreshCard\"\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n const card = new AdaptiveCard();\r\n card.parse(cardPayload, new SerializationContext(Versions.v1_2));\r\n card.onExecuteAction = (action: Action) => {\r\n if (action.id === \"refreshCard\") {\r\n Utils.clearElementChildren(this._refreshButtonHostElement);\r\n\r\n this.internalExecuteAction(\r\n refreshAction,\r\n ActivityRequestTrigger.Automatic,\r\n 0\r\n );\r\n }\r\n };\r\n\r\n renderedRefreshButton = card.render();\r\n }\r\n\r\n if (renderedRefreshButton) {\r\n Utils.clearElementChildren(this._refreshButtonHostElement);\r\n\r\n this._refreshButtonHostElement.appendChild(renderedRefreshButton);\r\n\r\n this._refreshButtonHostElement.style.removeProperty(\"display\");\r\n }\r\n }\r\n }\r\n\r\n private createActivityRequest(\r\n action: UniversalAction,\r\n trigger: ActivityRequestTrigger,\r\n consecutiveActions: number\r\n ): ActivityRequest | undefined {\r\n if (this.card) {\r\n const request = new ActivityRequest(action, trigger, consecutiveActions);\r\n request.onSend = (sender: ActivityRequest) => {\r\n sender.attemptNumber++;\r\n\r\n void this.internalSendActivityRequestAsync(request);\r\n };\r\n\r\n const cancel = this.onPrepareActivityRequest\r\n ? !this.onPrepareActivityRequest(this, request, action)\r\n : false;\r\n\r\n return cancel ? undefined : request;\r\n } else {\r\n throw new Error(\"createActivityRequest: no card has been set.\");\r\n }\r\n }\r\n\r\n private createMagicCodeInputCard(attemptNumber: number): AdaptiveCard {\r\n const payload = {\r\n type: \"AdaptiveCard\",\r\n version: \"1.0\",\r\n body: [\r\n {\r\n type: \"TextBlock\",\r\n color: \"attention\",\r\n text: attemptNumber === 1 ? undefined : \"That didn't work... let's try again.\",\r\n wrap: true,\r\n horizontalAlignment: \"center\"\r\n },\r\n {\r\n type: \"TextBlock\",\r\n text: 'Please login in the popup. You will obtain a magic code. Paste that code below and select \"Submit\"',\r\n wrap: true,\r\n horizontalAlignment: \"center\"\r\n },\r\n {\r\n type: \"Input.Text\",\r\n id: \"magicCode\",\r\n placeholder: \"Enter magic code\"\r\n },\r\n {\r\n type: \"ActionSet\",\r\n horizontalAlignment: \"center\",\r\n actions: [\r\n {\r\n type: \"Action.Submit\",\r\n id: AdaptiveApplet._submitMagicCodeActionId,\r\n title: \"Submit\"\r\n },\r\n {\r\n type: \"Action.Submit\",\r\n id: AdaptiveApplet._cancelMagicCodeAuthActionId,\r\n title: \"Cancel\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n const card = new AdaptiveCard();\r\n card.parse(payload);\r\n\r\n return card;\r\n }\r\n\r\n private cancelAutomaticRefresh() {\r\n if (this._allowAutomaticCardUpdate) {\r\n logEvent(\r\n Enums.LogLevel.Warning,\r\n \"Automatic card refresh has been cancelled as a result of the user interacting with the card.\"\r\n );\r\n }\r\n\r\n this._allowAutomaticCardUpdate = false;\r\n }\r\n\r\n private createSerializationContext(): SerializationContext {\r\n return this.onCreateSerializationContext\r\n ? this.onCreateSerializationContext(this)\r\n : new SerializationContext();\r\n }\r\n\r\n private internalSetCard(payload: any, consecutiveActions: number) {\r\n if (typeof payload === \"object\" && payload[\"type\"] === \"AdaptiveCard\") {\r\n this._cardPayload = payload;\r\n }\r\n\r\n if (this._cardPayload) {\r\n try {\r\n const card = new AdaptiveCard();\r\n\r\n if (this.hostConfig) {\r\n card.hostConfig = this.hostConfig;\r\n }\r\n\r\n const serializationContext = this.createSerializationContext();\r\n\r\n card.parse(this._cardPayload, serializationContext);\r\n\r\n const doChangeCard = this.onCardChanging\r\n ? this.onCardChanging(this, this._cardPayload)\r\n : true;\r\n\r\n if (doChangeCard) {\r\n this._card = card;\r\n\r\n if (\r\n this._card.authentication &&\r\n this._card.authentication.tokenExchangeResource &&\r\n this.onPrefetchSSOToken\r\n ) {\r\n this.onPrefetchSSOToken(\r\n this,\r\n this._card.authentication.tokenExchangeResource\r\n );\r\n }\r\n\r\n this._card.onExecuteAction = (action: Action) => {\r\n // If the user takes an action, cancel any pending automatic refresh\r\n this.cancelAutomaticRefresh();\r\n\r\n this.internalExecuteAction(action, ActivityRequestTrigger.Manual, 0);\r\n };\r\n this._card.onInputValueChanged = (input: Input) => {\r\n // If the user modifies an input, cancel any pending automatic refresh\r\n this.cancelAutomaticRefresh();\r\n if (input instanceof ChoiceSetInput && input.isDynamicTypeahead()) {\r\n const filter = input.getFilterForDynamicSearch();\r\n if (filter) {\r\n const dataQueryAction = new DataQuery();\r\n dataQueryAction.filter = filter;\r\n dataQueryAction.dataset = input.choicesData?.dataset || \"\";\r\n dataQueryAction.count = input.choicesData?.count;\r\n dataQueryAction.skip = input.choicesData?.skip;\r\n\r\n this._choiceSet = input;\r\n this.internalExecuteAction(\r\n dataQueryAction,\r\n ActivityRequestTrigger.Manual,\r\n 0 // consecutiveActions\r\n );\r\n }\r\n }\r\n };\r\n\r\n this._card.render();\r\n\r\n if (this._card.renderedElement) {\r\n this.displayCard(this._card);\r\n\r\n if (this.onCardChanged) {\r\n this.onCardChanged(this);\r\n }\r\n\r\n if (this._card.refresh) {\r\n if (\r\n GlobalSettings.applets.refresh.mode ===\r\n Enums.RefreshMode.Automatic &&\r\n consecutiveActions <\r\n GlobalSettings.applets.refresh\r\n .maximumConsecutiveAutomaticRefreshes\r\n ) {\r\n if (\r\n GlobalSettings.applets.refresh.timeBetweenAutomaticRefreshes <=\r\n 0\r\n ) {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Triggering automatic card refresh number \" +\r\n (consecutiveActions + 1)\r\n );\r\n\r\n this.internalExecuteAction(\r\n this._card.refresh.action,\r\n ActivityRequestTrigger.Automatic,\r\n consecutiveActions + 1\r\n );\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Scheduling automatic card refresh number \" +\r\n (consecutiveActions + 1) +\r\n \" in \" +\r\n GlobalSettings.applets.refresh\r\n .timeBetweenAutomaticRefreshes +\r\n \"ms\"\r\n );\r\n\r\n const action = this._card.refresh.action;\r\n\r\n this._allowAutomaticCardUpdate = true;\r\n\r\n window.setTimeout(() => {\r\n if (this._allowAutomaticCardUpdate) {\r\n this.internalExecuteAction(\r\n action,\r\n ActivityRequestTrigger.Automatic,\r\n consecutiveActions + 1\r\n );\r\n }\r\n }, GlobalSettings.applets.refresh.timeBetweenAutomaticRefreshes);\r\n }\r\n } else if (\r\n GlobalSettings.applets.refresh.mode !== Enums.RefreshMode.Disabled\r\n ) {\r\n if (consecutiveActions > 0) {\r\n logEvent(\r\n Enums.LogLevel.Warning,\r\n \"Stopping automatic refreshes after \" +\r\n consecutiveActions +\r\n \" consecutive refreshes.\"\r\n );\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Warning,\r\n \"The card has a refresh section, but automatic refreshes are disabled.\"\r\n );\r\n }\r\n\r\n if (\r\n GlobalSettings.applets.refresh\r\n .allowManualRefreshesAfterAutomaticRefreshes ||\r\n GlobalSettings.applets.refresh.mode === Enums.RefreshMode.Manual\r\n ) {\r\n logEvent(Enums.LogLevel.Info, \"Showing manual refresh button.\");\r\n\r\n this.showManualRefreshButton(this._card.refresh.action);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n // Ignore all errors\r\n logEvent(Enums.LogLevel.Error, \"setCard: \" + error);\r\n }\r\n }\r\n }\r\n\r\n private internalExecuteAction(\r\n action: Action,\r\n trigger: ActivityRequestTrigger,\r\n consecutiveActions: number\r\n ) {\r\n if (action instanceof UniversalAction) {\r\n if (this.channelAdapter) {\r\n const request = this.createActivityRequest(action, trigger, consecutiveActions);\r\n\r\n if (request) {\r\n void request.retryAsync();\r\n }\r\n } else {\r\n throw new Error(\"internalExecuteAction: No channel adapter set.\");\r\n }\r\n }\r\n\r\n if (this.onAction) {\r\n this.onAction(this, action);\r\n }\r\n }\r\n\r\n private createProgressOverlay(request: ActivityRequest): HTMLElement | undefined {\r\n if (!this._progressOverlay) {\r\n if (this.onCreateProgressOverlay) {\r\n this._progressOverlay = this.onCreateProgressOverlay(this, request);\r\n } else {\r\n this._progressOverlay = document.createElement(\"div\");\r\n this._progressOverlay.className = \"aaf-progress-overlay\";\r\n\r\n const spinner = document.createElement(\"div\");\r\n spinner.className = \"aaf-spinner\";\r\n spinner.style.width = \"28px\";\r\n spinner.style.height = \"28px\";\r\n\r\n this._progressOverlay.appendChild(spinner);\r\n }\r\n }\r\n\r\n return this._progressOverlay;\r\n }\r\n\r\n private removeProgressOverlay(request: IActivityRequest) {\r\n if (this.onRemoveProgressOverlay) {\r\n this.onRemoveProgressOverlay(this, request);\r\n }\r\n\r\n if (this._progressOverlay !== undefined) {\r\n this.renderedElement.removeChild(this._progressOverlay);\r\n\r\n this._progressOverlay = undefined;\r\n }\r\n }\r\n\r\n private activityRequestSucceeded(\r\n response: SuccessResponse,\r\n parsedContent: string | AdaptiveCard | undefined\r\n ) {\r\n if (this.onActivityRequestSucceeded) {\r\n this.onActivityRequestSucceeded(this, response, parsedContent);\r\n }\r\n }\r\n\r\n private activityRequestFailed(response: ErrorResponse): number {\r\n return this.onActivityRequestFailed\r\n ? this.onActivityRequestFailed(this, response)\r\n : GlobalSettings.applets.defaultTimeBetweenRetryAttempts;\r\n }\r\n\r\n private showAuthCodeInputDialog(request: ActivityRequest) {\r\n const showBuiltInAuthCodeInputCard = this.onShowAuthCodeInputDialog\r\n ? this.onShowAuthCodeInputDialog(this, request)\r\n : true;\r\n\r\n if (showBuiltInAuthCodeInputCard) {\r\n const authCodeInputCard = this.createMagicCodeInputCard(request.attemptNumber);\r\n authCodeInputCard.render();\r\n authCodeInputCard.onExecuteAction = (submitMagicCodeAction: Action) => {\r\n if (this.card && submitMagicCodeAction instanceof SubmitAction) {\r\n switch (submitMagicCodeAction.id) {\r\n case AdaptiveApplet._submitMagicCodeActionId:\r\n let authCode: string | undefined = undefined;\r\n\r\n if (\r\n submitMagicCodeAction.data &&\r\n typeof (submitMagicCodeAction.data)[\"magicCode\"] === \"string\"\r\n ) {\r\n authCode = (submitMagicCodeAction.data)[\"magicCode\"];\r\n }\r\n\r\n if (authCode) {\r\n this.displayCard(this.card);\r\n\r\n request.authCode = authCode;\r\n void request.retryAsync();\r\n } else {\r\n alert(\"Please enter the magic code you received.\");\r\n }\r\n\r\n break;\r\n case AdaptiveApplet._cancelMagicCodeAuthActionId:\r\n logEvent(Enums.LogLevel.Warning, \"Authentication cancelled by user.\");\r\n\r\n this.displayCard(this.card);\r\n\r\n break;\r\n default:\r\n logEvent(\r\n Enums.LogLevel.Error,\r\n \"Unexpected action taken from magic code input card (id = \" +\r\n submitMagicCodeAction.id +\r\n \")\"\r\n );\r\n\r\n alert(Strings.magicCodeInputCard.somethingWentWrong());\r\n\r\n break;\r\n }\r\n }\r\n };\r\n\r\n this.displayCard(authCodeInputCard);\r\n }\r\n }\r\n\r\n private async internalSendActivityRequestAsync(request: ActivityRequest) {\r\n if (!this.channelAdapter) {\r\n throw new Error(\"internalSendActivityRequestAsync: channelAdapter is not set.\");\r\n }\r\n const { action } = request;\r\n if (action instanceof ExecuteAction) {\r\n await this.internalSendExecuteRequestAsync(request);\r\n } else if (action instanceof DataQuery) {\r\n await this.internalSendDataQueryRequestAsync(request);\r\n } else {\r\n throw new Error(\"internalSendActivityRequestAsync: Unhandled Action Type\");\r\n }\r\n }\r\n\r\n private async internalSendExecuteRequestAsync(request: ActivityRequest) {\r\n if (!this.channelAdapter) {\r\n throw new Error(\"internalSendExecuteRequestAsync: channelAdapter is not set.\");\r\n }\r\n\r\n const overlay = this.createProgressOverlay(request);\r\n\r\n if (overlay !== undefined) {\r\n this.renderedElement.appendChild(overlay);\r\n }\r\n\r\n let done = false;\r\n\r\n while (!done) {\r\n let response: ActivityResponse | undefined = undefined;\r\n\r\n if (request.attemptNumber === 1) {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Sending activity request to channel (attempt \" + request.attemptNumber + \")\"\r\n );\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Re-sending activity request to channel (attempt \" + request.attemptNumber + \")\"\r\n );\r\n }\r\n\r\n try {\r\n response = await this.channelAdapter.sendRequestAsync(request);\r\n } catch (error) {\r\n logEvent(Enums.LogLevel.Error, \"Activity request failed: \" + error);\r\n\r\n this.removeProgressOverlay(request);\r\n\r\n done = true;\r\n }\r\n\r\n if (response) {\r\n if (response instanceof SuccessResponse) {\r\n this.removeProgressOverlay(request);\r\n\r\n if (response.rawContent === undefined) {\r\n throw new Error(\r\n \"internalSendExecuteRequestAsync: Action.Execute result is undefined\"\r\n );\r\n }\r\n\r\n let parsedContent = response.rawContent;\r\n\r\n try {\r\n parsedContent = JSON.parse(response.rawContent);\r\n } catch {\r\n // Leave parseContent as is\r\n }\r\n\r\n if (typeof parsedContent === \"string\") {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"The activity request returned a string after \" +\r\n request.attemptNumber +\r\n \" attempt(s).\"\r\n );\r\n\r\n this.activityRequestSucceeded(response, parsedContent);\r\n } else if (\r\n typeof parsedContent === \"object\" &&\r\n parsedContent[\"type\"] === \"AdaptiveCard\"\r\n ) {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"The activity request returned an Adaptive Card after \" +\r\n request.attemptNumber +\r\n \" attempt(s).\"\r\n );\r\n\r\n this.internalSetCard(parsedContent, request.consecutiveActions);\r\n this.activityRequestSucceeded(response, this.card);\r\n } else {\r\n throw new Error(\r\n \"internalSendExecuteRequestAsync: Action.Execute result is of unsupported type (\" +\r\n typeof response.rawContent +\r\n \")\"\r\n );\r\n }\r\n\r\n done = true;\r\n } else if (response instanceof ErrorResponse) {\r\n const retryIn: number = this.activityRequestFailed(response);\r\n\r\n if (\r\n retryIn >= 0 &&\r\n request.attemptNumber < GlobalSettings.applets.maximumRetryAttempts\r\n ) {\r\n logEvent(\r\n Enums.LogLevel.Warning,\r\n `Activity request failed: ${response.error.message}. Retrying in ${retryIn}ms`\r\n );\r\n\r\n request.attemptNumber++;\r\n\r\n await new Promise((resolve, _reject) => {\r\n window.setTimeout(() => {\r\n resolve();\r\n }, retryIn);\r\n });\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Error,\r\n `Activity request failed: ${response.error.message}. Giving up after ${request.attemptNumber} attempt(s)`\r\n );\r\n\r\n this.removeProgressOverlay(request);\r\n\r\n done = true;\r\n }\r\n } else if (response instanceof LoginRequestResponse) {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"The activity request returned a LoginRequestResponse after \" +\r\n request.attemptNumber +\r\n \" attempt(s).\"\r\n );\r\n\r\n if (request.attemptNumber <= GlobalSettings.applets.maximumRetryAttempts) {\r\n let attemptOAuth = true;\r\n\r\n if (response.tokenExchangeResource && this.onSSOTokenNeeded) {\r\n // Attempt to use SSO. The host will return true if it can handle SSO, in which case\r\n // we bypass OAuth\r\n attemptOAuth = !this.onSSOTokenNeeded(\r\n this,\r\n request,\r\n response.tokenExchangeResource\r\n );\r\n }\r\n\r\n if (attemptOAuth) {\r\n // Attempt to use OAuth\r\n this.removeProgressOverlay(request);\r\n\r\n if (response.signinButton === undefined) {\r\n throw new Error(\r\n \"internalSendExecuteRequestAsync: the login request doesn't contain a valid signin URL.\"\r\n );\r\n }\r\n\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Login required at \" + response.signinButton.value\r\n );\r\n\r\n if (this.onShowSigninPrompt) {\r\n // Bypass the built-in auth prompt if the host app handles it\r\n this.onShowSigninPrompt(this, request, response.signinButton);\r\n } else {\r\n this.showAuthCodeInputDialog(request);\r\n\r\n const left =\r\n window.screenX +\r\n (window.outerWidth - GlobalSettings.applets.authPromptWidth) /\r\n 2;\r\n const top =\r\n window.screenY +\r\n (window.outerHeight - GlobalSettings.applets.authPromptHeight) /\r\n 2;\r\n\r\n window.open(\r\n response.signinButton.value,\r\n response.signinButton.title\r\n ? response.signinButton.title\r\n : \"Sign in\",\r\n `width=${GlobalSettings.applets.authPromptWidth},height=${GlobalSettings.applets.authPromptHeight},left=${left},top=${top}`\r\n );\r\n }\r\n }\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Error,\r\n \"Authentication failed. Giving up after \" +\r\n request.attemptNumber +\r\n \" attempt(s)\"\r\n );\r\n\r\n alert(Strings.magicCodeInputCard.authenticationFailed());\r\n }\r\n\r\n // Exit the loop. After a LoginRequestResponse, the host app is responsible for retrying the request\r\n break;\r\n } else {\r\n throw new Error(\"Unhandled response type: \" + JSON.stringify(response));\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async internalSendDataQueryRequestAsync(request: ActivityRequest) {\r\n if (!this.channelAdapter) {\r\n throw new Error(\"internalSendDataQueryRequestAsync: channel adapter not set\");\r\n }\r\n const filter = (request.action as DataQuery).filter;\r\n if (this._choiceSet) {\r\n this._choiceSet.showLoadingIndicator();\r\n let response: ActivityResponse | undefined = undefined;\r\n try {\r\n response = await this.channelAdapter.sendRequestAsync(request);\r\n } catch (error) {\r\n this._choiceSet.showErrorIndicator(filter, \"Unable to load\");\r\n logEvent(Enums.LogLevel.Error, \"Activity request failed: \" + error);\r\n }\r\n if (response) {\r\n if (response instanceof SuccessResponse) {\r\n const rawResponse = response.rawContent;\r\n if (rawResponse) {\r\n let parsedResponse;\r\n try {\r\n parsedResponse = JSON.parse(rawResponse);\r\n } catch (error) {\r\n this._choiceSet.showErrorIndicator(filter, \"Unable to load\");\r\n throw new Error(\r\n \"internalSendDataQueryRequestAsync: Cannot parse response object: \" +\r\n rawResponse\r\n );\r\n }\r\n if (typeof parsedResponse === \"object\") {\r\n this._choiceSet.renderChoices(filter, parsedResponse);\r\n this.activityRequestSucceeded(response, rawResponse);\r\n } else {\r\n this._choiceSet.showErrorIndicator(filter, \"Error loading results\");\r\n throw new Error(\r\n \"internalSendDataQueryRequestAsync: Data.Query result is of unsupported type (\" +\r\n typeof rawResponse +\r\n \")\"\r\n );\r\n }\r\n } else {\r\n this._choiceSet.showErrorIndicator(filter, \"Unable to load\");\r\n throw new Error(\r\n \"internalSendDataQueryRequestAsync: Data.Query result is undefined\"\r\n );\r\n }\r\n } else if (response instanceof ErrorResponse) {\r\n this._choiceSet.showErrorIndicator(\r\n filter,\r\n response.error.message || \"Error loading results\"\r\n );\r\n logEvent(\r\n Enums.LogLevel.Error,\r\n `Activity request failed: ${response.error.message}.`\r\n );\r\n this.activityRequestFailed(response);\r\n } else {\r\n this._choiceSet.showErrorIndicator(filter, \"Unable to load\");\r\n throw new Error(\"Unhandled response type: \" + JSON.stringify(response));\r\n }\r\n } else {\r\n this._choiceSet.removeLoadingIndicator();\r\n }\r\n }\r\n }\r\n\r\n readonly renderedElement: HTMLElement;\r\n\r\n hostConfig?: HostConfig;\r\n channelAdapter?: ChannelAdapter;\r\n\r\n onCardChanging?: (sender: AdaptiveApplet, card: any) => boolean;\r\n onCardChanged?: (sender: AdaptiveApplet) => void;\r\n onPrefetchSSOToken?: (\r\n sender: AdaptiveApplet,\r\n tokenExchangeResource: TokenExchangeResource\r\n ) => void;\r\n onSSOTokenNeeded?: (\r\n sender: AdaptiveApplet,\r\n request: IActivityRequest,\r\n tokenExchangeResource: TokenExchangeResource\r\n ) => boolean;\r\n onPrepareActivityRequest?: (\r\n sender: AdaptiveApplet,\r\n request: IActivityRequest,\r\n action: UniversalAction\r\n ) => boolean;\r\n onActivityRequestSucceeded?: (\r\n sender: AdaptiveApplet,\r\n response: SuccessResponse,\r\n parsedContent: string | AdaptiveCard | undefined\r\n ) => void;\r\n onActivityRequestFailed?: (sender: AdaptiveApplet, response: ErrorResponse) => number;\r\n onCreateSerializationContext?: (sender: AdaptiveApplet) => SerializationContext;\r\n onCreateProgressOverlay?: (\r\n sender: AdaptiveApplet,\r\n request: IActivityRequest\r\n ) => HTMLElement | undefined;\r\n onRemoveProgressOverlay?: (sender: AdaptiveApplet, request: IActivityRequest) => void;\r\n onRenderManualRefreshButton?: (sender: AdaptiveApplet) => HTMLElement | undefined;\r\n onAction?: (sender: AdaptiveApplet, action: Action) => void;\r\n onShowManualRefreshButton?: (sender: AdaptiveApplet) => boolean;\r\n onShowAuthCodeInputDialog?: (sender: AdaptiveApplet, request: IActivityRequest) => boolean;\r\n onShowSigninPrompt?: (\r\n sender: AdaptiveApplet,\r\n request: IActivityRequest,\r\n signinButton: AuthCardButton\r\n ) => void;\r\n\r\n constructor() {\r\n this.renderedElement = document.createElement(\"div\");\r\n this.renderedElement.className = \"aaf-cardHost\";\r\n this.renderedElement.style.position = \"relative\";\r\n this.renderedElement.style.display = \"flex\";\r\n this.renderedElement.style.flexDirection = \"column\";\r\n\r\n this._cardHostElement = document.createElement(\"div\");\r\n\r\n this._refreshButtonHostElement = document.createElement(\"div\");\r\n this._refreshButtonHostElement.className = \"aaf-refreshButtonHost\";\r\n this._refreshButtonHostElement.style.display = \"none\";\r\n\r\n this.renderedElement.appendChild(this._cardHostElement);\r\n this.renderedElement.appendChild(this._refreshButtonHostElement);\r\n }\r\n\r\n refreshCard() {\r\n if (this._card && this._card.refresh) {\r\n this.internalExecuteAction(this._card.refresh.action, ActivityRequestTrigger.Manual, 0);\r\n }\r\n }\r\n\r\n setCard(payload: any) {\r\n this.internalSetCard(payload, 0);\r\n }\r\n\r\n get card(): AdaptiveCard | undefined {\r\n return this._card;\r\n }\r\n}\r\n"],"names":["root","factory","exports","module","define","amd","this","Size","ImageSize","ImageSetPresentationStyle","SizeUnit","TextSize","InputStyle","TextWeight","FontType","Spacing","TextColor","HorizontalAlignment","VerticalAlignment","ActionAlignment","ImageStyle","ShowCardActionMode","Orientation","FillMode","ActionIconPlacement","InputTextStyle","InputLabelPosition","ValidationPhase","ValidationEvent","ContainerFitStatus","TypeErrorType","RefreshMode","LogLevel","CarouselInteractionEvent","ActionRole","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","Strings","errors","unknownElementType","typeName","unknownActionType","elementTypeNotAllowed","actionTypeNotAllowed","invalidPropertyValue","propertyName","showCardMustHaveCard","invalidColumnWidth","invalidWidth","invalidCardVersion","defaultingToVersion","invalidVersionString","versionString","propertyValueNotSupported","supportedInVersion","versionUsed","propertyNotSupported","indexOutOfRange","index","elementCannotBeUsedAsInline","inlineAlreadyParented","interactivityNotAllowed","inputsMustHaveUniqueId","choiceSetMustHaveAtLeastOneChoice","choiceSetChoicesMustHaveTitleAndValue","propertyMustBeSet","actionHttpHeadersMustHaveNameAndValue","tooManyActions","maximumActions","tooLittleTimeDelay","minAutoplayDelay","tooManyCarouselPages","maxCarouselPages","invalidInitialPageIndex","initialPageIndex","columnAlreadyBelongsToAnotherSet","invalidCardType","unsupportedCardVersion","version","maxSupportedVersion","duplicateId","id","markdownProcessingNotEnabled","processMarkdownEventRemoved","elementAlreadyParented","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","ContainerStyle","Default","Emphasis","Accent","Good","Attention","Warning","ActionStyle","Positive","Destructive","ActionMode","Primary","Secondary","GlobalSettings","useAdvancedTextBlockTruncation","useAdvancedCardBottomTruncation","useMarkdownInRadioButtonAndCheckbox","allowMarkForTextHighlighting","alwaysBleedSeparators","enableFullJsonRoundTrip","displayInputValidationErrors","allowPreProcessingPropertyValues","setTabIndexAtCardRoot","enableFallback","useWebkitLineClamp","allowMoreThanMaxActionsInOverflowMenu","removePaddingFromContainersWithBackgroundImage","resetInputsDirtyStateAfterActionExecution","applets","logEnabled","logLevel","Error","maximumRetryAttempts","defaultTimeBetweenRetryAttempts","authPromptWidth","authPromptHeight","refresh","mode","Manual","timeBetweenAutomaticRefreshes","maximumConsecutiveAutomaticRefreshes","allowManualRefreshesAfterAutomaticRefreshes","ContentTypes","applicationJson","applicationXWwwFormUrlencoded","StringWithSubstitutions","_isProcessed","getReferencedInputs","inputs","referencedInputs","_original","input","RegExp","exec","substituteInputValues","contentType","_processed","regEx","matches","keys","toLowerCase","matchedInput","valueForReplace","JSON","stringify","slice","encodeURIComponent","replace","getOriginal","set","SpacingDefinition","constructor","top","right","bottom","left","PaddingDefinition","None","SizeAndUnit","parse","requireUnitSpecifier","result","Weight","physicalSize","expectedMatchCount","length","parseInt","unit","Pixel","UUID","generate","d0","Math","random","d1","d2","d3","lut","initialize","i","toString","isInternetExplorer","undefined","window","document","documentMode","isMobileOS","userAgent","navigator","match","generateUniqueId","appendChild","node","child","parseString","defaultValue","parseNumber","parseBool","getEnumValueByName","enumType","name","keyAsNumber","parseEnum","enumValue","stringToCssColor","color","a","truncateWorker","element","maxHeight","fullText","truncateAt","lineHeight","fits","scrollHeight","breakableIndices","html","results","idx","findNextCharacter","push","findBreakableIndices","lo","hi","bestBreakIdx","mid","floor","truncateText","innerText","text","substring","ttDeprecatedPolicy","trustedTypes","createPolicy","createHTML","truncate","innerHTML","truncatedString","truncatedHTML","currIdx","getFitStatus","containerEnd","start","offsetTop","clientHeight","FullyInContainer","Overflowing","FullyOutOfContainer","getScrollX","pageXOffset","getScrollY","pageYOffset","clearElementChildren","firstChild","removeChild","addCancelSelectActionEventHandler","onclick","e","preventDefault","cancelBubble","debounce","fn","delay","timer","args","clearTimeout","setTimeout","Version","major","minor","label","_isValid","_major","_minor","_label","context","_versionString","logParseEvent","InvalidPropertyValue","toJSON","compareTo","otherVersion","isValid","Versions","getAllDeclaredVersions","ctor","properties","propertyValue","sort","v1","v2","isVersionLessOrEqual","targetVersion","v1_0","v1_1","v1_2","v1_3","v1_4","v1_5","v1_6","latest","BaseSerializationContext","_validationEvents","isTemplateString","startsWith","tryDeleteValue","target","tryDeleteDefaultValue","serializeValue","forceDeleteIfNullOrDefault","serializeString","serializeBool","serializeNumber","isNaN","serializeEnum","serializeArray","items","item","serializedItem","SerializableObject","Array","isArray","clearEvents","logEvent","source","phase","event","message","Parse","getEventAt","eventCount","SimpleSerializationContext","PropertyDefinition","getInternalName","sender","onGetInitialValue","isSerializationEnabled","sequentialNumber","_sequentialNumber","StringProperty","parsedValue","treatEmptyAsUndefined","super","BoolProperty","NumProperty","PixelSizeProperty","size","StringArrayProperty","sourceValue","ValueSetProperty","isValidValue","versionedValue","values","invalidValue","ToJSON","EnumProperty","_values","SerializableObjectProperty","objectType","serializedValue","hasAllDefaultValues","nullable","SerializableObjectCollectionProperty","sourceCollection","sourceItem","onItemAdded","CustomProperty","onParse","onToJSON","SerializableObjectSchema","_properties","indexOf","add","remove","splice","getItemAt","getCount","property","propertyKey","descriptor","getOwnPropertyDescriptor","getValue","setValue","getDefaultSerializationContext","populateSchema","schema","sortedProperties","p1","p2","onRegisterCustomProperties","_propertyBag","internalParse","_rawProperties","s","getSchema","UnsupportedProperty","resetDefaultValues","internalToJSON","serializedProperties","shouldSerialize","_context","maxVersion","defaultMaxVersion","effectiveContext","toJSONOriginalParam","hasDefaultValue","setCustomProperty","getCustomProperty","_schemaCache","getSchemaKey","HostCapabilities","_capabilities","jsonVersion","addCapability","removeCapability","clear","hasCapability","areAllMet","hostCapabilities","capabilityName","parseHostConfigEnum","targetEnum","ColorDefinition","defaultColor","subtleColor","default","subtle","TextColorDefinition","highlightColors","AdaptiveCardConfig","allowCustomStyle","ImageSetConfig","imageSize","Medium","maxImageHeight","MediaConfig","allowInlinePlayback","defaultPoster","TableConfig","cellSpacing","BaseTextDefinition","isSubtle","weight","getDefaultWeight","TextStyleDefinition","fontType","TextStyleSet","heading","columnHeader","getStyleByName","TextBlockConfig","headingLevel","RequiredInputLabelTextDefinition","suffix","suffixColor","InputLabelConfig","inputSpacing","Small","width","requiredInputs","optionalInputs","InputConfig","errorMessage","debounceTimeInMilliSeconds","allowDynamicallyFilteredChoiceSet","allowRevealOnHoverStyle","FactTextDefinition","wrap","FactTitleDefinition","maxWidth","Bolder","FactSetConfig","title","spacing","ShowCardActionConfig","actionMode","Inline","inlineTopMargin","style","ActionsConfig","maxActions","buttonSpacing","showCard","preExpandSingleShowCardAction","actionsOrientation","Horizontal","actionAlignment","Left","iconPlacement","LeftOfTitle","allowTitleToWrap","showIconInOverflow","iconSize","sizeAndUnit","ColorSetDefinition","parseSingleColor","dark","light","accent","good","warning","attention","ContainerStyleDefinition","backgroundColor","foregroundColors","highlightBackgroundColor","highlightForegroundColor","borderColor","isBuiltIn","BuiltInContainerStyleDefinition","ContainerStyleSet","_allStyles","customStyleArray","customStyle","styleName","forEach","emphasis","customStyles","FontTypeDefinition","fontFamily","fontSizes","small","medium","large","extraLarge","fontWeights","lighter","bolder","monospace","FontTypeSet","getStyleDefinition","Monospace","CarouselConfig","HostConfig","choiceSetInputValueSeparator","supportsInteractivity","padding","separator","lineThickness","lineColor","imageSizes","containerStyles","actions","adaptiveCard","imageSet","media","factSet","table","textStyles","textBlock","carousel","alwaysAllowBleed","String","_legacyFontType","fontTypes","lineHeights","getFontTypeDefinition","getEffectiveImageSize","Large","getEffectiveSpacing","ExtraLarge","Padding","paddingDefinitionToSpacingDefinition","paddingDefinition","makeCssClassNames","classNames","className","cssClassNamePrefix","makeCssClassName","join","defaultHostConfig","minAutoplayDuration","CardObjectRegistry","_items","findByName","copyTo","typeRegistration","register","schemaVersion","registrationInfo","unregister","createInstance","getItemCount","map","GlobalRegistry","populateWithDefaultElements","registry","defaultElements","populateWithDefaultActions","defaultActions","elements","_elements","_actions","reset","ValidationResults","allIds","validationEvents","addFailure","cardObject","Validation","CardObject","_shouldFallback","getJsonTypeName","requires","requiresProperty","contains","_renderedElement","preProcessPropertyValue","currentObject","onPreProcessPropertyValue","parent","setParent","_parent","setShouldFallback","shouldFallback","hostConfig","getRootObject","internalValidateProperties","DuplicateId","validateProperties","findDOMNodeOwner","releaseDOMResources","renderedElement","typeNameProperty","idProperty","AbstractTextFormatter","regularExpression","_regularExpression","format","lang","internalFormat","DateFormatter","date","Date","toLocaleDateString","day","weekday","month","year","TimeFormatter","toLocaleTimeString","hour","minute","formatText","formatters","formatter","Constants","tab","enter","escape","space","up","down","delete","Collection","onItemRemoved","PopupControl","_isOpen","keyDown","closePopup","render","_rootElementBounds","createElement","tabIndex","setAttribute","onkeydown","renderContent","focus","_popupElement","firstElementChild","popup","rootElement","_overlayElement","documentElement","scrollWidth","height","onfocus","_e","body","rootElementBounds","getBoundingClientRect","classList","addEventListener","rootElementLabel","getAttribute","popupElementBounds","availableSpaceBelow","innerHeight","availableSpaceAbove","availableSpaceRight","innerWidth","availableSpaceLeft","actualPopupHeight","min","actualPopupWidth","wasCancelled","onClose","_hostConfig","isOpen","PopupMenu","_renderedItems","_selectedIndex","renderedItem","selectedIndex","selectedItemIndex","removeAriaExpanded","removeAttribute","MenuItem","click","isEnabled","onClick","updateCssClasses","_element","effectiveHostConfig","iconUrl","_isEnabled","_value","_iconUrl","display","alignItems","justifyContent","iconElement","marginRight","src","textElement","flex","onmouseup","stopPropagation","newValue","InputEventType","clearElement","trustedHtml","emptyHTML","renderSeparation","separationDefinition","orientation","paddingTop","marginBottom","borderBottom","paddingLeft","borderRight","overflow","CardElement","_truncatedDueToOverflow","langProperty","isVisible","isVisibleProperty","undoOverflowTruncation","updateRenderedElementVisibility","raiseElementVisibilityChangedEvent","internalRenderSeparator","renderedSeparator","separatorOrientation","parentContainer","getParentContainer","getEffectivePadding","parentPhysicalPadding","marginLeft","displayMode","isDesignMode","_defaultRenderedElementDisplayMode","removeProperty","_separatorElement","isFirstElement","hideElementDueToOverflow","visibility","showElementHiddenDueToOverflow","handleOverflow","isHiddenDueToOverflow","handled","truncateOverflow","resetOverflow","sizeChanged","SerializationContext","createPlaceholderElement","foregroundCssColor","getEffectiveStyleDefinition","border","minHeight","fontSize","adjustRenderedElementSize","updateInputsVisualState","hover","allInputs","getAllInputs","inputEventType","MouseEnterOnCard","MouseLeaveOnCard","updateVisualState","isDisplayed","offsetHeight","overrideInternalRender","internalRender","applyPadding","separatorElement","isBleeding","getImmediateSurroundingPadding","physicalPadding","_maxHeight","getDefaultPadding","getHasBackground","ignoreBackgroundImages","getHasBorder","getPadding","_padding","setPadding","elementRegistry","useDefaultSizing","defaultStyle","asString","getEffectiveStyle","getEffectiveTextStyleDefinition","getForbiddenActionTypes","processTop","processRight","processBottom","processLeft","doProcessTop","isTopElement","doProcessRight","isRightMostElement","doProcessBottom","isBottomElement","doProcessLeft","isLeftMostElement","effectivePadding","getActionCount","getActionAt","indexOfAction","action","CardElementContainer","removeItem","customCssSelector","boxSizing","updateLayout","_processChildren","updateActionsEnabledState","allActions","getRootElement","getAllActions","updateEnabledState","_cardElement","AdaptiveCard","designMode","isLastElement","isAtTheVeryLeft","isAtTheVeryRight","isAtTheVeryTop","isAtTheVeryBottom","isBleedingAtTop","isBleedingAtBottom","currentElement","Container","processActions","getResourceInformation","getElementById","getActionById","_id","getElementByIdFromAction","ShowCardAction","card","getEffectiveHorizontalAlignment","horizontalAlignment","isInteractive","isStandalone","isInline","hasVisibleSeparator","separatorProperty","heightProperty","horizontalAlignmentProperty","spacingProperty","ActionProperty","parseAction","forbiddenActionTypes","BaseTextBlock","selectActionProperty","textProperty","setText","getFontSize","effectiveSize","getColorDefinition","colorSet","Dark","Light","ariaHidden","init","textDefinition","applyStylesTo","targetElement","effectiveFontType","colorDefinition","effectiveColor","targetColor","effectiveIsSubtle","fontWeight","effectiveWeight","Lighter","selectAction","sizeProperty","weightProperty","colorProperty","isSubtleProperty","fontTypeProperty","TextBlock","_treatAsPlainText","useMarkdown","restoreOriginalContent","maxLines","_computedLineHeight","originalHtml","_ttRoundtripPolicy","_originalInnerHtml","truncateIfSupported","children","isTextOnly","tagName","_processedText","preProcessedText","forElementId","labelElement","htmlFor","isEffectivelyEnabled","execute","setupElementForAccessibility","formattedText","markdownProcessingResult","applyMarkdown","didProcess","outputHtml","markStyle","effectiveStyle","processedHtml","_ttMarkdownPolicy","HTMLElement","marginTop","textOverflow","lastElementChild","anchors","getElementsByTagName","anchor","from","raiseAnchorClickedEvent","oncontextmenu","wordWrap","webkitBoxOrient","webkitLineClamp","whiteSpace","Center","textAlign","Right","processChildren","wrapProperty","maxLinesProperty","styleProperty","TextRun","italic","strikethrough","highlight","underline","href","getHref","fontStyle","textDecoration","italicProperty","strikethroughProperty","highlightProperty","underlineProperty","RichTextBlock","_inlines","internalAddInline","inline","forceAdd","jsonInline","textRun","parseElement","jsonInlines","renderedInlines","renderedInline","getInlineCount","getInlineAt","addInline","removeInline","Fact","titleProperty","valueProperty","FactSet","facts","borderWidth","borderSpacing","borderStyle","borderCollapse","trElement","tdElement","verticalAlign","factsProperty","ImageDimensionProperty","internalName","fallbackProperty","Image","Auto","applySize","pixelWidth","pixelHeight","Stretch","url","imageElement","renderedImageElement","onload","raiseImageLoadedEvent","onerror","errorElement","minWidth","onkeypress","code","Person","borderRadius","backgroundPosition","backgroundRepeat","setImageSource","altTextProperty","alt","mimeType","imageForceLoader","ImageForceLoader","forceLoad","configureImage","urlProperty","resetImage","backgroundColorProperty","pixelWidthProperty","pixelHeightProperty","shouldForceLoadProperty","doForceLoad","uniqueHash","now","urlWithForceLoadOption","image","allowVerticalOverflow","isSelectable","isElementAllowed","paddingRight","paddingBottom","forbiddenChildElements","InteractivityNotAllowed","_selectAction","overflowX","overflowY","ImageSet","_images","presentationStyle","pixelOffset","imageSetIsGrid","Grid","renderImageSize","flexWrap","toggle","gap","effectiveImageSize","imageContainer","margin","flexBasis","flexGrow","flexShrink","renderedImageStyle","objectFit","Stacked","applyStackedPresentationStyle","dimension","StackedImageConfigurator","parseNumericPixelDimension","bgColor","getEffectiveBackgroundColor","configureImagesArrayAsStackedLayout","getFirstVisibleRenderedItem","getLastVisibleRenderedItem","itemIndex","addImage","cardElement","imagesProperty","imageSizeProperty","imagePresentationStyle","offset","sign45","maxImageCounts","normalizationConstant","max","moveImageRight","moveImageUp","moveImageDown","makeImageRound","applyBorder","configureImageForBottomLeft","zIndex","configureImageForTopRight","ContentSource","mimeTypeProperty","CaptionSource","kind","labelProperty","MediaSource","type","MediaPlayer","play","posterUrl","_posterUrl","selectedMediaType","HTML5MediaPlayer","processSources","_selectedSources","_captionSources","_selectedMediaType","owner","sources","mimeComponents","split","supportedMediaTypes","captionSources","canPlay","fetchVideoDetails","_mediaElement","altText","autoplay","controls","muted","preload","renderedSource","captionSource","renderedCaptionSource","CustomMediaPlayer","IFrameMediaMediaPlayer","iFrameTitle","_videoId","container","position","iFrame","getEmbedVideoUrl","frameBorder","allow","allowFullscreen","videoId","VimeoPlayer","oEmbedUrl","response","fetch","ok","json","DailymotionPlayer","apiUrl","YouTubePlayer","_startTimeIndex","Media","createMediaPlayer","provider","customMediaPlayers","pattern","urlPatterns","handlePlayButtonInvoke","mediaPlayerElement","_mediaPlayer","onPlay","displayPoster","playButtonArrowWidth","playButtonArrowHeight","posterRootElement","poster","posterImageElement","parentNode","playButtonOuterElement","playButtonInnerElement","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopColor","borderRightColor","borderBottomColor","transform","playButtonContainer","then","mediaSource","sourcesProperty","captionSourcesProperty","posterProperty","Input","inputStyle","getAllLabelIds","labelIds","labelledBy","_renderedLabelElement","_renderedErrorMessageElement","updateInputControlAriaLabelledBy","_renderedInputControlElement","isNullable","renderedInputControlElement","inputControlContainerElement","_inputControlContainerElement","_outerContainerElement","labelPosition","flexDirection","renderedInputControlId","labelRichTextBlock","labelInline","isRequired","isRequiredCueInline","alignSelf","HTMLInputElement","HTMLSelectElement","labelWidth","labelWidthInPercent","labelWidthInPixel","defaultLabelWidth","InitialRender","onblur","ev","FocusLeave","resetDirtyState","valueChanged","resetValidationFailureCue","onValueChanged","onInputValueChangedHandler","onInputValueChanged","raiseInputValueChangedEvent","ChoiceSetInput","isDynamicTypeahead","removeValidationFailureCue","showValidationErrorMessage","errorMessageTextBlock","shouldHideInputAdornersForRevealOnHover","eventType","isInputInFocus","activeElement","inputHoverClassName","isMouseOverCard","RevealOnHover","isDirty","_oldValue","PropertyCantBeNull","RequiredInputsShouldHaveLabel","RequiredInputsShouldHaveErrorMessage","validateValue","isSet","showValidationFailureCue","isRequiredProperty","errorMessageProperty","inputStyleProperty","labelWidthProperty","invalidLabelWidth","labelPositionProperty","Above","TextInput","isMultiline","Text","setupInput","placeholder","maxLength","oninput","ctrlKey","inlineAction","Password","renderedInputControl","button","icon","textContent","regex","test","maxLengthProperty","isMultilineProperty","placeholderProperty","Tel","Url","Email","inlineActionProperty","regexProperty","ToggleInput","valueOn","valueOff","_checkboxInputElement","joinedLabelIds","_checkboxInputLabelElement","checked","_oldCheckboxValue","onchange","spacerElement","valueOnProperty","valueOffProperty","Choice","ChoiceSetInputDataQuery","typeProperty","datasetProperty","countProperty","skipProperty","isMultiSelect","choices","isCompact","getUniqueCategoryName","uniqueCategoryName","_uniqueCategoryCounter","choicesData","dataset","getFilterForDynamicSearch","_textInput","getDropdownElement","_filteredChoiceSet","dropdown","renderChoices","filter","fetchedChoices","processResponse","showLoadingIndicator","removeLoadingIndicator","showErrorIndicator","error","createPlaceholderOptionWhenValueDoesNotExist","placeholderOption","selected","disabled","hidden","internalApplyAriaCurrent","_selectElement","options","option","renderCompoundInput","cssClassName","defaultValues","_toggleInputs","_labels","choice","_uniqueCategoryName","compoundInput","filteredChoiceSet","FilteredChoiceSet","textInput","onInputChangeEventHandler","processChoices","inputContainer","dataList","append","appearance","CollectionCantBeEmpty","dynamicChoices","toggleInput","choicesProperty","choicesDataProperty","isMultiSelectProperty","choiceSetId","_choiceSetId","_choices","_dynamicChoices","_visibleChoiceCount","_highlightedChoiceId","choiceSetContainer","highlightChoice","_dropdown","createChoice","startIndex","valueSpan","unmatchedBeg","unmatchedBegSpan","filterSpan","unmatchedEnd","unmatchedEndSpan","onmousemove","scrollIntoView","currentHighlightedChoice","nextHighlightedChoice","filterChoices","trim","matchIndex","matchedText","choiceContainer","getStatusIndicator","_errorIndicator","errorIndicator","_loadingIndicator","loadingIndicator","resetDropdown","showDropdown","hasChildNodes","NumberInput","_numberInputElement","valueAsNumber","minProperty","maxProperty","DateInput","_dateInputElement","hideDatePicker","updateInputAdornersVisibility","valueAsDate","minDate","maxDate","TimeProperty","TimeInput","convertTimeStringToDate","timeString","_timeInputElement","hideTimePicker","Action","_state","_isFocusable","renderButtonContent","titleElement","AboveTitle","parentContainerStyle","isFocusable","internalGetReferencedInputs","internalPrepareForExecution","_inputs","internalValidateInputs","actionRegistry","raiseExecuteActionEvent","onExecute","onExecuteActionHandler","onExecuteAction","prepareForExecution","internalAfterExecute","rootObject","getAriaRole","ariaRole","getAriaRoleFromEnum","role","Button","Link","Menu","Tab","promoteTooltipToLabel","HTMLButtonElement","tooltip","buttonElement","_actionCollection","actionExecuted","invalidInputs","removeAction","validateInputs","isPrimary","state","iconUrlProperty","modeProperty","tooltipProperty","isEnabledProperty","roleProperty","SubmitActionBase","disabledUnlessAssociatedInputsChange","_isPrepared","_areReferencedInputsDirty","associatedInputs","current","_originalData","_processedData","resetReferencedInputsDirtyState","data","dataProperty","associatedInputsProperty","disabledUnlessAssociatedInputsChangeProperty","SubmitAction","JsonTypeName","UniversalAction","ExecuteAction","verbProperty","DataQuery","filterProperty","OpenUrlAction","ToggleVisibilityAction","targetElements","updateAriaControlsAttribute","elementIds","elementId","addTargetElement","removeTargetElement","targetElementsProperty","StringWithSubstitutionProperty","HttpHeader","nameProperty","HttpAction","_ignoreInputValidation","_url","header","headers","_body","ignoreInputValidation","bodyProperty","methodProperty","headersProperty","ignoreInputValidationProperty","InlineAdaptiveCard","jsonCard","Popup","OverflowAction","getActions","onDisplayOverflowActionMenuHandler","onDisplayOverflowActionMenu","raiseDisplayOverflowActionMenuEvent","contextMenu","menuItem","actionToExecute","ActionCollection","isActionAllowed","forbiddenTypes","_owner","forbiddenType","refreshContainer","_actionCardContainer","_actionCard","renderedActionCount","layoutChanged","showActionCard","suppressStyle","raiseEvent","renderedCard","_expandedAction","raiseInlineCardExpandedEvent","collapseExpandedAction","_renderedActions","previouslyExpandedAction","expandShowCardAction","afterSelectedAction","renderedAction","ra","jsonAction","forbiddenActions","ContainerWithActions","getForbiddenActionNames","addAction","TooManyActions","ActionTypeNotAllowed","buttonStrip","allowedActions","bind","primaryActions","secondaryActions","overflowPrimaryActions","shouldRenderOverflowActionButton","_overflowAction","isRootAction","isAtRootLevelActions","onRenderOverflowActionsHandler","onRenderOverflowActions","raiseRenderOverflowActionsEvent","spacer","buttonStripContainer","expandedAction","actionIndex","ActionSet","orientationProperty","ContainerStyleProperty","StylableCardElementContainer","hasExplicitStyle","applyBackground","styleDefinition","surroundingPadding","currentElementHasBackgroundImage","backgroundImage","explicitStyle","ContainerBase","_bleed","minPixelHeight","getHasExpandedAction","getBleed","setBleed","bleedProperty","minHeightProperty","BackgroundImage","apply","fillMode","Repeat","RepeatHorizontally","RepeatVertically","Cover","backgroundSize","backgroundPositionX","verticalAlignment","Top","backgroundPositionY","Bottom","fillModeProperty","verticalAlignmentProperty","backgroundImageProperty","insertItemAt","forceInsert","getItemsCollectionPropertyName","applyRTL","rtl","dir","getEffectiveVerticalContentAlignment","placeholderElement","boundary","handleElement","elt","containerMaxHeight","jsonItems","collectionPropertyName","verticalContentAlignment","isRtl","firstRenderedItem","lastRenderedItem","addItem","insertItemBefore","insertBefore","insertItemAfter","insertAfter","bleed","verticalContentAlignmentProperty","rtlProperty","Column","_computedWeight","Vertical","ColumnSet","widthProperty","_columns","createColumnInstance","parseCardObject","_errorType","ElementTypeNotAllowed","_renderedColumns","totalWeight","column","computedWeight","renderedColumn","jsonColumns","getColumnAt","weightedColumns","stretchedColumns","Hint","addColumn","onImageLoadedHandler","onImageLoaded","onAnchorClickedHandler","onAnchorClicked","isExpanded","onInlineCardExpandedHandler","onInlineCardExpanded","shouldUpdateLayout","onElementVisibilityChangedHandler","onElementVisibilityChanged","hide","readOnly","required","parseActions","renderedActions","renderIfEmpty","RefreshActionProperty","RefreshDefinition","actionProperty","userIdsProperty","AuthCardButton","imageProperty","TokenExchangeResource","uriProperty","providerIdProperty","Authentication","connectionNameProperty","buttonsProperty","tokenExchangeResourceProperty","refreshProperty","processMarkdown","onProcessMarkdown","markdownit","markdownIt","_haveWarnedAboutNoMarkdownProcessing","console","warn","isVersionSupported","bypassVersionCheck","_fallbackCard","fallbackElement","versionProperty","hasBackground","MissingCardType","UnsupportedCardVersion","speak","onmouseenter","onmouseleave","inputElements","schemaUrl","$schemaProperty","fallbackTextProperty","speakProperty","authenticationProperty","_forbiddenTypes","Set","internalParseCardObject","allowFallback","createInstanceCallback","oldForbiddenTypes","has","ForbiddenType","tryToFallback","UnknownType","fallback","cardObjectParsed","onParseAction","onParseElement","forbiddenTypeNames","errorType","UnknownElementType","UnknownActionType","_elementRegistry","setElementRegistry","_actionRegistry","setActionRegistry","extend","ssrDocument","removeEventListener","blur","nodeName","querySelector","querySelectorAll","createEvent","initEvent","childNodes","createElementNS","importNode","location","hash","host","hostname","origin","pathname","protocol","search","doc","ssrWindow","history","replaceState","pushState","go","back","CustomEvent","getComputedStyle","getPropertyValue","screen","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","win","classesToTokens","classes","c","to","arguments","noExtend","nextSource","nodeType","keysArray","nextIndex","len","nextKey","desc","__swiper__","el","varName","varValue","setProperty","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","translate","time","startTime","duration","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","isOutOfBound","animate","getTime","progress","easeProgress","cos","PI","currentPosition","scrollTo","selector","showWarning","err","tag","box","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","elementStyle","elementIndex","previousSibling","parents","parentElement","elementOuterSize","includeMargins","parseFloat","offsetWidth","makeElementsArray","support","deviceCached","browser","getSupport","smoothScroll","touch","DocumentTouch","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","eventsEmitter","on","events","handler","priority","self","eventsListeners","destroyed","method","once","onceHandler","off","__emitterProxy","_len","_key","onAny","eventsAnyListeners","offAny","eventHandler","emit","_len2","_key2","unshift","processLazyPreloader","imageEl","slideEl","closest","isElement","slideClass","lazyEl","lazyPreloaderClass","shadowRoot","unlazy","slides","amount","lazyPreloadPrevNext","slidesPerView","slidesPerViewDynamic","ceil","activeIndex","grid","rows","activeColumn","preloadColumns","_","includes","slideIndexLastInView","rewind","loop","realIndex","update","updateSize","clientWidth","isHorizontal","isVertical","Number","assign","updateSlides","getDirectionPropertyValue","getDirectionLabel","slidesEl","swiperSize","rtlTranslate","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","centeredSlides","cssMode","gridEnabled","slideSize","initSlides","unsetSlides","shouldResetSlideSize","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","webkitTransform","roundLengths","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesBefore","slidesAfter","groupSize","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","getSlideIndexByData","visibleSlides","minusOffset","offsetLeft","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","slideVisibleClass","slideFullyVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","activeSlide","prevSlide","nextSlide","slideActiveClass","slideNextClass","slidePrevClass","nextEls","nextElementSibling","next","elementNextAll","prevEls","previousElementSibling","prev","elementPrevAll","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","firstSlideInColumn","activeSlideIndex","initialized","runCallbacksOnInit","updateClickedSlide","path","pathEl","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","transitionEmit","runCallbacks","direction","step","slideTo","internal","initial","animating","preventInteractionOnTransition","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","setTranslate","transitionStart","transitionEnd","isH","t","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","behavior","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","targetSlideIndex","cols","needLoopFix","loopFix","slideRealIndex","slideNext","perGroup","slidesPerGroupAuto","increment","loopPreventsSliding","_clientLeft","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","slideSelector","loopedSlides","getSlideIndex","loopCreate","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","slideBlankClass","loopAddBlankSlides","recalcSlides","byController","byMousewheel","loopAdditionalSlides","fill","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","__preventObserver__","swiperLoopMoveDOM","prepend","currentSlideTranslate","diff","touchEventsData","startTranslate","currentTranslate","shift","controller","control","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","onTouchStart","originalEvent","pointerId","targetTouches","touchId","identifier","pageX","touches","simulateTouch","pointerType","targetEl","touchEventsTarget","which","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","found","getRootNode","closestElement","allowClick","swipeHandler","currentX","currentY","pageY","startY","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","previousX","previousY","diffX","diffY","sqrt","touchAngle","atan2","cancelable","touchMoveStopPropagation","nested","touchesDiff","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","allowLoopFix","getTranslate","evt","bubbles","dispatchEvent","allowMomentumBounce","grabCursor","setGrabCursor","loopSwapReset","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","isSafari","isWebView","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","isVirtualLoop","running","paused","resizeTimeout","resume","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","newProgress","previousTranslate","onLoad","onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","capture","domMethod","swiperMethod","passive","updateOnWindowResize","isGridEnabled","swiperElementNodeName","resizeObserver","createElements","eventsPrefix","virtualTranslate","breakpointsBase","uniqueNavElements","passiveListeners","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","x","y","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","transition","transitionDuration","transitionDelay","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","wasLoop","changeDirection","hasLoop","containerEl","currentHeight","points","point","minRatio","substr","b","wasLocked","lastSlideRightEdge","addClasses","suffixes","entries","prefix","resultClasses","prepareClasses","removeClasses","extendedDefaults","Swiper","swipers","newParams","needPerspectiveFix","num","isSafariBrowser","need3dFix","calcBrowser","modules","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","setProgress","cls","getSlideClasses","updates","view","exact","spv","breakLoop","translateValue","translated","complete","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","toUpperCase","getWrapperSelector","slideSlots","hostEl","lazyElements","destroy","deleteInstance","cleanStyles","object","deleteProps","extendDefaults","newDefaults","installModule","use","m","Keyboard","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","createElementIfNotDefined","checkProps","Navigation","getEl","res","toggleEl","subEl","disabledClass","lockClass","onPrevClick","onNextClick","initButton","destroyButton","hideOnClick","hiddenClass","navigationDisabledClass","_s","pagination","clickable","isHidden","classesToSelector","Pagination","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","onBulletClick","total","firstIndex","midIndex","classesToRemove","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","paginationHTML","numberOfBullets","Scrollbar","dragStartPos","dragSize","trackSize","divider","timeout","dragTimeout","scrollbar","dragEl","newSize","newPos","opacity","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","passiveListener","eventMethod","swiperEl","dragClass","draggable","scrollbarDisabledClass","A11y","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","clicked","liveRegion","notify","notification","makeElFocusable","makeElNotFocusable","addElRole","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","hasPagination","hasClickablePagination","initNavEl","wrapperId","addElControls","handlePointerDown","handlePointerUp","handleFocus","isActive","sourceCapabilities","firesTouchEvents","repeat","round","live","addElLive","updateNavigation","updatePagination","History","keepQuery","paths","slugify","getPathValues","urlOverride","URL","pathArray","part","setHistory","currentState","scrollToSlide","setHistoryPopState","hashNavigation","Autoplay","raf","timeLeft","waitForTransition","disableOnInteraction","stopOnLastSlide","reverseDirection","pauseOnMouseEnter","autoplayTimeLeft","wasPaused","pausedByTouch","touchStartTimeout","slideChanged","pausedByInteraction","pausedByPointerEnter","autoplayDelayTotal","autoplayDelayCurrent","autoplayStartTime","onTransitionEnd","calcTimeLeft","run","delayForce","currentSlideDelay","activeSlideEl","getSlideDelay","proceed","stop","pause","onVisibilityChange","visibilityState","onPointerEnter","onPointerLeave","prototypeGroup","protoMethod","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","CarouselPage","carouselSlide","getForbiddenChildElements","Carousel","carouselLoop","carouselOrientation","_pages","_currentIndex","_previousEventType","timerProperty","initialPageProperty","isValidParsedPageIndex","isValidPageIndex","isValidRenderedPageIndex","_renderedPages","collectionSize","previousEventType","_containerForAdorners","carouselHeight","_carouselPageContainer","addPage","page","currentPageId","_carousel","currentPageIndex","jsonPages","createCarouselPageInstance","validateParsing","validateOrientationProperties","cardLevelContainer","carouselContainer","containerForAdorners","carouselWrapper","navigationContainer","prevElementDiv","nextElementDiv","updateCssForHorizontalCarousel","updateCssForVerticalCarousel","requestedNumberOfPages","initializeCarouselControl","nextElement","prevElement","paginationElement","nextElementAdjustedForRtl","prevElementAdjustedForRtl","prevElementAdjustedForOrientation","nextElementAdjustedForOrientation","swiperOptions","_event","raiseCarouselEvent","NavigationNext","NavigationPrevious","currentIndex","destroyResizeObserver","ariaLabel","createResizeObserver","carouselPageContainer","createCarouselEvent","CarouselEvent","onCarouselEventHandler","onCarouselEvent","checkIfCarouselInValidStateForResizeEvent","_observer","loopProperty","carouselHeightProperty","carouselId","activeCarouselPageId","activeCarouselPageIndex","ActivityRequestTrigger","TableColumnDefinition","horizontalCellContentAlignmentProperty","verticalCellContentAlignmentProperty","StylableContainer","parseItem","createItemInstance","internalAddItem","internalRemoveItem","internalIndexOf","getCollectionPropertyName","instance","TableCell","_columnIndex","_cellType","parentRow","parentTable","showGridLines","gridStyle","cellElement","cellType","horizontalCellContentAlignment","columnIndex","verticalCellContentAlignment","TableRow","isFirstRow","getIsFirstRow","rowElement","getColumnCount","cell","firstRowAsHeaders","renderedCell","computedWidth","addCell","removeCellAt","ensureHasEnoughCells","cellCount","Table","gridStyleProperty","ensureRowsHaveEnoughCells","removeCellsFromColumn","totalWeights","tableElement","borderTop","borderLeft","renderedRow","separatorRow","removeColumn","addRow","row","_columnsProperty","firstRowAsHeadersProperty","showGridLinesProperty","ChannelAdapter","ActivityRequestError","ActivityResponse","request","SuccessResponse","rawContent","ErrorResponse","LoginRequestResponse","auth","_auth","buttons","signinButton","tokenExchangeResource","level","optionalParams","onLogEvent","log","ActivityRequest","trigger","consecutiveActions","attemptNumber","retryAsync","onSend","AdaptiveApplet","displayCard","_cardHostElement","_refreshButtonHostElement","showManualRefreshButton","refreshAction","onShowManualRefreshButton","renderedRefreshButton","onRenderManualRefreshButton","Automatic","autoRefreshPausedMessage","cardPayload","inlines","internalExecuteAction","createActivityRequest","internalSendActivityRequestAsync","onPrepareActivityRequest","createMagicCodeInputCard","payload","_submitMagicCodeActionId","_cancelMagicCodeAuthActionId","cancelAutomaticRefresh","_allowAutomaticCardUpdate","createSerializationContext","onCreateSerializationContext","internalSetCard","_cardPayload","serializationContext","onCardChanging","_card","authentication","onPrefetchSSOToken","dataQueryAction","count","_choiceSet","onCardChanged","Info","Disabled","channelAdapter","onAction","createProgressOverlay","_progressOverlay","onCreateProgressOverlay","spinner","removeProgressOverlay","onRemoveProgressOverlay","activityRequestSucceeded","parsedContent","onActivityRequestSucceeded","activityRequestFailed","onActivityRequestFailed","showAuthCodeInputDialog","onShowAuthCodeInputDialog","authCodeInputCard","submitMagicCodeAction","authCode","alert","internalSendExecuteRequestAsync","internalSendDataQueryRequestAsync","overlay","done","sendRequestAsync","attemptOAuth","onSSOTokenNeeded","onShowSigninPrompt","screenX","outerWidth","screenY","outerHeight","open","retryIn","Promise","resolve","_reject","rawResponse","parsedResponse","refreshCard","setCard"],"sourceRoot":""}