UNPKG

outsystems-ui

Version:
21,990 lines 1.25 MB
/*!
OutSystems UI 2.22.0 • ODC Platform
Website:
 • https://www.outsystems.com/outsystems-ui
GitHub:
 • https://github.com/OutSystems/outsystems-ui
*/ 
"use strict";
var osui;
(function (osui) {
    function GetVersion() {
        console.warn('osui.GetVersion(), is deprecated. Please use the API `OutSystems.OSUI.GetVersion()`.');
        return OutSystems.OSUI.GetVersion();
    }
    osui.GetVersion = GetVersion;
    function ToggleClass(el, state, className) {
        console.warn('osui.ToggleClass(...), is deprecated. Please use the API `OutSystems.OSUI.Utils.ToggleClass(...)`.');
        OutSystems.OSUI.Utils.ToggleClass(el, state, className);
    }
    osui.ToggleClass = ToggleClass;
    function GetClosest(elem, selector) {
        console.warn('osui.GetClosest(...), is deprecated. Please use the API `OutSystems.OSUI.Utils.GetClosest(...)`.');
        return OutSystems.OSUI.Utils.GetClosest(elem, selector);
    }
    osui.GetClosest = GetClosest;
    function FixInputs() {
        console.warn('osui.FixInputs(...), is deprecated. Please use the API `OutSystems.OSUI.Utils.FixInputs(...)`.');
        OutSystems.OSUI.Utils.LayoutPrivate.FixInputs();
    }
    osui.FixInputs = FixInputs;
    function HasMasterDetail() {
        console.warn('osui.HasMasterDetail(), is deprecated. Please use the API `OutSystems.OSUI.Utils.HasMasterDetail()`.');
        return OutSystems.OSUI.Utils.HasMasterDetail();
    }
    osui.HasMasterDetail = HasMasterDetail;
    function HideOnScroll() {
        console.warn('osui.HideOnScroll(), is deprecated. Please use the API `OutSystems.OSUI.Utils.HideOnScroll.Init()`.');
        return {
            init: () => {
                OutSystems.OSUI.Utils.HideOnScroll.Init();
            },
        };
    }
    osui.HideOnScroll = HideOnScroll;
})(osui || (osui = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var Menu;
            (function (Menu) {
                function AddMenuOnOrientationChange(callback) {
                    console.warn('OutSystems.OSUI.Utils.Menu.AddMenuOnOrientationChange(...), is deprecated. Please use the API `OutSystems.OSUI.Utils.Menu.OnReady(...)`.');
                    return OutSystems.OSUI.Utils.Menu.addMenuOnOrientationChange(callback);
                }
                Menu.AddMenuOnOrientationChange = AddMenuOnOrientationChange;
                function RemoveMenuOnOrientationChange() {
                    console.warn('OutSystems.OSUI.Utils.Menu.RemoveMenuOnOrientationChange(), is deprecated. Please use the API `OutSystems.OSUI.Utils.Menu.OnDestroy()`.');
                    return OutSystems.OSUI.Utils.Menu.removeMenuOnOrientationChange();
                }
                Menu.RemoveMenuOnOrientationChange = RemoveMenuOnOrientationChange;
            })(Menu = Utils.Menu || (Utils.Menu = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Constants;
        (function (Constants) {
            Constants.A11YAttributes = {
                Aria: {
                    Atomic: 'aria-atomic',
                    Busy: 'aria-busy',
                    Controls: 'aria-controls',
                    Describedby: 'aria-describedby',
                    Disabled: 'aria-disabled',
                    Expanded: 'aria-expanded',
                    Haspopup: {
                        prop: 'aria-haspopup',
                        value: {
                            False: 'false',
                            True: 'true',
                            Menu: 'menu',
                            Listbox: 'listbox',
                            Tree: 'tree',
                            Grid: 'grid',
                            Dialog: 'dialog',
                        },
                    },
                    Hidden: 'aria-hidden',
                    Label: 'aria-label',
                    Labelledby: 'aria-labelledby',
                    Multiselectable: 'aria-multiselectable',
                    Selected: 'aria-selected',
                    ValueMax: 'valuemax',
                    ValueMin: 'valuemin',
                },
                AriaLive: {
                    AttrName: 'aria-live',
                    Assertive: 'assertive',
                    Polite: 'polite',
                    Off: 'off',
                },
                Role: {
                    Alert: 'alert',
                    AlertDialog: 'alertdialog',
                    AttrName: 'role',
                    Button: 'button',
                    Complementary: 'complementary',
                    Listbox: 'listbox',
                    Menu: 'menu',
                    MenuItem: 'menuitem',
                    Option: 'option',
                    Presentation: 'presentation',
                    Progressbar: 'progressbar',
                    Region: 'region',
                    Search: 'search',
                    Tab: 'tab',
                    TabList: 'tablist',
                    TabPanel: 'tabpanel',
                    Tooltip: 'tooltip',
                },
                TabIndex: 'tabindex',
                States: {
                    Empty: '',
                    False: 'false',
                    TabIndexHidden: '-1',
                    TabIndexShow: '0',
                    True: 'true',
                },
            };
            Constants.AccessibilityHideElementClass = 'wcag-hide-text';
            Constants.AllowPropagationAttr = '[data-allow-event-propagation]';
            Constants.Comma = ',';
            Constants.Dot = '.';
            Constants.EmptyString = '';
            Constants.EnableLogMessages = false;
            Constants.FocusableElems = 'a[href]:not([disabled]), [tabindex="0"], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])';
            Constants.FocusableTabIndexDefault = 'default-tabindex-element';
            Constants.FocusableTabIndexHidden = '[tabindex="-1"][default-tabindex-element]';
            Constants.FocusTrapIgnoreAttr = 'ignore-focus-trap';
            Constants.HasAccessibilityClass = 'has-accessible-features';
            Constants.InvalidNumber = -1;
            Constants.IsRTLClass = 'is-rtl';
            Constants.IsRTLDeviceType = 'is-rtl-device';
            Constants.JavaScriptTypes = {
                Undefined: 'undefined',
                Boolean: 'boolean',
                Number: 'number',
                String: 'string',
                Symbol: 'symbol',
                Function: 'function',
                Object: 'object',
            };
            Constants.JustInputs = 'input:not([type=button]):not([type=checkbox]):not([type=color]):not([type=file]):not([type=hidden]):not([type=image]):not([type=image]):not([type=radio]):not([type=range]):not([type=reset]):not([type=submit]), textarea';
            Constants.Language = {
                code: 'en-US',
                short: 'en',
            };
            Constants.Months = [
                'January',
                'February',
                'March',
                'April',
                'May',
                'June',
                'July',
                'August',
                'September',
                'October',
                'November',
                'December',
            ];
            Constants.NoTransition = 'no-transition';
            Constants.OSPlatform = 'ODC';
            Constants.OSUIVersion = '2.22.0';
            Constants.ZeroValue = 0;
        })(Constants = OSUI.Constants || (OSUI.Constants = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var ErrorCodes;
        (function (ErrorCodes) {
            ErrorCodes.AbstractChild = {
                FailParentNotFound: 'OSUI-GEN-01001',
            };
            ErrorCodes.Accordion = {
                FailChildItemClicked: 'OSUI-GEN-07001',
                FailSetNewChildItem: 'OSUI-GEN-07002',
                FailToSetChildItemAction: 'OSUI-GEN-07003',
                FailUnsetNewChildItem: 'OSUI-GEN-07004',
            };
            ErrorCodes.Dropdown = {
                FailOptionItemClicked: 'OSUI-GEN-02001',
                FailOptionItemKeyPressed: 'OSUI-GEN-02002',
                FailSetNewOptionItem: 'OSUI-GEN-02003',
                FailToSetOptionItemAction: 'OSUI-GEN-02004',
                FailUnsetNewOptionItem: 'OSUI-GEN-02005',
                HasNoImplementation: {
                    code: 'OSUI-GEN-02006',
                    message: 'This method has no implementation on this Dropdown Type.',
                },
            };
            ErrorCodes.DropdownServerSide = {
                FailOnSetIntersectionObserver: 'OSUI-GEN-0401',
            };
            ErrorCodes.RangeSlider = {
                FailSetValue: 'OSUI-GEN-04001',
            };
            ErrorCodes.SectionIndex = {
                FailChildItemClicked: 'OSUI-GEN-05001',
                FailSetNewChildItem: 'OSUI-GEN-05002',
                FailToSetChildItemAction: 'OSUI-GEN-05003',
                FailUnsetNewChildItem: 'OSUI-GEN-05004',
            };
            ErrorCodes.SectionIndexItem = {
                FailToSetTargetElement: 'OSUI-GEN-06001',
            };
            ErrorCodes.Tooltip = {
                FailOnSetIntersectionObserver: 'OSUI-GEN-08001',
            };
            ErrorCodes.Tabs = {
                FailChildItemClicked: 'OSUI-GEN-09001',
                FailSetNewChildContentItem: 'OSUI-GEN-09002',
                FailSetNewChildHeaderItem: 'OSUI-GEN-09003',
                FailToSetChildItemAction: 'OSUI-GEN-09004',
                FailUnsetNewChildContentItem: 'OSUI-GEN-09005',
                FailUnsetNewChildHeaderItem: 'OSUI-GEN-09006',
            };
            ErrorCodes.AbstractParent = {
                FailChildNotFound: 'OSUI-GEN-10001',
                FailChildsNotFound: 'OSUI-GEN-10002',
                FailTypeNotFound: 'OSUI-GEN-10003',
            };
            ErrorCodes.AbstractProviderPattern = {
                FailProviderEventHandler: 'OSUI-GEN-11001',
                FailProviderEventRemoval: {
                    code: 'OSUI-GEN-11002',
                    message: 'The event with this eventId does not exist',
                },
                FailProviderEventSet: {
                    code: 'OSUI-GEN-11003',
                    message: 'The provided eventName does not exist or is not supported by the provider',
                },
            };
            ErrorCodes.ProviderEventsManager = {
                FailPendingEventRemoval: 'OSUI-GEN-12001',
                FailSavingPendingEvent: 'OSUI-GEN-12002',
                FailSavedEventRemoval: 'OSUI-GEN-12003',
                FailSavingEvent: 'OSUI-GEN-12004',
            };
        })(ErrorCodes = OSUI.ErrorCodes || (OSUI.ErrorCodes = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var GlobalEnum;
        (function (GlobalEnum) {
            let CommonPatternsProperties;
            (function (CommonPatternsProperties) {
                CommonPatternsProperties["ExtendedClass"] = "ExtendedClass";
            })(CommonPatternsProperties = GlobalEnum.CommonPatternsProperties || (GlobalEnum.CommonPatternsProperties = {}));
            let CssClassElements;
            (function (CssClassElements) {
                CssClassElements["AcessibilityStyleTag"] = "acessibility-style-tag";
                CssClassElements["ActiveScreen"] = "active-screen";
                CssClassElements["AsideExpandable"] = "aside-expandable";
                CssClassElements["Container"] = "screen-container";
                CssClassElements["Content"] = "content";
                CssClassElements["DarkMode"] = "os-dark-mode";
                CssClassElements["DeprecatedSubmenu"] = "submenu";
                CssClassElements["Footer"] = "footer";
                CssClassElements["Header"] = "header";
                CssClassElements["HeaderHideOnScroll"] = "hide-header-on-scroll";
                CssClassElements["HeaderIsFixed"] = "fixed-header";
                CssClassElements["HeaderIsVisible"] = "header-is--visible";
                CssClassElements["HeaderTopContent"] = "header-top-content";
                CssClassElements["HighContrast"] = "os-high-contrast";
                CssClassElements["InputNotValid"] = "not-valid";
                CssClassElements["IsTouch"] = "is--touch";
                CssClassElements["Layout"] = "layout";
                CssClassElements["LayoutNative"] = "layout-native";
                CssClassElements["LayoutSide"] = "layout-side";
                CssClassElements["LayoutTop"] = "layout-top";
                CssClassElements["List"] = "list";
                CssClassElements["LoginPassword"] = "login-password";
                CssClassElements["MainContent"] = "main-content";
                CssClassElements["MenuLinks"] = "app-menu-links";
                CssClassElements["Placeholder"] = "ph";
                CssClassElements["Popup"] = "popup-dialog";
                CssClassElements["SkipContent"] = "skip-nav";
            })(CssClassElements = GlobalEnum.CssClassElements || (GlobalEnum.CssClassElements = {}));
            let CSSSelectors;
            (function (CSSSelectors) {
                CSSSelectors["InputFormControl"] = "input.form-control";
                CSSSelectors["IosBounceScroll"] = "ios .ios-bounce:not(.hide-header-on-scroll) .content";
                CSSSelectors["LayoutNativeHeader"] = "layout-native:not(.hide-header-on-scroll) .header";
            })(CSSSelectors = GlobalEnum.CSSSelectors || (GlobalEnum.CSSSelectors = {}));
            let CSSVariables;
            (function (CSSVariables) {
                CSSVariables["FooterHeight"] = "--footer-height";
                CSSVariables["HeaderContentHeight"] = "--header-size-content";
                CSSVariables["OverlayOpacity"] = "--overlay-opacity";
                CSSVariables["ViewportHeight"] = "--viewport-height";
            })(CSSVariables = GlobalEnum.CSSVariables || (GlobalEnum.CSSVariables = {}));
            let Position;
            (function (Position) {
                Position["Bottom"] = "bottom";
                Position["BottomLeft"] = "bottom-left";
                Position["BottomRight"] = "bottom-right";
                Position["Center"] = "center";
                Position["Left"] = "left";
                Position["Right"] = "right";
                Position["Top"] = "top";
                Position["TopLeft"] = "top-left";
                Position["TopRight"] = "top-right";
            })(Position = GlobalEnum.Position || (GlobalEnum.Position = {}));
            let FloatingAlignment;
            (function (FloatingAlignment) {
                FloatingAlignment["Center"] = "center";
                FloatingAlignment["End"] = "end";
                FloatingAlignment["Start"] = "start";
            })(FloatingAlignment = GlobalEnum.FloatingAlignment || (GlobalEnum.FloatingAlignment = {}));
            let FloatingPosition;
            (function (FloatingPosition) {
                FloatingPosition["Auto"] = "auto";
                FloatingPosition["Bottom"] = "bottom";
                FloatingPosition["BottomEnd"] = "bottom-end";
                FloatingPosition["BottomStart"] = "bottom-start";
                FloatingPosition["Center"] = "center";
                FloatingPosition["Left"] = "left";
                FloatingPosition["LeftEnd"] = "left-end";
                FloatingPosition["LeftStart"] = "left-start";
                FloatingPosition["Right"] = "right";
                FloatingPosition["RightEnd"] = "right-end";
                FloatingPosition["RightStart"] = "right-start";
                FloatingPosition["Top"] = "top";
                FloatingPosition["TopEnd"] = "top-end";
                FloatingPosition["TopStart"] = "top-start";
            })(FloatingPosition = GlobalEnum.FloatingPosition || (GlobalEnum.FloatingPosition = {}));
            let CssProperties;
            (function (CssProperties) {
                CssProperties["Auto"] = "auto";
                CssProperties["Initial"] = "initial";
                CssProperties["MaxContent"] = "max-content";
                CssProperties["None"] = "none";
                CssProperties["PaddingTop"] = "padding-top";
            })(CssProperties = GlobalEnum.CssProperties || (GlobalEnum.CssProperties = {}));
            let DataBlocksTag;
            (function (DataBlocksTag) {
                DataBlocksTag["DataBlock"] = "[data-block]";
                DataBlocksTag["Input"] = "[data-input]";
                DataBlocksTag["Label"] = "[data-label]";
                DataBlocksTag["TextArea"] = "[data-textarea]";
            })(DataBlocksTag = GlobalEnum.DataBlocksTag || (GlobalEnum.DataBlocksTag = {}));
            let DateFormat;
            (function (DateFormat) {
                DateFormat["D"] = "D";
                DateFormat["d"] = "d";
                DateFormat["DD"] = "DD";
                DateFormat["DDD"] = "DDD";
                DateFormat["M"] = "M";
                DateFormat["m"] = "m";
                DateFormat["MM"] = "MM";
                DateFormat["MMM"] = "MMM";
                DateFormat["Y"] = "Y";
                DateFormat["y"] = "y";
                DateFormat["YY"] = "YY";
                DateFormat["YYY"] = "YYY";
                DateFormat["YYYY"] = "YYYY";
            })(DateFormat = GlobalEnum.DateFormat || (GlobalEnum.DateFormat = {}));
            let Direction;
            (function (Direction) {
                Direction["Bottom"] = "bottom";
                Direction["Down"] = "down";
                Direction["Left"] = "left";
                Direction["LTR"] = "ltr";
                Direction["None"] = "";
                Direction["Right"] = "right";
                Direction["RTL"] = "rtl";
                Direction["Top"] = "top";
                Direction["TTB"] = "ttb";
                Direction["Up"] = "up";
            })(Direction = GlobalEnum.Direction || (GlobalEnum.Direction = {}));
            let ScrollBehavior;
            (function (ScrollBehavior) {
                ScrollBehavior["Auto"] = "auto";
                ScrollBehavior["Instant"] = "instant";
                ScrollBehavior["Smooth"] = "smooth";
            })(ScrollBehavior = GlobalEnum.ScrollBehavior || (GlobalEnum.ScrollBehavior = {}));
            let ScrollPositionBehavior;
            (function (ScrollPositionBehavior) {
                ScrollPositionBehavior["Start"] = "start";
                ScrollPositionBehavior["Center"] = "center";
                ScrollPositionBehavior["End"] = "end";
                ScrollPositionBehavior["Nearest"] = "nearest";
            })(ScrollPositionBehavior = GlobalEnum.ScrollPositionBehavior || (GlobalEnum.ScrollPositionBehavior = {}));
            let HTMLAttributes;
            (function (HTMLAttributes) {
                HTMLAttributes["AllowEventPropagation"] = "[data-allow-event-propagation=true], [data-allow-event-propagation=True]";
                HTMLAttributes["Class"] = "class";
                HTMLAttributes["DataInput"] = "data-input";
                HTMLAttributes["Disabled"] = "disabled";
                HTMLAttributes["Href"] = "href";
                HTMLAttributes["Id"] = "id";
                HTMLAttributes["Name"] = "name";
                HTMLAttributes["StatusBar"] = "data-status-bar-height";
                HTMLAttributes["Style"] = "style";
                HTMLAttributes["Type"] = "type";
                HTMLAttributes["Value"] = "value";
            })(HTMLAttributes = GlobalEnum.HTMLAttributes || (GlobalEnum.HTMLAttributes = {}));
            let HTMLElement;
            (function (HTMLElement) {
                HTMLElement["Body"] = "body";
                HTMLElement["Button"] = "button";
                HTMLElement["Div"] = "div";
                HTMLElement["FieldSet"] = "fieldset";
                HTMLElement["Input"] = "input";
                HTMLElement["Link"] = "a";
                HTMLElement["Radio"] = "radio";
                HTMLElement["Span"] = "span";
            })(HTMLElement = GlobalEnum.HTMLElement || (GlobalEnum.HTMLElement = {}));
            let HTMLEvent;
            (function (HTMLEvent) {
                HTMLEvent["AnimationEnd"] = "animationend";
                HTMLEvent["AnimationStart"] = "animationstart";
                HTMLEvent["Blur"] = "blur";
                HTMLEvent["Change"] = "change";
                HTMLEvent["Click"] = "click";
                HTMLEvent["Focus"] = "focus";
                HTMLEvent["keyDown"] = "keydown";
                HTMLEvent["MouseDown"] = "mousedown";
                HTMLEvent["MouseEnter"] = "mouseenter";
                HTMLEvent["MouseLeave"] = "mouseleave";
                HTMLEvent["MouseUp"] = "mouseup";
                HTMLEvent["OrientationChange"] = "orientationchange";
                HTMLEvent["Prefix"] = "on";
                HTMLEvent["Resize"] = "resize";
                HTMLEvent["Scroll"] = "scroll";
                HTMLEvent["ScrollEnd"] = "scrollend";
                HTMLEvent["TouchEnd"] = "touchend";
                HTMLEvent["TouchMove"] = "touchmove";
                HTMLEvent["TouchStart"] = "touchstart";
                HTMLEvent["TransitionEnd"] = "transitionend";
                HTMLEvent["Message"] = "message";
            })(HTMLEvent = GlobalEnum.HTMLEvent || (GlobalEnum.HTMLEvent = {}));
            let CustomEvent;
            (function (CustomEvent) {
                CustomEvent["BalloonOnToggle"] = "balloon.onToggle";
            })(CustomEvent = GlobalEnum.CustomEvent || (GlobalEnum.CustomEvent = {}));
            let InlineStyle;
            (function (InlineStyle) {
                InlineStyle["Display"] = "display";
                InlineStyle["Height"] = "height";
                InlineStyle["Left"] = "left";
                InlineStyle["Opacity"] = "opacity";
                InlineStyle["PointerEvents"] = "pointerEvents";
                InlineStyle["Top"] = "top";
                InlineStyle["Transform"] = "transform";
                InlineStyle["Width"] = "width";
            })(InlineStyle = GlobalEnum.InlineStyle || (GlobalEnum.InlineStyle = {}));
            GlobalEnum.InlineStyleValue = {
                Display: {
                    block: 'block',
                    contents: 'contents',
                    inline: 'inline',
                    none: 'none',
                    unset: '',
                },
            };
            let Keycodes;
            (function (Keycodes) {
                Keycodes["ArrowDown"] = "ArrowDown";
                Keycodes["ArrowLeft"] = "ArrowLeft";
                Keycodes["ArrowRight"] = "ArrowRight";
                Keycodes["ArrowUp"] = "ArrowUp";
                Keycodes["End"] = "End";
                Keycodes["Enter"] = "Enter";
                Keycodes["Escape"] = "Escape";
                Keycodes["Home"] = "Home";
                Keycodes["PageDown"] = "PageDown";
                Keycodes["PageUp"] = "PageUp";
                Keycodes["Shift"] = "Shift";
                Keycodes["ShiftTab"] = "ShiftTab";
                Keycodes["Space"] = " ";
                Keycodes["Tab"] = "Tab";
            })(Keycodes = GlobalEnum.Keycodes || (GlobalEnum.Keycodes = {}));
            let KeyframesEffectOptions;
            (function (KeyframesEffectOptions) {
                KeyframesEffectOptions["EasingLinear"] = "linear";
                KeyframesEffectOptions["FillBoth"] = "both";
            })(KeyframesEffectOptions = GlobalEnum.KeyframesEffectOptions || (GlobalEnum.KeyframesEffectOptions = {}));
            let MobileOS;
            (function (MobileOS) {
                MobileOS["Android"] = "android";
                MobileOS["IOS"] = "ios";
                MobileOS["MacOS"] = "osx";
                MobileOS["Unknown"] = "unknown";
                MobileOS["Windows"] = "windows";
            })(MobileOS = GlobalEnum.MobileOS || (GlobalEnum.MobileOS = {}));
            let Orientation;
            (function (Orientation) {
                Orientation["Horizontal"] = "horizontal";
                Orientation["None"] = "";
                Orientation["Vertical"] = "vertical";
            })(Orientation = GlobalEnum.Orientation || (GlobalEnum.Orientation = {}));
            let PatternName;
            (function (PatternName) {
                PatternName["Accordion"] = "Accordion";
                PatternName["AccordionItem"] = "Accordion Item";
                PatternName["AnimatedLabel"] = "Animated Label";
                PatternName["Balloon"] = "Balloon";
                PatternName["BottomSheet"] = "Bottom Sheet";
                PatternName["ButtonLoading"] = "ButtonLoading";
                PatternName["Carousel"] = "Carousel";
                PatternName["Datepicker"] = "Datepicker";
                PatternName["Dropdown"] = "Dropdown";
                PatternName["DropdownServerSideItem"] = "DropdownServerSideItem";
                PatternName["FlipContent"] = "Flip Content";
                PatternName["FloatingActions"] = "Floating Actions";
                PatternName["FloatingActionsItem"] = "Floating Actions Item";
                PatternName["Gallery"] = "Gallery";
                PatternName["InlineSvg"] = "InlineSVG";
                PatternName["MonthPicker"] = "MonthPicker";
                PatternName["Notification"] = "Notification";
                PatternName["OverflowMenu"] = "OverflowMenu";
                PatternName["ProgressBar"] = "Progress Bar";
                PatternName["ProgressCircle"] = "Progress Circle";
                PatternName["RangeSlider"] = "Range Slider";
                PatternName["RangeSliderInterval"] = "Range Slider Interval";
                PatternName["Rating"] = "Rating";
                PatternName["Search"] = "Search";
                PatternName["SectionIndex"] = "Section Index";
                PatternName["SectionIndexItem"] = "Section Index Item";
                PatternName["Sidebar"] = "Sidebar";
                PatternName["Submenu"] = "Submenu";
                PatternName["SwipeEvents"] = "SwipeEvents";
                PatternName["Tabs"] = "Tabs";
                PatternName["TabsContentItem"] = "TabsContentItem";
                PatternName["TabsHeaderItem"] = "TabsHeaderItem";
                PatternName["Timepicker"] = "Timepicker";
                PatternName["Tooltip"] = "Tooltip";
                PatternName["TouchEvents"] = "TouchEvents";
                PatternName["Video"] = "Video";
            })(PatternName = GlobalEnum.PatternName || (GlobalEnum.PatternName = {}));
            let ShapeTypes;
            (function (ShapeTypes) {
                ShapeTypes["Rounded"] = "rounded";
                ShapeTypes["Sharp"] = "none";
                ShapeTypes["SoftRounded"] = "soft";
            })(ShapeTypes = GlobalEnum.ShapeTypes || (GlobalEnum.ShapeTypes = {}));
            let InputClassTypes;
            (function (InputClassTypes) {
                InputClassTypes["InputLarge"] = "input-large";
                InputClassTypes["InputSmall"] = "input-small";
            })(InputClassTypes = GlobalEnum.InputClassTypes || (GlobalEnum.InputClassTypes = {}));
            let InputTypeAttr;
            (function (InputTypeAttr) {
                InputTypeAttr["Date"] = "date";
                InputTypeAttr["DateTime"] = "date-time-edit";
                InputTypeAttr["Password"] = "password";
                InputTypeAttr["Text"] = "text";
                InputTypeAttr["Time"] = "time";
            })(InputTypeAttr = GlobalEnum.InputTypeAttr || (GlobalEnum.InputTypeAttr = {}));
            let Units;
            (function (Units) {
                Units["Percentage"] = "%";
                Units["Pixel"] = "px";
                Units["Em"] = "em";
            })(Units = GlobalEnum.Units || (GlobalEnum.Units = {}));
            let Browser;
            (function (Browser) {
                Browser["chrome"] = "chrome";
                Browser["edge"] = "edge";
                Browser["firefox"] = "firefox";
                Browser["ie"] = "ie";
                Browser["kindle"] = "kindle";
                Browser["miui"] = "miui";
                Browser["opera"] = "opera";
                Browser["safari"] = "safari";
                Browser["samsung"] = "samsung";
                Browser["uc"] = "uc";
                Browser["unknown"] = "unknown";
                Browser["yandex"] = "yandex";
            })(Browser = GlobalEnum.Browser || (GlobalEnum.Browser = {}));
            let DeviceOrientation;
            (function (DeviceOrientation) {
                DeviceOrientation["landscape"] = "landscape";
                DeviceOrientation["portrait"] = "portrait";
                DeviceOrientation["unknown"] = "unknown";
            })(DeviceOrientation = GlobalEnum.DeviceOrientation || (GlobalEnum.DeviceOrientation = {}));
            let DeviceType;
            (function (DeviceType) {
                DeviceType["desktop"] = "desktop";
                DeviceType["phone"] = "phone";
                DeviceType["tablet"] = "tablet";
            })(DeviceType = GlobalEnum.DeviceType || (GlobalEnum.DeviceType = {}));
            let NotchClasses;
            (function (NotchClasses) {
                NotchClasses["IPhoneX"] = "iphonex";
            })(NotchClasses = GlobalEnum.NotchClasses || (GlobalEnum.NotchClasses = {}));
            let FocusTrapClasses;
            (function (FocusTrapClasses) {
                FocusTrapClasses["FocusTrapBottom"] = "focus-trap-bottom";
                FocusTrapClasses["FocusTrapTop"] = "focus-trap-top";
            })(FocusTrapClasses = GlobalEnum.FocusTrapClasses || (GlobalEnum.FocusTrapClasses = {}));
            let WarningMessages;
            (function (WarningMessages) {
                WarningMessages["FeatureNotImplemented"] = "This feature is not yet implemented!";
                WarningMessages["MethodNotImplemented"] = "This Method has no implementation on the context of this pattern.";
            })(WarningMessages = GlobalEnum.WarningMessages || (GlobalEnum.WarningMessages = {}));
            let NullValues;
            (function (NullValues) {
                NullValues["Time"] = "00:00:00";
            })(NullValues = GlobalEnum.NullValues || (GlobalEnum.NullValues = {}));
            let ProviderEvents;
            (function (ProviderEvents) {
                ProviderEvents["Initialized"] = "Initialized";
                ProviderEvents["OnProviderConfigsApplied"] = "OnProviderConfigsApplied";
            })(ProviderEvents = GlobalEnum.ProviderEvents || (GlobalEnum.ProviderEvents = {}));
            let SVGHelperConstants;
            (function (SVGHelperConstants) {
                SVGHelperConstants["DOMType"] = "image/svg+xml";
                SVGHelperConstants["ParserError"] = "parsererror";
                SVGHelperConstants["SVG"] = "svg";
            })(SVGHelperConstants = GlobalEnum.SVGHelperConstants || (GlobalEnum.SVGHelperConstants = {}));
            let Time;
            (function (Time) {
                Time[Time["HourInSeconds"] = 3600] = "HourInSeconds";
                Time[Time["MinuteInSeconds"] = 60] = "MinuteInSeconds";
            })(Time = GlobalEnum.Time || (GlobalEnum.Time = {}));
        })(GlobalEnum = OSUI.GlobalEnum || (OSUI.GlobalEnum = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Behaviors;
        (function (Behaviors) {
            class DragParams {
                constructor() {
                    this.DragOrientation = OSUI.GlobalEnum.Orientation.None;
                    this.ExpectedDirection = OSUI.GlobalEnum.Direction.Right;
                    this.InvalidDrag = false;
                    this.IsMoving = false;
                    this.IsOpen = false;
                    this.IsReadyToTriggerCallback = false;
                    this.LastX = 0;
                    this.LastY = 0;
                    this.MoveX = 0;
                    this.MoveY = 0;
                    this.Size = undefined;
                    this.VerticalDrag = false;
                }
            }
            class AnimateOnDrag {
                constructor(target) {
                    this._swipeTriggerSpeed = 0.3;
                    this._targetElement = target;
                    this._dragParams = new DragParams();
                }
                _checkIsDraggingInsideBounds(currentDrag) {
                    const move = this._dragParams.VerticalDrag ? this._dragParams.MoveY : this._dragParams.MoveX;
                    const last = this._dragParams.VerticalDrag ? this._dragParams.LastY : this._dragParams.LastX;
                    const isLeftOrUp = this._dragParams.ExpectedDirection === OSUI.GlobalEnum.Direction.Left ||
                        this._dragParams.ExpectedDirection === OSUI.GlobalEnum.Direction.Up;
                    const baseThreshold = move + (currentDrag - last);
                    return isLeftOrUp
                        ? baseThreshold > -parseInt(this._dragParams.Size) && move + (currentDrag - last) <= 0
                        : baseThreshold < parseInt(this._dragParams.Size) && move + (currentDrag - last) >= 0;
                }
                _updateLastPositions(x, y) {
                    this._dragParams.LastX = x;
                    this._dragParams.LastY = y;
                }
                _updateUI() {
                    if (this._dragParams.IsMoving) {
                        if (this._dragParams.VerticalDrag) {
                            this._targetElement.style.transform = `translateY(${this._dragParams.MoveY}px)`;
                        }
                        else {
                            this._targetElement.style.transform = `translateX(${this._dragParams.MoveX}px)`;
                        }
                        requestAnimationFrame(this._updateUI.bind(this));
                    }
                }
                get dragParams() {
                    return this._dragParams;
                }
                onDragEnd(offsetX, offsetY, timeTaken, callback, springProperties) {
                    this._dragParams.IsMoving = false;
                    OSUI.Helper.Dom.Styles.RemoveClass(this._targetElement, OSUI.Constants.NoTransition);
                    if ((offsetX === 0 && offsetY === 0) || this._dragParams.InvalidDrag) {
                        this._targetElement.style.transform = '';
                        return;
                    }
                    const checkSwipeSpeed = (this._dragParams.VerticalDrag ? Math.abs(offsetY) : Math.abs(offsetX)) / timeTaken >
                        this._swipeTriggerSpeed;
                    const sizeThreshold = -parseInt(this._dragParams.Size) / 2;
                    const axisToValidate = this._dragParams.VerticalDrag ? this._dragParams.MoveY : this._dragParams.MoveX;
                    const swipedHalfWidth = axisToValidate < sizeThreshold;
                    this._dragParams.IsReadyToTriggerCallback = swipedHalfWidth || checkSwipeSpeed;
                    if (this._dragParams.IsReadyToTriggerCallback) {
                        callback();
                    }
                    else if ((springProperties === null || springProperties === void 0 ? void 0 : springProperties.addSpringAnimation) && this._dragParams.IsOpen) {
                        this._dragParams.SpringAnimation = SpringAnimation.CreateSpringAnimation(this._targetElement, offsetX, offsetY, this._dragParams.VerticalDrag ? OSUI.GlobalEnum.Orientation.Vertical : OSUI.GlobalEnum.Orientation.Horizontal, springProperties.springAnimationProperties);
                        this._dragParams.SpringAnimation.play();
                    }
                    this._targetElement.style.transform = '';
                }
                onDragMove(offsetX, offsetY, currentX, currentY, event) {
                    let _dragDirection;
                    if (!this._dragParams.VerticalDrag) {
                        _dragDirection = offsetX > 0 ? OSUI.GlobalEnum.Direction.Right : OSUI.GlobalEnum.Direction.Left;
                    }
                    else {
                        _dragDirection = offsetY < 0 ? OSUI.GlobalEnum.Direction.Up : OSUI.GlobalEnum.Direction.Down;
                    }
                    this._dragParams.InvalidDrag =
                        this._dragParams.IsOpen && _dragDirection !== this._dragParams.ExpectedDirection;
                    if (this._dragParams.InvalidDrag) {
                        this._updateLastPositions(currentX, currentY);
                        return;
                    }
                    if (this._dragParams.DragOrientation === '') {
                        const isHorizontal = Math.abs(offsetX) >= Math.abs(offsetY);
                        this._dragParams.DragOrientation = isHorizontal
                            ? OSUI.GlobalEnum.Orientation.Horizontal
                            : OSUI.GlobalEnum.Orientation.Vertical;
                        requestAnimationFrame(this._updateUI.bind(this));
                    }
                    if (this._dragParams.VerticalDrag === false &&
                        this._dragParams.DragOrientation === OSUI.GlobalEnum.Orientation.Vertical) {
                        this._updateLastPositions(currentX, currentY);
                        return;
                    }
                    event.preventDefault();
                    const IsDraggingInsideBounds = this._checkIsDraggingInsideBounds(this._dragParams.VerticalDrag ? currentY : currentX);
                    if (IsDraggingInsideBounds) {
                        if (this._dragParams.VerticalDrag) {
                            this._dragParams.MoveY = this._dragParams.MoveY + (currentY - this._dragParams.LastY);
                        }
                        else {
                            this._dragParams.MoveX = this._dragParams.MoveX + (currentX - this._dragParams.LastX);
                        }
                    }
                    this._updateLastPositions(currentX, currentY);
                }
                onDragStart(verticalDrag, expectedDirection, currentX, currentY, isOpen, size) {
                    this._dragParams.DragOrientation = OSUI.GlobalEnum.Orientation.None;
                    this._dragParams.ExpectedDirection = expectedDirection;
                    this._dragParams.IsMoving = true;
                    this._dragParams.IsOpen = isOpen;
                    this._dragParams.LastX = currentX;
                    this._dragParams.LastY = currentY;
                    this._dragParams.Size = size;
                    this._dragParams.VerticalDrag = verticalDrag;
                    if (this._dragParams.SpringAnimation) {
                        this._dragParams.SpringAnimation.cancel();
                    }
                    if (this._dragParams.IsOpen) {
                        this._dragParams.MoveX = 0;
                        this._dragParams.MoveY = 0;
                    }
                    else if (this._dragParams.ExpectedDirection === OSUI.GlobalEnum.Direction.Left) {
                        this._dragParams.MoveX = -parseInt(this._dragParams.Size);
                        this._dragParams.MoveY = -parseInt(this._dragParams.Size);
                    }
                    else {
                        this._dragParams.MoveX = parseInt(this._dragParams.Size);
                        this._dragParams.MoveY = parseInt(this._dragParams.Size);
                    }
                    OSUI.Helper.Dom.Styles.AddClass(this._targetElement, OSUI.Constants.NoTransition);
                }
            }
            Behaviors.AnimateOnDrag = AnimateOnDrag;
            class OverlayTransitionOnDrag {
                static Set(target, currentDragValue, direction, size) {
                    const isLeftOrUp = direction === OSUI.GlobalEnum.Direction.Left || direction === OSUI.GlobalEnum.Direction.Up;
                    const currentOpacity = parseInt(target.style.getPropertyValue(OSUI.GlobalEnum.CSSVariables.OverlayOpacity));
                    const percentageBeforeDif = (Math.abs(currentDragValue) * 100) / parseInt(size);
                    const percentage = isLeftOrUp ? 0 + percentageBeforeDif : 100 - percentageBeforeDif;
                    const newOpacity = Math.floor(percentage) / 100;
                    if (currentOpacity !== newOpacity && newOpacity % 1 !== 0) {
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(target, OSUI.GlobalEnum.CSSVariables.OverlayOpacity, newOpacity);
                    }
                }
                static UnSet(target) {
                    OSUI.Helper.Dom.Styles.SetStyleAttribute(target, OSUI.GlobalEnum.CSSVariables.OverlayOpacity, 0);
                }
            }
            Behaviors.OverlayTransitionOnDrag = OverlayTransitionOnDrag;
            class SpringAnimation {
                static _createSpringEffect(dx, dy, orientation, springProperties) {
                    if (dx === 0 && dy === 0)
                        return { positions: [], frames: 0 };
                    const tension = springProperties.tension;
                    const friction = springProperties.friction;
                    const mass = springProperties.mass;
                    const spring_length = 0;
                    const k = -tension;
                    const d = -friction;
                    const frame_rate = 1 / 60;
                    const displacement_threshold = 3;
                    const isVertical = orientation === OSUI.GlobalEnum.Orientation.Vertical;
                    let velocity = 0;
                    const positions = [];
                    let frames = 0;
                    let frames_below_threshold = 0;
                    let largest_displ;
                    let directionDisplacement = isVertical ? dy : dx;
                    for (let step = 0; step <= 1000; step += 1) {
                        const Fspring = k * (directionDisplacement - spring_length);
                        const Fdamping = d * velocity;
                        const accel = (Fspring + Fdamping) / mass;
                        velocity += accel * frame_rate;
                        directionDisplacement += velocity * frame_rate;
                        positions.push({
                            transform: isVertical
                                ? `translateY(${directionDisplacement}px)`
                                : `translateX(${directionDisplacement}px)`,
                        });
                        largest_displ =
                            largest_displ < 0
                                ? Math.max(largest_displ || -Infinity, Math.sqrt(directionDisplacement ** 2))
                                : Math.min(largest_displ || Infinity, Math.sqrt(directionDisplacement ** 2));
                        if (Math.abs(largest_displ) < displacement_threshold) {
                            frames_below_threshold += 1;
                        }
                        else {
                            frames_below_threshold = 0;
                        }
                        if (frames_below_threshold >= 60) {
                            frames = step;
                            break;
                        }
                    }
                    if (frames === 0) {
                        frames = 1000;
                    }
                    return { positions, frames };
                }
                static CreateSpringAnimation(target, offsetX, offsetY, orientation, springProperties) {
                    const { positions, frames } = this._createSpringEffect(offsetX, offsetY, orientation, springProperties);
                    const keyframes = new KeyframeEffect(target, positions, {
                        duration: (frames / 60) * 1000,
                        fill: OSUI.GlobalEnum.KeyframesEffectOptions.FillBoth,
                        easing: OSUI.GlobalEnum.KeyframesEffectOptions.EasingLinear,
                        iterations: 1,
                    });
                    return new Animation(keyframes);
                }
            }
            Behaviors.SpringAnimation = SpringAnimation;
        })(Behaviors = OSUI.Behaviors || (OSUI.Behaviors = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Behaviors;
        (function (Behaviors) {
            class FocusManager {
                constructor() {
                }
                setFocusToStoredElement() {
                    if (this._lastFocusedElem === undefined ||
                        !document.body.contains(this._lastFocusedElem) ||
                        this._lastFocusedElem.hasAttribute(OSUI.GlobalEnum.HTMLAttributes.Disabled) ||
                        this._lastFocusedElem.tabIndex < 0) {
                        document.querySelector(OSFramework.OSUI.Constants.FocusableElems).focus();
                    }
                    else {
                        this._lastFocusedElem.focus();
                    }
                }
                storeLastFocusedElement() {
                    if (document.activeElement !== undefined &&
                        document.activeElement !== null &&
                        document.activeElement !== document.body)
                        this._lastFocusedElem = document.activeElement;
                }
            }
            Behaviors.FocusManager = FocusManager;
        })(Behaviors = OSUI.Behaviors || (OSUI.Behaviors = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Behaviors;
        (function (Behaviors) {
            class FocusTrap {
                constructor(opts) {
                    this._canTargetContainOtherPatts = false;
                    this._hasBeenPassThoughFirstOne = false;
                    this._focusableElements = [];
                    this._targetElement = opts.focusTargetElement;
                    this._focusBottomCallback = opts.focusBottomCallback;
                    this._focusTopCallback = opts.focusTopCallback;
                    this._canTargetContainOtherPatts = opts.canContainOtherPatterns || false;
                    this._buildPredictableElements();
                }
                _buildPredictableElements() {
                    this._predictableTopElement = document.createElement(OSUI.GlobalEnum.HTMLElement.Span);
                    this._predictableBottomElement = document.createElement(OSUI.GlobalEnum.HTMLElement.Span);
                    this._targetElement.prepend(this._predictableTopElement);
                    this._targetElement.append(this._predictableBottomElement);
                    this._setFocusableProperties();
                    this._setFocusableElements();
                }
                _focusBottomHandler() {
                    this._focusHandler(this._predictableBottomElement, this._focusBottomCallback);
                }
                _focusHandler(focusableElement, callback) {
                    this._setFocusableElements();
                    if (callback === undefined) {
                        if (focusableElement === this._predictableTopElement && this._hasBeenPassThoughFirstOne === false) {
                            this._firstFocusableElement.focus();
                            this._hasBeenPassThoughFirstOne = true;
                        }
                        else {
                            this._lastFocusableElement.focus();
                        }
                        if (focusableElement === this._predictableBottomElement) {
                            this._firstFocusableElement.focus();
                            this._hasBeenPassThoughFirstOne = true;
                        }
                    }
                    else {
                        callback();
                    }
                }
                _focusTopHandler() {
                    this._focusHandler(this._predictableTopElement, this._focusTopCallback);
                }
                _removeEventListeners() {
                    this._predictableBottomElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._focusBottomHandler.bind(this));
                    this._predictableTopElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._focusTopHandler.bind(this));
                }
                _setEventListeners() {
                    this._predictableBottomElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._focusBottomHandler.bind(this));
                    this._predictableTopElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._focusTopHandler.bind(this));
                }
                _setFocusableElements(includeTabIndexHidden = false) {
                    includeTabIndexHidden = false;
                    this._focusableElements = OSUI.Helper.Dom.GetFocusableElements(this._targetElement, false);
                    for (const predictedElement of this._focusableElements.filter((item) => item === this._predictableTopElement || item === this._predictableBottomElement)) {
                        this._focusableElements.splice(this._focusableElements.indexOf(predictedElement), 1);
                    }
                    this._firstFocusableElement = this._focusableElements[0];
                    this._lastFocusableElement = this._focusableElements[this._focusableElements.length - 1];
                }
                _setFocusableProperties() {
                    OSUI.Helper.Dom.Styles.AddClass(this._predictableBottomElement, OSUI.GlobalEnum.FocusTrapClasses.FocusTrapBottom);
                    OSUI.Helper.Dom.Styles.AddClass(this._predictableBottomElement, OSUI.Constants.AccessibilityHideElementClass);
                    OSUI.Helper.Dom.Styles.AddClass(this._predictableTopElement, OSUI.GlobalEnum.FocusTrapClasses.FocusTrapTop);
                    OSUI.Helper.Dom.Styles.AddClass(this._predictableTopElement, OSUI.Constants.AccessibilityHideElementClass);
                    this.disableForA11y();
                    this._setEventListeners();
                }
                _unsetCallbacks() {
                    this._focusBottomCallback = undefined;
                    this._focusBottomHandler = undefined;
                    this._focusTopCallback = undefined;
                    this._focusTopHandler = undefined;
                }
                disableForA11y() {
                    this._hasBeenPassThoughFirstOne = false;
                    OSUI.Helper.A11Y.TabIndexFalse(this._predictableBottomElement);
                    OSUI.Helper.A11Y.TabIndexFalse(this._predictableTopElement);
                    OSUI.Helper.A11Y.AriaHiddenTrue(this._predictableBottomElement);
                    OSUI.Helper.A11Y.AriaHiddenTrue(this._predictableTopElement);
                }
                dispose() {
                    this._removeEventListeners();
                    this._unsetCallbacks();
                    this._predictableTopElement.remove();
                    this._predictableBottomElement.remove();
                }
                enableForA11y() {
                    OSUI.Helper.A11Y.TabIndexTrue(this._predictableBottomElement);
                    OSUI.Helper.A11Y.TabIndexTrue(this._predictableTopElement);
                    OSUI.Helper.A11Y.AriaHiddenFalse(this._predictableBottomElement);
                    OSUI.Helper.A11Y.AriaHiddenFalse(this._predictableTopElement);
                    this._setFocusableElements(true);
                }
                get bottomElement() {
                    return this._predictableBottomElement;
                }
                get topElement() {
                    return this._predictableTopElement;
                }
                get focusableElements() {
                    return this._focusableElements;
                }
            }
            Behaviors.FocusTrap = FocusTrap;
        })(Behaviors = OSUI.Behaviors || (OSUI.Behaviors = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Behaviors;
        (function (Behaviors) {
            const _controllScroll = {
                yValue: 0,
                yDirection: '',
            };
            function Scroll(element, options) {
                if (element) {
                    element.scrollIntoView(options);
                }
            }
            Behaviors.Scroll = Scroll;
            function ScrollVerticalPosition(scrollableElement = OSUI.Helper.Dom.ClassSelector(document.body, OSUI.GlobalEnum.CssClassElements.ActiveScreen)) {
                const winScroll = scrollableElement.scrollTop;
                const height = scrollableElement.scrollHeight - scrollableElement.clientHeight;
                const scrolled = Math.round((winScroll / height) * 100);
                const scrolledPx = (scrollableElement.clientHeight * scrolled) / 100;
                if (_controllScroll.yValue < winScroll) {
                    _controllScroll.yDirection = OSUI.GlobalEnum.Direction.Bottom;
                }
                else if (_controllScroll.yValue > winScroll) {
                    _controllScroll.yDirection = OSUI.GlobalEnum.Direction.Top;
                }
                _controllScroll.yValue = winScroll;
                return {
                    direction: _controllScroll.yDirection,
                    percentageInView: scrolled,
                    pixelInView: scrolledPx,
                    scrollableHeight: scrollableElement.scrollHeight,
                    value: scrollableElement.scrollTop,
                    viewHeight: scrollableElement.clientHeight,
                };
            }
            Behaviors.ScrollVerticalPosition = ScrollVerticalPosition;
        })(Behaviors = OSUI.Behaviors || (OSUI.Behaviors = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                class AbstractEvent {
                    constructor() {
                        this._handlers = [];
                    }
                    get handlers() {
                        return this._handlers;
                    }
                    addHandler(handler) {
                        this._handlers.push(handler);
                    }
                    hasHandlers() {
                        return this._handlers.length > 0;
                    }
                    removeHandler(handler) {
                        const index = this._handlers.findIndex((hd) => {
                            return hd === handler;
                        });
                        if (index !== -1) {
                            this._handlers.splice(index, 1);
                        }
                        if (this.hasHandlers() === false) {
                            this.removeEvent();
                        }
                    }
                    trigger(data, ...args) {
                        this._handlers.slice(0).forEach((h) => OSUI.Helper.AsyncInvocation(h, data, ...args));
                    }
                }
                DOMEvents.AbstractEvent = AbstractEvent;
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                class AbstractEventsManager {
                    constructor() {
                        this._events = new Map();
                    }
                    addHandler(eventType, handler) {
                        if (this._events && this._events.has(eventType)) {
                            this._events.get(eventType).addHandler(handler);
                        }
                        else {
                            const ev = this.getInstanceOfEventType(eventType);
                            if (ev !== undefined) {
                                ev.addHandler(handler);
                                this._events.set(eventType, ev);
                            }
                        }
                    }
                    hasHandlers(eventType) {
                        let returnValue = false;
                        if (this._events.has(eventType)) {
                            const event = this._events.get(eventType);
                            returnValue = event.hasHandlers();
                        }
                        return returnValue;
                    }
                    removeHandler(eventType, handler) {
                        if (this._events.has(eventType)) {
                            const event = this._events.get(eventType);
                            event.removeHandler(handler);
                            if (event.handlers.length === 0) {
                                this._events.delete(eventType);
                            }
                        }
                    }
                    trigger(eventType, data, ...args) {
                        if (this._events.has(eventType)) {
                            this._events.get(eventType).trigger(data, args);
                        }
                    }
                    get events() {
                        return this._events;
                    }
                }
                DOMEvents.AbstractEventsManager = AbstractEventsManager;
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    class AbstractListener extends DOMEvents.AbstractEvent {
                        constructor(eventTarget, eventType, isCustomEvent = false) {
                            super();
                            this.useCapture = false;
                            this._eventTarget = eventTarget;
                            this._eventType = eventType;
                            this._eventName = isCustomEvent === false ? OSUI.GlobalEnum.HTMLEvent.Prefix + this._eventType : this._eventType;
                            if (isCustomEvent) {
                                window[this._eventName] = this._eventName;
                            }
                            OSUI.Helper.AsyncInvocation(this.addEvent.bind(this));
                        }
                        addEvent() {
                            if (this._eventName in window || window[this._eventName] !== undefined) {
                                this._eventTarget.addEventListener(this._eventType, this.eventCallback);
                            }
                        }
                        removeEvent() {
                            if (this._eventName in window || window[this._eventName] !== undefined) {
                                this._eventTarget.removeEventListener(this._eventType, this.eventCallback);
                            }
                        }
                        get eventTarget() {
                            return this._eventTarget;
                        }
                        set eventTarget(el) {
                            this._eventTarget = el;
                        }
                    }
                    Listeners.AbstractListener = AbstractListener;
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    class BalloonOnToggle extends Listeners.AbstractListener {
                        constructor() {
                            super(document, OSUI.GlobalEnum.CustomEvent.BalloonOnToggle, true);
                            this.eventCallback = this._onToggleTrigger.bind(this);
                        }
                        _onToggleTrigger(evt) {
                            this.trigger(OSUI.GlobalEnum.CustomEvent.BalloonOnToggle, evt);
                        }
                    }
                    Listeners.BalloonOnToggle = BalloonOnToggle;
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    class BodyOnClick extends Listeners.AbstractListener {
                        constructor() {
                            super(document.body, OSUI.GlobalEnum.HTMLEvent.Click);
                            this._enableBodyClick = true;
                            this.eventCallback = this._bodyTrigger.bind(this);
                        }
                        _bodyTrigger(evt) {
                            if (this.getBodyClickStatus) {
                                this.trigger(OSUI.GlobalEnum.HTMLEvent.Click, evt);
                            }
                        }
                        disableBodyClickEvent() {
                            this._enableBodyClick = false;
                        }
                        enableBodyClickEvent() {
                            this._enableBodyClick = true;
                        }
                        get getBodyClickStatus() {
                            return this._enableBodyClick;
                        }
                    }
                    Listeners.BodyOnClick = BodyOnClick;
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    class BodyOnMouseDown extends Listeners.AbstractListener {
                        constructor() {
                            super(document.body, OSUI.GlobalEnum.HTMLEvent.MouseDown);
                            this.eventCallback = this._bodyTrigger.bind(this);
                        }
                        _bodyTrigger(evt) {
                            this.trigger(OSUI.GlobalEnum.HTMLEvent.MouseDown, evt);
                        }
                    }
                    Listeners.BodyOnMouseDown = BodyOnMouseDown;
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    let Type;
                    (function (Type) {
                        Type["BalloonOnToggle"] = "balloon.onToggle";
                        Type["BodyOnClick"] = "body.onclick";
                        Type["BodyOnMouseDown"] = "body.mousedown";
                        Type["OrientationChange"] = "window.onorientationchange";
                        Type["ScreenOnScroll"] = "screen.onscroll";
                        Type["WindowResize"] = "window.onresize";
                        Type["WindowMessage"] = "window.message";
                    })(Type = Listeners.Type || (Listeners.Type = {}));
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    class ListenerManager extends DOMEvents.AbstractEventsManager {
                        getInstanceOfEventType(listenerType) {
                            switch (listenerType) {
                                case Listeners.Type.BalloonOnToggle:
                                    return new Listeners.BalloonOnToggle();
                                case Listeners.Type.BodyOnClick:
                                    return new Listeners.BodyOnClick();
                                case Listeners.Type.BodyOnMouseDown:
                                    return new Listeners.BodyOnMouseDown();
                                case Listeners.Type.WindowResize:
                                    return new Listeners.WindowResize();
                                case Listeners.Type.OrientationChange:
                                    return new Listeners.OrientationChange();
                                case Listeners.Type.ScreenOnScroll:
                                    return new Listeners.ScreenOnScroll();
                                case Listeners.Type.WindowMessage:
                                    return new Listeners.WindowMessage();
                                default:
                                    throw new Error(`The listener ${listenerType} is not supported.`);
                            }
                        }
                    }
                    Listeners.ListenerManager = ListenerManager;
                    class GlobalListenerManager {
                        static get Instance() {
                            return GlobalListenerManager._listenerManager;
                        }
                    }
                    GlobalListenerManager._listenerManager = new ListenerManager();
                    Listeners.GlobalListenerManager = GlobalListenerManager;
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    class OrientationChange extends Listeners.AbstractListener {
                        constructor() {
                            super(window, OSUI.GlobalEnum.HTMLEvent.OrientationChange);
                            this.eventCallback = this._orientationTrigger.bind(this);
                        }
                        _orientationTrigger(evt) {
                            this.trigger(OSUI.GlobalEnum.HTMLEvent.OrientationChange, evt);
                        }
                    }
                    Listeners.OrientationChange = OrientationChange;
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    function getScrollableScreenContainer() {
                        const layoutNative = OSUI.Helper.Dom.ClassSelector(document, OSUI.GlobalEnum.CssClassElements.LayoutNative);
                        let scrollableContainer = OSUI.Helper.Dom.ClassSelector(document, OSUI.GlobalEnum.CssClassElements.ActiveScreen);
                        if (OSUI.Helper.DeviceInfo.GetOperatingSystem() === OSUI.GlobalEnum.MobileOS.IOS && layoutNative !== undefined) {
                            scrollableContainer = OSUI.Helper.Dom.ClassSelector(document, `${OSUI.GlobalEnum.CssClassElements.ActiveScreen} ${OSUI.Constants.Dot}${OSUI.GlobalEnum.CssClassElements.Content}`);
                        }
                        return scrollableContainer !== undefined ? scrollableContainer : document.body;
                    }
                    class ScreenOnScroll extends Listeners.AbstractListener {
                        constructor() {
                            super(getScrollableScreenContainer(), OSUI.GlobalEnum.HTMLEvent.Scroll);
                            this.eventCallback = this._screenTrigger.bind(this);
                        }
                        _screenTrigger(evt) {
                            this.trigger(OSUI.GlobalEnum.HTMLEvent.Scroll, evt);
                        }
                        addHandler(handler) {
                            if (this.eventTarget !== getScrollableScreenContainer()) {
                                this.removeEvent();
                                this.eventTarget = getScrollableScreenContainer();
                                this.addEvent();
                            }
                            super.addHandler(handler);
                        }
                    }
                    Listeners.ScreenOnScroll = ScreenOnScroll;
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    class WindowMessage extends Listeners.AbstractListener {
                        constructor() {
                            super(window, OSUI.GlobalEnum.HTMLEvent.Message);
                            this.eventCallback = this._windowTrigger.bind(this);
                        }
                        _windowTrigger(evt) {
                            this.trigger(OSUI.GlobalEnum.HTMLEvent.Message, evt);
                        }
                    }
                    Listeners.WindowMessage = WindowMessage;
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Listeners;
                (function (Listeners) {
                    class WindowResize extends Listeners.AbstractListener {
                        constructor() {
                            super(window, OSUI.GlobalEnum.HTMLEvent.Resize);
                            this.eventCallback = this._windowTrigger.bind(this);
                        }
                        _windowTrigger(evt) {
                            window.clearTimeout(this._timeout);
                            this._timeout = window.setTimeout(() => {
                                this.trigger(OSUI.GlobalEnum.HTMLEvent.Resize, evt);
                            }, 100);
                        }
                    }
                    Listeners.WindowResize = WindowResize;
                })(Listeners = DOMEvents.Listeners || (DOMEvents.Listeners = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Observers;
                (function (Observers) {
                    class AbstractObserver extends DOMEvents.AbstractEvent {
                        constructor(observerOptions, observerTarget) {
                            super();
                            this._observerOptions = observerOptions;
                            this._observerTarget = observerTarget;
                        }
                        startObserver() {
                            this.observer.observe(this.observerTarget, this.observerOptions);
                        }
                        removeEvent() {
                            this.observer.disconnect();
                        }
                        get observerOptions() {
                            return this._observerOptions;
                        }
                        get observerTarget() {
                            return this._observerTarget;
                        }
                    }
                    Observers.AbstractObserver = AbstractObserver;
                })(Observers = DOMEvents.Observers || (DOMEvents.Observers = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Observers;
                (function (Observers) {
                    let ObserverEvent;
                    (function (ObserverEvent) {
                        ObserverEvent["RTL"] = "RTL";
                    })(ObserverEvent = Observers.ObserverEvent || (Observers.ObserverEvent = {}));
                })(Observers = DOMEvents.Observers || (DOMEvents.Observers = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Observers;
                (function (Observers) {
                    class ObserverManager extends DOMEvents.AbstractEventsManager {
                        getInstanceOfEventType(observerType) {
                            switch (observerType) {
                                case Observers.ObserverEvent.RTL:
                                    return new Observers.MutationObservers.RTL.RTLObserver();
                                default:
                                    throw new Error(`The observer ${observerType} is not supported.`);
                            }
                        }
                    }
                    Observers.ObserverManager = ObserverManager;
                    class GlobalObserverManager {
                        static get Instance() {
                            return GlobalObserverManager._observerManager;
                        }
                    }
                    GlobalObserverManager._observerManager = new ObserverManager();
                    Observers.GlobalObserverManager = GlobalObserverManager;
                })(Observers = DOMEvents.Observers || (DOMEvents.Observers = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Observers;
                (function (Observers) {
                    var MutationObservers;
                    (function (MutationObservers) {
                        class AbstractMutationObserver extends Observers.AbstractObserver {
                            constructor(observerOptions, observerTarget) {
                                super(observerOptions, observerTarget);
                                this.addEvent();
                                this.startObserver();
                            }
                            addEvent() {
                                this.observer = new MutationObserver(this.observerHandler.bind(this));
                            }
                        }
                        MutationObservers.AbstractMutationObserver = AbstractMutationObserver;
                    })(MutationObservers = Observers.MutationObservers || (Observers.MutationObservers = {}));
                })(Observers = DOMEvents.Observers || (DOMEvents.Observers = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Observers;
                (function (Observers) {
                    var MutationObservers;
                    (function (MutationObservers) {
                        var RTL;
                        (function (RTL) {
                            class RTLObserver extends MutationObservers.AbstractMutationObserver {
                                constructor() {
                                    super(new RTL.RTLObserverConfigs(), document.body);
                                    this._hasAlreadyRTL = document.body.classList.contains(OSFramework.OSUI.Constants.IsRTLClass);
                                }
                                observerHandler(mutationList) {
                                    mutationList.forEach((mutation) => {
                                        if (mutation.attributeName === OSUI.GlobalEnum.HTMLAttributes.Class) {
                                            const mutationTarget = mutation.target;
                                            const hasRTLNow = mutationTarget.classList.contains(OSFramework.OSUI.Constants.IsRTLClass);
                                            if (this._hasAlreadyRTL !== hasRTLNow) {
                                                this._hasAlreadyRTL = hasRTLNow;
                                                this.trigger(Observers.ObserverEvent.RTL, mutation);
                                            }
                                        }
                                    });
                                }
                            }
                            RTL.RTLObserver = RTLObserver;
                        })(RTL = MutationObservers.RTL || (MutationObservers.RTL = {}));
                    })(MutationObservers = Observers.MutationObservers || (Observers.MutationObservers = {}));
                })(Observers = DOMEvents.Observers || (DOMEvents.Observers = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var DOMEvents;
            (function (DOMEvents) {
                var Observers;
                (function (Observers) {
                    var MutationObservers;
                    (function (MutationObservers) {
                        var RTL;
                        (function (RTL) {
                            class RTLObserverConfigs {
                                constructor() {
                                    this.attributeFilter = [OSUI.GlobalEnum.HTMLAttributes.Class];
                                    this.attributeOldValue = true;
                                    this.subtree = false;
                                }
                            }
                            RTL.RTLObserverConfigs = RTLObserverConfigs;
                        })(RTL = MutationObservers.RTL || (MutationObservers.RTL = {}));
                    })(MutationObservers = Observers.MutationObservers || (Observers.MutationObservers = {}));
                })(Observers = DOMEvents.Observers || (DOMEvents.Observers = {}));
            })(DOMEvents = Event.DOMEvents || (Event.DOMEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            class GestureParams {
            }
            class AbstractGestureEvent {
                constructor(target) {
                    this._targetElement = target;
                    this._gestureParams = new GestureParams();
                }
                _eventTouchEnd() {
                    if (this._gestureParams.touchingElement) {
                        this._gestureParams.touchingElement = false;
                        this._gestureParams.offsetX = this._gestureParams.currentX - this._gestureParams.startX;
                        this._gestureParams.offsetY = this._gestureParams.currentY - this._gestureParams.startY;
                        this._gestureParams.timeTaken = new Date().getTime() - this._gestureParams.startTime;
                        if (this._endTriggerCallback) {
                            this._endTriggerCallback(this._gestureParams.offsetX, this._gestureParams.offsetY, this._gestureParams.timeTaken);
                        }
                    }
                }
                _eventTouchMove(evt) {
                    if (this._gestureParams.touchingElement) {
                        this._gestureParams.currentX = evt.changedTouches[0].pageX;
                        this._gestureParams.currentY = evt.changedTouches[0].pageY;
                        this._gestureParams.offsetX = this._gestureParams.currentX - this._gestureParams.startX;
                        this._gestureParams.offsetY = this._gestureParams.currentY - this._gestureParams.startY;
                        if (this._moveTriggerCallback !== undefined) {
                            this._moveTriggerCallback(this._gestureParams.currentX, this._gestureParams.currentY, this._gestureParams.offsetX, this._gestureParams.offsetY, this._gestureParams.event);
                        }
                    }
                }
                _eventTouchStart(evt) {
                    this._gestureParams.startTime = new Date().getTime();
                    this._gestureParams.startX = evt.changedTouches[0].pageX;
                    this._gestureParams.currentX = this._gestureParams.startX;
                    this._gestureParams.startY = evt.changedTouches[0].pageY;
                    this._gestureParams.currentY = this._gestureParams.startY;
                    this._gestureParams.touchingElement = true;
                    this._gestureParams.event = evt;
                    if (this._startTriggerCallback !== undefined) {
                        this._startTriggerCallback(this._gestureParams.startX, this._gestureParams.startY);
                    }
                }
                _removeEventListeners() {
                    if (this._targetElement) {
                        this._targetElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TouchStart, this._startEvent);
                        this._targetElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TouchMove, this._moveEvent);
                        this._targetElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TouchEnd, this._endEvent);
                    }
                }
                _unsetCallbacks() {
                    this._endEvent = undefined;
                    this._moveEvent = undefined;
                    this._startEvent = undefined;
                    this._startTriggerCallback = undefined;
                    this._moveTriggerCallback = undefined;
                    this._endTriggerCallback = undefined;
                }
                setCallbacks(onStartCallback, onMoveCallback, onEndCallback) {
                    this._endEvent = this._eventTouchEnd.bind(this);
                    this._moveEvent = this._eventTouchMove.bind(this);
                    this._startEvent = this._eventTouchStart.bind(this);
                    this._startTriggerCallback = onStartCallback;
                    this._moveTriggerCallback = onMoveCallback;
                    this._endTriggerCallback = onEndCallback;
                }
                setEventListeners() {
                    if (this._targetElement) {
                        this._targetElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.TouchStart, this._startEvent);
                        this._targetElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.TouchMove, this._moveEvent);
                        this._targetElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.TouchEnd, this._endEvent);
                    }
                }
                get targetElement() {
                    return this._targetElement;
                }
                unsetTouchEvents() {
                    this._removeEventListeners();
                    this._unsetCallbacks();
                }
            }
            Event.AbstractGestureEvent = AbstractGestureEvent;
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var GestureEvent;
            (function (GestureEvent) {
                class DragEvent extends Event.AbstractGestureEvent {
                    constructor(target) {
                        super(target);
                    }
                    setSwipeEvents(onStartCallback, onMoveCallback, onEndCallback) {
                        this.setCallbacks(onStartCallback, onMoveCallback, onEndCallback);
                        this.setEventListeners();
                    }
                }
                GestureEvent.DragEvent = DragEvent;
            })(GestureEvent = Event.GestureEvent || (Event.GestureEvent = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var GestureEvent;
            (function (GestureEvent) {
                class SwipeEvent extends Event.AbstractGestureEvent {
                    constructor(target) {
                        super(target);
                        this._threshold = 10;
                        this._velocity = 0.3;
                    }
                    _onGestureEnd(offsetX, offsetY, timeTaken) {
                        if ((Math.abs(offsetX) > this._threshold || Math.abs(offsetY) > this._threshold) &&
                            (Math.abs(offsetX) / timeTaken > this._velocity || Math.abs(offsetY) / timeTaken > this._velocity)) {
                            if (Math.abs(offsetX) > Math.abs(offsetY)) {
                                if (offsetX > 0) {
                                    this._swipeRightCallback();
                                }
                                else {
                                    this._swipeLeftCallback();
                                }
                            }
                            else if (offsetY > 0) {
                                this._swipeDownCallback();
                            }
                            else {
                                this._swipeUpCallback();
                            }
                        }
                    }
                    setSwipeCallbacks(swipeDownCallback, swipeLeftCallback, swipeRightCallback, swipeUpCallback) {
                        this._swipeDownCallback = swipeDownCallback;
                        this._swipeLeftCallback = swipeLeftCallback;
                        this._swipeRightCallback = swipeRightCallback;
                        this._swipeUpCallback = swipeUpCallback;
                        this.setCallbacks(undefined, undefined, this._onGestureEnd);
                    }
                    setSwipeEvents(swipeDownCallback, swipeLeftCallback, swipeRightCallback, swipeUpCallback) {
                        this.setSwipeCallbacks(swipeDownCallback, swipeLeftCallback, swipeRightCallback, swipeUpCallback);
                        this.setEventListeners();
                    }
                }
                GestureEvent.SwipeEvent = SwipeEvent;
            })(GestureEvent = Event.GestureEvent || (Event.GestureEvent = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var ProviderEvents;
            (function (ProviderEvents) {
                class ProviderEvent {
                    constructor(callback, eventName, eventUniqueId) {
                        this.callback = callback;
                        this.eventName = eventName;
                        this.eventUniqueId = eventUniqueId;
                    }
                }
                ProviderEvents.ProviderEvent = ProviderEvent;
            })(ProviderEvents = Event.ProviderEvents || (Event.ProviderEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Event;
        (function (Event) {
            var ProviderEvents;
            (function (ProviderEvents) {
                class ProviderEventsManager {
                    constructor() {
                        this._eventsMap = new Map();
                        this._pendingEventsMap = new Map();
                    }
                    addPendingEvent(eventName, callback, eventUniqueId) {
                        if (eventName === '' || callback === undefined || eventUniqueId === '') {
                            throw new Error(`${OSUI.ErrorCodes.ProviderEventsManager.FailSavingPendingEvent}: The event can not be saved.`);
                        }
                        const newEvent = new ProviderEvents.ProviderEvent(callback, eventName, eventUniqueId);
                        this._pendingEventsMap.set(eventUniqueId, newEvent);
                    }
                    removePendingEvent(eventUniqueId) {
                        const event = this._pendingEventsMap.has(eventUniqueId);
                        if (event) {
                            this._pendingEventsMap.delete(eventUniqueId);
                        }
                        else {
                            throw new Error(`${OSUI.ErrorCodes.ProviderEventsManager.FailPendingEventRemoval}: The event with eventId:'${eventUniqueId}' does not exist`);
                        }
                    }
                    removeSavedEvent(eventUniqueId) {
                        const event = this._eventsMap.has(eventUniqueId);
                        if (event) {
                            this._eventsMap.delete(eventUniqueId);
                        }
                        else {
                            throw new Error(`${OSUI.ErrorCodes.ProviderEventsManager.FailSavedEventRemoval}: The event with eventId:'${eventUniqueId}' does not exist`);
                        }
                    }
                    saveEvent(eventName, callback, eventUniqueId) {
                        if (eventName === '' || callback === undefined || eventUniqueId === '') {
                            throw new Error(`${OSUI.ErrorCodes.ProviderEventsManager.FailSavingEvent}: The event can not be saved.`);
                        }
                        let _newEvent;
                        if (this._pendingEventsMap.has(eventUniqueId)) {
                            _newEvent = this._pendingEventsMap.get(eventUniqueId);
                            this._pendingEventsMap.delete(eventUniqueId);
                        }
                        else {
                            _newEvent = new ProviderEvents.ProviderEvent(callback, eventName, eventUniqueId);
                        }
                        this._eventsMap.set(eventUniqueId, _newEvent);
                    }
                    get events() {
                        return this._eventsMap;
                    }
                    get pendingEvents() {
                        return this._pendingEventsMap;
                    }
                    get hasEvents() {
                        return this._eventsMap.size > 0;
                    }
                    get hasPendingEvents() {
                        return this._pendingEventsMap.size > 0;
                    }
                }
                ProviderEvents.ProviderEventsManager = ProviderEventsManager;
            })(ProviderEvents = Event.ProviderEvents || (Event.ProviderEvents = {}));
        })(Event = OSUI.Event || (OSUI.Event = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Feature;
        (function (Feature) {
            class AbstractFeature {
                constructor(featurePattern, featureElem, options) {
                    this._featureOptions = options;
                    this._featureElem = featureElem;
                    this._featurePattern = featurePattern;
                }
                dispose() {
                    this._featureOptions = undefined;
                    this._featureElem = undefined;
                }
                get featureElem() {
                    return this._featureElem;
                }
                get featureOptions() {
                    return this._featureOptions;
                }
                get featurePattern() {
                    return this._featurePattern;
                }
            }
            Feature.AbstractFeature = AbstractFeature;
        })(Feature = OSUI.Feature || (OSUI.Feature = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Feature;
        (function (Feature) {
            var Balloon;
            (function (Balloon_1) {
                class Balloon extends Feature.AbstractFeature {
                    constructor(featurePattern, featureElem, options) {
                        super(featurePattern, featureElem, options);
                        this._isOpenedByApi = false;
                        this.isOpen = false;
                        this.build();
                    }
                    _bodyClickCallback(_args, e) {
                        var _a, _b;
                        const _eventTarget = e.target;
                        if (this.featureElem === undefined) {
                            return;
                        }
                        if (_eventTarget === ((_a = this.featureOptions) === null || _a === void 0 ? void 0 : _a.anchorElem) ||
                            ((_b = this.featureOptions) === null || _b === void 0 ? void 0 : _b.anchorElem.contains(_eventTarget)) ||
                            this._isOpenedByApi ||
                            this.featureElem.contains(_eventTarget)) {
                            return;
                        }
                        if (this.isOpen) {
                            this._toggleBalloon(false, true);
                            e.stopPropagation();
                        }
                    }
                    _handleFocusBehavior() {
                        var _a, _b, _c;
                        const opts = {
                            focusTargetElement: ((_a = this.featureOptions.focusOptions.focusTrapParams) === null || _a === void 0 ? void 0 : _a.focusTargetElement) === undefined
                                ? this._floatingOptions.AnchorElem.parentElement
                                : this.featureOptions.focusOptions.focusTrapParams.focusTargetElement,
                            focusBottomCallback: (_b = this.featureOptions.focusOptions.focusTrapParams) === null || _b === void 0 ? void 0 : _b.focusBottomCallback,
                            focusTopCallback: (_c = this.featureOptions.focusOptions.focusTrapParams) === null || _c === void 0 ? void 0 : _c.focusTopCallback,
                        };
                        this._focusTrapInstance = new OSUI.Behaviors.FocusTrap(opts);
                        this._focusManagerInstance = new OSUI.Behaviors.FocusManager();
                    }
                    _manageFocusInsideBalloon(arrowKeyPressed) {
                        if (this.featureOptions.focusOptions.elemToFocusOnOpen === undefined) {
                            if (this._focusableBalloonElements.length === 0 || arrowKeyPressed === undefined) {
                                this._currentFocusedElementIndex = undefined;
                            }
                            else if (arrowKeyPressed === OSUI.GlobalEnum.Keycodes.ArrowDown) {
                                if (this._currentFocusedElementIndex === undefined ||
                                    this._currentFocusedElementIndex >= this._focusableBalloonElements.length - 1)
                                    this._currentFocusedElementIndex = 0;
                                else
                                    this._currentFocusedElementIndex = this._currentFocusedElementIndex + 1;
                            }
                            else if (arrowKeyPressed === OSUI.GlobalEnum.Keycodes.ArrowUp) {
                                if (this._currentFocusedElementIndex === undefined || this._currentFocusedElementIndex === 0)
                                    this._currentFocusedElementIndex = this._focusableBalloonElements.length - 1;
                                else
                                    this._currentFocusedElementIndex = this._currentFocusedElementIndex - 1;
                            }
                            if (this._currentFocusedElementIndex === undefined) {
                                OSUI.Helper.AsyncInvocation(() => {
                                    this.featureElem.focus();
                                });
                            }
                            else {
                                OSUI.Helper.AsyncInvocation(() => {
                                    this._focusableBalloonElements[this._currentFocusedElementIndex].focus();
                                });
                            }
                        }
                        else {
                            this.featureOptions.focusOptions.elemToFocusOnOpen.focus();
                        }
                    }
                    _onKeypressCallback(e) {
                        const isEscapedPressed = e.key === OSUI.GlobalEnum.Keycodes.Escape;
                        const isArrowDownPressed = e.key === OSUI.GlobalEnum.Keycodes.ArrowDown;
                        const isArrowUpPressed = e.key === OSUI.GlobalEnum.Keycodes.ArrowUp;
                        if (this.isOpen) {
                            if (isEscapedPressed) {
                                this.close();
                                e.stopPropagation();
                            }
                            else if (isArrowDownPressed || isArrowUpPressed) {
                                this._manageFocusInsideBalloon(e.key);
                                e.preventDefault();
                            }
                        }
                        e.stopPropagation();
                    }
                    _onWindowResize() {
                        if (this.isOpen) {
                            this.close();
                        }
                    }
                    _removeEventListeners() {
                        this.featureElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeypress);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._eventBodyClick);
                        if (this.featureOptions.useTriggerWidth && OSUI.Helper.DeviceInfo.IsMobileDevice === false) {
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.WindowResize, this._eventOnWindowResize);
                        }
                    }
                    _setA11YProperties() {
                        OSUI.Helper.Dom.Attribute.Set(this.featureElem, OSUI.Constants.A11YAttributes.Aria.Hidden, (!this.isOpen).toString());
                        if (this.featureOptions.focusOptions.useFocus !== false) {
                            OSUI.Helper.A11Y.SetElementsTabIndex(this.isOpen, this._focusTrapInstance.focusableElements);
                            OSUI.Helper.Dom.Attribute.Set(this.featureElem, OSUI.Constants.A11YAttributes.TabIndex, this.isOpen
                                ? OSUI.Constants.A11YAttributes.States.TabIndexShow
                                : OSUI.Constants.A11YAttributes.States.TabIndexHidden);
                            OSUI.Helper.Dom.Attribute.Set(this._floatingOptions.AnchorElem, OSUI.Constants.A11YAttributes.TabIndex, this.isOpen
                                ? OSUI.Constants.A11YAttributes.States.TabIndexHidden
                                : OSUI.Constants.A11YAttributes.States.TabIndexShow);
                        }
                    }
                    _setBalloonWidth() {
                        const _balloonWidth = this.featureOptions.useTriggerWidth
                            ? this.featureOptions.anchorElem.offsetWidth + OSUI.GlobalEnum.Units.Pixel
                            : OSUI.GlobalEnum.CssProperties.MaxContent;
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.featureElem, Balloon_1.Enum.CssCustomProperties.Width, _balloonWidth);
                    }
                    _setCallbacks() {
                        this._eventBodyClick = this._bodyClickCallback.bind(this);
                        this._eventOnKeypress = this._onKeypressCallback.bind(this);
                        this._eventOnWindowResize = this._onWindowResize.bind(this);
                        this._onToggleEvent = function dispatchCustomEvent(isOpen, balloonElem) {
                            const _customEvent = new CustomEvent(OSUI.GlobalEnum.CustomEvent.BalloonOnToggle, {
                                detail: { isOpen: isOpen, balloonElem: balloonElem },
                            });
                            document.dispatchEvent(_customEvent);
                        };
                    }
                    _setEventListeners() {
                        if (this.featureOptions.focusOptions.useFocus !== false) {
                            this.featureElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeypress);
                        }
                        if (this.isOpen) {
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._eventBodyClick);
                        }
                        if (this.featureOptions.useTriggerWidth && OSUI.Helper.DeviceInfo.IsMobileDevice === false) {
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.WindowResize, this._eventOnWindowResize);
                        }
                    }
                    _toggleBalloon(isOpen, isBodyClick = false, arrowKeyPressed) {
                        this.isOpen = isOpen;
                        if (this.isOpen) {
                            OSUI.Helper.Dom.Styles.AddClass(this.featureElem, Balloon_1.Enum.CssClasses.IsOpen);
                            if (this.featureOptions.useTriggerWidth) {
                                this._setBalloonWidth();
                            }
                            this.setFloatingBehaviour();
                            OSUI.Helper.AsyncInvocation(this._setEventListeners.bind(this));
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.featureElem, Balloon_1.Enum.CssClasses.IsOpen);
                            this._floatingInstance.unsetFloatingPosition();
                            this._removeEventListeners();
                        }
                        this._setA11YProperties();
                        if (this.isOpen) {
                            if (this.featureOptions.focusOptions.useFocus !== false) {
                                this._focusManagerInstance.storeLastFocusedElement();
                                this._focusTrapInstance.enableForA11y();
                            }
                            if (this.featureOptions.focusOptions.useFocus !== false) {
                                this._focusableBalloonElements = this.featureElem.querySelectorAll(OSUI.Constants.FocusableElems);
                                this._manageFocusInsideBalloon(arrowKeyPressed);
                            }
                        }
                        else if (this.featureOptions.focusOptions.useFocus !== false) {
                            this._focusTrapInstance.disableForA11y();
                            OSUI.Helper.AsyncInvocation(() => {
                                this.featureElem.blur();
                                if (isBodyClick === false) {
                                    this._focusManagerInstance.setFocusToStoredElement();
                                }
                            });
                            this._focusableBalloonElements = undefined;
                            this._currentFocusedElementIndex = undefined;
                        }
                        this._onToggleEvent(this.isOpen, this.featureElem);
                        OSUI.Helper.AsyncInvocation(() => {
                            this._isOpenedByApi = false;
                        });
                    }
                    _unsetCallbacks() {
                        this._eventBodyClick = undefined;
                        this._eventOnKeypress = undefined;
                        this._onToggleEvent = undefined;
                        this._eventOnWindowResize = undefined;
                        window[OSFramework.OSUI.GlobalEnum.CustomEvent.BalloonOnToggle] = undefined;
                    }
                    build() {
                        this._setCallbacks();
                        this._setEventListeners();
                        this.setFloatingConfigs();
                        if (this.featureOptions.focusOptions.useFocus !== false) {
                            this._handleFocusBehavior();
                        }
                        this._setA11YProperties();
                        this._setBalloonWidth();
                        this.setBalloonShape();
                    }
                    close() {
                        if (this.isOpen && this.featureElem !== undefined) {
                            this._toggleBalloon(false);
                        }
                    }
                    dispose() {
                        var _a;
                        (_a = this._floatingInstance) === null || _a === void 0 ? void 0 : _a.dispose();
                        this._removeEventListeners();
                        this._unsetCallbacks();
                        super.dispose();
                    }
                    open(isOpenedByApi, arrowKeyPressed) {
                        if (this.isOpen === false && this.featureElem !== undefined) {
                            this._isOpenedByApi = isOpenedByApi;
                            this._toggleBalloon(true, false, arrowKeyPressed);
                        }
                    }
                    setBalloonShape(shape) {
                        if (shape !== undefined) {
                            this.featureOptions.shape = shape;
                        }
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.featureElem, Balloon_1.Enum.CssCustomProperties.Shape, 'var(--border-radius-' + this.featureOptions.shape + ')');
                    }
                    setFloatingBehaviour(isUpdate) {
                        if (isUpdate || this._floatingInstance === undefined) {
                            this.setFloatingConfigs();
                            if (isUpdate && this._floatingInstance !== undefined) {
                                this._floatingInstance.update(this._floatingOptions);
                            }
                            else {
                                this._floatingInstance = new OSUI.Utils.FloatingPosition.Factory.NewFloatingPosition(this._floatingOptions, OSUI.Utils.FloatingPosition.Enum.Provider.FloatingUI);
                            }
                        }
                        else {
                            this._floatingInstance.build();
                        }
                    }
                    setFloatingConfigs() {
                        this._floatingOptions = {
                            AutoPlacement: this.featureOptions.position === OSUI.GlobalEnum.FloatingPosition.Auto,
                            AnchorElem: this.featureOptions.anchorElem,
                            ArrowElem: this.featureOptions.arrowElem,
                            AutoPlacementOptions: {
                                alignment: this.featureOptions.alignment,
                                allowedPlacements: this.featureOptions.allowedPlacements,
                            },
                            FloatingElem: this.featureElem,
                            Position: this.featureOptions.position,
                            UpdatePosition: true,
                        };
                    }
                    updateFloatingConfigs(floatingConfigs) {
                        if (floatingConfigs !== undefined) {
                            this._floatingOptions = floatingConfigs;
                        }
                        this.setFloatingBehaviour(true);
                    }
                    updatePositionOption(position) {
                        this.featureOptions.position = position;
                        this.setFloatingBehaviour(true);
                    }
                }
                Balloon_1.Balloon = Balloon;
            })(Balloon = Feature.Balloon || (Feature.Balloon = {}));
        })(Feature = OSUI.Feature || (OSUI.Feature = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Feature;
        (function (Feature) {
            var Balloon;
            (function (Balloon) {
                var Enum;
                (function (Enum) {
                    let CssClasses;
                    (function (CssClasses) {
                        CssClasses["IsOpen"] = "osui-balloon--is-open";
                        CssClasses["Pattern"] = "osui-balloon";
                    })(CssClasses = Enum.CssClasses || (Enum.CssClasses = {}));
                    let CssCustomProperties;
                    (function (CssCustomProperties) {
                        CssCustomProperties["Shape"] = "--osui-balloon-shape";
                        CssCustomProperties["Width"] = "--osui-balloon-width";
                    })(CssCustomProperties = Enum.CssCustomProperties || (Enum.CssCustomProperties = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["AnchorId"] = "AnchorId";
                        Properties["BalloonPosition"] = "BalloonPosition";
                        Properties["BalloonShape"] = "BalloonShape";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = Balloon.Enum || (Balloon.Enum = {}));
            })(Balloon = Feature.Balloon || (Feature.Balloon = {}));
        })(Feature = OSUI.Feature || (OSUI.Feature = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            function AsyncInvocation(callback, ...args) {
                if (callback) {
                    return window.setTimeout(() => callback(...args), 0);
                }
                return 0;
            }
            Helper.AsyncInvocation = AsyncInvocation;
            function ApplySetTimeOut(callback, time, ...args) {
                if (callback) {
                    return window.setTimeout(() => callback(...args), time);
                }
                return 0;
            }
            Helper.ApplySetTimeOut = ApplySetTimeOut;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            class Dates {
                static GetTimeFromDate(_date) {
                    const _selectedHour = _date.getHours() < 10 ? '0' + _date.getHours() : _date.getHours();
                    const _selectedMin = _date.getMinutes() < 10 ? '0' + _date.getMinutes() : _date.getMinutes();
                    const _selectedSec = _date.getSeconds() < 10 ? '0' + _date.getSeconds() : _date.getSeconds();
                    return _selectedHour + ':' + _selectedMin + ':' + _selectedSec;
                }
                static IsBeforeThan(date1, date2) {
                    return Date.parse(date1) <= Date.parse(date2);
                }
                static IsNull(date) {
                    let _date;
                    if (typeof date === 'string') {
                        if (Number.isNaN(Date.parse(date))) {
                            throw new Error(`The given date '${date}' it's not a valid date.`);
                        }
                        _date = new Date(Date.parse(date));
                    }
                    else if (date instanceof Date) {
                        _date = date;
                    }
                    else {
                        return true;
                    }
                    if (_date.getFullYear() === 1900 && _date.getMonth() === 0 && _date.getDate() === 1) {
                        return true;
                    }
                    return false;
                }
                static IsValid(date) {
                    return !Number.isNaN(Number(this.NormalizeDate(date)));
                }
                static NormalizeDate(date) {
                    let currDate;
                    if (date.indexOf('T') > -1) {
                        currDate = new Date(date);
                    }
                    else {
                        currDate = new Date(date.replace(/-/g, '/'));
                    }
                    return currDate;
                }
                static NormalizeDateTime(date, normalizeToMax) {
                    let _newDate = date;
                    if (typeof _newDate === 'string') {
                        _newDate = new Date(date);
                    }
                    if (normalizeToMax) {
                        _newDate.setHours(23, 59, 59, 59);
                    }
                    else {
                        _newDate.setHours(0, 0, 0, 0);
                    }
                    return _newDate;
                }
                static SetServerDateFormat(date) {
                    Dates._serverFormat = date.replace('13', 'DD').replace('10', 'MM').replace('1900', 'YYYY');
                }
                static get ServerFormat() {
                    return Dates._serverFormat;
                }
            }
            Dates._serverFormat = '';
            Helper.Dates = Dates;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            let UAKeyword;
            (function (UAKeyword) {
                UAKeyword["chrome"] = "chrome";
                UAKeyword["crios"] = "crios";
                UAKeyword["edge"] = "edge";
                UAKeyword["edgios"] = "edgios";
                UAKeyword["edga"] = "edga";
                UAKeyword["edg"] = "edg/";
                UAKeyword["firefox"] = "firefox";
                UAKeyword["fxios"] = "fxios";
                UAKeyword["kindle"] = "kindle";
                UAKeyword["silk"] = "silk";
                UAKeyword["kfapwa"] = "kfapwa";
                UAKeyword["kfapwi"] = "kfapwi";
                UAKeyword["kfjwa"] = "kfjwa";
                UAKeyword["kfjwi"] = "kfjwi";
                UAKeyword["kfsowi"] = "kfsowi";
                UAKeyword["kftt"] = "kftt";
                UAKeyword["kfot"] = "kfot";
                UAKeyword["kfthwa"] = "kfthwa";
                UAKeyword["kfthwi"] = "kfthwi";
                UAKeyword["miuibrowser"] = "miuibrowser";
                UAKeyword["msie"] = "msie";
                UAKeyword["opera"] = "opera";
                UAKeyword["opr"] = "opr";
                UAKeyword["opios"] = "opios";
                UAKeyword["safari"] = "safari";
                UAKeyword["samsungbrowser"] = "samsungbrowser";
                UAKeyword["trident"] = "trident";
                UAKeyword["ucbrowser"] = "ucbrowser";
                UAKeyword["yabrowser"] = "yabrowser";
            })(UAKeyword || (UAKeyword = {}));
            let OperatingSystemKeyword;
            (function (OperatingSystemKeyword) {
                OperatingSystemKeyword["Android"] = "android";
                OperatingSystemKeyword["Ipad"] = "ipad";
                OperatingSystemKeyword["Iphone"] = "iphone";
                OperatingSystemKeyword["MacOS"] = "mac";
                OperatingSystemKeyword["Windows"] = "windows";
            })(OperatingSystemKeyword || (OperatingSystemKeyword = {}));
            const iphoneDevices = [
                { width: 1125, height: 2436, description: 'iphone x/xs' },
                { width: 828, height: 1792, description: 'iphone xr' },
                { width: 750, height: 1624, description: 'iphone xr scaled' },
                { width: 1242, height: 2688, description: 'iphone xs max' },
                { width: 828, height: 1792, description: 'iphone 11' },
                { width: 1125, height: 2436, description: 'iphone 11 pro' },
                { width: 1242, height: 2688, description: 'iphone 11 pro max' },
                { width: 1125, height: 2436, description: 'iphone 12 mini' },
                { width: 1170, height: 2532, description: 'iphone 12' },
                { width: 1170, height: 2532, description: 'iphone 12 pro' },
                { width: 1284, height: 2778, description: 'iphone 12 pro max' },
                { width: 1125, height: 2436, description: 'iphone 13 mini' },
                { width: 1170, height: 2532, description: 'iphone 13' },
                { width: 1170, height: 2532, description: 'iphone 13 pro' },
                { width: 1284, height: 2778, description: 'iphone 13 pro max' },
                { width: 1170, height: 2532, description: 'iphone 14' },
                { width: 1284, height: 2778, description: 'iphone 14 plus' },
                { width: 1179, height: 2556, description: 'iphone 14 pro' },
                { width: 1290, height: 2796, description: 'iphone 14 pro max' },
            ];
            class DeviceInfo {
                static _getOperatingSystem(userAgent = '') {
                    const userAgentLocal = DeviceInfo._getUserAgent(userAgent);
                    let localOs = OSUI.GlobalEnum.MobileOS.Unknown;
                    if (userAgentLocal.includes(OperatingSystemKeyword.Android)) {
                        localOs = OSUI.GlobalEnum.MobileOS.Android;
                    }
                    else if (userAgentLocal.includes(OperatingSystemKeyword.Windows)) {
                        localOs = OSUI.GlobalEnum.MobileOS.Windows;
                    }
                    else if (userAgentLocal.includes(OperatingSystemKeyword.Ipad) ||
                        userAgentLocal.includes(OperatingSystemKeyword.Iphone)) {
                        localOs = OSUI.GlobalEnum.MobileOS.IOS;
                    }
                    else if (userAgentLocal.includes(OperatingSystemKeyword.MacOS)) {
                        localOs = OSUI.GlobalEnum.MobileOS.MacOS;
                    }
                    return localOs;
                }
                static _getUserAgent(userAgent = '') {
                    let localUserAgent = userAgent;
                    if (userAgent.replace(/ /g, '') === '') {
                        if (sessionStorage.previewDevicesUserAgent) {
                            localUserAgent = sessionStorage.previewDevicesUserAgent;
                        }
                        else {
                            localUserAgent = window.navigator.userAgent;
                        }
                    }
                    return localUserAgent.toLowerCase();
                }
                static _isChrome(ua) {
                    return ua.includes(UAKeyword.chrome) || ua.includes(UAKeyword.crios);
                }
                static _isEdge(ua) {
                    return (ua.includes(UAKeyword.edge) ||
                        ua.includes(UAKeyword.edgios) ||
                        ua.includes(UAKeyword.edga) ||
                        ua.includes(UAKeyword.edg));
                }
                static _isFirefox(ua) {
                    return ua.includes(UAKeyword.firefox) || ua.includes(UAKeyword.fxios);
                }
                static _isIE(ua) {
                    return ua.includes(UAKeyword.trident) || ua.includes(UAKeyword.msie);
                }
                static _isKindle(ua) {
                    return (ua.includes(UAKeyword.kindle) ||
                        ua.includes(UAKeyword.silk) ||
                        ua.includes(UAKeyword.kftt) ||
                        ua.includes(UAKeyword.kfot) ||
                        ua.includes(UAKeyword.kfjwa) ||
                        ua.includes(UAKeyword.kfjwi) ||
                        ua.includes(UAKeyword.kfsowi) ||
                        ua.includes(UAKeyword.kfthwa) ||
                        ua.includes(UAKeyword.kfthwi) ||
                        ua.includes(UAKeyword.kfapwa) ||
                        ua.includes(UAKeyword.kfapwi));
                }
                static _isMiui(ua) {
                    return ua.includes(UAKeyword.miuibrowser);
                }
                static _isOpera(ua) {
                    return ua.includes(UAKeyword.opr) || ua.includes(UAKeyword.opera) || ua.includes(UAKeyword.opios);
                }
                static _isRtlLanguage() {
                    const rtlLanguages = ['ar', 'he', 'fa', 'ur', 'ps', 'syr', 'yi', 'ku', 'dv', 'ps', 'sd', 'ug'];
                    const userLanguage = navigator.language.split('-')[0];
                    return rtlLanguages.includes(userLanguage);
                }
                static _isSafari(ua) {
                    return ua.includes(UAKeyword.safari);
                }
                static _isSamsung(ua) {
                    return ua.includes(UAKeyword.samsungbrowser);
                }
                static _isUC(ua) {
                    return ua.includes(UAKeyword.ucbrowser);
                }
                static _isYandex(ua) {
                    return ua.includes(UAKeyword.yabrowser);
                }
                static get HasAccessibilityEnabled() {
                    return Helper.Dom.ClassSelector(document.body, OSUI.Constants.HasAccessibilityClass) !== undefined;
                }
                static get IsDesktop() {
                    return DeviceInfo.GetDeviceType() === OSUI.GlobalEnum.DeviceType.desktop;
                }
                static get IsPhone() {
                    return DeviceInfo.GetDeviceType() === OSUI.GlobalEnum.DeviceType.phone;
                }
                static get IsIphoneWithNotch() {
                    if (DeviceInfo._isIphoneWithNotch === undefined) {
                        const ratio = (sessionStorage.previewDevicesPixelRatio
                            ? sessionStorage.previewDevicesPixelRatio
                            : window.devicePixelRatio) || 1;
                        const currScreen = {
                            width: (window.visualViewport ? window.visualViewport.width : window.innerWidth) * ratio,
                            height: (window.visualViewport ? window.visualViewport.height : window.innerHeight) * ratio,
                            description: '',
                        };
                        DeviceInfo._iphoneDetails = iphoneDevices.find((device) => {
                            return device.height === currScreen.height && device.width === currScreen.width;
                        });
                        DeviceInfo._isIphoneWithNotch = DeviceInfo._iphoneDetails !== undefined;
                    }
                    return DeviceInfo._isIphoneWithNotch;
                }
                static get IsRtlLang() {
                    return DeviceInfo._isRtlLanguage();
                }
                static get IsTablet() {
                    return DeviceInfo.GetDeviceType() === OSUI.GlobalEnum.DeviceType.tablet;
                }
                static get IsPwa() {
                    if (DeviceInfo._isPwa === undefined) {
                        DeviceInfo._isPwa =
                            (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches) ||
                                window.navigator.standalone === true;
                    }
                    return DeviceInfo._isPwa;
                }
                static get IsNative() {
                    if (DeviceInfo._isNativeApp === undefined) {
                        DeviceInfo._isNativeApp = window.cordova !== undefined && !DeviceInfo.IsPwa;
                    }
                    return DeviceInfo._isNativeApp;
                }
                static get IsAndroid() {
                    if (DeviceInfo._isAndroid === undefined) {
                        DeviceInfo._isAndroid = Helper.Dom.Styles.ContainsClass(document.body, OSUI.GlobalEnum.MobileOS.Android);
                    }
                    return DeviceInfo._isAndroid;
                }
                static get IsIos() {
                    if (DeviceInfo._isIos === undefined) {
                        DeviceInfo._isIos = Helper.Dom.Styles.ContainsClass(document.body, OSUI.GlobalEnum.MobileOS.IOS);
                    }
                    return DeviceInfo._isIos;
                }
                static get IsTouch() {
                    if (DeviceInfo._isTouch === undefined) {
                        if (window.PointerEvent && 'maxTouchPoints' in navigator) {
                            DeviceInfo._isTouch = navigator.maxTouchPoints > 0;
                        }
                        else {
                            DeviceInfo._isTouch = window.matchMedia && window.matchMedia('(any-pointer:coarse)').matches;
                            if (!DeviceInfo._isTouch) {
                                DeviceInfo._isTouch = !!(window.TouchEvent || 'ontouchstart' in window);
                            }
                        }
                    }
                    return DeviceInfo._isTouch;
                }
                static get IsMobileDevice() {
                    const isMobileDevice = DeviceInfo.GetOperatingSystem() === OSUI.GlobalEnum.MobileOS.Android ||
                        DeviceInfo.GetOperatingSystem() === OSUI.GlobalEnum.MobileOS.IOS;
                    return isMobileDevice;
                }
                static get NotchPosition() {
                    let notchPosition = undefined;
                    let windowOrientation = undefined;
                    if (window !== null && 'orientation' in window) {
                        windowOrientation = window.orientation;
                    }
                    else if ('orientation' in window.screen) {
                        windowOrientation = window.screen.orientation.angle;
                    }
                    if (windowOrientation === undefined) {
                        return notchPosition;
                    }
                    switch (windowOrientation) {
                        case 90:
                            notchPosition = OSUI.GlobalEnum.Position.Left;
                            break;
                        case -90:
                            notchPosition = OSUI.GlobalEnum.Position.Right;
                            break;
                        default:
                            notchPosition = OSUI.GlobalEnum.Position.Top;
                    }
                    return notchPosition;
                }
                static GetBrowser(userAgent = '') {
                    let browser = OSUI.GlobalEnum.Browser.unknown;
                    if (userAgent.trim() !== '') {
                        const userAgentLocal = DeviceInfo._getUserAgent(userAgent);
                        if (DeviceInfo._isKindle(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.kindle;
                        else if (DeviceInfo._isOpera(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.opera;
                        else if (DeviceInfo._isEdge(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.edge;
                        else if (DeviceInfo._isSamsung(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.samsung;
                        else if (DeviceInfo._isYandex(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.yandex;
                        else if (DeviceInfo._isMiui(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.miui;
                        else if (DeviceInfo._isChrome(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.chrome;
                        else if (DeviceInfo._isFirefox(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.firefox;
                        else if (DeviceInfo._isSafari(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.safari;
                        else if (DeviceInfo._isIE(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.ie;
                        else if (DeviceInfo._isUC(userAgentLocal))
                            browser = OSUI.GlobalEnum.Browser.uc;
                    }
                    else {
                        if (DeviceInfo._browser === OSUI.GlobalEnum.Browser.unknown) {
                            DeviceInfo._browser = DeviceInfo.GetBrowser(DeviceInfo._getUserAgent());
                        }
                        browser = DeviceInfo._browser;
                    }
                    return browser;
                }
                static GetDeviceOrientation() {
                    let orientation = OSUI.GlobalEnum.DeviceOrientation.unknown;
                    if (Helper.Dom.Styles.ContainsClass(document.body, OSUI.GlobalEnum.DeviceOrientation.landscape))
                        orientation = OSUI.GlobalEnum.DeviceOrientation.landscape;
                    else if (Helper.Dom.Styles.ContainsClass(document.body, OSUI.GlobalEnum.DeviceOrientation.portrait))
                        orientation = OSUI.GlobalEnum.DeviceOrientation.portrait;
                    return orientation;
                }
                static GetDeviceType() {
                    let device = OSUI.GlobalEnum.DeviceType.desktop;
                    if (Helper.Dom.Styles.ContainsClass(document.body, OSUI.GlobalEnum.DeviceType.phone))
                        device = OSUI.GlobalEnum.DeviceType.phone;
                    else if (Helper.Dom.Styles.ContainsClass(document.body, OSUI.GlobalEnum.DeviceType.tablet))
                        device = OSUI.GlobalEnum.DeviceType.tablet;
                    return device;
                }
                static GetOperatingSystem(userAgent = '') {
                    let localOs;
                    if (userAgent.trim() !== '') {
                        localOs = DeviceInfo._getOperatingSystem();
                    }
                    else {
                        if (DeviceInfo._operatingSystem === OSUI.GlobalEnum.MobileOS.Unknown) {
                            DeviceInfo._operatingSystem = DeviceInfo.GetOperatingSystem(DeviceInfo._getUserAgent());
                        }
                        localOs = DeviceInfo._operatingSystem;
                    }
                    return localOs;
                }
                static RefreshOperatingSystem() {
                    DeviceInfo._operatingSystem = DeviceInfo.GetOperatingSystem(DeviceInfo._getUserAgent());
                }
            }
            DeviceInfo._browser = OSUI.GlobalEnum.Browser.unknown;
            DeviceInfo._iphoneDetails = undefined;
            DeviceInfo._isAndroid = undefined;
            DeviceInfo._isIos = undefined;
            DeviceInfo._isIphoneWithNotch = undefined;
            DeviceInfo._isNativeApp = undefined;
            DeviceInfo._isPwa = undefined;
            DeviceInfo._isTouch = undefined;
            DeviceInfo._operatingSystem = OSUI.GlobalEnum.MobileOS.Unknown;
            Helper.DeviceInfo = DeviceInfo;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            class AttributeManipulation {
                static Get(element, attrName) {
                    if (element) {
                        const value = element.getAttribute(attrName);
                        return value ? value : undefined;
                    }
                    else {
                        throw Error(`The element does not exist, when trying to get the attribute '${attrName}'.`);
                    }
                }
                static Has(element, attrName) {
                    if (element) {
                        return element.hasAttribute(attrName);
                    }
                    else {
                        throw Error(`The element does not exist, when trying to check the attribute '${attrName}'.`);
                    }
                }
                static Id(element) {
                    return AttributeManipulation.Get(element, 'Id');
                }
                static Remove(element, attrName) {
                    if (element) {
                        element.removeAttribute(attrName);
                    }
                    else {
                        throw Error(`The element does not exist, when trying to remove the attribute '${attrName}'.`);
                    }
                }
                static Set(element, attrName, attrValue) {
                    if (element) {
                        element.setAttribute(attrName, attrValue.toString());
                    }
                    else {
                        throw Error(`The element does not exist, when trying to set the attribute '${attrName}'.`);
                    }
                }
            }
            class StyleManipulation {
                static AddClass(element, cssClass) {
                    if (element) {
                        if (cssClass !== '') {
                            element.classList.add(cssClass);
                        }
                    }
                    else {
                        throw Error(`The element does not exist, when trying to add the class '${cssClass}'.`);
                    }
                }
                static ContainsClass(element, cssClass) {
                    if (element) {
                        if (cssClass !== '') {
                            return element.classList.contains(cssClass);
                        }
                    }
                    else {
                        throw Error(`The element does not exist, when trying to check if it has the class '${cssClass}'.`);
                    }
                }
                static ExtendedClass(element, currentCssClasses, newCssClass) {
                    if (element) {
                        const currentClassesList = currentCssClasses.split(' ');
                        const newClassesList = newCssClass.split(' ');
                        let classesToRemove = [];
                        let classesToAdd = [];
                        if (currentCssClasses !== '') {
                            classesToRemove = currentClassesList.filter((currClass) => newClassesList.indexOf(currClass) === -1);
                        }
                        if (newCssClass !== '') {
                            classesToAdd = newClassesList.filter((newClass) => currentClassesList.indexOf(newClass) === -1);
                        }
                        if (classesToRemove.length > 0) {
                            classesToRemove.forEach((classToRemove) => {
                                Helper.Dom.Styles.RemoveClass(element, classToRemove);
                            });
                        }
                        if (classesToAdd.length > 0) {
                            classesToAdd.forEach((classToAdd) => {
                                Helper.Dom.Styles.AddClass(element, classToAdd);
                            });
                        }
                    }
                    else {
                        throw Error(`The element does not exist, when trying to update EntendedClass '${newCssClass}'.`);
                    }
                }
                static GetBorderRadiusValueFromShapeType(shapeName) {
                    return getComputedStyle(document.documentElement).getPropertyValue('--border-radius-' + shapeName);
                }
                static GetColorValueFromColorType(colorName) {
                    const colorValue = getComputedStyle(document.documentElement).getPropertyValue('--color-' + colorName);
                    if (colorValue !== '') {
                        return colorValue;
                    }
                    return colorName;
                }
                static GetCssClasses(element) {
                    if (element) {
                        return new Set([...element.classList]);
                    }
                    else {
                        throw Error('The element does not exist, when trying to get the classes.');
                    }
                }
                static GetCustomProperty(element, propertyName) {
                    if (element) {
                        return getComputedStyle(element).getPropertyValue(propertyName);
                    }
                    else {
                        throw Error(`The element does not exist, when trying to get the Custom Property '${propertyName}'.`);
                    }
                }
                static RemoveClass(element, cssClass) {
                    if (element) {
                        if (cssClass !== '') {
                            element.classList.remove(cssClass);
                        }
                    }
                    else {
                        throw Error(`The element does not exist, when trying to remove the class '${cssClass}'.`);
                    }
                }
                static RemoveStyleAttribute(element, cssProperty) {
                    if (element) {
                        if (cssProperty !== '') {
                            element.style.removeProperty(cssProperty);
                        }
                    }
                    else {
                        throw Error(`The element does not exist, when trying to remove the rule '${cssProperty}'.`);
                    }
                }
                static SetStyleAttribute(element, cssProperty, ruleValue) {
                    if (element) {
                        if (cssProperty !== '' && ruleValue !== undefined) {
                            element.style.setProperty(cssProperty, ruleValue.toString());
                        }
                    }
                    else {
                        throw Error(`The element does not exist, when trying to apply the rule '${cssProperty}'.`);
                    }
                }
                static ToggleClass(element, cssClass) {
                    if (element) {
                        if (cssClass !== '') {
                            element.classList.toggle(cssClass);
                        }
                    }
                    else {
                        throw Error(`The element does not exist, when trying to toggle the class '${cssClass}'.`);
                    }
                }
            }
            class Dom {
                static get Attribute() {
                    return AttributeManipulation;
                }
                static get Styles() {
                    return StyleManipulation;
                }
                static ClassSelector(element, cssClass) {
                    let elementFound = undefined;
                    if (element) {
                        if (cssClass !== '') {
                            elementFound = element.querySelector(OSUI.Constants.Dot + cssClass);
                        }
                        elementFound = elementFound ? elementFound : undefined;
                    }
                    else {
                        console.error(`The element does not exist.`);
                    }
                    return elementFound;
                }
                static Disable(element) {
                    if (element) {
                        if (Dom.Attribute.Has(element, 'disabled') === false) {
                            Dom.Attribute.Set(element, 'disabled', true);
                        }
                    }
                }
                static Enable(element) {
                    if (element) {
                        if (Dom.Attribute.Has(element, 'disabled')) {
                            Dom.Attribute.Remove(element, 'disabled');
                        }
                    }
                }
                static GenerateUniqueId() {
                    return Math.random().toString(36);
                }
                static GetElementById(id) {
                    const obj = document.getElementById(id);
                    if (obj) {
                        return obj;
                    }
                    else {
                        throw new Error(`Object with Id '${id}' not found.`);
                    }
                }
                static GetElementByUniqueId(uniqueId) {
                    const obj = document.getElementsByName(uniqueId);
                    if (obj.length && uniqueId !== '') {
                        return obj[0];
                    }
                    else {
                        throw new Error(`Object with name '${uniqueId}' not found.`);
                    }
                }
                static GetFocusableElements(element, includeTabIndexHidden = false) {
                    const _focusableElems = element.querySelectorAll(`${OSUI.Constants.FocusableElems}${includeTabIndexHidden ? ', ' + OSUI.Constants.FocusableTabIndexHidden : ''}`);
                    const _filteredElements = Array.from(_focusableElems).filter((element) => element.getAttribute(OSUI.Constants.FocusTrapIgnoreAttr) !== 'true');
                    return [..._filteredElements];
                }
                static IsInsidePopupWidget(element) {
                    const _popup = document.querySelectorAll(OSUI.Constants.Dot + OSUI.GlobalEnum.CssClassElements.Popup);
                    let _isInsidePopup = false;
                    if (_popup.length > 0 && element) {
                        _popup.forEach((popup) => {
                            if (popup.contains(element)) {
                                _isInsidePopup = true;
                            }
                        });
                    }
                    return _isInsidePopup;
                }
                static Move(element, target) {
                    if (element && target) {
                        target.appendChild(element);
                    }
                }
                static SetInputValue(inputElem, value) {
                    const inputElemProtoObj = Object.getPrototypeOf(inputElem);
                    const setValue = Object.getOwnPropertyDescriptor(inputElemProtoObj, 'value').set;
                    setValue.call(inputElem, value);
                    inputElem.dispatchEvent(new CustomEvent('input', { bubbles: true }));
                }
                static TagSelector(element, htmlTag) {
                    let elementFound = undefined;
                    if (element) {
                        if (htmlTag !== '') {
                            elementFound = element.querySelector(htmlTag);
                        }
                        elementFound = elementFound ? elementFound : undefined;
                    }
                    else {
                        console.error(`The element does not exist.`);
                    }
                    return elementFound;
                }
                static TagSelectorAll(element, htmlTag) {
                    let elementFound;
                    if (element) {
                        if (htmlTag !== '') {
                            elementFound = Array.from(element.querySelectorAll(htmlTag));
                        }
                        elementFound = elementFound ? elementFound : undefined;
                    }
                    else {
                        console.error(`The element does not exist.`);
                    }
                    return elementFound;
                }
            }
            Helper.Dom = Dom;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            class InvalidInputs {
                static _checkInvalidInputs(element, isSmooth, elementParentClass) {
                    const notValidClassess = [
                        OSUI.Constants.Dot + OSUI.GlobalEnum.CssClassElements.InputNotValid,
                        OSUI.Constants.Dot + Providers.OSUI.Datepicker.Flatpickr.Enum.CSSSelectors.DatepickerNotValid,
                        OSUI.Constants.Dot + OSUI.Patterns.Dropdown.ServerSide.Enum.CssClass.NotValid,
                        OSUI.Constants.Dot + Providers.OSUI.Dropdown.VirtualSelect.Enum.CssClass.NotValid,
                    ];
                    const joinClassNames = [notValidClassess].join(OSUI.Constants.Comma);
                    const invalidInput = element.querySelectorAll(joinClassNames)[0];
                    if (invalidInput) {
                        const inputVisible = window.getComputedStyle(invalidInput).display !== OSUI.GlobalEnum.CssProperties.None;
                        if (inputVisible) {
                            this._scrollToInvalidInput(invalidInput, isSmooth, elementParentClass);
                        }
                        else {
                            Helper.AsyncInvocation(() => {
                                this._searchElementId(invalidInput, isSmooth, elementParentClass);
                            });
                        }
                    }
                }
                static _scrollToInvalidInput(element, isSmooth, elementParentClass) {
                    const browser = OSFramework.OSUI.Helper.DeviceInfo.GetBrowser();
                    OutSystems.OSUI.Utils.ScrollToElement(element.id, isSmooth, 0, elementParentClass);
                    if (browser === OSUI.GlobalEnum.Browser.safari || OSFramework.OSUI.Helper.DeviceInfo.IsIos) {
                        if (isSmooth) {
                            console.warn('Due to the unsupported scrollend event on Safari/iOS, the smooth transition is disabled and the invalid input will be focused directly.');
                        }
                        element.focus();
                    }
                    else {
                        const activeScreenElement = Helper.Dom.ClassSelector(document.body, OSUI.GlobalEnum.CssClassElements.ActiveScreen);
                        const focusOnScrollEnd = () => {
                            element.focus();
                            activeScreenElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.ScrollEnd, focusOnScrollEnd);
                        };
                        activeScreenElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.ScrollEnd, focusOnScrollEnd);
                    }
                }
                static _searchElementId(element, isSmooth, elementParentClass) {
                    const elementToSearch = element.parentElement;
                    if (elementToSearch.id !== OSUI.Constants.EmptyString) {
                        this._scrollToInvalidInput(elementToSearch, isSmooth, elementParentClass);
                    }
                    else {
                        this._searchElementId(elementToSearch, isSmooth, elementParentClass);
                    }
                }
                static FocusFirstInvalidInput(elementId, isSmooth, elementParentClass) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OutSystems.OSUI.ErrorCodes.Utilities.FailGetInvalidInput,
                        callback: () => {
                            let element = document.body;
                            if (elementId !== OSUI.Constants.EmptyString) {
                                element = Helper.Dom.GetElementById(elementId);
                            }
                            Helper.AsyncInvocation(() => {
                                this._checkInvalidInputs(element, isSmooth, elementParentClass);
                            });
                        },
                    });
                    return result;
                }
            }
            Helper.InvalidInputs = InvalidInputs;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            class Language {
                static get Lang() {
                    return Language._lang;
                }
                static get ShortLang() {
                    return Language._lang.substring(0, 2);
                }
                static Set(language) {
                    if (language !== '' && language !== Language._lang) {
                        Language._lang = language;
                        document.documentElement.lang = language;
                    }
                }
            }
            Language._lang = OSUI.Constants.Language.code;
            Helper.Language = Language;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            function LogMessage(message) {
                if (OSUI.Constants.EnableLogMessages) {
                    return message;
                }
            }
            Helper.LogMessage = LogMessage;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            class A11Y {
                static AriaAtomicFalse(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Atomic, OSUI.Constants.A11YAttributes.States.False);
                }
                static AriaAtomicTrue(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Atomic, OSUI.Constants.A11YAttributes.States.True);
                }
                static AriaBusyFalse(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Busy, OSUI.Constants.A11YAttributes.States.False);
                }
                static AriaBusyTrue(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Busy, OSUI.Constants.A11YAttributes.States.True);
                }
                static AriaControls(element, targetId) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Controls, targetId);
                }
                static AriaDescribedBy(element, targetId) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Describedby, targetId);
                }
                static AriaDisabled(element, isDisabled) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Disabled, isDisabled);
                }
                static AriaDisabledFalse(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Disabled, false);
                }
                static AriaDisabledTrue(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Disabled, true);
                }
                static AriaExpanded(element, value) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Expanded, value);
                }
                static AriaExpandedFalse(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Expanded, OSUI.Constants.A11YAttributes.States.False);
                }
                static AriaExpandedTrue(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Expanded, OSUI.Constants.A11YAttributes.States.True);
                }
                static AriaHasPopup(element, value) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Haspopup.prop, value);
                }
                static AriaHasPopupFalse(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Haspopup.prop, OSUI.Constants.A11YAttributes.Aria.Haspopup.value.False);
                }
                static AriaHasPopupTrue(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Haspopup.prop, OSUI.Constants.A11YAttributes.Aria.Haspopup.value.True);
                }
                static AriaHidden(element, value) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Hidden, value);
                }
                static AriaHiddenFalse(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Hidden, OSUI.Constants.A11YAttributes.States.False);
                }
                static AriaHiddenTrue(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Hidden, OSUI.Constants.A11YAttributes.States.True);
                }
                static AriaLabel(element, value) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Label, value);
                }
                static AriaLabelledBy(element, targetId) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Labelledby, targetId);
                }
                static AriaLiveAssertive(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.AriaLive.AttrName, OSUI.Constants.A11YAttributes.AriaLive.Assertive);
                }
                static AriaLiveOff(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.AriaLive.AttrName, OSUI.Constants.A11YAttributes.AriaLive.Off);
                }
                static AriaLivePolite(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.AriaLive.AttrName, OSUI.Constants.A11YAttributes.AriaLive.Polite);
                }
                static AriaSelectedFalse(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Selected, false);
                }
                static AriaSelectedTrue(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Selected, true);
                }
                static AriaValueMax(element, value) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.ValueMax, value);
                }
                static AriaValueMin(element, value) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.ValueMin, value);
                }
                static MultiselectableFalse(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Multiselectable, OSUI.Constants.A11YAttributes.States.False);
                }
                static MultiselectableTrue(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Aria.Multiselectable, OSUI.Constants.A11YAttributes.States.True);
                }
                static RoleAlert(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Alert);
                }
                static RoleButton(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Button);
                }
                static RoleComplementary(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Complementary);
                }
                static RoleListbox(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Listbox);
                }
                static RoleMenu(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Menu);
                }
                static RoleMenuItem(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.MenuItem);
                }
                static RoleOption(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Option);
                }
                static RolePresentation(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Presentation);
                }
                static RoleProgressBar(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Progressbar);
                }
                static RoleRegion(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Region);
                }
                static RoleSearch(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Search);
                }
                static RoleTab(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Tab);
                }
                static RoleTabList(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.TabList);
                }
                static RoleTabPanel(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.TabPanel);
                }
                static RoleTooltip(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Tooltip);
                }
                static SetElementsTabIndex(state, elements) {
                    const tabIndexValue = state
                        ? OSUI.Constants.A11YAttributes.States.TabIndexShow
                        : OSUI.Constants.A11YAttributes.States.TabIndexHidden;
                    for (const item of elements) {
                        Helper.A11Y.TabIndex(item, tabIndexValue);
                    }
                }
                static TabIndex(element, value) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.TabIndex, value);
                }
                static TabIndexFalse(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.TabIndex, OSUI.Constants.A11YAttributes.States.TabIndexHidden);
                }
                static TabIndexTrue(element) {
                    Helper.Dom.Attribute.Set(element, OSUI.Constants.A11YAttributes.TabIndex, OSUI.Constants.A11YAttributes.States.TabIndexShow);
                }
            }
            Helper.A11Y = A11Y;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            var MapOperation;
            (function (MapOperation) {
                function FindInMap(patternName, patternId, map) {
                    let pattern;
                    if (map.has(patternId)) {
                        pattern = map.get(patternId);
                    }
                    else {
                        for (const p of map.values()) {
                            if (p.equalsToID(patternId)) {
                                pattern = p;
                            }
                        }
                    }
                    if (pattern === undefined) {
                        throw new Error(`The ${patternName} with id:'${patternId}' was not found`);
                    }
                    return pattern;
                }
                MapOperation.FindInMap = FindInMap;
                function ExportKeys(map) {
                    return [...map.keys()];
                }
                MapOperation.ExportKeys = ExportKeys;
            })(MapOperation = Helper.MapOperation || (Helper.MapOperation = {}));
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            class SVG {
                static IsValid(svgString) {
                    const parser = new DOMParser();
                    try {
                        const doc = parser.parseFromString(svgString, OSUI.GlobalEnum.SVGHelperConstants.DOMType);
                        const parserError = doc.getElementsByTagName(OSUI.GlobalEnum.SVGHelperConstants.ParserError);
                        if (parserError.length > 0 || doc.documentElement.tagName !== OSUI.GlobalEnum.SVGHelperConstants.SVG) {
                            return false;
                        }
                    }
                    catch (error) {
                        return false;
                    }
                    return true;
                }
            }
            Helper.SVG = SVG;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            function Sanitize(value) {
                if (typeof value === 'string') {
                    if (value !== undefined && value !== null && value !== '') {
                        return value.replace(/</g, '‹').replace(/>/g, '›');
                    }
                }
                return value;
            }
            Helper.Sanitize = Sanitize;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            class Times {
                static ConvertInSeconds(time) {
                    return (time.getHours() * OSUI.GlobalEnum.Time.HourInSeconds +
                        time.getMinutes() * OSUI.GlobalEnum.Time.MinuteInSeconds +
                        time.getSeconds());
                }
                static IsNull(time) {
                    if (Number.isNaN(Date.parse(time))) {
                        if (typeof time === OSUI.Constants.JavaScriptTypes.String) {
                            const isValid = /^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/.test(time);
                            if (isValid === false) {
                                throw new Error(`The given time '${time}' it's not a valid time.`);
                            }
                        }
                        else {
                            return true;
                        }
                    }
                    else {
                        const auxDate = new Date(Date.parse(time));
                        time = auxDate.getHours() + ':' + auxDate.getMinutes() + ':' + auxDate.getSeconds();
                    }
                    if (time === OSUI.GlobalEnum.NullValues.Time) {
                        return true;
                    }
                    return false;
                }
            }
            Helper.Times = Times;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Helper;
        (function (Helper) {
            class URL {
                static GetFileTypeFromURL(url) {
                    const match = url.match(/\.([a-z0-9]+)(?:[?#]|$)/i);
                    return match ? match[1].toLowerCase() : null;
                }
                static IsImage(url) {
                    return (url.match(/(^data:image\/*(jpeg|jpg|gif|png|svg);base64)|\/?(\.\w\.)*\.(jpeg|jpg|gif|png|svg)($|(\?))/i) !== null);
                }
                static IsValid(url) {
                    const pattern = new RegExp('^(https?:\\/\\/)?' +
                        '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' +
                        '((\\d{1,3}\\.){3}\\d{1,3}))' +
                        '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' +
                        '(\\?[;&a-z\\d%_.~+=-]*)?' +
                        '(\\#[-a-z\\d_]*)?$', 'i');
                    return pattern.test(url) || pattern.test(window.location.host + url);
                }
            }
            Helper.URL = URL;
        })(Helper = OSUI.Helper || (OSUI.Helper = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            class AbstractPattern {
                constructor(uniqueId, configs) {
                    this._isBuilt = false;
                    this.isProviderBased = false;
                    this._uniqueId = uniqueId;
                    this._configs = configs;
                }
                _setCommonHtmlElements() {
                    this._selfElem = OSUI.Helper.Dom.GetElementByUniqueId(this._uniqueId);
                    this._widgetId = this._selfElem.closest(OSUI.GlobalEnum.DataBlocksTag.DataBlock).id;
                    if (this._configs.ExtendedClass !== '') {
                        OSUI.Helper.Dom.Styles.ExtendedClass(this._selfElem, '', this._configs.ExtendedClass);
                    }
                }
                _unsetCommonHtmlElements() {
                    this._selfElem = undefined;
                }
                finishBuild() {
                    if (this.isProviderBased === false) {
                        this.triggerPlatformInitializedEventCallback();
                    }
                    this._isBuilt = true;
                }
                triggerPlatformEventCallback(platFormCallback, ...args) {
                    if (platFormCallback !== undefined) {
                        OSUI.Helper.AsyncInvocation(platFormCallback, this.widgetId, ...args);
                    }
                }
                triggerPlatformInitializedEventCallback() {
                    if (this._platformEventInitialized !== undefined && this._isBuilt === false) {
                        this.triggerPlatformEventCallback(this._platformEventInitialized);
                    }
                }
                unsetGlobalCallbacks() {
                    this._platformEventInitialized = undefined;
                }
                build() {
                    this._setCommonHtmlElements();
                }
                changeProperty(propertyName, propertyValue) {
                    if (this._configs.hasOwnProperty(propertyName)) {
                        if (this._isBuilt) {
                            switch (propertyName) {
                                case OSUI.GlobalEnum.CommonPatternsProperties.ExtendedClass:
                                    OSUI.Helper.Dom.Styles.ExtendedClass(this._selfElem, this._configs.ExtendedClass, propertyValue);
                                    break;
                            }
                        }
                        if (this._configs.validateCanChange(this._isBuilt, propertyName)) {
                            this._configs[propertyName] = this._configs.validateDefault(propertyName, propertyValue);
                        }
                    }
                    else {
                        throw new Error(`changeProperty - Property '${propertyName}' can't be changed.`);
                    }
                }
                dispose() {
                    this._isBuilt = false;
                    this._unsetCommonHtmlElements();
                    this.unsetGlobalCallbacks();
                    this._configs = undefined;
                }
                equalsToID(patternId) {
                    return patternId === this._uniqueId || patternId === this._widgetId;
                }
                registerCallback(eventName, callback) {
                    switch (eventName) {
                        case OSUI.GlobalEnum.ProviderEvents.Initialized:
                            if (this._platformEventInitialized === undefined) {
                                this._platformEventInitialized = callback;
                            }
                            break;
                        default:
                            console.warn(`The pattern with id '${this.widgetId}' does not have the event '${eventName}' defined.`);
                    }
                }
                get _enableAccessibility() {
                    return OSUI.Helper.DeviceInfo.HasAccessibilityEnabled;
                }
                get selfElement() {
                    return this._selfElem;
                }
                get isBuilt() {
                    return this._isBuilt;
                }
                get configs() {
                    return this._configs;
                }
                get uniqueId() {
                    return this._uniqueId;
                }
                get widgetId() {
                    return this._widgetId;
                }
            }
            Patterns.AbstractPattern = AbstractPattern;
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            class AbstractChild extends Patterns.AbstractPattern {
                constructor() {
                    super(...arguments);
                    this._isFirstChild = false;
                    this._isLastChild = false;
                }
                notifyParent(actionType) {
                    this._parentObject.beNotifiedByChild(this, actionType);
                }
                setParentInfo(parentSelector, getPatternByIdAPI, canBeOrphan) {
                    try {
                        const findedElement = this.selfElement.closest(parentSelector);
                        this._parentId = OSUI.Helper.Dom.Attribute.Get(findedElement, 'name') || findedElement.dataset.uniqueid;
                        this._parentObject = getPatternByIdAPI(this._parentId);
                    }
                    catch (e) {
                        if (canBeOrphan) {
                            this._parentObject = undefined;
                        }
                        else {
                            throw new Error(`${OSUI.ErrorCodes.AbstractChild.FailParentNotFound}: Parent of Child with Id: '${this.widgetId}' was not found!`);
                        }
                    }
                }
                get isFirstChild() {
                    return this._isFirstChild;
                }
                set isFirstChild(value) {
                    this._isFirstChild = value;
                }
                get isLastChild() {
                    return this._isLastChild;
                }
                set isLastChild(value) {
                    this._isLastChild = value;
                }
                get parentId() {
                    return this._parentId;
                }
                get parentObject() {
                    return this._parentObject;
                }
            }
            Patterns.AbstractChild = AbstractChild;
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            class AbstractConfiguration {
                constructor(config) {
                    for (const key in config) {
                        if (config[key] !== undefined) {
                            this[key] = this.validateDefault(key, config[key]);
                        }
                    }
                }
                validateBoolean(value, defaultValue) {
                    return value !== undefined ? value : defaultValue;
                }
                validateDate(value, defaultValue) {
                    return OSUI.Helper.Dates.IsNull(value) === false ? value : defaultValue;
                }
                validateInRange(value, defaultValue, ...args) {
                    if (value) {
                        if (args.length > 0) {
                            const allowedValues = args.length > 1 ? args : args[0];
                            if (allowedValues.includes(value)) {
                                return value;
                            }
                        }
                    }
                    return defaultValue;
                }
                validateNumber(value, defaultValue) {
                    return typeof value === 'number' ? value : defaultValue;
                }
                validateString(value, defaultValue) {
                    return value && value.trim() ? value : defaultValue;
                }
                validateTime(value, defaultValue) {
                    return OSUI.Helper.Times.IsNull(value) === false ? value : defaultValue;
                }
                validateCanChange(_isBuilt, _key) {
                    return true;
                }
                validateDefault(_key, value) {
                    return value;
                }
            }
            Patterns.AbstractConfiguration = AbstractConfiguration;
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            class AbstractParent extends Patterns.AbstractPattern {
                constructor() {
                    super(...arguments);
                    this._childIdsByType = new Map();
                    this._childItemsByType = {};
                }
                getChild(childId) {
                    const childType = this._childIdsByType.get(childId);
                    if (this._childItemsByType[childType]) {
                        return this._childItemsByType[childType].get(childId);
                    }
                    else {
                        return undefined;
                    }
                }
                getChildByIndex(index, childType) {
                    if (childType === undefined) {
                        childType = Object.keys(this._childItemsByType)[0];
                    }
                    const childsMap = this._childItemsByType[childType];
                    return childsMap ? this.getChild(OSUI.Helper.MapOperation.ExportKeys(childsMap)[index]) : undefined;
                }
                getChildIndex(childId) {
                    const childType = this._childIdsByType.get(childId);
                    const childsMap = this._childItemsByType[childType];
                    return OSUI.Helper.MapOperation.ExportKeys(childsMap).indexOf(childId);
                }
                setChild(childItem) {
                    const childType = childItem.constructor.name;
                    if (this._childItemsByType[childType] === undefined) {
                        this._childItemsByType[childType] = new Map();
                    }
                    if (this._childItemsByType[childType].size === 0) {
                        childItem.isFirstChild = true;
                        childItem.isLastChild = true;
                    }
                    else {
                        this.getChildByIndex(this._childItemsByType[childType].size - 1, childType).isLastChild = false;
                        childItem.isLastChild = true;
                    }
                    this._childIdsByType.set(childItem.uniqueId, childType);
                    this._childItemsByType[childType].set(childItem.uniqueId, childItem);
                }
                unsetChild(childId) {
                    const childType = this._childIdsByType.get(childId);
                    if (childType === undefined) {
                        throw new Error(`${OSUI.ErrorCodes.AbstractParent.FailTypeNotFound}:Child Type of Child ('${childId}') was not found!`);
                    }
                    const childsMap = this._childItemsByType[childType];
                    if (childsMap === undefined) {
                        throw new Error(`${OSUI.ErrorCodes.AbstractParent.FailChildsNotFound}:Childs of Type ('${childType}') were not found!`);
                    }
                    const childItem = this.getChild(childId);
                    if (childItem === undefined) {
                        throw new Error(`${OSUI.ErrorCodes.AbstractParent.FailChildNotFound}:Child of Id ('${childId}') was not found!`);
                    }
                    if (childItem.isFirstChild) {
                        childItem.isFirstChild = false;
                        const nextSibling = this.getChildByIndex(1, childType);
                        if (nextSibling) {
                            nextSibling.isFirstChild = true;
                        }
                    }
                    if (childItem.isLastChild) {
                        childItem.isLastChild = false;
                        const prevSibling = this.getChildByIndex(childsMap.size - 2, childType);
                        if (prevSibling) {
                            prevSibling.isLastChild = true;
                        }
                    }
                    this._childIdsByType.delete(childId);
                    childsMap.delete(childId);
                }
                getChildItems(type) {
                    if (type === undefined) {
                        type = Object.keys(this._childItemsByType)[0];
                    }
                    const childsMap = this._childItemsByType[type];
                    return childsMap === undefined ? [] : [...childsMap.values()];
                }
            }
            Patterns.AbstractParent = AbstractParent;
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            class AbstractProviderConfiguration extends Patterns.AbstractConfiguration {
                mergeConfigs(commonConfigs, specificConfigs, extendedConfigs) {
                    let _finalConfigs = commonConfigs;
                    if (specificConfigs !== undefined) {
                        _finalConfigs = Object.assign(Object.assign({}, _finalConfigs), specificConfigs);
                    }
                    if (extendedConfigs !== undefined) {
                        _finalConfigs = Object.assign(Object.assign({}, _finalConfigs), extendedConfigs);
                    }
                    Object.keys(_finalConfigs).forEach((key) => (_finalConfigs[key] === undefined ||
                        _finalConfigs[key] === null ||
                        (Array.isArray(_finalConfigs[key]) && _finalConfigs[key].length === 0)) &&
                        delete _finalConfigs[key]);
                    return _finalConfigs;
                }
            }
            Patterns.AbstractProviderConfiguration = AbstractProviderConfiguration;
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            class AbstractProviderPattern extends Patterns.AbstractPattern {
                constructor(uniqueId, configs) {
                    super(uniqueId, configs);
                    this._asyncInvocationId = 0;
                    this.isProviderBased = true;
                }
                _cancelRedraw() {
                    if (this._asyncInvocationId !== 0) {
                        clearTimeout(this._asyncInvocationId);
                    }
                }
                _getEventIndexFromArray(event) {
                    const _providerCallback = this.providerInfo.events[event.eventName].find((item) => {
                        return item === event.callback;
                    });
                    if (_providerCallback === undefined) {
                        throw Error(OSUI.ErrorCodes.AbstractProviderPattern.FailProviderEventRemoval.code +
                            ': ' +
                            OSUI.ErrorCodes.AbstractProviderPattern.FailProviderEventRemoval.message);
                    }
                    return this.providerInfo.events[event.eventName].findIndex((item) => {
                        return item === _providerCallback;
                    });
                }
                _handleProviderEventsAPI(eventName, callback, addEvent, event) {
                    const events = this.providerInfo.events;
                    if (Array.isArray(events[eventName])) {
                        if (addEvent) {
                            events[eventName].push(callback);
                        }
                        else {
                            events[eventName].splice(this._getEventIndexFromArray(event), 1);
                        }
                    }
                    else if (typeof events.addEventListener === OSUI.Constants.JavaScriptTypes.Function) {
                        if (addEvent) {
                            events.addEventListener(eventName, callback);
                        }
                        else {
                            events.removeEventListener(eventName, callback);
                        }
                    }
                    else if (typeof events.on === OSUI.Constants.JavaScriptTypes.Function) {
                        if (addEvent) {
                            events.on(eventName, callback);
                        }
                        else {
                            events.off(eventName, callback);
                        }
                    }
                    else {
                        const errorMessage = addEvent
                            ? OSUI.ErrorCodes.AbstractProviderPattern.FailProviderEventSet.message
                            : OSUI.ErrorCodes.AbstractProviderPattern.FailProviderEventRemoval.message;
                        throw new Error(`${eventName}: ${errorMessage}`);
                    }
                }
                _handleRedraw() {
                    if (this._provider !== undefined) {
                        this._provider.destroy();
                        this.prepareConfigs();
                    }
                }
                redraw() {
                    this._cancelRedraw();
                    this._asyncInvocationId = OSUI.Helper.AsyncInvocation(() => {
                        this._handleRedraw();
                    });
                }
                unsetCallbacks() {
                    this._platformEventProviderConfigsAppliedCallback = undefined;
                }
                build() {
                    this.providerInfo = {
                        name: undefined,
                        version: undefined,
                        events: undefined,
                    };
                    this._redrawCallback = this.redraw.bind(this);
                    OSFramework.OSUI.Event.DOMEvents.Observers.GlobalObserverManager.Instance.addHandler(OSUI.Event.DOMEvents.Observers.ObserverEvent.RTL, this._redrawCallback);
                    super.build();
                }
                checkAddedProviderEvents() {
                    var _a;
                    if ((_a = this.providerEventsManagerInstance) === null || _a === void 0 ? void 0 : _a.hasEvents) {
                        this.providerEventsManagerInstance.events.forEach((value) => {
                            this.setProviderEvent(value.eventName, value.callback, value.eventUniqueId, false);
                        });
                    }
                }
                checkPendingProviderEvents() {
                    var _a;
                    if ((_a = this.providerEventsManagerInstance) === null || _a === void 0 ? void 0 : _a.hasPendingEvents) {
                        this.providerEventsManagerInstance.pendingEvents.forEach((value, key) => {
                            this.setProviderEvent(value.eventName, value.callback, value.eventUniqueId);
                            this.providerEventsManagerInstance.removePendingEvent(key);
                        });
                    }
                }
                dispose() {
                    OSFramework.OSUI.Event.DOMEvents.Observers.GlobalObserverManager.Instance.removeHandler(OSUI.Event.DOMEvents.Observers.ObserverEvent.RTL, this._redrawCallback);
                    this._redrawCallback = undefined;
                    super.dispose();
                }
                registerCallback(eventName, callback) {
                    switch (eventName) {
                        case OSUI.GlobalEnum.ProviderEvents.OnProviderConfigsApplied:
                            if (this._platformEventProviderConfigsAppliedCallback === undefined) {
                                this._platformEventProviderConfigsAppliedCallback = callback;
                            }
                            break;
                        default:
                            super.registerCallback(eventName, callback);
                    }
                }
                setProviderConfigs(providerConfigs) {
                    this.triggerPlatformEventCallback(this._platformEventProviderConfigsAppliedCallback);
                }
                setProviderEvent(eventName, callback, uniqueId, saveEvent = true) {
                    if (this.providerEventsManagerInstance === undefined) {
                        this.providerEventsManagerInstance = new OSUI.Event.ProviderEvents.ProviderEventsManager();
                    }
                    if (this.providerInfo.events === undefined) {
                        this.providerEventsManagerInstance.addPendingEvent(eventName, callback, uniqueId);
                        return;
                    }
                    this._handleProviderEventsAPI(eventName, callback, true);
                    if (saveEvent) {
                        this.providerEventsManagerInstance.saveEvent(eventName, callback, uniqueId);
                    }
                }
                unsetProviderEvent(eventId) {
                    var _a;
                    const _event = (_a = this.providerEventsManagerInstance) === null || _a === void 0 ? void 0 : _a.events.get(eventId);
                    if (_event === undefined) {
                        throw Error(OSUI.ErrorCodes.AbstractProviderPattern.FailProviderEventRemoval.code +
                            ': ' +
                            OSUI.ErrorCodes.AbstractProviderPattern.FailProviderEventRemoval.message);
                    }
                    this._handleProviderEventsAPI(_event.eventName, _event.callback, false, _event);
                    if (this.providerEventsManagerInstance) {
                        this.providerEventsManagerInstance.removeSavedEvent(eventId);
                    }
                }
                updateProviderEvents(providerInfo) {
                    this.providerInfo.events = providerInfo.events;
                    if (this.isBuilt) {
                        OSUI.Helper.AsyncInvocation(this.checkPendingProviderEvents.bind(this));
                        OSUI.Helper.AsyncInvocation(this.checkAddedProviderEvents.bind(this));
                    }
                    else {
                        this.providerInfo.name = providerInfo.name;
                        this.providerInfo.version = providerInfo.version;
                    }
                }
                get providerInfo() {
                    return this._providerInfo;
                }
                set providerInfo(providerInfo) {
                    this._providerInfo = providerInfo;
                }
                set provider(p) {
                    this._provider = p;
                }
                get provider() {
                    return this._provider;
                }
            }
            Patterns.AbstractProviderPattern = AbstractProviderPattern;
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Accordion;
            (function (Accordion_1) {
                class Accordion extends Patterns.AbstractParent {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Accordion_1.AccordionConfig(configs));
                    }
                    setA11YProperties() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    addAccordionItem(childItem) {
                        if (this.getChild(childItem.uniqueId)) {
                            throw new Error(`${OSUI.ErrorCodes.Accordion.FailSetNewChildItem}: There is already a ${OSUI.GlobalEnum.PatternName.AccordionItem} under Id: '${childItem.widgetId}' added to ${OSUI.GlobalEnum.PatternName.Accordion} with uniqueId: ${this.uniqueId}.`);
                        }
                        else {
                            this.setChild(childItem);
                        }
                        if (childItem.isOpen) {
                            this.triggerAccordionItemClose(childItem.uniqueId);
                        }
                    }
                    beNotifiedByChild(childItem, notifiedTo) {
                        switch (notifiedTo) {
                            case Accordion_1.Enum.ChildNotifyActionType.Add:
                                this.addAccordionItem(childItem);
                                break;
                            case Accordion_1.Enum.ChildNotifyActionType.Click:
                                this.triggerAccordionItemClose(childItem.uniqueId);
                                break;
                            case Accordion_1.Enum.ChildNotifyActionType.Removed:
                                this.removeAccordionItem(childItem.uniqueId);
                                break;
                            default:
                                throw new Error(`${OSUI.ErrorCodes.Accordion.FailToSetChildItemAction}: There no exist a '${notifiedTo}' notification type.`);
                        }
                    }
                    build() {
                        super.build();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case Accordion_1.Enum.Properties.MultipleItems:
                                    if (!this.configs.MultipleItems)
                                        this.collapseAllItems();
                                    break;
                            }
                        }
                    }
                    collapseAllItems() {
                        const itemsToClose = this.getChildItems().filter((item) => item.isOpen && !item.isDisabled);
                        itemsToClose.forEach((item) => {
                            item.close();
                        });
                    }
                    dispose() {
                        super.dispose();
                    }
                    expandAllItems() {
                        if (this.configs.MultipleItems) {
                            const itemsToOpen = this.getChildItems().filter((item) => !item.isOpen && !item.isDisabled);
                            itemsToOpen.forEach((item) => {
                                item.open();
                            });
                        }
                        else {
                            console.warn(`${OSUI.GlobalEnum.PatternName.Accordion} (${this.widgetId}): if ${Accordion_1.Enum.Properties.MultipleItems} parameter is set to false, this action doesn't work. Set the ${Accordion_1.Enum.Properties.MultipleItems} parameter to true.`);
                        }
                    }
                    removeAccordionItem(childId) {
                        if (this.getChild(childId)) {
                            this.unsetChild(childId);
                        }
                        else {
                            throw new Error(`${OSUI.ErrorCodes.Accordion.FailUnsetNewChildItem}: The ${OSUI.GlobalEnum.PatternName.AccordionItem} under uniqueId: '${childId}' does not exist as an ${OSUI.GlobalEnum.PatternName.AccordionItem} from ${OSUI.GlobalEnum.PatternName.Accordion} with Id: ${this.widgetId}.`);
                        }
                    }
                    triggerAccordionItemClose(childId) {
                        if (this.configs.MultipleItems) {
                            return;
                        }
                        const childReference = this.getChild(childId);
                        if (childReference) {
                            this.getChildItems().forEach((item) => {
                                if (item.uniqueId !== childId) {
                                    if (item.isOpen) {
                                        item.close();
                                    }
                                }
                            });
                        }
                        else {
                            throw new Error(`${OSUI.ErrorCodes.Accordion.FailChildItemClicked}: The ${OSUI.GlobalEnum.PatternName.AccordionItem} under uniqueId: '${childId}' does not exist as an ${OSUI.GlobalEnum.PatternName.AccordionItem} from ${OSUI.GlobalEnum.PatternName.Accordion} with Id: ${this.widgetId}.`);
                        }
                    }
                }
                Accordion_1.Accordion = Accordion;
            })(Accordion = Patterns.Accordion || (Patterns.Accordion = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Accordion;
            (function (Accordion) {
                class AccordionConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case Accordion.Enum.Properties.MultipleItems:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                Accordion.AccordionConfig = AccordionConfig;
            })(Accordion = Patterns.Accordion || (Patterns.Accordion = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Accordion;
            (function (Accordion) {
                var Enum;
                (function (Enum) {
                    let ChildNotifyActionType;
                    (function (ChildNotifyActionType) {
                        ChildNotifyActionType["Add"] = "add";
                        ChildNotifyActionType["Click"] = "click";
                        ChildNotifyActionType["Removed"] = "removed";
                    })(ChildNotifyActionType = Enum.ChildNotifyActionType || (Enum.ChildNotifyActionType = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Pattern"] = "osui-accordion";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["MultipleItems"] = "MultipleItems";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = Accordion.Enum || (Accordion.Enum = {}));
            })(Accordion = Patterns.Accordion || (Patterns.Accordion = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var AccordionItem;
            (function (AccordionItem_1) {
                class AccordionItem extends Patterns.AbstractChild {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new AccordionItem_1.AccordionItemConfig(configs));
                        this._collapsedHeight = 0;
                        this._isOpen = this.configs.StartsExpanded;
                    }
                    get _elementWithEvents() {
                        let elementWithEvent = this._accordionItemTitleElem;
                        if (this.configs.ToggleWithIcon) {
                            if (this.configs.Icon !== AccordionItem_1.Enum.IconType.Custom) {
                                elementWithEvent = this._accordionItemIconElem;
                            }
                            else {
                                elementWithEvent = this._accordionItemIconCustomElem;
                            }
                        }
                        return elementWithEvent;
                    }
                    get _previousElementWithEvents() {
                        let elementWithEvent = this._accordionItemTitleElem;
                        if (!this.configs.ToggleWithIcon) {
                            if (this.configs.Icon !== AccordionItem_1.Enum.IconType.Custom) {
                                elementWithEvent = this._accordionItemIconElem;
                            }
                            else {
                                elementWithEvent = this._accordionItemIconCustomElem;
                            }
                        }
                        return elementWithEvent;
                    }
                    _accordionOnClickHandler(event) {
                        if (this._allowTitleEvents) {
                            if ((event === null || event === void 0 ? void 0 : event.target) !== this._accordionItemTitleElem &&
                                (event === null || event === void 0 ? void 0 : event.target) !== this._accordionItemIconElem &&
                                (event === null || event === void 0 ? void 0 : event.target) !== this._accordionItemTitleElem.firstChild) {
                                return;
                            }
                        }
                        if (this._isOpen) {
                            this.close();
                        }
                        else {
                            this.open();
                        }
                    }
                    _addEvents() {
                        const elem = this._elementWithEvents;
                        elem.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        elem.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyPress);
                    }
                    _animationAsync(isExpand) {
                        const finalHeight = isExpand ? this._expandedHeight : this._collapsedHeight;
                        OSUI.Helper.Dom.Styles.AddClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternAnimating);
                        if (!isExpand) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternExpanded);
                        }
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this._accordionItemContentElem, OSUI.GlobalEnum.InlineStyle.Height, finalHeight + OSUI.GlobalEnum.Units.Pixel);
                        this._accordionItemContentElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.TransitionEnd, this._eventOnTransitionEnd);
                        if (isExpand) {
                            OSUI.Helper.Dom.Styles.AddClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternExpanded);
                            this._isOpen = true;
                        }
                        else {
                            OSUI.Helper.Dom.Styles.AddClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternCollapsed);
                            this._isOpen = false;
                        }
                        this.setA11YProperties();
                        this._onToggleCallback();
                    }
                    _changeClikableTargetArea() {
                        if (this._previousElementWithEvents !== this._elementWithEvents) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this._previousElementWithEvents, AccordionItem_1.Enum.CssClass.PatternClickArea);
                            this._removeEvents();
                            this._removeA11Properties();
                            this._setA11ToogleElement();
                            this._handleTabIndex();
                            this._addEvents();
                            OSUI.Helper.Dom.Styles.AddClass(this._elementWithEvents, AccordionItem_1.Enum.CssClass.PatternClickArea);
                        }
                    }
                    _handleTabIndex() {
                        const titleTabindexValue = this.configs.IsDisabled
                            ? OSUI.Constants.A11YAttributes.States.TabIndexHidden
                            : OSUI.Constants.A11YAttributes.States.TabIndexShow;
                        const titleFocusableElementsTabindexValue = !this.configs.IsDisabled && this._isOpen
                            ? OSUI.Constants.A11YAttributes.States.TabIndexShow
                            : OSUI.Constants.A11YAttributes.States.TabIndexHidden;
                        OSUI.Helper.A11Y.TabIndex(this._elementWithEvents, titleTabindexValue);
                        for (const child of this._accordionTitleFocusableChildren) {
                            OSUI.Helper.A11Y.TabIndex(child, titleFocusableElementsTabindexValue);
                        }
                    }
                    _onKeyboardPress(event) {
                        const isEscapedKey = event.key === OSUI.GlobalEnum.Keycodes.Escape;
                        const isEnterOrSpaceKey = event.key === OSUI.GlobalEnum.Keycodes.Enter || event.key === OSUI.GlobalEnum.Keycodes.Space;
                        if (isEscapedKey || isEnterOrSpaceKey) {
                            event.preventDefault();
                            event.stopPropagation();
                        }
                        else {
                            return;
                        }
                        if (this._isOpen) {
                            this.close();
                        }
                        else if (isEnterOrSpaceKey && !this._isOpen) {
                            this.open();
                        }
                    }
                    _onToggleCallback() {
                        this.triggerPlatformEventCallback(this._platformEventOnToggle, this._isOpen);
                    }
                    _removeA11Properties() {
                        const prevElementWithEvent = this._previousElementWithEvents;
                        OSUI.Helper.Dom.Attribute.Remove(prevElementWithEvent, OSUI.Constants.A11YAttributes.Role.AttrName);
                        OSUI.Helper.Dom.Attribute.Remove(prevElementWithEvent, OSUI.Constants.A11YAttributes.TabIndex);
                    }
                    _removeEvents() {
                        const elem = this._previousElementWithEvents;
                        elem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        elem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyPress);
                    }
                    _setA11ToogleElement() {
                        const elem = this._elementWithEvents;
                        OSUI.Helper.A11Y.AriaControls(this._accordionItemTitleElem, this._accordionItemPlaceholder.id);
                        OSUI.Helper.A11Y.RoleButton(elem);
                    }
                    _setAccordionParent() {
                        this.setParentInfo(OSUI.Constants.Dot + Patterns.Accordion.Enum.CssClass.Pattern, OutSystems.OSUI.Patterns.AccordionAPI.GetAccordionById, true);
                        if (this.parentObject) {
                            this.notifyParent(Patterns.Accordion.Enum.ChildNotifyActionType.Add);
                        }
                    }
                    _setIconPosition() {
                        if (this.configs.IconPosition === OSUI.GlobalEnum.Direction.Right) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemTitleElem, AccordionItem_1.Enum.CssClass.PatternIconPositionIsLeft);
                            OSUI.Helper.Dom.Styles.AddClass(this._accordionItemTitleElem, AccordionItem_1.Enum.CssClass.PatternIconPositionIsRight);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemTitleElem, AccordionItem_1.Enum.CssClass.PatternIconPositionIsRight);
                            OSUI.Helper.Dom.Styles.AddClass(this._accordionItemTitleElem, AccordionItem_1.Enum.CssClass.PatternIconPositionIsLeft);
                        }
                    }
                    _setIconType() {
                        switch (this.configs.Icon) {
                            case AccordionItem_1.Enum.IconType.PlusMinus:
                                OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemIconElem, AccordionItem_1.Enum.CssClass.PatternIconCaret);
                                OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemIconCustomElem, AccordionItem_1.Enum.CssClass.PatternIconCustom);
                                OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemIconElem, AccordionItem_1.Enum.CssClass.PatternIconHidden);
                                OSUI.Helper.Dom.Styles.AddClass(this._accordionItemIconCustomElem, AccordionItem_1.Enum.CssClass.PatternIconHidden);
                                OSUI.Helper.Dom.Styles.AddClass(this._accordionItemIconElem, AccordionItem_1.Enum.CssClass.PatternIconPlusMinus);
                                break;
                            case AccordionItem_1.Enum.IconType.Custom:
                                OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemIconElem, AccordionItem_1.Enum.CssClass.PatternIconPlusMinus);
                                OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemIconElem, AccordionItem_1.Enum.CssClass.PatternIconCaret);
                                OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemIconCustomElem, AccordionItem_1.Enum.CssClass.PatternIconHidden);
                                OSUI.Helper.Dom.Styles.AddClass(this._accordionItemIconElem, AccordionItem_1.Enum.CssClass.PatternIconHidden);
                                OSUI.Helper.Dom.Styles.AddClass(this._accordionItemIconCustomElem, AccordionItem_1.Enum.CssClass.PatternIconCustom);
                                break;
                            default:
                                OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemIconElem, AccordionItem_1.Enum.CssClass.PatternIconPlusMinus);
                                OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemIconCustomElem, AccordionItem_1.Enum.CssClass.PatternIconCustom);
                                OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemIconElem, AccordionItem_1.Enum.CssClass.PatternIconHidden);
                                OSUI.Helper.Dom.Styles.AddClass(this._accordionItemIconCustomElem, AccordionItem_1.Enum.CssClass.PatternIconHidden);
                                OSUI.Helper.Dom.Styles.AddClass(this._accordionItemIconElem, AccordionItem_1.Enum.CssClass.PatternIconCaret);
                                break;
                        }
                    }
                    _setIsDisabledState() {
                        if (this.configs.IsDisabled) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, AccordionItem_1.Enum.CssClass.PatternDisabled);
                            OSUI.Helper.Dom.Styles.RemoveClass(this._elementWithEvents, AccordionItem_1.Enum.CssClass.PatternClickArea);
                            OSUI.Helper.A11Y.AriaDisabledTrue(this.selfElement);
                            OSUI.Helper.Dom.Attribute.Remove(this._elementWithEvents, OSUI.Constants.FocusableTabIndexDefault);
                            this._removeEvents();
                            this.unsetCallbacks();
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, AccordionItem_1.Enum.CssClass.PatternDisabled);
                            OSUI.Helper.Dom.Styles.AddClass(this._elementWithEvents, AccordionItem_1.Enum.CssClass.PatternClickArea);
                            OSUI.Helper.A11Y.AriaDisabledFalse(this.selfElement);
                            OSUI.Helper.Dom.Attribute.Set(this._elementWithEvents, OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                            this.setCallbacks();
                            this._addEvents();
                        }
                        this._handleTabIndex();
                    }
                    _transitionEndHandler() {
                        if (this._accordionItemContentElem) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternAnimating);
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this._accordionItemContentElem, OSUI.GlobalEnum.InlineStyle.Height, '');
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this._accordionItemTitleElem, OSUI.GlobalEnum.InlineStyle.PointerEvents, '');
                            if (this._accordionItemContentElem.style.cssText.length === 0) {
                                OSUI.Helper.Dom.Attribute.Remove(this._accordionItemContentElem, OSUI.GlobalEnum.HTMLAttributes.Style);
                            }
                            this._accordionItemContentElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TransitionEnd, this._transitionEndHandler, false);
                        }
                    }
                    setA11YProperties() {
                        if (this.isBuilt === false) {
                            OSUI.Helper.A11Y.AriaControls(this._accordionItemTitleElem, this._accordionItemPlaceholder.id);
                            OSUI.Helper.A11Y.AriaLabelledBy(this._accordionItemContentElem, this._accordionItemTitleElem.id);
                            OSUI.Helper.A11Y.AriaHiddenTrue(this._accordionItemIconElem);
                            OSUI.Helper.A11Y.AriaDisabled(this._accordionItemTitleElem, this.configs.IsDisabled);
                            OSUI.Helper.A11Y.RoleButton(this._accordionItemTitleElem);
                            OSUI.Helper.A11Y.RoleRegion(this._accordionItemContentElem);
                        }
                        this._handleTabIndex();
                        OSUI.Helper.A11Y.AriaExpanded(this._accordionItemTitleElem, this._isOpen.toString());
                        OSUI.Helper.A11Y.AriaHidden(this._accordionItemContentElem, (!this._isOpen).toString());
                        for (const child of this._accordionTitleFocusableChildren) {
                            OSUI.Helper.A11Y.AriaHidden(child, (!this._isOpen).toString());
                        }
                    }
                    setCallbacks() {
                        this._eventOnClick = this._accordionOnClickHandler.bind(this);
                        this._eventOnTransitionEnd = this._transitionEndHandler.bind(this);
                        this._eventOnkeyPress = this._onKeyboardPress.bind(this);
                    }
                    setHtmlElements() {
                        this._accordionItemTitleElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, AccordionItem_1.Enum.CssClass.PatternTitle);
                        this._accordionItemContentElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, AccordionItem_1.Enum.CssClass.PatternContent);
                        this._accordionItemIconElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, AccordionItem_1.Enum.CssClass.PatternIcon);
                        this._accordionItemIconCustomElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, AccordionItem_1.Enum.CssClass.PatternIcon + '.' + OSUI.GlobalEnum.CssClassElements.Placeholder);
                        this._accordionItemPlaceholder = this._accordionItemContentElem.firstChild;
                        this._accordionTitleFocusableChildren = OSUI.Helper.Dom.TagSelectorAll(this._accordionItemTitleElem, OSUI.Constants.FocusableElems);
                    }
                    setInitialCssClasses() {
                        if (this._isOpen) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, AccordionItem_1.Enum.CssClass.PatternOpen);
                            OSUI.Helper.Dom.Styles.AddClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternExpanded);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, AccordionItem_1.Enum.CssClass.PatternClosed);
                            OSUI.Helper.Dom.Styles.AddClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternCollapsed);
                        }
                        if (this.configs.ToggleWithIcon) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, AccordionItem_1.Enum.CssClass.PatternToggleWithIcon);
                        }
                        this._setIconType();
                        this._setIconPosition();
                    }
                    unsetCallbacks() {
                        this._eventOnClick = undefined;
                        this._eventOnTransitionEnd = undefined;
                        this._eventOnkeyPress = undefined;
                    }
                    unsetHtmlElements() {
                        this._accordionItemTitleElem = undefined;
                        this._accordionItemContentElem = undefined;
                        this._accordionItemIconElem = undefined;
                        this._accordionItemPlaceholder = undefined;
                        this._accordionTitleFocusableChildren = [];
                    }
                    get isDisabled() {
                        return this.configs.IsDisabled;
                    }
                    get isOpen() {
                        return this._isOpen;
                    }
                    allowTitleEvents() {
                        this._allowTitleEvents = true;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this.setInitialCssClasses();
                        this._setAccordionParent();
                        this._setIsDisabledState();
                        this.setA11YProperties();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case AccordionItem_1.Enum.Properties.IsDisabled:
                                    this._setIsDisabledState();
                                    break;
                                case AccordionItem_1.Enum.Properties.StartsExpanded:
                                    console.warn(`${OSUI.GlobalEnum.PatternName.AccordionItem} (${this.widgetId}): changes to ${AccordionItem_1.Enum.Properties.StartsExpanded} parameter do not affect the ${OSUI.GlobalEnum.PatternName.AccordionItem}. Use the client actions 'AccordionItemExpand' and 'AccordionItemCollapse' to affect the ${OSUI.GlobalEnum.PatternName.AccordionItem}.`);
                                    break;
                                case AccordionItem_1.Enum.Properties.IconPosition:
                                    this._setIconPosition();
                                    break;
                                case AccordionItem_1.Enum.Properties.Icon:
                                    this._setIconType();
                                    break;
                                case AccordionItem_1.Enum.Properties.ToggleWithIcon:
                                    this._changeClikableTargetArea();
                                    break;
                            }
                        }
                    }
                    close() {
                        if (!this._isOpen) {
                            return;
                        }
                        OSUI.Helper.Dom.Attribute.Remove(this._accordionItemContentElem, OSUI.GlobalEnum.HTMLAttributes.Style);
                        this._expandedHeight = this._accordionItemContentElem.getBoundingClientRect().height;
                        OSUI.Helper.Dom.Styles.AddClass(this.selfElement, AccordionItem_1.Enum.CssClass.PatternClosed);
                        OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, AccordionItem_1.Enum.CssClass.PatternOpen);
                        OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternExpanded);
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this._accordionItemContentElem, OSUI.GlobalEnum.InlineStyle.Height, this._expandedHeight + OSUI.GlobalEnum.Units.Pixel);
                        OSUI.Helper.AsyncInvocation(() => {
                            this._animationAsync(false);
                        });
                    }
                    dispose() {
                        this.unsetCallbacks();
                        this._removeEvents();
                        if (this.parentObject) {
                            this.notifyParent(Patterns.Accordion.Enum.ChildNotifyActionType.Removed);
                        }
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    open() {
                        if (this._isOpen) {
                            return;
                        }
                        OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, AccordionItem_1.Enum.CssClass.PatternClosed);
                        OSUI.Helper.Dom.Styles.AddClass(this.selfElement, AccordionItem_1.Enum.CssClass.PatternOpen);
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this._accordionItemTitleElem, OSUI.GlobalEnum.InlineStyle.PointerEvents, OSUI.GlobalEnum.CssProperties.None);
                        OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternCollapsed);
                        OSUI.Helper.Dom.Styles.AddClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternExpanded);
                        OSUI.Helper.Dom.Attribute.Remove(this._accordionItemTitleElem, OSUI.GlobalEnum.HTMLAttributes.Style);
                        this._expandedHeight = this._accordionItemContentElem.getBoundingClientRect().height;
                        OSUI.Helper.Dom.Styles.RemoveClass(this._accordionItemContentElem, AccordionItem_1.Enum.CssClass.PatternExpanded);
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this._accordionItemContentElem, OSUI.GlobalEnum.InlineStyle.Height, this._collapsedHeight);
                        OSUI.Helper.AsyncInvocation(() => {
                            this._animationAsync(true);
                        });
                        if (this.parentObject) {
                            this.notifyParent(Patterns.Accordion.Enum.ChildNotifyActionType.Click);
                        }
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case AccordionItem_1.Enum.Events.OnToggle:
                                if (this._platformEventOnToggle === undefined) {
                                    this._platformEventOnToggle = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                }
                AccordionItem_1.AccordionItem = AccordionItem;
            })(AccordionItem = Patterns.AccordionItem || (Patterns.AccordionItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var AccordionItem;
            (function (AccordionItem) {
                class AccordionItemConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                        this.ToggleWithIcon = false;
                    }
                    validateCanChange(isBuilt, key) {
                        if (isBuilt) {
                            return key !== AccordionItem.Enum.Properties.StartsExpanded;
                        }
                        return true;
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case AccordionItem.Enum.Properties.IsDisabled:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            case AccordionItem.Enum.Properties.Icon:
                                validatedValue = this.validateString(value, AccordionItem.Enum.IconType.Caret);
                                break;
                            case AccordionItem.Enum.Properties.IconPosition:
                                validatedValue = this.validateString(value, OSUI.GlobalEnum.Direction.Right);
                                break;
                            case AccordionItem.Enum.Properties.ToggleWithIcon:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                AccordionItem.AccordionItemConfig = AccordionItemConfig;
            })(AccordionItem = Patterns.AccordionItem || (Patterns.AccordionItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var AccordionItem;
            (function (AccordionItem) {
                var Enum;
                (function (Enum) {
                    let Properties;
                    (function (Properties) {
                        Properties["IconPosition"] = "IconPosition";
                        Properties["IsDisabled"] = "IsDisabled";
                        Properties["Icon"] = "Icon";
                        Properties["StartsExpanded"] = "StartsExpanded";
                        Properties["ToggleWithIcon"] = "ToggleWithIcon";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["PatternAnimating"] = "osui-accordion-item__content--is-animating";
                        CssClass["PatternClosed"] = "osui-accordion-item--is-closed";
                        CssClass["PatternCollapsed"] = "osui-accordion-item__content--is-collapsed";
                        CssClass["PatternDisabled"] = "osui-accordion-item--is-disabled";
                        CssClass["PatternExpanded"] = "osui-accordion-item__content--is-expanded";
                        CssClass["PatternClickArea"] = "osui-accordion-item__click_zone";
                        CssClass["PatternContent"] = "osui-accordion-item__content";
                        CssClass["PatternIcon"] = "osui-accordion-item__icon";
                        CssClass["PatternIconCaret"] = "osui-accordion-item__icon--caret";
                        CssClass["PatternIconCustom"] = "osui-accordion-item__icon--custom";
                        CssClass["PatternIconHidden"] = "osui-accordion-item__icon--hidden";
                        CssClass["PatternIconPlusMinus"] = "osui-accordion-item__icon--plus-minus";
                        CssClass["PatternIconPositionIsLeft"] = "osui-accordion-item__title--is-left";
                        CssClass["PatternIconPositionIsRight"] = "osui-accordion-item__title--is-right";
                        CssClass["PatternOpen"] = "osui-accordion-item--is-open";
                        CssClass["PatternTitle"] = "osui-accordion-item__title";
                        CssClass["PatternToggleWithIcon"] = "osui-accordion-item--toggle-with-icon";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Events;
                    (function (Events) {
                        Events["OnToggle"] = "OnToggle";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let IconType;
                    (function (IconType) {
                        IconType["Caret"] = "Caret";
                        IconType["Custom"] = "Custom";
                        IconType["PlusMinus"] = "PlusMinus";
                    })(IconType = Enum.IconType || (Enum.IconType = {}));
                })(Enum = AccordionItem.Enum || (AccordionItem.Enum = {}));
            })(AccordionItem = Patterns.AccordionItem || (Patterns.AccordionItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var AnimatedLabel;
            (function (AnimatedLabel_1) {
                class AnimatedLabel extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new AnimatedLabel_1.AnimatedLabelConfig(configs));
                        this._isLabelFocus = false;
                    }
                    _addEvents() {
                        this._inputElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Blur, this._eventBlur);
                        this._inputElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._eventFocus);
                        this._inputElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.AnimationStart, this._eventAnimationStart);
                        if (this._inputElement.type === 'number') {
                            this._inputElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventKeyDown);
                        }
                    }
                    _inputAnimationStartCallback(e) {
                        if (e.animationName === AnimatedLabel_1.Enum.AnimationEvent.OnAutoFillStart) {
                            this._inputStateToggle(true);
                        }
                    }
                    _inputBlurCallback(evt) {
                        if (evt.type === OSUI.GlobalEnum.HTMLEvent.Blur) {
                            this._inputStateToggle(false);
                        }
                    }
                    _inputFocusCallback(evt) {
                        if (evt.type === OSUI.GlobalEnum.HTMLEvent.Focus) {
                            this._inputStateToggle(true);
                        }
                    }
                    _inputKeyDownCallback(evt) {
                        if (evt.type === OSUI.GlobalEnum.HTMLEvent.keyDown && this._inputElement.type === 'number') {
                            const invalidChars = ['-', '+', 'e', 'E'];
                            if (invalidChars.includes(evt.key) && this._inputElement.value === OSUI.Constants.EmptyString) {
                                this._inputStateToggle(true);
                            }
                        }
                    }
                    _inputStateToggle(isFocus = false) {
                        if (this.isBuilt) {
                            const inputHasText = this._inputElement &&
                                (this._inputElement.value !== OSUI.Constants.EmptyString ||
                                    (this._inputElement.type === 'number' && this._inputElement.checkValidity() === false));
                            if (this._isLabelFocus === false) {
                                if (isFocus || inputHasText) {
                                    OSUI.Helper.Dom.Styles.AddClass(this.selfElement, AnimatedLabel_1.Enum.CssClasses.IsActive);
                                    this._isLabelFocus = true;
                                }
                            }
                            else if (inputHasText === false && isFocus === false) {
                                OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, AnimatedLabel_1.Enum.CssClasses.IsActive);
                                this._isLabelFocus = false;
                            }
                        }
                    }
                    _removeEvents() {
                        this._inputElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Blur, this._eventBlur);
                        this._inputElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._eventFocus);
                        this._inputElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.AnimationStart, this._eventAnimationStart);
                        if (this._inputElement.type === 'number') {
                            this._inputElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventKeyDown);
                        }
                    }
                    setA11YProperties() {
                        console.warn(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        this._eventBlur = this._inputBlurCallback.bind(this);
                        this._eventFocus = this._inputFocusCallback.bind(this);
                        this._eventAnimationStart = this._inputAnimationStartCallback.bind(this);
                        this._eventKeyDown = this._inputKeyDownCallback.bind(this);
                        this._addEvents();
                    }
                    setHtmlElements() {
                        this._labelPhElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, AnimatedLabel_1.Enum.CssClasses.LabelPlaceholder);
                        this._inputPhElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, AnimatedLabel_1.Enum.CssClasses.InputPlaceholder);
                        this._inputElement =
                            OSUI.Helper.Dom.TagSelector(this._inputPhElement, OSUI.GlobalEnum.DataBlocksTag.Input) ||
                                OSUI.Helper.Dom.TagSelector(this._inputPhElement, OSUI.GlobalEnum.DataBlocksTag.TextArea);
                        if (this._inputElement) {
                            this._inputElement.placeholder = '';
                            this._inputStateToggle();
                        }
                        else {
                            throw new Error(AnimatedLabel_1.Enum.Messages.InputNotFound);
                        }
                        if (OSUI.Helper.Dom.TagSelector(this._labelPhElement, OSUI.GlobalEnum.DataBlocksTag.Label) === undefined) {
                            console.warn(AnimatedLabel_1.Enum.Messages.LabelNotFound);
                        }
                    }
                    unsetCallbacks() {
                        this._removeEvents();
                        this._eventBlur = undefined;
                        this._eventFocus = undefined;
                        this._eventAnimationStart = undefined;
                        this._eventKeyDown = undefined;
                    }
                    unsetHtmlElements() {
                        this._labelPhElement = undefined;
                        this._inputPhElement = undefined;
                        this._inputElement = undefined;
                    }
                    build() {
                        OSUI.Helper.AsyncInvocation(() => {
                            super.build();
                            this.setHtmlElements();
                            this.setCallbacks();
                            this.finishBuild();
                        });
                    }
                    dispose() {
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    updateOnRender() {
                        OSUI.Helper.AsyncInvocation(() => {
                            if (this.isBuilt) {
                                this._inputStateToggle();
                            }
                        });
                    }
                }
                AnimatedLabel_1.AnimatedLabel = AnimatedLabel;
            })(AnimatedLabel = Patterns.AnimatedLabel || (Patterns.AnimatedLabel = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var AnimatedLabel;
            (function (AnimatedLabel) {
                class AnimatedLabelConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                AnimatedLabel.AnimatedLabelConfig = AnimatedLabelConfig;
            })(AnimatedLabel = Patterns.AnimatedLabel || (Patterns.AnimatedLabel = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var AnimatedLabel;
            (function (AnimatedLabel) {
                var Enum;
                (function (Enum) {
                    let AnimationEvent;
                    (function (AnimationEvent) {
                        AnimationEvent["OnAutoFillStart"] = "onAutoFillStart";
                    })(AnimationEvent = Enum.AnimationEvent || (Enum.AnimationEvent = {}));
                    let CssClasses;
                    (function (CssClasses) {
                        CssClasses["InputPlaceholder"] = "animated-label-input";
                        CssClasses["IsActive"] = "active";
                        CssClasses["LabelPlaceholder"] = "animated-label-text";
                        CssClasses["Pattern"] = "animated-label";
                    })(CssClasses = Enum.CssClasses || (Enum.CssClasses = {}));
                    let Messages;
                    (function (Messages) {
                        Messages["InputNotFound"] = "Missing input or textarea.";
                        Messages["LabelNotFound"] = "We notice that a label is missing inside the Label Placeholder. In order to grant accessibility add it and assign the Input Widget accordingly.";
                    })(Messages = Enum.Messages || (Enum.Messages = {}));
                })(Enum = AnimatedLabel.Enum || (AnimatedLabel.Enum = {}));
            })(AnimatedLabel = Patterns.AnimatedLabel || (Patterns.AnimatedLabel = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var BottomSheet;
            (function (BottomSheet_1) {
                class BottomSheet extends Patterns.AbstractPattern {
                    get gestureEventInstance() {
                        return this._gestureEventInstance;
                    }
                    get hasGestureEvents() {
                        return this._hasGestureEvents;
                    }
                    constructor(uniqueId, configs) {
                        super(uniqueId, new BottomSheet_1.BottomSheetConfig(configs));
                        this._isOpen = false;
                        this.springAnimationConfigs = {
                            addSpringAnimation: true,
                            springAnimationProperties: {
                                tension: 300,
                                friction: 15,
                                mass: 1,
                            },
                        };
                    }
                    _handleFocusBehavior() {
                        const opts = {
                            focusTargetElement: this._parentSelf,
                            canContainOtherPatterns: true,
                        };
                        this._focusTrapInstance = new OSUI.Behaviors.FocusTrap(opts);
                        this._focusManagerInstance = new OSUI.Behaviors.FocusManager();
                    }
                    _handleGestureEvents() {
                        if (!OSUI.Helper.DeviceInfo.IsDesktop) {
                            this._gestureEventInstance = new OSUI.Event.GestureEvent.DragEvent(this._bottomSheetHeaderElem);
                            this._animateOnDragInstance = new OSUI.Behaviors.AnimateOnDrag(this.selfElement);
                        }
                    }
                    _handleShape(shape) {
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, BottomSheet_1.Enum.CssCustomProperties.Shape, 'var(--border-radius-' + shape + ')');
                    }
                    _onContentScrollCallback() {
                        if (this._bottomSheetContentElem.scrollTop === 0) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, BottomSheet_1.Enum.CssClass.HasSCroll);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, BottomSheet_1.Enum.CssClass.HasSCroll);
                        }
                    }
                    _onGestureEnd(offsetX, offsetY, timeTaken) {
                        this._animateOnDragInstance.onDragEnd(offsetX, offsetY, timeTaken, this.close.bind(this), this.springAnimationConfigs);
                    }
                    _onGestureMove(x, y, offsetX, offsetY, evt) {
                        this._animateOnDragInstance.onDragMove(offsetX, offsetY, x, y, evt);
                    }
                    _onGestureStart(x, y) {
                        this._animateOnDragInstance.onDragStart(true, OSUI.GlobalEnum.Direction.Down, x, y, true, this.selfElement.clientHeight.toString());
                    }
                    _onkeypressCallback(e) {
                        var _a, _b;
                        switch (e.key) {
                            case OSUI.GlobalEnum.Keycodes.Escape:
                                this.close();
                                break;
                            case OSUI.GlobalEnum.Keycodes.End:
                                (_a = this._focusTrapInstance.focusableElements[this._focusTrapInstance.focusableElements.length - 1]) === null || _a === void 0 ? void 0 : _a.focus();
                                break;
                            case OSUI.GlobalEnum.Keycodes.Home:
                                (_b = this._focusTrapInstance.focusableElements[0]) === null || _b === void 0 ? void 0 : _b.focus();
                                break;
                        }
                    }
                    _toggleBottomSheet(isOpen) {
                        var _a;
                        if ((_a = this._animateOnDragInstance) === null || _a === void 0 ? void 0 : _a.dragParams.SpringAnimation) {
                            this._animateOnDragInstance.dragParams.SpringAnimation.cancel();
                        }
                        if (isOpen) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, BottomSheet_1.Enum.CssClass.IsOpen);
                            OSUI.Helper.Dom.Styles.AddClass(document.body, BottomSheet_1.Enum.CssClass.IsActive);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, BottomSheet_1.Enum.CssClass.IsOpen);
                            OSUI.Helper.Dom.Styles.RemoveClass(document.body, BottomSheet_1.Enum.CssClass.IsActive);
                        }
                        this._isOpen = isOpen;
                        this.setEventListeners();
                        this.setA11YProperties();
                        if (isOpen) {
                            this._focusManagerInstance.storeLastFocusedElement();
                            this._focusTrapInstance.enableForA11y();
                            this.selfElement.focus();
                        }
                        else {
                            this._focusTrapInstance.disableForA11y();
                            OSUI.Helper.AsyncInvocation(() => {
                                this.selfElement.blur();
                                this._focusManagerInstance.setFocusToStoredElement();
                            });
                        }
                        this._triggerOnToggleEvent();
                    }
                    _toggleHandler(ShowHandler) {
                        if (ShowHandler) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, BottomSheet_1.Enum.CssClass.HasHandler);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, BottomSheet_1.Enum.CssClass.HasHandler);
                        }
                    }
                    _triggerOnToggleEvent() {
                        this.triggerPlatformEventCallback(this._platformEventOnToggle, this._isOpen);
                    }
                    removeEventListeners() {
                        this._bottomSheetContentElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Scroll, this._eventOnContentScroll);
                        this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeypress);
                        this.removeGestureEvents();
                    }
                    setA11YProperties() {
                        if (!this.isBuilt) {
                            OSUI.Helper.A11Y.RoleComplementary(this.selfElement);
                        }
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.A11YAttributes.Aria.Hidden, (!this._isOpen).toString());
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.A11YAttributes.TabIndex, this._isOpen
                            ? OSUI.Constants.A11YAttributes.States.TabIndexShow
                            : OSUI.Constants.A11YAttributes.States.TabIndexHidden);
                        OSUI.Helper.A11Y.SetElementsTabIndex(this._isOpen, this._focusTrapInstance.focusableElements);
                    }
                    setCallbacks() {
                        this._eventOnContentScroll = this._onContentScrollCallback.bind(this);
                        this._eventOnKeypress = this._onkeypressCallback.bind(this);
                    }
                    setEventListeners() {
                        this._bottomSheetContentElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.Scroll, this._eventOnContentScroll);
                        this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeypress);
                        if (!OSUI.Helper.DeviceInfo.IsDesktop && this.gestureEventInstance !== undefined) {
                            this.setGestureEvents(this._onGestureStart.bind(this), this._onGestureMove.bind(this), this._onGestureEnd.bind(this));
                        }
                    }
                    setHtmlElements() {
                        this._parentSelf = OSUI.Helper.Dom.GetElementById(this.widgetId);
                        this._bottomSheetContentElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, BottomSheet_1.Enum.CssClass.PatternContent);
                        this._bottomSheetHeaderElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, BottomSheet_1.Enum.CssClass.PatternHeader);
                    }
                    setInitialOptions() {
                        this._toggleHandler(this.configs.ShowHandler);
                        this._handleShape(this.configs.Shape);
                    }
                    unsetCallbacks() {
                        this._eventOnContentScroll = undefined;
                        this._eventOnKeypress = undefined;
                        this._platformEventOnToggle = undefined;
                    }
                    unsetHtmlElements() {
                        this._parentSelf = undefined;
                        this._bottomSheetContentElem = undefined;
                        this._bottomSheetHeaderElem = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this._handleFocusBehavior();
                        this.setInitialOptions();
                        this.setCallbacks();
                        this.setA11YProperties();
                        this._handleGestureEvents();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case BottomSheet_1.Enum.Properties.ShowHandler:
                                    this._toggleHandler(this.configs.ShowHandler);
                                    break;
                                case BottomSheet_1.Enum.Properties.Shape:
                                    this._handleShape(this.configs.Shape);
                                    break;
                            }
                        }
                    }
                    close() {
                        if (this._isOpen) {
                            this._toggleBottomSheet(false);
                        }
                    }
                    dispose() {
                        if (this._isOpen) {
                            this.removeEventListeners();
                        }
                        this.unsetHtmlElements();
                        this.unsetCallbacks();
                        this._focusTrapInstance.dispose();
                        super.dispose();
                    }
                    open() {
                        if (this._isOpen === false) {
                            this._toggleBottomSheet(true);
                        }
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case BottomSheet_1.Enum.Events.OnToggle:
                                if (this._platformEventOnToggle === undefined) {
                                    this._platformEventOnToggle = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    removeGestureEvents() {
                        if (this._gestureEventInstance !== undefined) {
                            this._gestureEventInstance.unsetTouchEvents();
                            this._hasGestureEvents = false;
                            this._gestureEventInstance = undefined;
                        }
                    }
                    setGestureEvents(onGestureStart, onGestureMove, onGestureEnd) {
                        this._gestureEventInstance.setSwipeEvents(onGestureStart, onGestureMove, onGestureEnd);
                        this._hasGestureEvents = true;
                    }
                }
                BottomSheet_1.BottomSheet = BottomSheet;
            })(BottomSheet = Patterns.BottomSheet || (Patterns.BottomSheet = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var BottomSheet;
            (function (BottomSheet) {
                class BottomSheetConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case BottomSheet.Enum.Properties.Shape:
                                validatedValue = this.validateInRange(value, OSUI.GlobalEnum.ShapeTypes.SoftRounded, OSUI.GlobalEnum.ShapeTypes.Sharp, OSUI.GlobalEnum.ShapeTypes.Rounded);
                                break;
                            case BottomSheet.Enum.Properties.ShowHandler:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                BottomSheet.BottomSheetConfig = BottomSheetConfig;
            })(BottomSheet = Patterns.BottomSheet || (Patterns.BottomSheet = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var BottomSheet;
            (function (BottomSheet) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["HasHandler"] = "osui-bottom-sheet--has-handler";
                        CssClass["HasSCroll"] = "osui-bottom-sheet--has-scroll";
                        CssClass["IsOpen"] = "osui-bottom-sheet--is-open";
                        CssClass["IsActive"] = "osui-bottom-sheet--is-active";
                        CssClass["PatternContent"] = "osui-bottom-sheet__content";
                        CssClass["PatternHeader"] = "osui-bottom-sheet__header";
                        CssClass["PatternOverlay"] = "osui-bottom-sheet-overlay";
                        CssClass["PatternTopBar"] = "osui-bottom-sheet__header__top-bar";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let CssCustomProperties;
                    (function (CssCustomProperties) {
                        CssCustomProperties["Shape"] = "--bottom-sheet-shape";
                    })(CssCustomProperties = Enum.CssCustomProperties || (Enum.CssCustomProperties = {}));
                    let Events;
                    (function (Events) {
                        Events["OnToggle"] = "OnToggle";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["Shape"] = "Shape";
                        Properties["ShowHandler"] = "ShowHandler";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = BottomSheet.Enum || (BottomSheet.Enum = {}));
            })(BottomSheet = Patterns.BottomSheet || (Patterns.BottomSheet = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var ButtonLoading;
            (function (ButtonLoading_1) {
                class ButtonLoading extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new ButtonLoading_1.ButtonLoadingConfig(configs));
                    }
                    _setInitialButtonState() {
                        this._setIsLoading(this.configs.IsLoading);
                        this._setLoadingLabel(this.configs.ShowLoadingAndLabel);
                    }
                    _setIsLoading(isLoading) {
                        if (isLoading) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, ButtonLoading_1.Enum.CssClass.IsLoading);
                            OSUI.Helper.A11Y.AriaBusyTrue(this.selfElement);
                            this.isBuilt &&
                                OSUI.Helper.Dom.Attribute.Set(this._buttonElement, OSUI.GlobalEnum.HTMLAttributes.Disabled, 'true');
                            this._buttonElement.blur();
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, ButtonLoading_1.Enum.CssClass.IsLoading);
                            OSUI.Helper.A11Y.AriaBusyFalse(this.selfElement);
                            this.isBuilt && OSUI.Helper.Dom.Attribute.Remove(this._buttonElement, OSUI.GlobalEnum.HTMLAttributes.Disabled);
                        }
                    }
                    _setLoadingLabel(showSpinnerOnly) {
                        if (showSpinnerOnly && this.isBuilt) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, ButtonLoading_1.Enum.CssClass.ShowSpinnerOnly);
                        }
                        else if (showSpinnerOnly === false) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, ButtonLoading_1.Enum.CssClass.ShowSpinnerOnly);
                        }
                    }
                    setA11YProperties() {
                        OSUI.Helper.A11Y.AriaLivePolite(this.selfElement);
                        OSUI.Helper.A11Y.AriaAtomicTrue(this.selfElement);
                        OSUI.Helper.A11Y.AriaHiddenTrue(this._spinnerElement);
                    }
                    setCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        this._buttonElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, ButtonLoading_1.Enum.CssClass.Button);
                        if (this._buttonElement === undefined) {
                            throw new Error(`There are no '${OSUI.Constants.Dot + ButtonLoading_1.Enum.CssClass.Button}' element as a  ${OSUI.GlobalEnum.PatternName.ButtonLoading}  placeholder child.`);
                        }
                        this._spinnerElement = OSUI.Helper.Dom.ClassSelector(this._buttonElement, ButtonLoading_1.Enum.CssClass.Spinner);
                        if (this._spinnerElement === undefined) {
                            throw new Error(`There are no '${OSUI.Constants.Dot + ButtonLoading_1.Enum.CssClass.Spinner}' element as a '${OSUI.Constants.Dot + ButtonLoading_1.Enum.CssClass.Button}' element child.`);
                        }
                    }
                    unsetCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetHtmlElements() {
                        this._buttonElement = undefined;
                        this._spinnerElement = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this._setInitialButtonState();
                        this.setA11YProperties();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case ButtonLoading_1.Enum.Properties.IsLoading:
                                    this._setIsLoading(propertyValue);
                                    break;
                                case ButtonLoading_1.Enum.Properties.ShowLoadingAndLabel:
                                    this._setLoadingLabel(propertyValue);
                                    break;
                            }
                        }
                    }
                    dispose() {
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                }
                ButtonLoading_1.ButtonLoading = ButtonLoading;
            })(ButtonLoading = Patterns.ButtonLoading || (Patterns.ButtonLoading = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var ButtonLoading;
            (function (ButtonLoading) {
                class ButtonLoadingConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                ButtonLoading.ButtonLoadingConfig = ButtonLoadingConfig;
            })(ButtonLoading = Patterns.ButtonLoading || (Patterns.ButtonLoading = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var ButtonLoading;
            (function (ButtonLoading) {
                var Enum;
                (function (Enum) {
                    let Properties;
                    (function (Properties) {
                        Properties["IsLoading"] = "IsLoading";
                        Properties["ShowLoadingAndLabel"] = "ShowLoadingAndLabel";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Button"] = "btn";
                        CssClass["IsLoading"] = "osui-btn-loading--is-loading";
                        CssClass["ShowSpinnerOnly"] = "osui-btn-loading-show-spinner";
                        CssClass["Spinner"] = "osui-btn-loading__spinner-animation";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                })(Enum = ButtonLoading.Enum || (ButtonLoading.Enum = {}));
            })(ButtonLoading = Patterns.ButtonLoading || (Patterns.ButtonLoading = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Carousel;
            (function (Carousel) {
                class AbstractCarousel extends Patterns.AbstractProviderPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                    }
                    build() {
                        super.build();
                    }
                }
                Carousel.AbstractCarousel = AbstractCarousel;
            })(Carousel = Patterns.Carousel || (Patterns.Carousel = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Carousel;
            (function (Carousel) {
                class AbstractCarouselConfig extends Patterns.AbstractProviderConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateCanChange(isBuilt, key) {
                        if (isBuilt) {
                            return key !== Carousel.Enum.Properties.StartingPosition;
                        }
                        return true;
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case Carousel.Enum.Properties.Navigation:
                                validatedValue = this.validateInRange(value, Carousel.Enum.Navigation.Both, Carousel.Enum.Navigation.Arrows, Carousel.Enum.Navigation.Dots, Carousel.Enum.Navigation.None);
                                break;
                            case Carousel.Enum.Properties.ItemsDesktop:
                            case Carousel.Enum.Properties.ItemsTablet:
                            case Carousel.Enum.Properties.ItemsPhone:
                                validatedValue = this.validateNumber(value, 1);
                                break;
                            case Carousel.Enum.Properties.Height:
                                validatedValue = this.validateString(value, Carousel.Enum.Defaults.Height);
                                break;
                            case Carousel.Enum.Properties.AutoPlay:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            case Carousel.Enum.Properties.ItemsGap:
                                validatedValue = this.validateString(value, Carousel.Enum.Defaults.SpaceNone);
                                break;
                            case Carousel.Enum.Properties.Loop:
                                validatedValue = this.validateBoolean(value, true);
                                break;
                            case Carousel.Enum.Properties.Padding:
                                validatedValue = this.validateString(value, Carousel.Enum.Defaults.SpaceNone);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                Carousel.AbstractCarouselConfig = AbstractCarouselConfig;
            })(Carousel = Patterns.Carousel || (Patterns.Carousel = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Carousel;
            (function (Carousel) {
                var Factory;
                (function (Factory) {
                    function NewCarousel(carouselId, configs, provider) {
                        let _carouselItem = null;
                        if (provider === Carousel.Enum.Provider.Splide) {
                            _carouselItem = new Providers.OSUI.Carousel.Splide.OSUISplide(carouselId, JSON.parse(configs));
                        }
                        else {
                            throw new Error(`There is no  ${OSUI.GlobalEnum.PatternName.Carousel}  of the ${provider} provider`);
                        }
                        return _carouselItem;
                    }
                    Factory.NewCarousel = NewCarousel;
                })(Factory = Carousel.Factory || (Carousel.Factory = {}));
            })(Carousel = Patterns.Carousel || (Patterns.Carousel = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Carousel;
            (function (Carousel) {
                var Enum;
                (function (Enum) {
                    let CarouselEvents;
                    (function (CarouselEvents) {
                        CarouselEvents["OnSlideMoved"] = "OnSlideMoved";
                    })(CarouselEvents = Enum.CarouselEvents || (Enum.CarouselEvents = {}));
                    let CssVariables;
                    (function (CssVariables) {
                        CssVariables["CarouselWidth"] = "--osui-carousel-track-width";
                    })(CssVariables = Enum.CssVariables || (Enum.CssVariables = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["CarouselWrapper"] = "osui-carousel";
                        CssClass["Content"] = "osui-carousel__content";
                        CssClass["HasPagination"] = "osui-carousel--has-pagination";
                        CssClass["Track"] = "osui-carousel__track";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Direction;
                    (function (Direction) {
                        Direction["None"] = "";
                        Direction["LeftToRight"] = "LeftToRight";
                        Direction["RightToLeft"] = "RightToLeft";
                    })(Direction = Enum.Direction || (Enum.Direction = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["AutoPlay"] = "AutoPlay";
                        Properties["Height"] = "Height";
                        Properties["ItemsDesktop"] = "ItemsDesktop";
                        Properties["ItemsGap"] = "ItemsGap";
                        Properties["ItemsPhone"] = "ItemsPhone";
                        Properties["ItemsTablet"] = "ItemsTablet";
                        Properties["Loop"] = "Loop";
                        Properties["Navigation"] = "Navigation";
                        Properties["Padding"] = "Padding";
                        Properties["StartingPosition"] = "StartingPosition";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let Provider;
                    (function (Provider) {
                        Provider["Splide"] = "Splide";
                    })(Provider = Enum.Provider || (Enum.Provider = {}));
                    let Navigation;
                    (function (Navigation) {
                        Navigation["Arrows"] = "arrows";
                        Navigation["Both"] = "both";
                        Navigation["Dots"] = "dots";
                        Navigation["None"] = "none";
                    })(Navigation = Enum.Navigation || (Enum.Navigation = {}));
                    let Defaults;
                    (function (Defaults) {
                        Defaults["Height"] = "auto";
                        Defaults["SpaceNone"] = "0px";
                    })(Defaults = Enum.Defaults || (Enum.Defaults = {}));
                })(Enum = Carousel.Enum || (Carousel.Enum = {}));
            })(Carousel = Patterns.Carousel || (Patterns.Carousel = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DatePicker;
            (function (DatePicker) {
                class AbstractDatePicker extends Patterns.AbstractProviderPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                    }
                }
                DatePicker.AbstractDatePicker = AbstractDatePicker;
            })(DatePicker = Patterns.DatePicker || (Patterns.DatePicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DatePicker;
            (function (DatePicker) {
                class AbstractDatePickerConfig extends Patterns.AbstractProviderConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case DatePicker.Enum.Properties.DateFormat:
                                validatedValue = this.validateString(value, OSUI.Helper.Dates.ServerFormat);
                                break;
                            case DatePicker.Enum.Properties.FirstWeekDay:
                                validatedValue = this.validateNumber(value, 0);
                                break;
                            case DatePicker.Enum.Properties.MaxDate:
                                validatedValue = this.validateDate(value, undefined);
                                break;
                            case DatePicker.Enum.Properties.MinDate:
                                validatedValue = this.validateDate(value, undefined);
                                break;
                            case DatePicker.Enum.Properties.ShowTodayButton:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            case DatePicker.Enum.Properties.TimeFormat:
                                validatedValue = this.validateString(value, DatePicker.Enum.TimeFormatMode.Disable);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                DatePicker.AbstractDatePickerConfig = AbstractDatePickerConfig;
            })(DatePicker = Patterns.DatePicker || (Patterns.DatePicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DatePicker;
            (function (DatePicker) {
                var Factory;
                (function (Factory) {
                    function NewDatePicker(datePickerId, configs, mode, provider) {
                        let _datePickerItem = null;
                        switch (provider) {
                            case DatePicker.Enum.Provider.FlatPicker:
                                _datePickerItem = Providers.OSUI.Datepicker.Flatpickr.Factory.NewFlatpickr(datePickerId, mode, configs);
                                break;
                            default:
                                throw new Error(`There is no ${OSUI.GlobalEnum.PatternName.Datepicker} of the ${provider} provider`);
                        }
                        return _datePickerItem;
                    }
                    Factory.NewDatePicker = NewDatePicker;
                })(Factory = DatePicker.Factory || (DatePicker.Factory = {}));
            })(DatePicker = Patterns.DatePicker || (Patterns.DatePicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DatePicker;
            (function (DatePicker) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Calendar"] = "osui-datepicker-calendar";
                        CssClass["Pattern"] = "osui-datepicker";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let DatePickerEvents;
                    (function (DatePickerEvents) {
                        DatePickerEvents["OnChange"] = "OnChange";
                        DatePickerEvents["OnInitialize"] = "OnInitialize";
                    })(DatePickerEvents = Enum.DatePickerEvents || (Enum.DatePickerEvents = {}));
                    let Mode;
                    (function (Mode) {
                        Mode["Range"] = "range";
                        Mode["Single"] = "single";
                    })(Mode = Enum.Mode || (Enum.Mode = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["DateFormat"] = "DateFormat";
                        Properties["FirstWeekDay"] = "FirstWeekDay";
                        Properties["MaxDate"] = "MaxDate";
                        Properties["MinDate"] = "MinDate";
                        Properties["ShowTodayButton"] = "ShowTodayButton";
                        Properties["ShowWeekNumbers"] = "ShowWeekNumbers";
                        Properties["TimeFormat"] = "TimeFormat";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let Provider;
                    (function (Provider) {
                        Provider["FlatPicker"] = "flatpickr";
                    })(Provider = Enum.Provider || (Enum.Provider = {}));
                    let TimeFormatMode;
                    (function (TimeFormatMode) {
                        TimeFormatMode["Disable"] = "disabled";
                        TimeFormatMode["Time12hFormat"] = "12";
                        TimeFormatMode["Time24hFormat"] = "24";
                    })(TimeFormatMode = Enum.TimeFormatMode || (Enum.TimeFormatMode = {}));
                })(Enum = DatePicker.Enum || (DatePicker.Enum = {}));
            })(DatePicker = Patterns.DatePicker || (Patterns.DatePicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Dropdown;
            (function (Dropdown) {
                class AbstractDropdown extends Patterns.AbstractProviderPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                    }
                }
                Dropdown.AbstractDropdown = AbstractDropdown;
            })(Dropdown = Patterns.Dropdown || (Patterns.Dropdown = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Dropdown;
            (function (Dropdown) {
                class AbstractDropdownConfig extends Patterns.AbstractProviderConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case Dropdown.Enum.Properties.IsDisabled:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                Dropdown.AbstractDropdownConfig = AbstractDropdownConfig;
            })(Dropdown = Patterns.Dropdown || (Patterns.Dropdown = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Dropdown;
            (function (Dropdown) {
                var Factory;
                (function (Factory) {
                    function NewDropdown(dropdownId, mode, provider, configs) {
                        let _dropdownItem = null;
                        switch (provider) {
                            case Dropdown.Enum.Provider.VirtualSelect:
                                _dropdownItem = Providers.OSUI.Dropdown.VirtualSelect.Factory.NewVirtualSelect(dropdownId, mode, JSON.parse(configs));
                                break;
                            case Dropdown.Enum.Provider.OSUIComponents:
                                if (mode === Dropdown.Enum.Mode.ServerSide) {
                                    _dropdownItem = new Dropdown.ServerSide.OSUIDropdownServerSide(dropdownId, JSON.parse(configs));
                                }
                                else {
                                    throw new Error(`There is no Dropdown of the ${provider} provider with ${mode} type`);
                                }
                                break;
                            default:
                                throw new Error(`There is no Dropdown of the ${provider} provider`);
                        }
                        return _dropdownItem;
                    }
                    Factory.NewDropdown = NewDropdown;
                })(Factory = Dropdown.Factory || (Dropdown.Factory = {}));
            })(Dropdown = Patterns.Dropdown || (Patterns.Dropdown = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Dropdown;
            (function (Dropdown) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["DropdownLarge"] = "dropdown--is-large";
                        CssClass["DropdownSmall"] = "dropdown--is-small";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Mode;
                    (function (Mode) {
                        Mode["Search"] = "search";
                        Mode["ServerSide"] = "server-side";
                        Mode["Tags"] = "tags";
                    })(Mode = Enum.Mode || (Enum.Mode = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["IsDisabled"] = "IsDisabled";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let Provider;
                    (function (Provider) {
                        Provider["OSUIComponents"] = "osui-components";
                        Provider["VirtualSelect"] = "virtual-select";
                    })(Provider = Enum.Provider || (Enum.Provider = {}));
                })(Enum = Dropdown.Enum || (Dropdown.Enum = {}));
            })(Dropdown = Patterns.Dropdown || (Patterns.Dropdown = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Dropdown;
            (function (Dropdown) {
                var ServerSide;
                (function (ServerSide) {
                    class OSUIDropdownServerSide extends Patterns.AbstractParent {
                        constructor(uniqueId, configs) {
                            super(uniqueId, new ServerSide.OSUIDropdownServerSideConfig(configs));
                            this._closeDynamically = false;
                            this._isOpen = false;
                        }
                        _addErrorMessage(text) {
                            const errorMessageElement = OSUI.Helper.Dom.ClassSelector(this.selfElement.parentElement, ServerSide.Enum.CssClass.ErrorMessage);
                            if (errorMessageElement === undefined) {
                                const textContainer = document.createElement(OSUI.GlobalEnum.HTMLElement.Div);
                                textContainer.classList.add(ServerSide.Enum.CssClass.ErrorMessage);
                                textContainer.innerHTML = text;
                                this.selfElement.parentElement.appendChild(textContainer);
                            }
                        }
                        _balloonOnToggleCallback(_args, e) {
                            if (e.detail.balloonElem === this._balloonElem && e.detail.isOpen !== this._isOpen) {
                                this._close(true);
                            }
                        }
                        _close(isFromBalloonEvent = false) {
                            if (this._isOpen === false) {
                                return;
                            }
                            if (!isFromBalloonEvent) {
                                this._balloonFeature.close();
                            }
                            this._isOpen = false;
                            this._touchMove();
                            this._updatePatternState();
                            this._unsetEvents(true);
                        }
                        _hasNoImplementation() {
                            throw new Error(`${OSUI.ErrorCodes.Dropdown.HasNoImplementation.code}: ${OSUI.ErrorCodes.Dropdown.HasNoImplementation.message}`);
                        }
                        _moveBalloonOptionsWrapper() {
                            if (this._shouldBalloonOptionsBeMoved()) {
                                const contentElem = OSUI.Helper.Dom.ClassSelector(document, OSUI.GlobalEnum.CssClassElements.Content);
                                OSUI.Helper.Dom.Move(this._balloonElem, contentElem);
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(this._balloonElem, ServerSide.Enum.CssClass.HasBeenMovedToContent);
                            }
                        }
                        _onBodyClick(eventName, event) {
                            if (this._isOpen === false) {
                                return;
                            }
                            this._closeDynamically = true;
                            const canClose = OSUI.Helper.DeviceInfo.IsPhone &&
                                event.target.closest(`.${ServerSide.Enum.CssClass.BalloonSearchIcon}`) === null;
                            if (canClose) {
                                this._close();
                            }
                        }
                        _onKeyboardPressed(event) {
                            event.stopPropagation();
                            switch (event.target) {
                                case this._selectValuesWrapper:
                                    if (event.key === OSUI.GlobalEnum.Keycodes.Escape) {
                                        this._close();
                                    }
                                    if (event.key === OSUI.GlobalEnum.Keycodes.Enter ||
                                        event.key === OSUI.GlobalEnum.Keycodes.Space ||
                                        event.key === OSUI.GlobalEnum.Keycodes.ArrowUp ||
                                        event.key === OSUI.GlobalEnum.Keycodes.ArrowDown ||
                                        event.key === OSUI.GlobalEnum.Keycodes.Home) {
                                        this._selectValuesWrapper.click();
                                    }
                                    break;
                                case this._balloonOptionsWrapperElement:
                                    if (event.key === OSUI.GlobalEnum.Keycodes.Escape) {
                                        this._close();
                                    }
                                    if (event.key === OSUI.GlobalEnum.Keycodes.ArrowUp) {
                                        if (this._balloonSearchInputElement) {
                                            this._balloonSearchInputElement.focus();
                                        }
                                    }
                                    else if (event.key === OSUI.GlobalEnum.Keycodes.ArrowDown) {
                                        event.preventDefault();
                                        this.getChildByIndex(0).setFocus();
                                        if (this.configs.AllowMultipleSelection === false) {
                                            this.getChildByIndex(0).toggleSelected();
                                        }
                                    }
                                    break;
                                case this._balloonSearchInputElement:
                                    if (event.key === OSUI.GlobalEnum.Keycodes.Escape) {
                                        this._close();
                                    }
                                    break;
                            }
                        }
                        _onSearchInputBlur() {
                            OSUI.Helper.Dom.Styles.RemoveClass(this._balloonElem, ServerSide.Enum.CssClass.SearchInputIsFocused);
                        }
                        _onSearchInputClicked(event) {
                            event.stopPropagation();
                        }
                        _onSearchInputFocus() {
                            OSUI.Helper.Dom.Styles.AddClass(this._balloonElem, ServerSide.Enum.CssClass.SearchInputIsFocused);
                        }
                        _onSelectValuesWrapperClicked() {
                            this._isOpen ? this._close() : this._open();
                        }
                        _onTouchMove(event) {
                            if (event.target === this._balloonElem) {
                                event.preventDefault();
                            }
                        }
                        _open() {
                            if (this._isOpen) {
                                return;
                            }
                            this._balloonFeature.open(true);
                            this._closeDynamically = false;
                            this._isOpen = true;
                            this._touchMove();
                            OSUI.Helper.Dom.Styles.AddClass(document.body, ServerSide.Enum.CssClass.IsVisible);
                            this._updatePatternState();
                            OSUI.Helper.AsyncInvocation(this._setUpEvents.bind(this));
                        }
                        _optionItemHasBeenClicked(optionItemId) {
                            const clickedItem = this.getChild(optionItemId);
                            if (clickedItem) {
                                if (this.configs.AllowMultipleSelection) {
                                    clickedItem.toggleSelected();
                                }
                                if (this.configs.AllowMultipleSelection === false) {
                                    this._close();
                                    if (clickedItem.IsSelected === false) {
                                        clickedItem.toggleSelected();
                                    }
                                }
                            }
                            else {
                                throw new Error(`${OSUI.ErrorCodes.Dropdown.FailOptionItemClicked}: The ${OSUI.GlobalEnum.PatternName.DropdownServerSideItem} under uniqueId: '${optionItemId}' does not exist as an OptionItem from ${OSUI.GlobalEnum.PatternName.Dropdown} with Id: ${this.widgetId}.`);
                            }
                        }
                        _optionItemKeyPressed(optionItemId) {
                            const optionItem = this.getChild(optionItemId);
                            if (optionItem !== undefined) {
                                const getOptionItemIndex = this.getChildIndex(optionItemId);
                                if (optionItem.keyboardTriggeredKey === undefined) {
                                    return;
                                }
                                switch (optionItem.keyboardTriggeredKey) {
                                    case OSUI.GlobalEnum.Keycodes.Enter:
                                    case OSUI.GlobalEnum.Keycodes.Space:
                                        this._optionItemHasBeenClicked(optionItemId);
                                        break;
                                    case OSUI.GlobalEnum.Keycodes.ArrowUp:
                                        if (getOptionItemIndex > 0) {
                                            this._updateOptionItemFocuStateOnKeyPress(optionItem, getOptionItemIndex - 1);
                                        }
                                        break;
                                    case OSUI.GlobalEnum.Keycodes.ArrowDown:
                                        if (getOptionItemIndex < this.getChildItems().length - 1) {
                                            this._updateOptionItemFocuStateOnKeyPress(optionItem, getOptionItemIndex + 1);
                                        }
                                        break;
                                    case OSUI.GlobalEnum.Keycodes.ShiftTab:
                                        if (this._balloonSearchInputElement) {
                                            this._balloonSearchInputElement.focus();
                                        }
                                        break;
                                    case OSUI.GlobalEnum.Keycodes.Tab:
                                        if (this._balloonFocusableElemsInFooter.length > 0) {
                                            this._balloonFocusableElemsInFooter[0].focus();
                                        }
                                        break;
                                    case OSUI.GlobalEnum.Keycodes.Escape:
                                        this._close();
                                        break;
                                }
                            }
                            else {
                                throw new Error(`${OSUI.ErrorCodes.Dropdown.FailOptionItemKeyPressed}: The ${OSUI.GlobalEnum.PatternName.DropdownServerSideItem} under uniqueId: '${optionItemId}' does not exist as an OptionItem from ${OSUI.GlobalEnum.PatternName.Dropdown} with Id: ${this.widgetId}.`);
                            }
                        }
                        _setBalloonFeature() {
                            this.setBalloonOptions();
                            this._balloonFeature = new OSFramework.OSUI.Feature.Balloon.Balloon(this, this._balloonElem, this.balloonOptions);
                            OSFramework.OSUI.Helper.AsyncInvocation(this._moveBalloonOptionsWrapper.bind(this));
                        }
                        _setCssClasses() {
                            if (this._balloonSearchInputElement === undefined) {
                                OSUI.Helper.Dom.Styles.AddClass(this._balloonElem, ServerSide.Enum.CssClass.BalloonHasNotSearchInput);
                            }
                        }
                        _setInitialOptions() {
                            if (this.configs.IsDisabled) {
                                this.disable();
                            }
                        }
                        _setNewOptionItem(optionItem) {
                            if (this.getChild(optionItem.uniqueId)) {
                                throw new Error(`${OSUI.ErrorCodes.Dropdown.FailSetNewOptionItem}: There is already a ${OSUI.GlobalEnum.PatternName.DropdownServerSideItem} under Id: '${optionItem.widgetId}' added to ${OSUI.GlobalEnum.PatternName.Dropdown} with uniqueId: ${this.uniqueId}.`);
                            }
                            else {
                                this.setChild(optionItem);
                            }
                        }
                        _setUpEvents() {
                            this._selectValuesWrapper.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                            this._selectValuesWrapper.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyboardPress);
                            if (this.isBuilt) {
                                this._balloonOptionsWrapperElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyboardPress);
                                if (this._balloonSearchInputElement) {
                                    this._balloonSearchInputElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClickInputSearch);
                                    this._balloonSearchInputElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyboardPress);
                                    this._balloonSearchInputElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Blur, this._eventOnSearchInputBlur);
                                    this._balloonSearchInputElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._eventOnSearchInputFocus);
                                }
                                OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._eventOnBodyClick);
                                OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BalloonOnToggle, this._eventBalloonOnToggle);
                            }
                        }
                        _shouldBalloonOptionsBeMoved() {
                            if (OSUI.Helper.DeviceInfo.IsPhone &&
                                (this.selfElement.closest(ServerSide.Enum.InsidePattern.BottomSheet) ||
                                    this.selfElement.closest(ServerSide.Enum.InsidePattern.Notification) ||
                                    this.selfElement.closest(ServerSide.Enum.InsidePattern.Sidebar))) {
                                return true;
                            }
                            else {
                                return false;
                            }
                        }
                        _touchMove() {
                            if (OSUI.Helper.DeviceInfo.IsIos && 'ontouchmove' in window) {
                                if (this._isOpen) {
                                    this._balloonElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.TouchMove, this._eventOnTouchMove);
                                }
                                else {
                                    this._balloonElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TouchMove, this._eventOnTouchMove);
                                }
                            }
                        }
                        _triggerToogleCalbackEvent() {
                            this.triggerPlatformEventCallback(this._platformEventOnToggleCallback, this._isOpen);
                        }
                        _unsetEvents(isUpdate = false) {
                            if (isUpdate === false) {
                                this._selectValuesWrapper.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                                this._selectValuesWrapper.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyboardPress);
                            }
                            this._balloonOptionsWrapperElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyboardPress);
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BalloonOnToggle, this._eventBalloonOnToggle);
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._eventOnBodyClick);
                            if (this._balloonSearchInputElement) {
                                this._balloonSearchInputElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClickInputSearch);
                                this._balloonSearchInputElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyboardPress);
                                this._balloonSearchInputElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Blur, this._eventOnSearchInputBlur);
                                this._balloonSearchInputElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._eventOnSearchInputFocus);
                            }
                        }
                        _unsetNewOptionItem(optionItemId) {
                            if (this.getChild(optionItemId)) {
                                this.unsetChild(optionItemId);
                            }
                            else {
                                throw new Error(`${OSUI.ErrorCodes.Dropdown.FailUnsetNewOptionItem}: The ${OSUI.GlobalEnum.PatternName.DropdownServerSideItem} under uniqueId: '${optionItemId}' does not exist as an OptionItem from ${OSUI.GlobalEnum.PatternName.Dropdown} with Id: ${this.widgetId}.`);
                            }
                        }
                        _updateBalloonAccessibilityElements() {
                            const tabIndexValue = this._isOpen
                                ? OSUI.Constants.A11YAttributes.States.TabIndexShow
                                : OSUI.Constants.A11YAttributes.States.TabIndexHidden;
                            if (this._balloonSearchInputElement !== undefined) {
                                OSUI.Helper.A11Y.TabIndex(this._balloonSearchInputElement, tabIndexValue);
                                OSUI.Helper.A11Y.AriaHidden(this._balloonSearchInputElement, (tabIndexValue === OSUI.Constants.A11YAttributes.States.TabIndexHidden).toString());
                            }
                            if (this._balloonFocusableElemsInFooter.length > 0) {
                                OSUI.Helper.A11Y.SetElementsTabIndex(this._isOpen, this._balloonFocusableElemsInFooter);
                            }
                            OSUI.Helper.A11Y.TabIndex(this._balloonOptionsWrapperElement, tabIndexValue);
                            if (this._balloonFocusableElemsInFooter.length > 0) {
                                OSUI.Helper.A11Y.SetElementsTabIndex(this._isOpen, this._balloonFocusableElemsInFooter);
                            }
                            if (this._isOpen) {
                                OSUI.Helper.A11Y.AriaHiddenFalse(this._balloonOptionsWrapperElement);
                            }
                            else {
                                OSUI.Helper.Dom.Styles.RemoveClass(this._balloonElem, OSUI.Constants.HasAccessibilityClass);
                                OSUI.Helper.A11Y.AriaHiddenTrue(this._balloonOptionsWrapperElement);
                            }
                        }
                        _updateOptionItemFocuStateOnKeyPress(optionItem, itemIndex) {
                            if (this.configs.AllowMultipleSelection === false) {
                                optionItem.toggleSelected();
                                this.getChildByIndex(itemIndex).toggleSelected();
                            }
                            optionItem.setBlur();
                            this.getChildByIndex(itemIndex).setFocus();
                        }
                        _updatePatternState() {
                            this._updateBalloonAccessibilityElements();
                            if (this._isOpen) {
                                OSUI.Helper.Dom.Styles.AddClass(this._balloonElem, ServerSide.Enum.CssClass.IsOpened);
                                if (this._balloonSearchInputElement) {
                                    this._balloonSearchInputElement.focus();
                                }
                                else {
                                    this._balloonOptionsWrapperElement.focus();
                                }
                            }
                            else {
                                OSUI.Helper.Dom.Styles.RemoveClass(this._balloonElem, ServerSide.Enum.CssClass.IsOpened);
                                if (this._closeDynamically === false) {
                                    this._selectValuesWrapper.focus();
                                }
                            }
                            this._triggerToogleCalbackEvent();
                        }
                        setA11YProperties() {
                            this._updateBalloonAccessibilityElements();
                            OSUI.Helper.A11Y.TabIndexTrue(this._selectValuesWrapper);
                            OSUI.Helper.A11Y.RoleButton(this._selectValuesWrapper);
                            OSUI.Helper.A11Y.AriaHasPopup(this._selectValuesWrapper, OSUI.Constants.A11YAttributes.Aria.Haspopup.value.Listbox);
                            OSUI.Helper.A11Y.RoleListbox(this._balloonOptionsWrapperElement);
                            OSUI.Helper.A11Y.TabIndexFalse(this._balloonOptionsWrapperElement);
                            OSUI.Helper.A11Y.AriaHiddenTrue(this._balloonOptionsWrapperElement);
                            if (this.configs.AllowMultipleSelection) {
                                OSUI.Helper.A11Y.MultiselectableTrue(this._balloonOptionsWrapperElement);
                            }
                            this.setSelectAriaLabel();
                            this.setBalloonOptionsAriaLabel();
                        }
                        setCallbacks() {
                            this._eventOnBodyClick = this._onBodyClick.bind(this);
                            this._eventBalloonOnToggle = this._balloonOnToggleCallback.bind(this);
                            this._eventOnClick = this._onSelectValuesWrapperClicked.bind(this);
                            this._eventOnClickInputSearch = this._onSearchInputClicked.bind(this);
                            this._eventOnkeyboardPress = this._onKeyboardPressed.bind(this);
                            this._eventOnSearchInputBlur = this._onSearchInputBlur.bind(this);
                            this._eventOnSearchInputFocus = this._onSearchInputFocus.bind(this);
                            this._eventOnTouchMove = this._onTouchMove.bind(this);
                        }
                        setHtmlElements() {
                            this._balloonFooterElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, ServerSide.Enum.CssClass.BalloonFooter);
                            this._balloonFocusableElemsInFooter = OSUI.Helper.Dom.TagSelectorAll(this._balloonFooterElement, OSUI.Constants.FocusableElems);
                            this._balloonSearchInputWrapperElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, ServerSide.Enum.CssClass.BalloonSearch);
                            this._balloonSearchInputElement = OSUI.Helper.Dom.TagSelector(this._balloonSearchInputWrapperElement, OSUI.GlobalEnum.HTMLElement.Input);
                            this._balloonContainerElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, ServerSide.Enum.CssClass.BalloonContainer);
                            this._balloonElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, ServerSide.Enum.CssClass.Balloon);
                            this._balloonOptionsWrapperElement = OSUI.Helper.Dom.ClassSelector(this._balloonElem, ServerSide.Enum.CssClass.BalloonContent);
                            this._selectValuesWrapper = OSUI.Helper.Dom.ClassSelector(this.selfElement, ServerSide.Enum.CssClass.SelectValuesWrapper);
                        }
                        unsetCallbacks() {
                            this._eventOnBodyClick = undefined;
                            this._eventBalloonOnToggle = undefined;
                            this._eventOnClick = undefined;
                            this._eventOnClickInputSearch = undefined;
                            this._eventOnkeyboardPress = undefined;
                            this._eventOnSearchInputBlur = undefined;
                            this._eventOnSearchInputFocus = undefined;
                            this._eventOnTouchMove = undefined;
                            this._platformEventOnToggleCallback = undefined;
                        }
                        unsetHtmlElements() {
                            this._balloonContainerElement = undefined;
                            this._balloonFocusableElemsInFooter = [];
                            this._balloonFooterElement = undefined;
                            this._balloonOptionsWrapperElement = undefined;
                            this._balloonSearchInputElement = undefined;
                            this._balloonSearchInputWrapperElement = undefined;
                            this._balloonElem = undefined;
                            this._selectValuesWrapper = undefined;
                        }
                        beNotifiedByChild(childItem, notifiedTo) {
                            switch (notifiedTo) {
                                case ServerSide.Enum.ChildNotifyActionType.Add:
                                    this._setNewOptionItem(childItem);
                                    break;
                                case ServerSide.Enum.ChildNotifyActionType.Click:
                                    this._optionItemHasBeenClicked(childItem.uniqueId);
                                    break;
                                case ServerSide.Enum.ChildNotifyActionType.KeyPressed:
                                    this._optionItemKeyPressed(childItem.uniqueId);
                                    break;
                                case ServerSide.Enum.ChildNotifyActionType.Removed:
                                    this._unsetNewOptionItem(childItem.uniqueId);
                                    break;
                                default:
                                    throw new Error(`${OSUI.ErrorCodes.Dropdown.FailToSetOptionItemAction}: There no exist a '${notifiedTo}' notification type.`);
                            }
                        }
                        build() {
                            super.build();
                            this.setCallbacks();
                            this.setHtmlElements();
                            this.setA11YProperties();
                            this._setUpEvents();
                            this._setCssClasses();
                            this._setInitialOptions();
                            this._setBalloonFeature();
                            this.finishBuild();
                        }
                        changeProperty(propertyName, propertyValue) {
                            super.changeProperty(propertyName, propertyValue);
                            if (this.isBuilt) {
                                switch (propertyName) {
                                    case ServerSide.Enum.Properties.IsDisabled:
                                        propertyValue ? this.disable() : this.enable();
                                        break;
                                }
                            }
                        }
                        clear() {
                            const selectedOptions = this.getChildItems().filter((item) => item.IsSelected);
                            for (const optionItem of selectedOptions) {
                                optionItem.toggleSelected(false);
                            }
                        }
                        close() {
                            OSFramework.OSUI.Helper.AsyncInvocation(this._close.bind(this));
                        }
                        disable() {
                            OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.GlobalEnum.HTMLAttributes.Disabled, '');
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, ServerSide.Enum.CssClass.IsDisabled);
                            OSUI.Helper.A11Y.TabIndexFalse(this._selectValuesWrapper);
                        }
                        dispose() {
                            var _a;
                            this._unsetEvents();
                            (_a = this._balloonFeature) === null || _a === void 0 ? void 0 : _a.dispose();
                            this.unsetCallbacks();
                            this.unsetHtmlElements();
                            super.dispose();
                        }
                        enable() {
                            OSUI.Helper.Dom.Attribute.Remove(this.selfElement, OSUI.GlobalEnum.HTMLAttributes.Disabled);
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, ServerSide.Enum.CssClass.IsDisabled);
                            OSUI.Helper.A11Y.TabIndexTrue(this._selectValuesWrapper);
                        }
                        getSelectedValues() {
                            return this._hasNoImplementation();
                        }
                        open() {
                            OSFramework.OSUI.Helper.AsyncInvocation(this._open.bind(this));
                        }
                        registerCallback(eventName, callback) {
                            switch (eventName) {
                                case ServerSide.Enum.Events.OnToggle:
                                    if (this._platformEventOnToggleCallback === undefined) {
                                        this._platformEventOnToggleCallback = callback;
                                    }
                                    break;
                                default:
                                    super.registerCallback(eventName, callback);
                            }
                        }
                        setBalloonOptions(balloonOptions) {
                            if (balloonOptions !== undefined) {
                                this.balloonOptions = balloonOptions;
                            }
                            else {
                                const _focusOptions = {
                                    elemToFocusOnOpen: this._selectValuesWrapper,
                                    useFocus: true,
                                    focusTrapParams: {
                                        focusBottomCallback: this.close.bind(this),
                                        focusTargetElement: this._balloonContainerElement,
                                        focusTopCallback: this.close.bind(this),
                                    },
                                };
                                this.balloonOptions = {
                                    alignment: OSUI.GlobalEnum.FloatingAlignment.Start,
                                    anchorElem: this._selectValuesWrapper,
                                    allowedPlacements: [OSUI.GlobalEnum.FloatingPosition.TopStart, OSUI.GlobalEnum.FloatingPosition.BottomStart],
                                    position: OSUI.GlobalEnum.FloatingPosition.Auto,
                                    shape: OSUI.GlobalEnum.ShapeTypes.SoftRounded,
                                    focusOptions: _focusOptions,
                                    useTriggerWidth: true,
                                };
                            }
                        }
                        setBalloonOptionsAriaLabel(value) {
                            this._balloonOptionsAriaLabel = value === undefined ? this.configs.balloonOptionsArialabel : value;
                            OSUI.Helper.A11Y.AriaLabel(this._balloonOptionsWrapperElement, this._balloonOptionsAriaLabel);
                        }
                        setProviderConfigs() {
                            return this._hasNoImplementation();
                        }
                        setProviderEvent() {
                            return this._hasNoImplementation();
                        }
                        setSelectAriaLabel(value) {
                            this._selectValuesWrapperAriaLabel =
                                value === undefined ? this.configs.selectValuesWrapperAriaLabel : value;
                            OSUI.Helper.A11Y.AriaLabel(this._selectValuesWrapper, this._selectValuesWrapperAriaLabel);
                        }
                        unsetProviderEvent() {
                            return this._hasNoImplementation();
                        }
                        validation(isValid, validationMessage) {
                            if (isValid === false) {
                                OSUI.Helper.Dom.Styles.AddClass(this.selfElement, ServerSide.Enum.CssClass.NotValid);
                                this._addErrorMessage(validationMessage);
                            }
                            else {
                                OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, ServerSide.Enum.CssClass.NotValid);
                                const errorMessageElement = OSUI.Helper.Dom.ClassSelector(this.selfElement.parentElement, ServerSide.Enum.CssClass.ErrorMessage);
                                if (errorMessageElement) {
                                    errorMessageElement.remove();
                                }
                            }
                        }
                    }
                    ServerSide.OSUIDropdownServerSide = OSUIDropdownServerSide;
                })(ServerSide = Dropdown.ServerSide || (Dropdown.ServerSide = {}));
            })(Dropdown = Patterns.Dropdown || (Patterns.Dropdown = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Dropdown;
            (function (Dropdown) {
                var ServerSide;
                (function (ServerSide) {
                    class OSUIDropdownServerSideConfig extends Patterns.AbstractConfiguration {
                        constructor(config) {
                            super(config);
                            this._balloonMaxHeight = ServerSide.Enum.PropertiesValues.MaxHeight;
                            this._balloonOptionsArialabel = '';
                            this._selectValuesWrapperAriaLabel = ServerSide.Enum.PropertiesValues.SelectValuesWrapperAriaLabelValue;
                            this._balloonOptionsArialabel = this.AllowMultipleSelection
                                ? ServerSide.Enum.PropertiesValues.BalloonOptionsWrapperAriaLabelMultipleValue
                                : ServerSide.Enum.PropertiesValues.BalloonOptionsWrapperAriaLabelSingleValue;
                        }
                        validateDefault(key, value) {
                            let validatedValue = undefined;
                            switch (key) {
                                case ServerSide.Enum.Properties.AllowMultipleSelection:
                                case ServerSide.Enum.Properties.IsDisabled:
                                    validatedValue = this.validateBoolean(value, false);
                                    break;
                                default:
                                    validatedValue = super.validateDefault(key, value);
                                    break;
                            }
                            return validatedValue;
                        }
                        get balloonMaxHeight() {
                            return this._balloonMaxHeight;
                        }
                        get balloonOptionsArialabel() {
                            return this._balloonOptionsArialabel;
                        }
                        get selectValuesWrapperAriaLabel() {
                            return this._selectValuesWrapperAriaLabel;
                        }
                    }
                    ServerSide.OSUIDropdownServerSideConfig = OSUIDropdownServerSideConfig;
                })(ServerSide = Dropdown.ServerSide || (Dropdown.ServerSide = {}));
            })(Dropdown = Patterns.Dropdown || (Patterns.Dropdown = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Dropdown;
            (function (Dropdown) {
                var ServerSide;
                (function (ServerSide) {
                    var Enum;
                    (function (Enum) {
                        let ChildNotifyActionType;
                        (function (ChildNotifyActionType) {
                            ChildNotifyActionType["Add"] = "add";
                            ChildNotifyActionType["Click"] = "click";
                            ChildNotifyActionType["KeyPressed"] = "keyPressed";
                            ChildNotifyActionType["Removed"] = "removed";
                        })(ChildNotifyActionType = Enum.ChildNotifyActionType || (Enum.ChildNotifyActionType = {}));
                        let CssClass;
                        (function (CssClass) {
                            CssClass["Balloon"] = "osui-dropdown-serverside__balloon";
                            CssClass["BalloonContainer"] = "osui-dropdown-serverside__balloon-container";
                            CssClass["BalloonContent"] = "osui-dropdown-serverside__balloon-content";
                            CssClass["BalloonFooter"] = "osui-dropdown-serverside__balloon-footer";
                            CssClass["BalloonHasNotSearchInput"] = "osui-dropdown-serverside__balloon--has-not-search";
                            CssClass["BalloonSearch"] = "osui-dropdown-serverside__balloon-search";
                            CssClass["BalloonSearchIcon"] = "osui-dropdown-serverside__balloon-search-icon";
                            CssClass["ErrorMessage"] = "osui-dropdown-serverside-error-message";
                            CssClass["HasBeenMovedToContent"] = "osui-dropdown-serverside--at-content";
                            CssClass["IsDisabled"] = "osui-dropdown-serverside--is-disabled";
                            CssClass["IsOpened"] = "osui-dropdown-serverside--is-opened";
                            CssClass["IsVisible"] = "osui-dropdown-serverside-visible";
                            CssClass["NotValid"] = "osui-dropdown-serverside--not-valid";
                            CssClass["Pattern"] = "osui-dropdown-serverside";
                            CssClass["SearchInputIsFocused"] = "osui-dropdown-serverside__search-input--is-focused";
                            CssClass["SelectText"] = "osui-dropdown-serverside__text";
                            CssClass["SelectValuesWrapper"] = "osui-dropdown-serverside__selected-values-wrapper";
                        })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                        let Events;
                        (function (Events) {
                            Events["OnToggle"] = "OnToggle";
                        })(Events = Enum.Events || (Enum.Events = {}));
                        let InlineCssVariables;
                        (function (InlineCssVariables) {
                            InlineCssVariables["BalloonMaxHeight"] = "--osui-dropdown-ss-balloon-max-height";
                            InlineCssVariables["InputHeight"] = "--osui-dropdown-ss-input-height";
                            InlineCssVariables["Left"] = "--osui-dropdown-ss-left";
                            InlineCssVariables["ThresholVerticalAnimate"] = "--osui-dropdown-ss-thresholdanimateval";
                            InlineCssVariables["Top"] = "--osui-dropdown-ss-top";
                            InlineCssVariables["Width"] = "--osui-dropdown-ss-width";
                        })(InlineCssVariables = Enum.InlineCssVariables || (Enum.InlineCssVariables = {}));
                        let InsidePattern;
                        (function (InsidePattern) {
                            InsidePattern["BottomSheet"] = ".osui-bottom-sheet";
                            InsidePattern["Notification"] = ".osui-notification";
                            InsidePattern["Sidebar"] = ".osui-sidebar";
                        })(InsidePattern = Enum.InsidePattern || (Enum.InsidePattern = {}));
                        let Properties;
                        (function (Properties) {
                            Properties["AllowMultipleSelection"] = "AllowMultipleSelection";
                            Properties["IsDisabled"] = "IsDisabled";
                        })(Properties = Enum.Properties || (Enum.Properties = {}));
                        let PropertiesValues;
                        (function (PropertiesValues) {
                            PropertiesValues["BalloonOptionsWrapperAriaLabelMultipleValue"] = "Select one or more options";
                            PropertiesValues["BalloonOptionsWrapperAriaLabelSingleValue"] = "Select an option";
                            PropertiesValues[PropertiesValues["MaxHeight"] = 320] = "MaxHeight";
                            PropertiesValues["SelectValuesWrapperAriaLabelValue"] = "Select an option";
                            PropertiesValues[PropertiesValues["ThresholVerticalAnimateValue"] = 20] = "ThresholVerticalAnimateValue";
                        })(PropertiesValues = Enum.PropertiesValues || (Enum.PropertiesValues = {}));
                    })(Enum = ServerSide.Enum || (ServerSide.Enum = {}));
                })(ServerSide = Dropdown.ServerSide || (Dropdown.ServerSide = {}));
            })(Dropdown = Patterns.Dropdown || (Patterns.Dropdown = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DropdownServerSideItem;
            (function (DropdownServerSideItem_1) {
                class DropdownServerSideItem extends Patterns.AbstractChild {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new DropdownServerSideItem_1.DropdownServerSideItemConfig(configs));
                    }
                    _onKeyboardPressed(event) {
                        event.preventDefault();
                        event.stopPropagation();
                        this.keyboardTriggeredKey = event.key;
                        switch (event.key) {
                            case OSUI.GlobalEnum.Keycodes.Enter:
                            case OSUI.GlobalEnum.Keycodes.Space:
                                this._onSelected(event);
                                break;
                            case OSUI.GlobalEnum.Keycodes.ArrowUp:
                            case OSUI.GlobalEnum.Keycodes.ArrowDown:
                            case OSUI.GlobalEnum.Keycodes.Escape:
                                this.notifyParent(Patterns.Dropdown.ServerSide.Enum.ChildNotifyActionType.KeyPressed);
                                break;
                            case OSUI.GlobalEnum.Keycodes.Tab:
                                if (event.shiftKey) {
                                    this.keyboardTriggeredKey = OSUI.GlobalEnum.Keycodes.ShiftTab;
                                }
                                else {
                                    this.keyboardTriggeredKey = OSUI.GlobalEnum.Keycodes.Tab;
                                }
                                this.notifyParent(Patterns.Dropdown.ServerSide.Enum.ChildNotifyActionType.KeyPressed);
                                break;
                        }
                    }
                    _onSelected(event) {
                        event.stopPropagation();
                        this.notifyParent(event.type === OSUI.GlobalEnum.HTMLEvent.Click
                            ? Patterns.Dropdown.ServerSide.Enum.ChildNotifyActionType.Click
                            : Patterns.Dropdown.ServerSide.Enum.ChildNotifyActionType.KeyPressed);
                    }
                    _removeEvents() {
                        this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyboardPress);
                    }
                    _setUpEvents() {
                        this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyboardPress);
                    }
                    _updateSelectedStatus(status) {
                        this.configs.IsSelected = status;
                        if (this.configs.IsSelected) {
                            OSUI.Helper.A11Y.AriaSelectedTrue(this.selfElement);
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, DropdownServerSideItem_1.Enum.CssClass.IsSelected);
                        }
                        else {
                            OSUI.Helper.A11Y.AriaSelectedFalse(this.selfElement);
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, DropdownServerSideItem_1.Enum.CssClass.IsSelected);
                        }
                    }
                    setA11YProperties() {
                        OSUI.Helper.A11Y.TabIndexFalse(this.selfElement);
                        OSUI.Helper.A11Y.RoleOption(this.selfElement);
                        OSUI.Helper.A11Y.AriaSelectedFalse(this.selfElement);
                    }
                    setCallbacks() {
                        this._eventOnClick = this._onSelected.bind(this);
                        this._eventOnkeyboardPress = this._onKeyboardPressed.bind(this);
                    }
                    setHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetCallbacks() {
                        this._eventOnClick = null;
                        this._eventOnkeyboardPress = null;
                        this._platformEventOnClickCallback = null;
                    }
                    unsetHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    build() {
                        super.build();
                        this.setParentInfo(OSUI.Constants.Dot + DropdownServerSideItem_1.Enum.CssClass.DropdownParentBalloon, OutSystems.OSUI.Patterns.DropdownAPI.GetDropdownById);
                        this.notifyParent(Patterns.Dropdown.ServerSide.Enum.ChildNotifyActionType.Add);
                        this.setCallbacks();
                        this._setUpEvents();
                        this.setA11YProperties();
                        this._updateSelectedStatus(this.configs.IsSelected);
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case DropdownServerSideItem_1.Enum.Properties.IsSelected:
                                    this._updateSelectedStatus(propertyValue);
                                    break;
                            }
                        }
                    }
                    dispose() {
                        if (this.isBuilt) {
                            this.unsetCallbacks();
                            this._removeEvents();
                            this.notifyParent(Patterns.Dropdown.ServerSide.Enum.ChildNotifyActionType.Removed);
                        }
                        super.dispose();
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case DropdownServerSideItem_1.Enum.Events.OnSelected:
                                if (this._platformEventOnClickCallback === undefined) {
                                    this._platformEventOnClickCallback = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    setBlur() {
                        this.selfElement.blur();
                    }
                    setFocus() {
                        this.selfElement.focus();
                    }
                    setTabindex() {
                        OSUI.Helper.A11Y.TabIndexTrue(this.selfElement);
                    }
                    toggleSelected(triggerCallback = true) {
                        this._updateSelectedStatus(!this.configs.IsSelected);
                        if (triggerCallback) {
                            this.triggerPlatformEventCallback(this._platformEventOnClickCallback, this.configs.ItemId);
                        }
                    }
                    unsetTabindex() {
                        OSUI.Helper.A11Y.TabIndexFalse(this.selfElement);
                    }
                    get IsSelected() {
                        return this.configs.IsSelected;
                    }
                    get ItemId() {
                        return this.configs.ItemId;
                    }
                }
                DropdownServerSideItem_1.DropdownServerSideItem = DropdownServerSideItem;
            })(DropdownServerSideItem = Patterns.DropdownServerSideItem || (Patterns.DropdownServerSideItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DropdownServerSideItem;
            (function (DropdownServerSideItem) {
                class DropdownServerSideItemConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case DropdownServerSideItem.Enum.Properties.IsSelected:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            case DropdownServerSideItem.Enum.Properties.ItemId:
                                validatedValue = this.validateString(value, undefined);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                DropdownServerSideItem.DropdownServerSideItemConfig = DropdownServerSideItemConfig;
            })(DropdownServerSideItem = Patterns.DropdownServerSideItem || (Patterns.DropdownServerSideItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DropdownServerSideItem;
            (function (DropdownServerSideItem) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["DropdownParentBalloon"] = "osui-dropdown-serverside__balloon";
                        CssClass["IsSelected"] = "osui-dropdown-serverside-item--is-selected";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Events;
                    (function (Events) {
                        Events["OnSelected"] = "OnSelected";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["IsSelected"] = "IsSelected";
                        Properties["ItemId"] = "ItemId";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = DropdownServerSideItem.Enum || (DropdownServerSideItem.Enum = {}));
            })(DropdownServerSideItem = Patterns.DropdownServerSideItem || (Patterns.DropdownServerSideItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var FlipContent;
            (function (FlipContent) {
                var Enum;
                (function (Enum) {
                    let Properties;
                    (function (Properties) {
                        Properties["FlipSelf"] = "FlipSelf";
                        Properties["IsFlipped"] = "IsFlipped";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["PatternBack"] = "osui-flip-content__container__back";
                        CssClass["PatternContainer"] = "osui-flip-content__container";
                        CssClass["PatternDataFlipped"] = "data-flipped";
                        CssClass["PatternFlipSelf"] = "osui-flip-content--flip-self";
                        CssClass["PatternFront"] = "osui-flip-content__container__front";
                        CssClass["PatternIsFlipped"] = "osui-flip-content--flipped";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Events;
                    (function (Events) {
                        Events["OnToggle"] = "OnToggle";
                    })(Events = Enum.Events || (Enum.Events = {}));
                })(Enum = FlipContent.Enum || (FlipContent.Enum = {}));
            })(FlipContent = Patterns.FlipContent || (Patterns.FlipContent = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var FlipContent;
            (function (FlipContent_1) {
                class FlipContent extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new FlipContent_1.FlipContentConfig(configs));
                    }
                    _keydownCallback(e) {
                        if (e.key === OSUI.GlobalEnum.Keycodes.Enter ||
                            e.key === OSUI.GlobalEnum.Keycodes.Space ||
                            (e.key === OSUI.GlobalEnum.Keycodes.Escape && this.configs.IsFlipped)) {
                            this.toggleFlipContent();
                            e.preventDefault();
                            e.stopPropagation();
                        }
                    }
                    _removeEvents() {
                        this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventKeydown);
                        this._flipWrapperElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventClick);
                    }
                    _setEventHandlers() {
                        if (this.configs.FlipSelf) {
                            this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventKeydown);
                            this._flipWrapperElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventClick);
                            OSUI.Helper.Dom.Styles.AddClass(this._flipWrapperElement, FlipContent_1.Enum.CssClass.PatternFlipSelf);
                        }
                        else {
                            this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventKeydown);
                            this._flipWrapperElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventClick);
                            OSUI.Helper.Dom.Styles.RemoveClass(this._flipWrapperElement, FlipContent_1.Enum.CssClass.PatternFlipSelf);
                        }
                    }
                    _setStartsFlipped() {
                        if (this.isBuilt === false) {
                            this._toggleClasses();
                        }
                    }
                    _toggleClasses() {
                        if (this.configs.IsFlipped) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, FlipContent_1.Enum.CssClass.PatternIsFlipped);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, FlipContent_1.Enum.CssClass.PatternIsFlipped);
                        }
                    }
                    _triggerPlatformEvent() {
                        this.triggerPlatformEventCallback(this._platformEventOnToggle, this.configs.IsFlipped);
                    }
                    _updateA11yProperties() {
                        if (this.configs.FlipSelf) {
                            OSUI.Helper.A11Y.AriaAtomicTrue(this.selfElement);
                            OSUI.Helper.A11Y.TabIndexTrue(this.selfElement);
                        }
                        else {
                            OSUI.Helper.A11Y.AriaAtomicFalse(this.selfElement);
                            OSUI.Helper.A11Y.TabIndexFalse(this.selfElement);
                        }
                    }
                    setA11YProperties() {
                        if (this.configs.FlipSelf) {
                            OSUI.Helper.A11Y.AriaAtomicTrue(this.selfElement);
                            OSUI.Helper.A11Y.TabIndexTrue(this.selfElement);
                            OSUI.Helper.A11Y.RoleButton(this.selfElement);
                            OSUI.Helper.A11Y.AriaLivePolite(this.selfElement);
                            OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                        }
                    }
                    setCallbacks() {
                        this._eventKeydown = this._keydownCallback.bind(this);
                        this._eventClick = this.toggleFlipContent.bind(this);
                        this._setEventHandlers();
                    }
                    setHtmlElements() {
                        this._flipWrapperElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, FlipContent_1.Enum.CssClass.PatternContainer);
                    }
                    unsetCallbacks() {
                        this._removeEvents();
                        this._eventKeydown = undefined;
                        this._eventClick = undefined;
                    }
                    unsetHtmlElements() {
                        this._flipWrapperElement = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this.setCallbacks();
                        this._toggleClasses();
                        this.setA11YProperties();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case FlipContent_1.Enum.Properties.IsFlipped:
                                    this._setStartsFlipped();
                                    break;
                                case FlipContent_1.Enum.Properties.FlipSelf:
                                    this._updateA11yProperties();
                                    this._setEventHandlers();
                                    break;
                            }
                        }
                    }
                    dispose() {
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case FlipContent_1.Enum.Events.OnToggle:
                                if (this._platformEventOnToggle === undefined) {
                                    this._platformEventOnToggle = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    showBackContent() {
                        if (this.configs.IsFlipped === false) {
                            this.toggleFlipContent();
                        }
                    }
                    showFrontContent() {
                        if (this.configs.IsFlipped) {
                            this.toggleFlipContent();
                        }
                    }
                    toggleFlipContent() {
                        this.configs.IsFlipped = !this.configs.IsFlipped;
                        OSUI.Helper.AsyncInvocation(this._toggleClasses.bind(this));
                        this._triggerPlatformEvent();
                    }
                }
                FlipContent_1.FlipContent = FlipContent;
            })(FlipContent = Patterns.FlipContent || (Patterns.FlipContent = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var FlipContent;
            (function (FlipContent) {
                class FlipContentConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateCanChange(isBuilt, key) {
                        if (isBuilt) {
                            return key !== FlipContent.Enum.Properties.IsFlipped;
                        }
                        return true;
                    }
                }
                FlipContent.FlipContentConfig = FlipContentConfig;
            })(FlipContent = Patterns.FlipContent || (Patterns.FlipContent = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Gallery;
            (function (Gallery) {
                var Enum;
                (function (Enum) {
                    let CssVariables;
                    (function (CssVariables) {
                        CssVariables["PatternItemsDesktop"] = "--gallery-desktop-items";
                        CssVariables["PatternItemsTablet"] = "--gallery-tablet-items";
                        CssVariables["PatternItemsPhone"] = "--gallery-phone-items";
                        CssVariables["PatternItemsGap"] = "--gallery-gap";
                        CssVariables["PatternListItemsDesktop"] = "--gallery-list-desktop-items";
                        CssVariables["PatternListItemsTablet"] = "--gallery-list-tablet-items";
                        CssVariables["PatternListItemsPhone"] = "--gallery-list-phone-items";
                    })(CssVariables = Enum.CssVariables || (Enum.CssVariables = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["ItemsGap"] = "ItemsGap";
                        Properties["RowItemsDesktop"] = "RowItemsDesktop";
                        Properties["RowItemsPhone"] = "RowItemsPhone";
                        Properties["RowItemsTablet"] = "RowItemsTablet";
                        Properties[Properties["MinRowItemsAllowed"] = 1] = "MinRowItemsAllowed";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = Gallery.Enum || (Gallery.Enum = {}));
            })(Gallery = Patterns.Gallery || (Patterns.Gallery = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Gallery;
            (function (Gallery_1) {
                class Gallery extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Gallery_1.GalleryConfig(configs));
                    }
                    _setItemsGap() {
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Gallery_1.Enum.CssVariables.PatternItemsGap, `var(--space-${this.configs.ItemsGap})`);
                    }
                    _setRowItemsDesktop() {
                        if (this.configs.RowItemsDesktop < Gallery_1.Enum.Properties.MinRowItemsAllowed) {
                            this.configs.RowItemsDesktop = Gallery_1.Enum.Properties.MinRowItemsAllowed;
                            console.warn(`${OSUI.GlobalEnum.PatternName.Gallery} (${this.widgetId}): The value of the ${Gallery_1.Enum.Properties.RowItemsDesktop} property is less than supported (${Gallery_1.Enum.Properties.MinRowItemsAllowed}). To ensure the correct behaviour, set a value greater than ${OSUI.Constants.ZeroValue}.`);
                        }
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Gallery_1.Enum.CssVariables.PatternItemsDesktop, this.configs.RowItemsDesktop);
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Gallery_1.Enum.CssVariables.PatternListItemsDesktop, this.configs.RowItemsDesktop);
                    }
                    _setRowItemsPhone() {
                        if (this.configs.RowItemsPhone < Gallery_1.Enum.Properties.MinRowItemsAllowed) {
                            this.configs.RowItemsPhone = Gallery_1.Enum.Properties.MinRowItemsAllowed;
                            console.warn(`${OSUI.GlobalEnum.PatternName.Gallery} (${this.widgetId}): The value of the ${Gallery_1.Enum.Properties.RowItemsPhone} property is less than supported (${Gallery_1.Enum.Properties.MinRowItemsAllowed}). To ensure the correct behaviour, set a value greater than ${OSUI.Constants.ZeroValue}.`);
                        }
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Gallery_1.Enum.CssVariables.PatternItemsPhone, this.configs.RowItemsPhone);
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Gallery_1.Enum.CssVariables.PatternListItemsPhone, this.configs.RowItemsPhone);
                    }
                    _setRowItemsTablet() {
                        if (this.configs.RowItemsTablet < Gallery_1.Enum.Properties.MinRowItemsAllowed) {
                            this.configs.RowItemsTablet = Gallery_1.Enum.Properties.MinRowItemsAllowed;
                            console.warn(`${OSUI.GlobalEnum.PatternName.Gallery} (${this.widgetId}): The value of the ${Gallery_1.Enum.Properties.RowItemsTablet} property is less than supported (${Gallery_1.Enum.Properties.MinRowItemsAllowed}). To ensure the correct behaviour, set a value greater than ${OSUI.Constants.ZeroValue}.`);
                        }
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Gallery_1.Enum.CssVariables.PatternItemsTablet, this.configs.RowItemsTablet);
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Gallery_1.Enum.CssVariables.PatternListItemsTablet, this.configs.RowItemsTablet);
                    }
                    setA11YProperties() {
                        console.warn(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    build() {
                        super.build();
                        this._setRowItemsDesktop();
                        this._setRowItemsTablet();
                        this._setRowItemsPhone();
                        this._setItemsGap();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case Gallery_1.Enum.Properties.RowItemsDesktop:
                                    this._setRowItemsDesktop();
                                    break;
                                case Gallery_1.Enum.Properties.RowItemsTablet:
                                    this._setRowItemsTablet();
                                    break;
                                case Gallery_1.Enum.Properties.RowItemsPhone:
                                    this._setRowItemsPhone();
                                    break;
                                case Gallery_1.Enum.Properties.ItemsGap:
                                    this._setItemsGap();
                                    break;
                            }
                        }
                    }
                }
                Gallery_1.Gallery = Gallery;
            })(Gallery = Patterns.Gallery || (Patterns.Gallery = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Gallery;
            (function (Gallery) {
                class GalleryConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                Gallery.GalleryConfig = GalleryConfig;
            })(Gallery = Patterns.Gallery || (Patterns.Gallery = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var InlineSvg;
            (function (InlineSvg) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Pattern"] = "osui-inline-svg";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["SVGCode"] = "SVGCode";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = InlineSvg.Enum || (InlineSvg.Enum = {}));
            })(InlineSvg = Patterns.InlineSvg || (Patterns.InlineSvg = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var InlineSvg;
            (function (InlineSvg_1) {
                class InlineSvg extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new InlineSvg_1.InlineSvgConfig(configs));
                    }
                    _setSvgCode() {
                        if (this.configs.SVGCode !== '' && !OSUI.Helper.SVG.IsValid(this.configs.SVGCode)) {
                            this.selfElement.innerHTML = '';
                            console.error('Please provide a valid SVGCode.');
                        }
                        else {
                            this.selfElement.innerHTML = this.configs.SVGCode;
                        }
                    }
                    setA11YProperties() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    build() {
                        super.build();
                        this._setSvgCode();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            if (propertyName === InlineSvg_1.Enum.Properties.SVGCode) {
                                this._setSvgCode();
                            }
                        }
                    }
                    dispose() {
                        if (this.isBuilt) {
                            super.dispose();
                        }
                    }
                }
                InlineSvg_1.InlineSvg = InlineSvg;
            })(InlineSvg = Patterns.InlineSvg || (Patterns.InlineSvg = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var InlineSvg;
            (function (InlineSvg) {
                class InlineSvgConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case InlineSvg.Enum.Properties.SVGCode:
                                validatedValue = super.validateString(value, OSFramework.OSUI.Constants.EmptyString);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                InlineSvg.InlineSvgConfig = InlineSvgConfig;
            })(InlineSvg = Patterns.InlineSvg || (Patterns.InlineSvg = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var MonthPicker;
            (function (MonthPicker) {
                class AbstractMonthPicker extends Patterns.AbstractProviderPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                    }
                }
                MonthPicker.AbstractMonthPicker = AbstractMonthPicker;
            })(MonthPicker = Patterns.MonthPicker || (Patterns.MonthPicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var MonthPicker;
            (function (MonthPicker) {
                class AbstractMonthPickerConfig extends Patterns.AbstractProviderConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case MonthPicker.Enum.Properties.DateFormat:
                                validatedValue = this.validateString(value, 'MM/YYYY');
                                break;
                            case MonthPicker.Enum.Properties.InitialMonth:
                            case MonthPicker.Enum.Properties.MinMonth:
                            case MonthPicker.Enum.Properties.MaxMonth:
                                validatedValue = value;
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                MonthPicker.AbstractMonthPickerConfig = AbstractMonthPickerConfig;
            })(MonthPicker = Patterns.MonthPicker || (Patterns.MonthPicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var MonthPicker;
            (function (MonthPicker) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Dropdown"] = "osui-monthpicker__dropdown";
                        CssClass["Pattern"] = "osui-monthpicker";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Events;
                    (function (Events) {
                        Events["OnSelected"] = "OnSelected";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["DateFormat"] = "DateFormat";
                        Properties["InitialMonth"] = "InitialMonth";
                        Properties["MinMonth"] = "MinMonth";
                        Properties["MaxMonth"] = "MaxMonth";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let Provider;
                    (function (Provider) {
                        Provider["Flatpickr"] = "flatpickr";
                    })(Provider = Enum.Provider || (Enum.Provider = {}));
                })(Enum = MonthPicker.Enum || (MonthPicker.Enum = {}));
            })(MonthPicker = Patterns.MonthPicker || (Patterns.MonthPicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var MonthPicker;
            (function (MonthPicker) {
                var Factory;
                (function (Factory) {
                    function NewMonthPicker(monthPickerId, provider, configs) {
                        let _monthPickerItem = null;
                        if (provider === MonthPicker.Enum.Provider.Flatpickr) {
                            _monthPickerItem = new Providers.OSUI.MonthPicker.Flatpickr.OSUIFlatpickrMonth(monthPickerId, JSON.parse(configs));
                        }
                        else {
                            throw new Error(`There is no ${OSUI.GlobalEnum.PatternName.MonthPicker} of the ${provider} provider`);
                        }
                        return _monthPickerItem;
                    }
                    Factory.NewMonthPicker = NewMonthPicker;
                })(Factory = MonthPicker.Factory || (MonthPicker.Factory = {}));
            })(MonthPicker = Patterns.MonthPicker || (Patterns.MonthPicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Notification;
            (function (Notification) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Pattern"] = "osui-notification";
                        CssClass["PatternIsOpen"] = "osui-notification--is-open";
                        CssClass["PatternPosition"] = "osui-notification--is-";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let CssProperty;
                    (function (CssProperty) {
                        CssProperty["Width"] = "--notification-width";
                    })(CssProperty = Enum.CssProperty || (Enum.CssProperty = {}));
                    let Defaults;
                    (function (Defaults) {
                        Defaults["DefaultPosition"] = "top";
                        Defaults["DefaultWidth"] = "370px";
                    })(Defaults = Enum.Defaults || (Enum.Defaults = {}));
                    let Events;
                    (function (Events) {
                        Events["OnToggle"] = "OnToggle";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["CloseAfterTime"] = "CloseAfterTime";
                        Properties["InteractToClose"] = "InteractToClose";
                        Properties["NeedsSwipes"] = "NeedsSwipes";
                        Properties["Position"] = "Position";
                        Properties["StartsOpen"] = "StartsOpen";
                        Properties["Width"] = "Width";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = Notification.Enum || (Notification.Enum = {}));
            })(Notification = Patterns.Notification || (Patterns.Notification = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Notification;
            (function (Notification_1) {
                class Notification extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Notification_1.NotificationConfig(configs));
                        this.configs.Width = this.configs.Width !== '' ? this.configs.Width : Notification_1.Enum.Defaults.DefaultWidth;
                        this.configs.Position =
                            this.configs.Position !== '' ? this.configs.Position : Notification_1.Enum.Defaults.DefaultPosition;
                        this._isOpen = this.configs.StartsOpen;
                    }
                    _autoCloseNotification() {
                        this._autoCloseTimeoutId = OSUI.Helper.ApplySetTimeOut(() => {
                            this.hide();
                        }, this.configs.CloseAfterTime);
                    }
                    _clickCallback(e) {
                        e.preventDefault();
                        this.hide();
                    }
                    _handleFocusBehavior() {
                        const opts = {
                            focusTargetElement: this._parentSelf,
                        };
                        this._focusTrapInstance = new OSUI.Behaviors.FocusTrap(opts);
                        this._focusManagerInstance = new OSUI.Behaviors.FocusManager();
                    }
                    _handleGestureEvents() {
                        if (OSUI.Helper.DeviceInfo.IsNative) {
                            this._gestureEventInstance = new OSUI.Event.GestureEvent.SwipeEvent(this.selfElement);
                            this.setGestureEvents(this.onSwipeBottom.bind(this), this.onSwipeLeft.bind(this), this.onSwipeRight.bind(this), this.onSwipeUp.bind(this));
                        }
                    }
                    _hideNotification() {
                        this._isOpen = false;
                        this._focusTrapInstance.disableForA11y();
                        OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Notification_1.Enum.CssClass.PatternIsOpen);
                        this._triggerOnToggleEvent(this._isOpen);
                        this._updateA11yProperties();
                        this.selfElement.blur();
                        this._focusManagerInstance.setFocusToStoredElement();
                        if (OSUI.Helper.DeviceInfo.IsNative === false && this.configs.InteractToClose) {
                            this.selfElement.removeEventListener(this._eventType, this._eventOnClick);
                            this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeypress);
                        }
                    }
                    _keypressCallback(e) {
                        const isEscapedPressed = e.key === OSUI.GlobalEnum.Keycodes.Escape;
                        if (isEscapedPressed && this._isOpen) {
                            this.hide();
                        }
                    }
                    _removeEvents() {
                        this.selfElement.removeEventListener(this._eventType, this._eventOnClick);
                        this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeypress);
                    }
                    _showNotification() {
                        this._focusManagerInstance.storeLastFocusedElement();
                        this._isOpen = true;
                        this._focusTrapInstance.enableForA11y();
                        OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Notification_1.Enum.CssClass.PatternIsOpen);
                        this._triggerOnToggleEvent(this._isOpen);
                        this._updateA11yProperties();
                        if (OSUI.Helper.DeviceInfo.IsNative === false && this.configs.InteractToClose) {
                            this.selfElement.addEventListener(this._eventType, this._eventOnClick);
                        }
                        this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeypress);
                        this.selfElement.focus();
                        if (this.configs.CloseAfterTime > 0) {
                            this._autoCloseNotification();
                        }
                    }
                    _triggerOnToggleEvent(isOpen) {
                        this.triggerPlatformEventCallback(this._platformEventOnToggle, isOpen);
                    }
                    _updateA11yProperties() {
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.A11YAttributes.Aria.Hidden, (!this._isOpen).toString());
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.A11YAttributes.TabIndex, this._isOpen
                            ? OSUI.Constants.A11YAttributes.States.TabIndexShow
                            : OSUI.Constants.A11YAttributes.States.TabIndexHidden);
                        OSUI.Helper.A11Y.SetElementsTabIndex(this._isOpen, this._focusTrapInstance.focusableElements);
                    }
                    _updateCloseAfterTime(value) {
                        this.configs.CloseAfterTime = value;
                        if (this._isOpen) {
                            this._autoCloseNotification();
                        }
                    }
                    _updateInteractToClose(value) {
                        if (this.configs.InteractToClose !== value) {
                            this.configs.InteractToClose = value;
                            if (OSUI.Helper.DeviceInfo.IsNative === false) {
                                if (this.configs.InteractToClose) {
                                    this.selfElement.addEventListener(this._eventType, this._eventOnClick);
                                }
                                else {
                                    this.selfElement.removeEventListener(this._eventType, this._eventOnClick);
                                }
                            }
                        }
                    }
                    _updatePosition(position) {
                        if (this.configs.Position !== position) {
                            if (this.configs.Position !== '') {
                                OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Notification_1.Enum.CssClass.PatternPosition + position);
                            }
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Notification_1.Enum.CssClass.PatternPosition + this.configs.Position);
                        }
                    }
                    _updateWidth(width) {
                        this.configs.Width = width;
                        if (width !== '') {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Notification_1.Enum.CssProperty.Width, width);
                            this.configs.Width = width;
                        }
                    }
                    clearTimeouts() {
                        if (this.configs.CloseAfterTime > 0) {
                            clearTimeout(this._autoCloseTimeoutId);
                        }
                    }
                    setA11YProperties() {
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.AlertDialog);
                        this._updateA11yProperties();
                    }
                    setCallbacks() {
                        this._eventOnClick = this._clickCallback.bind(this);
                        this._eventOnKeypress = this._keypressCallback.bind(this);
                    }
                    setHtmlElements() {
                        this._parentSelf = OSUI.Helper.Dom.GetElementById(this.widgetId);
                    }
                    setInitialStates() {
                        if (OSUI.Helper.DeviceInfo.IsTouch) {
                            this._eventType = OSUI.GlobalEnum.HTMLEvent.TouchStart;
                        }
                        else {
                            this._eventType = OSUI.GlobalEnum.HTMLEvent.Click;
                        }
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Notification_1.Enum.CssProperty.Width, this.configs.Width);
                        OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Notification_1.Enum.CssClass.PatternPosition + this.configs.Position);
                        if (this._isOpen) {
                            this._showNotification();
                        }
                        if (this.configs.CloseAfterTime > 0 && this._isOpen) {
                            this._autoCloseNotification();
                        }
                    }
                    unsetCallbacks() {
                        if (OSUI.Helper.DeviceInfo.IsNative === false && this.configs.InteractToClose) {
                            this._removeEvents();
                            this._eventOnClick = undefined;
                            this._eventOnKeypress = undefined;
                        }
                    }
                    unsetHtmlElements() {
                        this._parentSelf = undefined;
                        this._platformEventOnToggle = undefined;
                    }
                    build() {
                        super.build();
                        OSUI.Helper.AsyncInvocation(this.setInitialStates.bind(this));
                        this.setCallbacks();
                        this.setHtmlElements();
                        this._handleFocusBehavior();
                        this.setA11YProperties();
                        this._handleGestureEvents();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        const _oldNotificationPosition = this.configs.Position;
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case Notification_1.Enum.Properties.InteractToClose:
                                    this._updateInteractToClose(propertyValue);
                                    break;
                                case Notification_1.Enum.Properties.CloseAfterTime:
                                    this._updateCloseAfterTime(propertyValue);
                                    break;
                                case Notification_1.Enum.Properties.StartsOpen:
                                    console.warn(`${OSUI.GlobalEnum.PatternName.Notification} (${this.widgetId}): changes to ${Notification_1.Enum.Properties.StartsOpen} parameter do not affect the ${OSUI.GlobalEnum.PatternName.Notification}. Use the client actions 'NotificationShow' and 'NotificationHide' to affect the ${OSUI.GlobalEnum.PatternName.Notification}.`);
                                    break;
                                case Notification_1.Enum.Properties.Position:
                                    this._updatePosition(_oldNotificationPosition);
                                    break;
                                case Notification_1.Enum.Properties.Width:
                                    this._updateWidth(propertyValue);
                                    break;
                                case OSUI.GlobalEnum.CommonPatternsProperties.ExtendedClass:
                                    OSUI.Helper.Dom.Styles.ExtendedClass(this.selfElement, this.configs.ExtendedClass, propertyValue);
                                    break;
                            }
                        }
                    }
                    dispose() {
                        if (this.isBuilt) {
                            this.unsetCallbacks();
                            this.clearTimeouts();
                            this.unsetHtmlElements();
                            this._focusTrapInstance.dispose();
                            if (this._hasGestureEvents) {
                                this.removeGestureEvents();
                            }
                            super.dispose();
                        }
                    }
                    hide() {
                        if (this._isOpen) {
                            this._hideNotification();
                            this.clearTimeouts();
                        }
                    }
                    onSwipeBottom() {
                        if (this.configs.Position === OSUI.GlobalEnum.Position.Bottom ||
                            this.configs.Position === OSUI.GlobalEnum.Position.BottomLeft ||
                            this.configs.Position === OSUI.GlobalEnum.Position.BottomRight ||
                            this.configs.Position === OSUI.GlobalEnum.Position.Center) {
                            this.hide();
                        }
                    }
                    onSwipeLeft() {
                        if (this.configs.Position === OSUI.GlobalEnum.Position.Left ||
                            this.configs.Position === OSUI.GlobalEnum.Position.BottomLeft ||
                            this.configs.Position === OSUI.GlobalEnum.Position.TopLeft) {
                            this.hide();
                        }
                    }
                    onSwipeRight() {
                        if (this.configs.Position === OSUI.GlobalEnum.Position.Right ||
                            this.configs.Position === OSUI.GlobalEnum.Position.BottomRight ||
                            this.configs.Position === OSUI.GlobalEnum.Position.TopRight) {
                            this.hide();
                        }
                    }
                    onSwipeUp() {
                        this.hide();
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Patterns.Notification.Enum.Events.OnToggle:
                                if (this._platformEventOnToggle === undefined) {
                                    this._platformEventOnToggle = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    removeGestureEvents() {
                        if (this._gestureEventInstance !== undefined) {
                            this._gestureEventInstance.unsetTouchEvents();
                            this._hasGestureEvents = false;
                            this._gestureEventInstance = undefined;
                        }
                    }
                    setGestureEvents(onSwipeDownCallback, onSwipeLeftCallback, onSwipeRightCallback, onSwipeUpCallback) {
                        this._gestureEventInstance.setSwipeEvents(onSwipeDownCallback, onSwipeLeftCallback, onSwipeRightCallback, onSwipeUpCallback);
                        this._hasGestureEvents = true;
                    }
                    show() {
                        if (this._isOpen === false) {
                            this._showNotification();
                        }
                    }
                    get gestureEventInstance() {
                        return this._gestureEventInstance;
                    }
                    get hasGestureEvents() {
                        return this._hasGestureEvents;
                    }
                }
                Notification_1.Notification = Notification;
            })(Notification = Patterns.Notification || (Patterns.Notification = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Notification;
            (function (Notification) {
                class NotificationConfig extends Patterns.AbstractConfiguration {
                    validateCanChange(isBuilt, key) {
                        if (isBuilt) {
                            return key !== Notification.Enum.Properties.StartsOpen;
                        }
                        return true;
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case Notification.Enum.Properties.InteractToClose:
                                validatedValue = this.validateBoolean(value, true);
                                break;
                            case Notification.Enum.Properties.NeedsSwipes:
                            case Notification.Enum.Properties.StartsOpen:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            case Notification.Enum.Properties.Position:
                                validatedValue = this.validateString(value, Notification.Enum.Defaults.DefaultPosition);
                                break;
                            case Notification.Enum.Properties.Width:
                                validatedValue = this.validateString(value, Notification.Enum.Defaults.DefaultWidth);
                                break;
                            case Notification.Enum.Properties.CloseAfterTime:
                                validatedValue = this.validateNumber(value, undefined);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                Notification.NotificationConfig = NotificationConfig;
            })(Notification = Patterns.Notification || (Patterns.Notification = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var OverflowMenu;
            (function (OverflowMenu) {
                var Enum;
                (function (Enum) {
                    let AriaLabel;
                    (function (AriaLabel) {
                        AriaLabel["Trigger"] = "Trigger the balloon";
                    })(AriaLabel = Enum.AriaLabel || (Enum.AriaLabel = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Open"] = "osui-overflow-menu--is-open";
                        CssClass["Trigger"] = "osui-overflow-menu__trigger";
                        CssClass["Balloon"] = "osui-overflow-menu__balloon";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let CssCustomProperties;
                    (function (CssCustomProperties) {
                        CssCustomProperties["Shape"] = "--osui-overflow-menu-shape";
                    })(CssCustomProperties = Enum.CssCustomProperties || (Enum.CssCustomProperties = {}));
                    let Events;
                    (function (Events) {
                        Events["OnMenuToggle"] = "OnToggle";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["Position"] = "Position";
                        Properties["Shape"] = "Shape";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = OverflowMenu.Enum || (OverflowMenu.Enum = {}));
            })(OverflowMenu = Patterns.OverflowMenu || (Patterns.OverflowMenu = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var OverflowMenu;
            (function (OverflowMenu_1) {
                class OverflowMenu extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new OverflowMenu_1.OverflowMenuConfig(configs));
                        this._isDisabled = false;
                        this._isOpenedByApi = false;
                        this.isOpen = false;
                    }
                    _balloonOnToggleCallback(_args, e) {
                        if (e.detail.balloonElem === this._balloonElem) {
                            this._togglePattern(e.detail.isOpen);
                        }
                    }
                    _onClickCallback() {
                        if (this._balloonFeature.isOpen) {
                            this.close();
                        }
                        else {
                            this._isOpenedByApi = false;
                            this.open(this._isOpenedByApi);
                        }
                    }
                    _onKeydownCallback(event) {
                        if (!this._balloonFeature.isOpen &&
                            (event.key === OSUI.GlobalEnum.Keycodes.ArrowDown || event.key === OSUI.GlobalEnum.Keycodes.ArrowUp)) {
                            this._isOpenedByApi = false;
                            this.open(this._isOpenedByApi, event.key);
                            event.preventDefault();
                        }
                    }
                    _setBalloonFeature() {
                        this.setBalloonOptions();
                        this._balloonFeature = new OSFramework.OSUI.Feature.Balloon.Balloon(this, this._balloonElem, this.balloonOptions);
                    }
                    _setOverflowMenuShape(shape) {
                        if (shape !== undefined) {
                            this.configs.Shape = shape;
                        }
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, OverflowMenu_1.Enum.CssCustomProperties.Shape, `var(--border-radius-${this.configs.Shape})`);
                    }
                    _togglePattern(isOpen) {
                        if (isOpen) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, OverflowMenu_1.Enum.CssClass.Open);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, OverflowMenu_1.Enum.CssClass.Open);
                        }
                        this.isOpen = isOpen;
                        this.setA11YProperties();
                        this._triggerOnToggleEvent();
                    }
                    _triggerOnToggleEvent() {
                        this.triggerPlatformEventCallback(this._platformEventOnToggle, this.isOpen);
                    }
                    removeEventListeners() {
                        this._triggerElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        this._triggerElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeydown);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BalloonOnToggle, this._eventBalloonOnToggle);
                    }
                    setA11YProperties() {
                        if (this.isBuilt === false) {
                            OSUI.Helper.A11Y.AriaHasPopup(this._triggerElem, OSUI.Constants.A11YAttributes.Aria.Haspopup.value.Menu);
                            OSUI.Helper.A11Y.AriaControls(this._triggerElem, this._balloonElem.id);
                            OSUI.Helper.A11Y.RoleMenu(this._balloonElem);
                            this.setTriggerAriaLabel(OverflowMenu_1.Enum.AriaLabel.Trigger);
                            OSUI.Helper.Dom.Attribute.Set(this._triggerElem, OSUI.Constants.FocusTrapIgnoreAttr, true);
                            OSUI.Helper.Dom.Attribute.Set(this._triggerElem, OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                        }
                        OSUI.Helper.A11Y.AriaExpanded(this._triggerElem, this.isOpen.toString());
                    }
                    setCallbacks() {
                        this._eventBalloonOnToggle = this._balloonOnToggleCallback.bind(this);
                        this._eventOnClick = this._onClickCallback.bind(this);
                        this._eventOnKeydown = this._onKeydownCallback.bind(this);
                    }
                    setEventListeners() {
                        this._triggerElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        this._triggerElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeydown);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BalloonOnToggle, this._eventBalloonOnToggle);
                    }
                    setHtmlElements() {
                        this._triggerElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, OverflowMenu_1.Enum.CssClass.Trigger);
                        this._balloonElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, OverflowMenu_1.Enum.CssClass.Balloon);
                    }
                    unsetCallbacks() {
                        this._eventBalloonOnToggle = undefined;
                        this._eventOnClick = undefined;
                    }
                    unsetHtmlElements() {
                        this._balloonElem = undefined;
                        this._triggerElem = undefined;
                        this._balloonFeature = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this.setA11YProperties();
                        this._setBalloonFeature();
                        this._setOverflowMenuShape();
                        this.setCallbacks();
                        this.setEventListeners();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case OverflowMenu_1.Enum.Properties.Position:
                                    this._balloonFeature.updatePositionOption(propertyValue);
                                    break;
                                case OverflowMenu_1.Enum.Properties.Shape:
                                    this._setOverflowMenuShape(propertyValue);
                                    this._balloonFeature.setBalloonShape(propertyValue);
                                    break;
                            }
                        }
                    }
                    close() {
                        if (this._balloonFeature.isOpen) {
                            this._balloonFeature.close();
                        }
                    }
                    disable() {
                        this._isDisabled = true;
                        this.close();
                        OSUI.Helper.Dom.Attribute.Set(this._triggerElem, OSUI.GlobalEnum.HTMLAttributes.Disabled, OSFramework.OSUI.Constants.EmptyString);
                    }
                    dispose() {
                        var _a;
                        (_a = this._balloonFeature) === null || _a === void 0 ? void 0 : _a.dispose();
                        this.removeEventListeners();
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    enable() {
                        this._isDisabled = false;
                        OSUI.Helper.Dom.Attribute.Remove(this._triggerElem, OSUI.GlobalEnum.HTMLAttributes.Disabled);
                    }
                    open(isOpenedByApi, keyPressed) {
                        if (this._balloonFeature.isOpen === false && this._isDisabled === false) {
                            this._isOpenedByApi = isOpenedByApi;
                            this._balloonFeature.open(this._isOpenedByApi, keyPressed);
                        }
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Patterns.OverflowMenu.Enum.Events.OnMenuToggle:
                                if (this._platformEventOnToggle === undefined) {
                                    this._platformEventOnToggle = callback;
                                }
                                else {
                                    console.warn(`The ${OSUI.GlobalEnum.PatternName.OverflowMenu} already has the toggle callback set.`);
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    setBalloonOptions(balloonOptions) {
                        if (balloonOptions !== undefined) {
                            this.balloonOptions = balloonOptions;
                        }
                        else {
                            const _focusOptions = {
                                useFocus: true,
                            };
                            this.balloonOptions = {
                                alignment: OSUI.GlobalEnum.FloatingAlignment.Start,
                                allowedPlacements: [
                                    OSUI.GlobalEnum.FloatingPosition.BottomStart,
                                    OSUI.GlobalEnum.FloatingPosition.BottomEnd,
                                    OSUI.GlobalEnum.FloatingPosition.TopStart,
                                    OSUI.GlobalEnum.FloatingPosition.TopEnd,
                                ],
                                anchorElem: this._triggerElem,
                                position: this.configs.Position,
                                shape: this.configs.Shape,
                                focusOptions: _focusOptions,
                            };
                        }
                    }
                    setTriggerAriaLabel(ariaLabelText) {
                        if (ariaLabelText !== OSUI.Constants.EmptyString) {
                            this._ariaLabelTrigger = ariaLabelText;
                            OSUI.Helper.A11Y.AriaLabel(this._triggerElem, this._ariaLabelTrigger);
                        }
                    }
                }
                OverflowMenu_1.OverflowMenu = OverflowMenu;
            })(OverflowMenu = Patterns.OverflowMenu || (Patterns.OverflowMenu = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var OverflowMenu;
            (function (OverflowMenu) {
                class OverflowMenuConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case OverflowMenu.Enum.Properties.Shape:
                                validatedValue = this.validateInRange(value, OSUI.GlobalEnum.ShapeTypes.SoftRounded, OSUI.GlobalEnum.ShapeTypes.Sharp, OSUI.GlobalEnum.ShapeTypes.Rounded);
                                break;
                            case OverflowMenu.Enum.Properties.Position:
                                validatedValue = this.validateInRange(value, OSUI.GlobalEnum.FloatingPosition.Auto, OSUI.GlobalEnum.FloatingPosition.Bottom, OSUI.GlobalEnum.FloatingPosition.BottomEnd, OSUI.GlobalEnum.FloatingPosition.BottomStart, OSUI.GlobalEnum.FloatingPosition.Center, OSUI.GlobalEnum.FloatingPosition.Left, OSUI.GlobalEnum.FloatingPosition.LeftEnd, OSUI.GlobalEnum.FloatingPosition.LeftStart, OSUI.GlobalEnum.FloatingPosition.Right, OSUI.GlobalEnum.FloatingPosition.RightEnd, OSUI.GlobalEnum.FloatingPosition.RightStart, OSUI.GlobalEnum.FloatingPosition.Top, OSUI.GlobalEnum.FloatingPosition.TopEnd, OSUI.GlobalEnum.FloatingPosition.TopStart);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                OverflowMenu.OverflowMenuConfig = OverflowMenuConfig;
            })(OverflowMenu = Patterns.OverflowMenu || (Patterns.OverflowMenu = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Progress;
            (function (Progress) {
                class AbstractProgress extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                    }
                    _animateEntranceEnd() {
                        this.progressElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TransitionEnd, this._eventAnimateEntranceEnd);
                        OSUI.Helper.Dom.Styles.RemoveClass(this.progressElem, Progress.ProgressEnum.CssClass.AddInitialAnimation);
                        OSUI.Helper.Dom.Styles.RemoveClass(this.progressElem, Progress.ProgressEnum.CssClass.AnimateProgressChange);
                    }
                    _setAccessibilityProps() {
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.A11YAttributes.TabIndex, '0');
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.A11YAttributes.Role.AttrName, OSUI.Constants.A11YAttributes.Role.Progressbar);
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.A11YAttributes.Aria.ValueMin, Progress.ProgressEnum.Properties.MinProgressValue);
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.A11YAttributes.Aria.ValueMax, Progress.ProgressEnum.Properties.MaxProgressValue);
                    }
                    animateInitial() {
                        OSUI.Helper.Dom.Styles.AddClass(this.progressElem, Progress.ProgressEnum.CssClass.AddInitialAnimation);
                        this.progressElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.TransitionEnd, this._eventAnimateEntranceEnd);
                    }
                    animateOnValueChange() {
                        OSUI.Helper.Dom.Styles.AddClass(this.progressElem, Progress.ProgressEnum.CssClass.AnimateProgressChange);
                        this.progressElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.TransitionEnd, this._eventAnimateEntranceEnd);
                    }
                    setCallbacks() {
                        this._eventAnimateEntranceEnd = this._animateEntranceEnd.bind(this);
                    }
                    unsetCallbacks() {
                        this._eventAnimateEntranceEnd = undefined;
                    }
                    unsetHtmlElements() {
                        this.progressElem = undefined;
                        this.contentElem = undefined;
                    }
                    updatedProgressValue() {
                        if (this.configs.Progress < Progress.ProgressEnum.Properties.MinProgressValue) {
                            this.configs.Progress = Progress.ProgressEnum.Properties.MinProgressValue;
                            console.warn(`The value of the Progress property on the '${this.widgetId}' ${this.progressType === Progress.ProgressEnum.ProgressTypes.Bar
                                ? OSUI.GlobalEnum.PatternName.ProgressBar
                                : OSUI.GlobalEnum.PatternName.ProgressCircle} can't be smaller than '${Progress.ProgressEnum.Properties.MinProgressValue}'.`);
                        }
                        if (this.configs.Progress > Progress.ProgressEnum.Properties.MaxProgressValue) {
                            this.configs.Progress = Progress.ProgressEnum.Properties.MaxProgressValue;
                            console.warn(`The value of the Progress property on the '${this.widgetId}' ${this.progressType === Progress.ProgressEnum.ProgressTypes.Bar
                                ? OSUI.GlobalEnum.PatternName.ProgressBar
                                : OSUI.GlobalEnum.PatternName.ProgressCircle} is higher than supported (${Progress.ProgressEnum.Properties.MaxProgressValue}).`);
                        }
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, 'aria-valuenow', this.configs.Progress.toString());
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.ProgressValue, this.configs.Progress.toString() + OSUI.GlobalEnum.Units.Percentage);
                    }
                    build() {
                        super.build();
                        this._setAccessibilityProps();
                    }
                    progressApplyGradient(gradientType, colors) {
                        this.gradientLength = Object.keys(colors).length;
                        if (this.gradientLength < 2) {
                            throw Error(`Progress${this.progressType}(${this.uniqueId}): CSS ${gradientType} gradient needs at least two colors to work`);
                        }
                    }
                    resetProgressValue() {
                        this.setElementProgressValue(this.configs.InitialProgress);
                    }
                    setProgressValue(value) {
                        this.setElementProgressValue(value);
                    }
                }
                Progress.AbstractProgress = AbstractProgress;
            })(Progress = Patterns.Progress || (Patterns.Progress = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Progress;
            (function (Progress) {
                class ProgressConfiguration extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                Progress.ProgressConfiguration = ProgressConfiguration;
            })(Progress = Patterns.Progress || (Patterns.Progress = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Progress;
            (function (Progress) {
                var ProgressEnum;
                (function (ProgressEnum) {
                    let AriaLabel;
                    (function (AriaLabel) {
                        AriaLabel["Progress"] = "progress";
                    })(AriaLabel = ProgressEnum.AriaLabel || (ProgressEnum.AriaLabel = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["AddInitialAnimation"] = "animate-entrance";
                        CssClass["AnimateProgressChange"] = "animate-progress-change";
                        CssClass["Container"] = "osui-progress-bar__container";
                        CssClass["ProgressBarContent"] = "osui-progress-bar__content";
                        CssClass["ProgressCircleContent"] = "osui-progress-circle__content";
                    })(CssClass = ProgressEnum.CssClass || (ProgressEnum.CssClass = {}));
                    let InlineStyleProp;
                    (function (InlineStyleProp) {
                        InlineStyleProp["ProgressColor"] = "--progress-color";
                        InlineStyleProp["ProgressValue"] = "--progress-value";
                        InlineStyleProp["ProgressGradient"] = "--progress-gradient";
                        InlineStyleProp["ProgressInitialSpeed"] = "--progress-initial-speed";
                        InlineStyleProp["ProgressSpeed"] = "--progress-speed";
                        InlineStyleProp["Shape"] = "--shape";
                        InlineStyleProp["Thickness"] = "--thickness";
                        InlineStyleProp["TrailColor"] = "--trail-color";
                    })(InlineStyleProp = ProgressEnum.InlineStyleProp || (ProgressEnum.InlineStyleProp = {}));
                    let Gradient;
                    (function (Gradient) {
                        Gradient["LinearHorizontal"] = "LinearHorizontal";
                        Gradient["LinearVertical"] = "LinearVertical";
                        Gradient["LinearDiagonally"] = "LinearDiagonally";
                        Gradient["Radial"] = "Radial";
                    })(Gradient = ProgressEnum.Gradient || (ProgressEnum.Gradient = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["ExtendedClass"] = "ExtendedClass";
                        Properties[Properties["MaxProgressValue"] = 100] = "MaxProgressValue";
                        Properties[Properties["MinProgressValue"] = 0] = "MinProgressValue";
                        Properties["Progress"] = "Progress";
                        Properties["ProgressColor"] = "ProgressColor";
                        Properties["ProgressCircleSize"] = "ProgressCircleSize";
                        Properties["Shape"] = "Shape";
                        Properties["Thickness"] = "Thickness";
                        Properties["TrailColor"] = "TrailColor";
                    })(Properties = ProgressEnum.Properties || (ProgressEnum.Properties = {}));
                    let ProgressTypes;
                    (function (ProgressTypes) {
                        ProgressTypes["Bar"] = "Bar";
                        ProgressTypes["Circle"] = "Circle";
                    })(ProgressTypes = ProgressEnum.ProgressTypes || (ProgressEnum.ProgressTypes = {}));
                    let ShapeTypes;
                    (function (ShapeTypes) {
                        ShapeTypes["Round"] = "round";
                        ShapeTypes["Rounded"] = "rounded";
                        ShapeTypes["Soft"] = "soft";
                        ShapeTypes["Sharp"] = "sharp";
                    })(ShapeTypes = ProgressEnum.ShapeTypes || (ProgressEnum.ShapeTypes = {}));
                })(ProgressEnum = Progress.ProgressEnum || (Progress.ProgressEnum = {}));
            })(Progress = Patterns.Progress || (Patterns.Progress = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Progress;
            (function (Progress) {
                var Factory;
                (function (Factory) {
                    function NewProgress(progressId, type, configs) {
                        let _progressItem = null;
                        switch (type) {
                            case Progress.ProgressEnum.ProgressTypes.Circle:
                                _progressItem = new Patterns.Progress.Circle.Circle(progressId, JSON.parse(configs));
                                break;
                            case Progress.ProgressEnum.ProgressTypes.Bar:
                                _progressItem = new Patterns.Progress.Bar.Bar(progressId, JSON.parse(configs));
                                break;
                            default:
                                throw new Error(`There is any Progress of ${type} type`);
                        }
                        return _progressItem;
                    }
                    Factory.NewProgress = NewProgress;
                })(Factory = Progress.Factory || (Progress.Factory = {}));
            })(Progress = Patterns.Progress || (Patterns.Progress = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Progress;
            (function (Progress) {
                var Bar;
                (function (Bar_1) {
                    class Bar extends Progress.AbstractProgress {
                        constructor(uniqueId, configs) {
                            super(uniqueId, new Bar_1.ProgressBarConfig(configs));
                            this.progressType = Progress.ProgressEnum.ProgressTypes.Bar;
                        }
                        _setCssVariables() {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.Thickness, this.configs.Thickness + OSUI.GlobalEnum.Units.Pixel);
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.ProgressColor, OSUI.Helper.Dom.Styles.GetColorValueFromColorType(this.configs.ProgressColor));
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.Shape, OSUI.Helper.Dom.Styles.GetBorderRadiusValueFromShapeType(this.configs.Shape));
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.TrailColor, OSUI.Helper.Dom.Styles.GetColorValueFromColorType(this.configs.TrailColor));
                        }
                        _updateProgressColor() {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.ProgressColor, OSUI.Helper.Dom.Styles.GetColorValueFromColorType(this.configs.ProgressColor));
                        }
                        _updateShape() {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.Shape, OSUI.Helper.Dom.Styles.GetBorderRadiusValueFromShapeType(this.configs.Shape));
                        }
                        _updateThickness() {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.Thickness, this.configs.Thickness + OSUI.GlobalEnum.Units.Pixel);
                        }
                        _updateTrailColor() {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.TrailColor, OSUI.Helper.Dom.Styles.GetColorValueFromColorType(this.configs.TrailColor));
                        }
                        addInitialAnimation() {
                            if (this.configs.AnimateInitialProgress) {
                                this.animateInitial();
                            }
                            this.updatedProgressValue();
                        }
                        setA11YProperties() {
                            if (this.contentElem.innerHTML)
                                OSUI.Helper.A11Y.AriaLabelledBy(this.selfElement, this.contentElem.id);
                            else
                                OSUI.Helper.A11Y.AriaLabel(this.selfElement, Progress.ProgressEnum.AriaLabel.Progress);
                        }
                        setCallbacks() {
                            super.setCallbacks();
                        }
                        setElementProgressValue(value) {
                            this.configs.Progress = value;
                            this.animateOnValueChange();
                            this.updatedProgressValue();
                        }
                        setHtmlElements() {
                            this.progressElem = this.selfElement.querySelector(OSUI.Constants.Dot + Progress.ProgressEnum.CssClass.Container);
                            this.contentElem = this.selfElement.querySelector(OSUI.Constants.Dot + Progress.ProgressEnum.CssClass.ProgressBarContent);
                        }
                        unsetCallbacks() {
                            super.unsetCallbacks();
                        }
                        unsetHtmlElements() {
                            super.unsetHtmlElements();
                        }
                        build() {
                            super.build();
                            this.setHtmlElements();
                            this.setA11YProperties();
                            this._setCssVariables();
                            this.setCallbacks();
                            if (!this.isBuilt) {
                                OSUI.Helper.AsyncInvocation(this.addInitialAnimation.bind(this));
                            }
                            this.finishBuild();
                        }
                        changeProperty(propertyName, propertyValue) {
                            super.changeProperty(propertyName, propertyValue);
                            switch (propertyName) {
                                case Progress.ProgressEnum.Properties.Thickness:
                                    this._updateThickness();
                                    break;
                                case Progress.ProgressEnum.Properties.Progress:
                                    this.setElementProgressValue(propertyValue);
                                    break;
                                case Progress.ProgressEnum.Properties.ProgressColor:
                                    this._updateProgressColor();
                                    break;
                                case Progress.ProgressEnum.Properties.Shape:
                                    this._updateShape();
                                    break;
                                case Progress.ProgressEnum.Properties.TrailColor:
                                    this._updateTrailColor();
                                    break;
                            }
                        }
                        dispose() {
                            this.unsetHtmlElements();
                            this.unsetCallbacks();
                            super.dispose();
                        }
                        progressApplyGradient(gradientType, colors) {
                            super.progressApplyGradient(gradientType, colors);
                            let _gradient;
                            const _colorsString = [];
                            for (let i = 0; i < this.gradientLength; i++) {
                                _colorsString.push(`${colors[i].Color} ${colors[i].Percentage !== -1
                                    ? colors[i].Percentage + OSUI.GlobalEnum.Units.Percentage
                                    : OSUI.Constants.EmptyString}`);
                            }
                            switch (gradientType) {
                                case Progress.ProgressEnum.Gradient.LinearDiagonally:
                                    _gradient = `linear-gradient(135deg, ${_colorsString})`;
                                    break;
                                case Progress.ProgressEnum.Gradient.LinearHorizontal:
                                    _gradient = `linear-gradient(90deg, ${_colorsString})`;
                                    break;
                                case Progress.ProgressEnum.Gradient.LinearVertical:
                                    _gradient = `linear-gradient(180deg, ${_colorsString})`;
                                    break;
                                case Progress.ProgressEnum.Gradient.Radial:
                                    _gradient = `radial-gradient(${_colorsString})`;
                                    break;
                            }
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.ProgressGradient, _gradient);
                        }
                    }
                    Bar_1.Bar = Bar;
                })(Bar = Progress.Bar || (Progress.Bar = {}));
            })(Progress = Patterns.Progress || (Patterns.Progress = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Progress;
            (function (Progress) {
                var Bar;
                (function (Bar) {
                    class ProgressBarConfig extends Progress.ProgressConfiguration {
                        constructor(config) {
                            super(config);
                        }
                    }
                    Bar.ProgressBarConfig = ProgressBarConfig;
                })(Bar = Progress.Bar || (Progress.Bar = {}));
            })(Progress = Patterns.Progress || (Patterns.Progress = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Progress;
            (function (Progress) {
                var Circle;
                (function (Circle) {
                    var Enum;
                    (function (Enum) {
                        let CssClass;
                        (function (CssClass) {
                            CssClass["Progress"] = "osui-progress-circle__container__progress-path";
                            CssClass["SVG"] = "svg-wrapper";
                            CssClass["Trail"] = "osui-progress-circle__container__trail-path";
                        })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                        let InlineStyleProp;
                        (function (InlineStyleProp) {
                            InlineStyleProp["CircleRadius"] = "--radius";
                            InlineStyleProp["CircleSize"] = "--circle-size";
                            InlineStyleProp["GradientURL"] = "--progress-circle-gradient-url";
                            InlineStyleProp["ProgressCircleSize"] = "--progress-circle-size";
                            InlineStyleProp["StrokeDasharray"] = "--stroke-dasharray";
                            InlineStyleProp["StrokeDashoffset"] = "--stroke-dashoffset";
                        })(InlineStyleProp = Enum.InlineStyleProp || (Enum.InlineStyleProp = {}));
                        let DefaultValues;
                        (function (DefaultValues) {
                            DefaultValues["GradientId"] = "progressGradient-";
                            DefaultValues["RadialFr"] = "15%";
                            DefaultValues["RadialRadius"] = "95%";
                            DefaultValues["Size"] = "auto";
                        })(DefaultValues = Enum.DefaultValues || (Enum.DefaultValues = {}));
                        let GradientName;
                        (function (GradientName) {
                            GradientName["Linear"] = "linearGradient";
                            GradientName["Radial"] = "radialGradient";
                        })(GradientName = Enum.GradientName || (Enum.GradientName = {}));
                    })(Enum = Circle.Enum || (Circle.Enum = {}));
                })(Circle = Progress.Circle || (Progress.Circle = {}));
            })(Progress = Patterns.Progress || (Patterns.Progress = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Progress;
            (function (Progress) {
                var Circle;
                (function (Circle_1) {
                    class Circle extends Progress.AbstractProgress {
                        constructor(uniqueId, configs) {
                            super(uniqueId, new Circle_1.ProgressCircleConfig(configs));
                            this._circleSize = 0;
                            this._needsResizeObserver = true;
                            this.linearGradientCoords = {
                                x1: 1,
                                x2: 1,
                                y1: 0,
                                y2: 1,
                            };
                            this.radialGradientCoords = {
                                fr: Circle_1.Enum.DefaultValues.RadialFr,
                                r: Circle_1.Enum.DefaultValues.RadialRadius,
                            };
                        }
                        _addResizeOberser() {
                            this._resizeObserver = new ResizeObserver((entries) => {
                                requestAnimationFrame(() => {
                                    if (!Array.isArray(entries) || !entries.length) {
                                        return;
                                    }
                                    if (this.progressElem) {
                                        if (OSUI.Helper.Dom.Styles.ContainsClass(this.progressElem, Progress.ProgressEnum.CssClass.AddInitialAnimation)) {
                                            this.progressElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.TransitionEnd, this._updateCircleProps.bind(this));
                                        }
                                        else {
                                            this._updateCircleProps();
                                        }
                                    }
                                });
                            });
                            this._resizeObserver.observe(this._blockParent);
                        }
                        _checkResizeObserver() {
                            if (!this._resizeObserver && this._needsResizeObserver) {
                                this._addResizeOberser();
                            }
                            else if (this._resizeObserver && this._needsResizeObserver === false) {
                                this._removeResizeOberver();
                            }
                        }
                        _progressToOffset() {
                            if (this.configs.ProgressCircleSize !== OSFramework.OSUI.Constants.EmptyString &&
                                this.configs.ProgressCircleSize !== Circle_1.Enum.DefaultValues.Size &&
                                parseInt(this.configs.ProgressCircleSize) !== 0) {
                                OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Circle_1.Enum.InlineStyleProp.ProgressCircleSize, this.configs.ProgressCircleSize);
                                this._circleSize = this.selfElement.clientWidth;
                                this._needsResizeObserver = false;
                            }
                            else {
                                if (this._blockParent.clientWidth > this._blockParent.clientHeight) {
                                    this._circleSize = this._blockParent.clientHeight;
                                }
                                else {
                                    this._circleSize = this._blockParent.clientWidth;
                                }
                                OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Circle_1.Enum.InlineStyleProp.ProgressCircleSize, this._circleSize + OSUI.GlobalEnum.Units.Pixel);
                                this._needsResizeObserver = true;
                            }
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Circle_1.Enum.InlineStyleProp.CircleSize, this._circleSize + OSUI.GlobalEnum.Units.Pixel);
                            const _radius = Math.floor(this._circleSize / 2 - this.configs.Thickness / 2);
                            this._circleCircumference = _radius * 2 * Math.PI;
                            this._strokeDashoffset = this._strokeDasharray = this._circleCircumference;
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Circle_1.Enum.InlineStyleProp.CircleRadius, _radius + OSUI.GlobalEnum.Units.Pixel);
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Circle_1.Enum.InlineStyleProp.StrokeDasharray, this._strokeDasharray);
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Circle_1.Enum.InlineStyleProp.StrokeDashoffset, this._strokeDashoffset);
                            if (!this.isBuilt) {
                                OSUI.Helper.AsyncInvocation(this.addInitialAnimation.bind(this));
                            }
                            else {
                                this._checkResizeObserver();
                            }
                        }
                        _removeResizeOberver() {
                            this._resizeObserver.disconnect();
                            this._resizeObserver = undefined;
                        }
                        _setCssVariables() {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.Thickness, this.configs.Thickness + OSUI.GlobalEnum.Units.Pixel);
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.ProgressColor, OSUI.Helper.Dom.Styles.GetColorValueFromColorType(this.configs.ProgressColor));
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.Shape, this.configs.Shape === OSUI.GlobalEnum.ShapeTypes.Sharp
                                ? Progress.ProgressEnum.ShapeTypes.Sharp
                                : Progress.ProgressEnum.ShapeTypes.Round);
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.TrailColor, OSUI.Helper.Dom.Styles.GetColorValueFromColorType(this.configs.TrailColor));
                        }
                        _setGradientCoords(gradientType) {
                            if (gradientType === Circle_1.Enum.GradientName.Radial) {
                                return `fr="${this.radialGradientCoords.fr}" r="${this.radialGradientCoords.r}"`;
                            }
                            else {
                                return `x1="${this.linearGradientCoords.x1}" y1="${this.linearGradientCoords.y1}" x2="${this.linearGradientCoords.x2}" y2="${this.linearGradientCoords.y2}"`;
                            }
                        }
                        _updateCircleProps() {
                            this._progressToOffset();
                            this._updateProgressValue();
                        }
                        _updateProgressValue() {
                            this.updatedProgressValue();
                            this._strokeDashoffset =
                                this._circleCircumference - (this.configs.Progress / 100) * this._circleCircumference;
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Circle_1.Enum.InlineStyleProp.StrokeDashoffset, this._strokeDashoffset);
                        }
                        addInitialAnimation() {
                            if (this.configs.AnimateInitialProgress) {
                                this.animateInitial();
                                this._checkResizeObserver();
                                this._updateProgressValue();
                            }
                            else {
                                this._addResizeOberser();
                            }
                        }
                        setA11YProperties() {
                            if (this.contentElem.innerHTML)
                                OSUI.Helper.A11Y.AriaLabelledBy(this.selfElement, this.contentElem.id);
                            else
                                OSUI.Helper.A11Y.AriaLabel(this.selfElement, Progress.ProgressEnum.AriaLabel.Progress);
                        }
                        setCallbacks() {
                            super.setCallbacks();
                        }
                        setElementProgressValue(value) {
                            this.configs.Progress = value;
                            this.animateOnValueChange();
                            this._checkResizeObserver();
                            this._updateProgressValue();
                        }
                        setHtmlElements() {
                            this._blockParent = document.getElementById(this.widgetId).parentElement;
                            this.progressElem = this.selfElement.querySelector(OSUI.Constants.Dot + Circle_1.Enum.CssClass.Progress);
                            this.contentElem = this.selfElement.querySelector(OSUI.Constants.Dot + Progress.ProgressEnum.CssClass.ProgressCircleContent);
                            if (this.isBuilt) {
                                this._gradientElem = this.progressElem.parentElement.querySelector('defs');
                            }
                        }
                        unsetCallbacks() {
                            super.unsetCallbacks();
                        }
                        unsetHtmlElements() {
                            this._blockParent = undefined;
                            this._gradientElem = undefined;
                            super.unsetHtmlElements();
                        }
                        updateProgressColor() {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.ProgressColor, OSUI.Helper.Dom.Styles.GetColorValueFromColorType(this.configs.ProgressColor));
                        }
                        updateShape() {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.Shape, this.configs.Shape === OSUI.GlobalEnum.ShapeTypes.Sharp
                                ? Progress.ProgressEnum.ShapeTypes.Sharp
                                : Progress.ProgressEnum.ShapeTypes.Round);
                        }
                        updateThickness() {
                            this._updateCircleProps();
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.Thickness, this.configs.Thickness + OSUI.GlobalEnum.Units.Pixel);
                        }
                        updateTrailColor() {
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Progress.ProgressEnum.InlineStyleProp.TrailColor, OSUI.Helper.Dom.Styles.GetColorValueFromColorType(this.configs.TrailColor));
                        }
                        build() {
                            super.build();
                            this.setHtmlElements();
                            this.setA11YProperties();
                            this._setCssVariables();
                            this._progressToOffset();
                            this.setCallbacks();
                            this.finishBuild();
                        }
                        changeProperty(propertyName, propertyValue) {
                            var _a, _b;
                            super.changeProperty(propertyName, propertyValue);
                            switch (propertyName) {
                                case Progress.ProgressEnum.Properties.Thickness:
                                    this.updateThickness();
                                    break;
                                case Progress.ProgressEnum.Properties.Progress:
                                    this.setProgressValue(propertyValue);
                                    break;
                                case Progress.ProgressEnum.Properties.ProgressColor:
                                    this.updateProgressColor();
                                    break;
                                case Progress.ProgressEnum.Properties.ProgressCircleSize:
                                    (_a = this._resizeObserver) === null || _a === void 0 ? void 0 : _a.unobserve(this._blockParent);
                                    this._updateCircleProps();
                                    (_b = this._resizeObserver) === null || _b === void 0 ? void 0 : _b.observe(this._blockParent);
                                    break;
                                case Progress.ProgressEnum.Properties.Shape:
                                    this.updateShape();
                                    break;
                                case Progress.ProgressEnum.Properties.TrailColor:
                                    this.updateTrailColor();
                                    break;
                            }
                        }
                        createSVGGradient(gradientId, gradientName, gradientCoords, gradientLenght, colors) {
                            var _a;
                            (_a = this._gradientElem) === null || _a === void 0 ? void 0 : _a.remove();
                            let _gradient = OSUI.Constants.EmptyString;
                            for (let i = 0; i < gradientLenght; i++) {
                                _gradient += `<stop offset="${colors[i].Percentage !== -1 ? colors[i].Percentage : Math.floor((i * 100) / gradientLenght)}%" stop-color="${colors[i].Color}"/>`;
                            }
                            const gradientSVG = `
				<defs>
					<${gradientName} id="${gradientId}" ${gradientCoords}">
						${_gradient}
					</${gradientName}>
				</defs>`;
                            this.progressElem.parentElement.innerHTML += gradientSVG;
                            this.setHtmlElements();
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Circle_1.Enum.InlineStyleProp.GradientURL, 'url(#' + gradientId + ')');
                        }
                        dispose() {
                            super.dispose();
                            this.unsetHtmlElements();
                            this.unsetCallbacks();
                            if (this._resizeObserver) {
                                this._removeResizeOberver();
                            }
                        }
                        progressApplyGradient(gradientType, colors) {
                            super.progressApplyGradient(gradientType, colors);
                            let _gradientName = Circle_1.Enum.GradientName.Linear;
                            const _gradientId = Circle_1.Enum.DefaultValues.GradientId + this.uniqueId;
                            switch (gradientType) {
                                case Progress.ProgressEnum.Gradient.LinearHorizontal:
                                    this.linearGradientCoords.x1 = 1;
                                    this.linearGradientCoords.x2 = 1;
                                    this.linearGradientCoords.y1 = 0;
                                    this.linearGradientCoords.y2 = 1;
                                    break;
                                case Progress.ProgressEnum.Gradient.LinearDiagonally:
                                    this.linearGradientCoords.x1 = 1;
                                    this.linearGradientCoords.x2 = 0;
                                    this.linearGradientCoords.y1 = 0;
                                    this.linearGradientCoords.y2 = 1;
                                    break;
                                case Progress.ProgressEnum.Gradient.LinearVertical:
                                    this.linearGradientCoords.x1 = 1;
                                    this.linearGradientCoords.x2 = 0;
                                    this.linearGradientCoords.y1 = 1;
                                    this.linearGradientCoords.y2 = 1;
                                    break;
                                case Progress.ProgressEnum.Gradient.Radial:
                                    _gradientName = Circle_1.Enum.GradientName.Radial;
                                    break;
                            }
                            const _gradientCoords = this._setGradientCoords(_gradientName);
                            this.createSVGGradient(_gradientId, _gradientName, _gradientCoords, this.gradientLength, colors);
                        }
                    }
                    Circle_1.Circle = Circle;
                })(Circle = Progress.Circle || (Progress.Circle = {}));
            })(Progress = Patterns.Progress || (Patterns.Progress = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Progress;
            (function (Progress) {
                var Circle;
                (function (Circle) {
                    class ProgressCircleConfig extends Progress.ProgressConfiguration {
                        constructor(config) {
                            super(config);
                        }
                    }
                    Circle.ProgressCircleConfig = ProgressCircleConfig;
                })(Circle = Progress.Circle || (Progress.Circle = {}));
            })(Progress = Patterns.Progress || (Patterns.Progress = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var RangeSlider;
            (function (RangeSlider) {
                class AbstractRangeSlider extends Patterns.AbstractProviderPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                    }
                }
                RangeSlider.AbstractRangeSlider = AbstractRangeSlider;
            })(RangeSlider = Patterns.RangeSlider || (Patterns.RangeSlider = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var RangeSlider;
            (function (RangeSlider) {
                class AbstractRangeSliderConfig extends Patterns.AbstractProviderConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case RangeSlider.Enum.Properties.InitialValueFrom:
                            case RangeSlider.Enum.Properties.InitialValueTo:
                                validatedValue = this.validateNumber(value, 0);
                                break;
                            case RangeSlider.Enum.Properties.Orientation:
                                validatedValue = this.validateInRange(value, OSUI.GlobalEnum.Orientation.Horizontal, OSUI.GlobalEnum.Orientation.Vertical);
                                break;
                            case RangeSlider.Enum.Properties.IsDisabled:
                            case RangeSlider.Enum.Properties.ShowFloatingLabel:
                            case RangeSlider.Enum.Properties.ShowTickMarks:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            case RangeSlider.Enum.Properties.Size:
                                validatedValue = this.validateString(value, this.Orientation === OSUI.GlobalEnum.Orientation.Horizontal
                                    ? RangeSlider.Enum.DefaultValues.PercentualSize
                                    : RangeSlider.Enum.DefaultValues.PixelSize);
                                break;
                            case RangeSlider.Enum.Properties.Step:
                                validatedValue = this.validateNumber(value, 1);
                                break;
                            case RangeSlider.Enum.Properties.TickMarksInterval:
                                validatedValue = this.validateNumber(value, 0);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                RangeSlider.AbstractRangeSliderConfig = AbstractRangeSliderConfig;
            })(RangeSlider = Patterns.RangeSlider || (Patterns.RangeSlider = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var RangeSlider;
            (function (RangeSlider) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["ClassModifier"] = "osui-range-slider--is-";
                        CssClass["IsInterval"] = "osui-range-slider--is-interval";
                        CssClass["HasTicks"] = "osui-range-slider--has-ticks";
                        CssClass["RangeSlider"] = "osui-range-slider";
                        CssClass["RangeSliderProviderElem"] = "osui-range-slider__provider";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let CssProperties;
                    (function (CssProperties) {
                        CssProperties["Size"] = "--range-slider-size";
                    })(CssProperties = Enum.CssProperties || (Enum.CssProperties = {}));
                    let DefaultValues;
                    (function (DefaultValues) {
                        DefaultValues["PercentualSize"] = "100%";
                        DefaultValues["PixelSize"] = "100px";
                    })(DefaultValues = Enum.DefaultValues || (Enum.DefaultValues = {}));
                    let Mode;
                    (function (Mode) {
                        Mode["Single"] = "single";
                        Mode["Interval"] = "interval";
                    })(Mode = Enum.Mode || (Enum.Mode = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["InitialValueTo"] = "InitialValueTo";
                        Properties["InitialValueFrom"] = "InitialValueFrom";
                        Properties["IsDisabled"] = "IsDisabled";
                        Properties["MaxValue"] = "MaxValue";
                        Properties["MinValue"] = "MinValue";
                        Properties["Orientation"] = "Orientation";
                        Properties["ShowTickMarks"] = "ShowTickMarks";
                        Properties["ShowFloatingLabel"] = "ShowFloatingLabel";
                        Properties["Size"] = "Size";
                        Properties["StartingValueTo"] = "StartingValueTo";
                        Properties["StartingValueFrom"] = "StartingValueFrom";
                        Properties["Step"] = "Step";
                        Properties["TickMarksInterval"] = "TickMarksInterval";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let Provider;
                    (function (Provider) {
                        Provider["NoUiSlider"] = "noUiSlider";
                    })(Provider = Enum.Provider || (Enum.Provider = {}));
                    let RangeSliderEvents;
                    (function (RangeSliderEvents) {
                        RangeSliderEvents["OnInitialize"] = "OnInitialize";
                        RangeSliderEvents["OnValueChange"] = "OnValueChange";
                    })(RangeSliderEvents = Enum.RangeSliderEvents || (Enum.RangeSliderEvents = {}));
                    let RangeSliderTypes;
                    (function (RangeSliderTypes) {
                        RangeSliderTypes["Slider"] = "slider";
                        RangeSliderTypes["Interval"] = "interval";
                    })(RangeSliderTypes = Enum.RangeSliderTypes || (Enum.RangeSliderTypes = {}));
                })(Enum = RangeSlider.Enum || (RangeSlider.Enum = {}));
            })(RangeSlider = Patterns.RangeSlider || (Patterns.RangeSlider = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var RangeSlider;
            (function (RangeSlider) {
                var Factory;
                (function (Factory) {
                    function NewRangeSlider(rangeSliderId, configs, mode, provider) {
                        let _rangeSliderItem = null;
                        switch (provider) {
                            case RangeSlider.Enum.Provider.NoUiSlider:
                                _rangeSliderItem = Providers.OSUI.RangeSlider.NoUiSlider.Factory.NewNoUiSlider(rangeSliderId, configs, mode);
                                break;
                            default:
                                throw new Error(`There is no ${OSUI.GlobalEnum.PatternName.RangeSlider} of the ${provider} provider`);
                        }
                        return _rangeSliderItem;
                    }
                    Factory.NewRangeSlider = NewRangeSlider;
                })(Factory = RangeSlider.Factory || (RangeSlider.Factory = {}));
            })(RangeSlider = Patterns.RangeSlider || (Patterns.RangeSlider = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Rating;
            (function (Rating) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["IconStates"] = "icon-states";
                        CssClass["IsEdit"] = "is-edit";
                        CssClass["IsHalf"] = "is-half";
                        CssClass["RatingInput"] = "rating-input";
                        CssClass["RatingItem"] = "rating-item";
                        CssClass["Size"] = "rating-";
                        CssClass["WCAGHideText"] = "wcag-hide-text";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Events;
                    (function (Events) {
                        Events["OnSelected"] = "OnSelected";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["IsEdit"] = "IsEdit";
                        Properties[Properties["MaxRatingScale"] = 100] = "MaxRatingScale";
                        Properties[Properties["MinRatingScale"] = 0] = "MinRatingScale";
                        Properties["RatingScale"] = "RatingScale";
                        Properties["RatingValue"] = "RatingValue";
                        Properties["Size"] = "Size";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = Rating.Enum || (Rating.Enum = {}));
            })(Rating = Patterns.Rating || (Patterns.Rating = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Rating;
            (function (Rating_1) {
                class Rating extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Rating_1.RatingConfig(configs));
                    }
                    _createItems() {
                        if (this.configs.RatingScale > Rating_1.Enum.Properties.MaxRatingScale) {
                            this.configs.RatingScale = Rating_1.Enum.Properties.MaxRatingScale;
                            console.warn(`The value of the RatingScale property on the '${this.widgetId}' Rating is higher than supported (${Rating_1.Enum.Properties.MaxRatingScale}).`);
                        }
                        for (let i = 0; i <= this.configs.RatingScale; i++) {
                            this._renderItem(i);
                        }
                    }
                    _getDecimalValue(value) {
                        return Math.round((value - Math.floor(value)) * 100) / 100;
                    }
                    _getIsHalfValue(value) {
                        const decimalValue = this._getDecimalValue(value);
                        return !!(decimalValue >= 0.3 && decimalValue <= 0.7);
                    }
                    _getValue() {
                        const inputChecked = OSUI.Helper.Dom.TagSelector(this.selfElement, 'input:checked');
                        return parseInt(inputChecked.value);
                    }
                    _handlePlaceholders() {
                        this._clonedPlaceholders = Array.from(this._ratingIconStatesElem.children);
                        this._ratingIconStatesElem.remove();
                    }
                    _ratingInputOnKeyup(e) {
                        if (e.key === OSUI.GlobalEnum.Keycodes.ArrowUp ||
                            e.key === OSUI.GlobalEnum.Keycodes.ArrowRight ||
                            e.key === OSUI.GlobalEnum.Keycodes.ArrowDown ||
                            e.key === OSUI.GlobalEnum.Keycodes.ArrowLeft) {
                            e.preventDefault();
                        }
                    }
                    _ratingOnClick(e) {
                        const currentTarget = e.target;
                        this._isHalfValue = false;
                        const isInput = OSUI.Helper.Dom.Styles.ContainsClass(currentTarget, Rating_1.Enum.CssClass.RatingInput);
                        if (isInput) {
                            const _lastChosen = this.selfElement.querySelectorAll(OSUI.GlobalEnum.HTMLElement.Input)[this.configs.RatingValue];
                            if (_lastChosen) {
                                _lastChosen.ariaChecked = OSUI.Constants.A11YAttributes.States.False;
                                OSUI.Helper.Dom.Attribute.Remove(_lastChosen, OSUI.Constants.FocusableTabIndexDefault);
                            }
                            this.configs.RatingValue = this._getValue();
                            this._setValue(true);
                        }
                    }
                    _renderItem(index) {
                        const labelHTML = index !== 0 ? this._updateClonePlaceholdersAttrs(index) : '';
                        const ratingInputId = this.uniqueId + '-rating-' + index;
                        const input = `<input type="${OSUI.GlobalEnum.HTMLElement.Radio}" class="${Rating_1.Enum.CssClass.RatingInput} ${Rating_1.Enum.CssClass.WCAGHideText}" id=${ratingInputId} name=${this._ratingInputName} value=${index}>`;
                        let label = '';
                        if (!this.configs.IsEdit) {
                            label = `<label class='${Rating_1.Enum.CssClass.RatingItem}' for=${ratingInputId}><span class="${Rating_1.Enum.CssClass.WCAGHideText}">Rating ${index}</span>${labelHTML}</label>`;
                        }
                        else {
                            label = `<label class='${Rating_1.Enum.CssClass.RatingItem}' for=${ratingInputId}><span class="${Rating_1.Enum.CssClass.WCAGHideText}">Rating ${index}</span>${labelHTML}</label>`;
                        }
                        this._ratingFieldsetElem.innerHTML += input + label;
                    }
                    _setEvents() {
                        if (this.configs.IsEdit) {
                            this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnRatingClick);
                        }
                        this._toggleRatingInputsEvents(!this.configs.IsEdit);
                    }
                    _setFieldsetDisabledStatus(isDisabled) {
                        const isFieldsetDisabled = OSUI.Helper.Dom.Attribute.Get(this._ratingFieldsetElem, OSUI.GlobalEnum.HTMLAttributes.Disabled);
                        if (isDisabled) {
                            OSUI.Helper.Dom.Attribute.Set(this._ratingFieldsetElem, OSUI.GlobalEnum.HTMLAttributes.Disabled, OSUI.Constants.A11YAttributes.States.True);
                        }
                        else if (!isDisabled && isFieldsetDisabled) {
                            OSUI.Helper.Dom.Attribute.Remove(this._ratingFieldsetElem, OSUI.GlobalEnum.HTMLAttributes.Disabled);
                        }
                    }
                    _setInitialCssClasses() {
                        if (this._isHalfValue) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Rating_1.Enum.CssClass.IsHalf);
                        }
                        if (this.configs.IsEdit) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Rating_1.Enum.CssClass.IsEdit);
                        }
                        if (this.configs.Size !== '') {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Rating_1.Enum.CssClass.Size + this.configs.Size);
                        }
                    }
                    _setInitialPropertiesValues() {
                        this._ratingInputName = 'rating-' + this.uniqueId;
                    }
                    _setIsDisabled(isDisabled) {
                        this._disabled = isDisabled;
                        this._setFieldsetDisabledStatus(isDisabled);
                        if (isDisabled) {
                            this._unsetEvents();
                        }
                        else {
                            this._setEvents();
                        }
                    }
                    _setIsEdit() {
                        if (this.configs.IsEdit) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Rating_1.Enum.CssClass.IsEdit);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Rating_1.Enum.CssClass.IsEdit);
                        }
                        if (this.configs.IsEdit) {
                            this._setEvents();
                        }
                        else {
                            this._unsetEvents();
                        }
                    }
                    _setScale() {
                        this._ratingFieldsetElem.innerHTML = '';
                        this._createItems();
                        this._setValue();
                    }
                    _setSize(oldSize) {
                        if (oldSize !== '') {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Rating_1.Enum.CssClass.Size + oldSize);
                        }
                        if (this.configs.Size !== '') {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Rating_1.Enum.CssClass.Size + this.configs.Size);
                        }
                    }
                    _setValue(triggerEvent = false) {
                        this._decimalValue = this._getDecimalValue(this.configs.RatingValue);
                        this._isHalfValue = this._getIsHalfValue(this.configs.RatingValue);
                        const ratingItems = this.selfElement.querySelectorAll(OSUI.GlobalEnum.HTMLElement.Input);
                        if (OSUI.Helper.Dom.Styles.ContainsClass(this.selfElement, Rating_1.Enum.CssClass.IsHalf)) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Rating_1.Enum.CssClass.IsHalf);
                        }
                        if (this.configs.RatingScale === 1) {
                            ratingItems[1].checked = true;
                            ratingItems[1].ariaChecked = OSUI.Constants.A11YAttributes.States.True;
                            OSUI.Helper.Dom.Attribute.Set(ratingItems[1], OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                            return;
                        }
                        let newValue = this._isHalfValue || this._decimalValue > 0.7
                            ? Math.floor(this.configs.RatingValue) + 1
                            : Math.floor(this.configs.RatingValue);
                        if (newValue < Rating_1.Enum.Properties.MinRatingScale) {
                            newValue = Rating_1.Enum.Properties.MinRatingScale;
                            console.warn(`The value of RatingValue property on the '${this.widgetId}' ${OSUI.GlobalEnum.PatternName.Rating} can't be smaller than '${Rating_1.Enum.Properties.MinRatingScale}'.`);
                        }
                        else if (newValue > this.configs.RatingScale) {
                            newValue = this.configs.RatingScale;
                            console.warn(`The value of the RatingValue property on the '${this.widgetId}' ${OSUI.GlobalEnum.PatternName.Rating} exceeds the scale boundaries. To ensure its correct behaviour, set a value smaller or equal to '${this.configs.RatingScale}'.`);
                        }
                        ratingItems[newValue].checked = true;
                        ratingItems[newValue].ariaChecked = OSUI.Constants.A11YAttributes.States.True;
                        OSUI.Helper.Dom.Attribute.Set(ratingItems[newValue], OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                        if (this._isHalfValue) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Rating_1.Enum.CssClass.IsHalf);
                        }
                        this.configs.RatingValue = this._isHalfValue ? this.configs.RatingValue : newValue;
                        if (triggerEvent) {
                            this._triggerOnSelectEvent(this.configs.RatingValue);
                        }
                    }
                    _toggleRatingInputsEvents(add) {
                        const inputsList = this.selfElement.querySelectorAll(OSUI.Constants.Dot + Rating_1.Enum.CssClass.RatingInput);
                        for (const input of inputsList) {
                            if (add) {
                                input.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnRatingInputKeyup);
                            }
                            else {
                                input.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnRatingInputKeyup);
                            }
                        }
                    }
                    _triggerOnSelectEvent(value) {
                        if (this._platformEventOnSelect !== undefined) {
                            this.triggerPlatformEventCallback(this._platformEventOnSelect, value);
                        }
                    }
                    _unsetEvents() {
                        if ((this.selfElement && this.configs.IsEdit === false) || this._disabled) {
                            this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnRatingClick);
                        }
                        this._toggleRatingInputsEvents(!this.configs.IsEdit && !this._disabled);
                    }
                    _updateClonePlaceholdersAttrs(ratingIndex) {
                        let placeholdersOuterHTML = '';
                        for (const placeholder of this._clonedPlaceholders) {
                            const clonedPlaceholder = placeholder.cloneNode(true);
                            clonedPlaceholder.id = `${clonedPlaceholder.id}-rating-${ratingIndex}`;
                            placeholdersOuterHTML += clonedPlaceholder.outerHTML;
                        }
                        return placeholdersOuterHTML;
                    }
                    setA11YProperties() {
                        console.warn(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        this._eventOnRatingClick = this._ratingOnClick.bind(this);
                        this._eventOnRatingInputKeyup = this._ratingInputOnKeyup.bind(this);
                    }
                    setHtmlElements() {
                        this._ratingIconStatesElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, Rating_1.Enum.CssClass.IconStates);
                        this._ratingFieldsetElem = OSUI.Helper.Dom.TagSelector(this.selfElement, OSUI.GlobalEnum.HTMLElement.FieldSet);
                    }
                    unsetCallbacks() {
                        this._eventOnRatingClick = undefined;
                        this._eventOnRatingInputKeyup = undefined;
                    }
                    unsetHtmlElements() {
                        this._ratingFieldsetElem.innerHTML = '';
                        this._ratingIconStatesElem = undefined;
                        this._ratingFieldsetElem = undefined;
                    }
                    build() {
                        super.build();
                        this._setInitialPropertiesValues();
                        this.setCallbacks();
                        this.setHtmlElements();
                        this._setInitialCssClasses();
                        this._handlePlaceholders();
                        this._createItems();
                        this._setEvents();
                        this._setValue();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        const oldSize = this.configs.Size;
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case Rating_1.Enum.Properties.RatingValue:
                                    this._setValue();
                                    break;
                                case Rating_1.Enum.Properties.RatingScale:
                                    this._setScale();
                                    break;
                                case Rating_1.Enum.Properties.IsEdit:
                                    this._setIsEdit();
                                    break;
                                case Rating_1.Enum.Properties.Size:
                                    this._setSize(oldSize);
                                    break;
                            }
                        }
                    }
                    disable() {
                        this._setIsDisabled(true);
                    }
                    dispose() {
                        this._unsetEvents();
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    enable() {
                        this._setIsDisabled(false);
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Rating_1.Enum.Events.OnSelected:
                                if (this._platformEventOnSelect === undefined) {
                                    this._platformEventOnSelect = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                }
                Rating_1.Rating = Rating;
            })(Rating = Patterns.Rating || (Patterns.Rating = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Rating;
            (function (Rating) {
                class RatingConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                Rating.RatingConfig = RatingConfig;
            })(Rating = Patterns.Rating || (Patterns.Rating = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Search;
            (function (Search_1) {
                class Search extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Search_1.SearchConfig(configs));
                    }
                    setA11YProperties() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    build() {
                        super.build();
                        this.finishBuild();
                    }
                    dispose() {
                        if (this.isBuilt) {
                            super.dispose();
                        }
                    }
                }
                Search_1.Search = Search;
            })(Search = Patterns.Search || (Patterns.Search = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Search;
            (function (Search) {
                class SearchConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                Search.SearchConfig = SearchConfig;
            })(Search = Patterns.Search || (Patterns.Search = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SectionIndex;
            (function (SectionIndex) {
                var Enum;
                (function (Enum) {
                    let ChildNotifyActionType;
                    (function (ChildNotifyActionType) {
                        ChildNotifyActionType["Active"] = "active";
                        ChildNotifyActionType["Add"] = "add";
                        ChildNotifyActionType["Click"] = "click";
                        ChildNotifyActionType["KeyPressed"] = "keyPressed";
                        ChildNotifyActionType["Inactive"] = "unactive";
                        ChildNotifyActionType["Removed"] = "removed";
                    })(ChildNotifyActionType = Enum.ChildNotifyActionType || (Enum.ChildNotifyActionType = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["IsActiveItem"] = "osui-section-index-item--is-active";
                        CssClass["IsSticky"] = "osui-section-index--is-sticky";
                        CssClass["Pattern"] = "osui-section-index";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let CssVariable;
                    (function (CssVariable) {
                        CssVariable["TopPosition"] = "--top-position";
                    })(CssVariable = Enum.CssVariable || (Enum.CssVariable = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["IsFixed"] = "IsFixed";
                        Properties["SmoothScrolling"] = "SmoothScrolling";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = SectionIndex.Enum || (SectionIndex.Enum = {}));
            })(SectionIndex = Patterns.SectionIndex || (Patterns.SectionIndex = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SectionIndex;
            (function (SectionIndex_1) {
                class SectionIndex extends Patterns.AbstractParent {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new SectionIndex_1.SectionIndexConfig(configs));
                        this._headerIsFixed = true;
                        this._navigateOnClick = false;
                        this.scrollOptions = {
                            behavior: this.configs.SmoothScrolling ? OSUI.GlobalEnum.ScrollBehavior.Smooth : OSUI.GlobalEnum.ScrollBehavior.Auto,
                            inline: OSUI.GlobalEnum.ScrollPositionBehavior.Start,
                            block: OSUI.GlobalEnum.ScrollPositionBehavior.Start,
                        };
                    }
                    _addSectionIndexItem(childItem) {
                        if (this.getChild(childItem.uniqueId)) {
                            throw new Error(`${OSUI.ErrorCodes.SectionIndex.FailSetNewChildItem}: There is already a ${OSUI.GlobalEnum.PatternName.SectionIndexItem} under Id: '${childItem.widgetId}' added to ${OSUI.GlobalEnum.PatternName.SectionIndex} with uniqueId: ${this.uniqueId}.`);
                        }
                        else {
                            this.setChild(childItem);
                        }
                    }
                    _childItemHasBeenClicked(childId) {
                        const childReference = this.getChild(childId);
                        if (childReference) {
                            this._setActiveChildOnClick(childReference);
                        }
                        else {
                            throw new Error(`${OSUI.ErrorCodes.SectionIndex.FailChildItemClicked}: The ${OSUI.GlobalEnum.PatternName.SectionIndexItem} under uniqueId: '${childId}' does not exist as an SectionIndexItem from ${OSUI.GlobalEnum.PatternName.SectionIndex} with Id: ${this.widgetId}.`);
                        }
                    }
                    _getContentPaddingTop() {
                        const _mainContent = OSUI.Helper.Dom.ClassSelector(document, OSUI.GlobalEnum.CssClassElements.MainContent);
                        this._contentPaddingTop = _mainContent
                            ? parseFloat(window.getComputedStyle(_mainContent).getPropertyValue(OSUI.GlobalEnum.CssProperties.PaddingTop))
                            : 0;
                    }
                    _getHeaderSize() {
                        const header = OSUI.Helper.Dom.ClassSelector(document.body, OSUI.GlobalEnum.CssClassElements.Header);
                        this._headerIsFixed = !!OSUI.Helper.Dom.ClassSelector(document.body, OSUI.GlobalEnum.CssClassElements.HeaderIsFixed);
                        if (header) {
                            this._headerHeight = this._headerIsFixed ? header.offsetHeight : 0;
                        }
                    }
                    _removeSectionIndexItem(childId) {
                        if (this.getChild(childId)) {
                            this.unsetChild(childId);
                        }
                        else {
                            throw new Error(`${OSUI.ErrorCodes.SectionIndex.FailUnsetNewChildItem}: The ${OSUI.GlobalEnum.PatternName.SectionIndexItem} under uniqueId: '${childId}' does not exist as an SectionIndexItem from ${OSUI.GlobalEnum.PatternName.SectionIndex} with Id: ${this.widgetId}.`);
                        }
                    }
                    _setActiveChildOnClick(child) {
                        if (child === this._activeSectionIndexItem) {
                            return;
                        }
                        this._navigateOnClick = true;
                        window.clearTimeout(this._scrollTimeout);
                        this._scrollTimeout = window.setTimeout(() => {
                            this._navigateOnClick = false;
                        }, 1000);
                        this._updateActiveItem(child);
                        OSUI.Behaviors.Scroll(child.TargetElement, this.scrollOptions);
                    }
                    _setActiveChildOnScroll(child) {
                        if (this._navigateOnClick || this.configs.IsFixed === false) {
                            return;
                        }
                        this._updateActiveItem(child);
                    }
                    _toggleIsFixed() {
                        if (this.configs.IsFixed) {
                            let headerHeight = 0;
                            const hasFixedHeader = OSUI.Helper.Dom.ClassSelector(document.body, OSUI.GlobalEnum.CssClassElements.HeaderIsFixed);
                            if (hasFixedHeader) {
                                headerHeight =
                                    OSUI.Helper.Dom.ClassSelector(document, OSUI.GlobalEnum.CssClassElements.Header).offsetHeight || 0;
                            }
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, SectionIndex_1.Enum.CssVariable.TopPosition, 'calc(' + headerHeight + 'px + ' + this._contentPaddingTop + 'px)');
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, SectionIndex_1.Enum.CssClass.IsSticky);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveStyleAttribute(this.selfElement, SectionIndex_1.Enum.CssVariable.TopPosition);
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, SectionIndex_1.Enum.CssClass.IsSticky);
                        }
                    }
                    _updateActiveItem(child) {
                        if (this._activeSectionIndexItem) {
                            this._activeSectionIndexItem.unsetIsActive();
                        }
                        child.setIsActive();
                        this._activeSectionIndexItem = child;
                    }
                    setA11YProperties() {
                        console.warn(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        if (OSUI.Helper.Dom.Attribute.Has(document.body, OSUI.GlobalEnum.HTMLAttributes.StatusBar) &&
                            OSUI.Helper.DeviceInfo.GetOperatingSystem() === OSUI.GlobalEnum.MobileOS.IOS) {
                            this._mainScrollContainerElement = OSUI.Helper.Dom.ClassSelector(document, OSUI.GlobalEnum.CssClassElements.Content);
                        }
                        else {
                            this._mainScrollContainerElement = OSUI.Helper.Dom.ClassSelector(document, OSUI.GlobalEnum.CssClassElements.ActiveScreen);
                        }
                    }
                    unsetCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetHtmlElements() {
                        this._mainScrollContainerElement = undefined;
                    }
                    beNotifiedByChild(childItem, notifiedTo) {
                        switch (notifiedTo) {
                            case SectionIndex_1.Enum.ChildNotifyActionType.Add:
                                this._addSectionIndexItem(childItem);
                                break;
                            case SectionIndex_1.Enum.ChildNotifyActionType.Click:
                                this._childItemHasBeenClicked(childItem.uniqueId);
                                break;
                            case SectionIndex_1.Enum.ChildNotifyActionType.Removed:
                                this._removeSectionIndexItem(childItem.uniqueId);
                                break;
                            case SectionIndex_1.Enum.ChildNotifyActionType.Active:
                                this._setActiveChildOnScroll(this.getChild(childItem.uniqueId));
                                break;
                            default:
                                throw new Error(`${OSUI.ErrorCodes.SectionIndex.FailToSetChildItemAction}: There no exist a '${notifiedTo}' notification type.`);
                        }
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this._getContentPaddingTop();
                        this._getHeaderSize();
                        this._toggleIsFixed();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case SectionIndex_1.Enum.Properties.IsFixed:
                                    this._toggleIsFixed();
                                    break;
                                case SectionIndex_1.Enum.Properties.SmoothScrolling:
                                    this.scrollOptions.behavior = propertyValue
                                        ? OSUI.GlobalEnum.ScrollBehavior.Smooth
                                        : OSUI.GlobalEnum.ScrollBehavior.Auto;
                            }
                        }
                    }
                    dispose() {
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                }
                SectionIndex_1.SectionIndex = SectionIndex;
            })(SectionIndex = Patterns.SectionIndex || (Patterns.SectionIndex = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SectionIndex;
            (function (SectionIndex) {
                class SectionIndexConfig extends Patterns.AbstractConfiguration {
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case SectionIndex.Enum.Properties.IsFixed:
                            case SectionIndex.Enum.Properties.SmoothScrolling:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                SectionIndex.SectionIndexConfig = SectionIndexConfig;
            })(SectionIndex = Patterns.SectionIndex || (Patterns.SectionIndex = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SectionIndexItem;
            (function (SectionIndexItem) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["ItemTarget"] = "osui-section-index-item__target";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let CssVariable;
                    (function (CssVariable) {
                        CssVariable["ScrollMargin"] = "--target-scroll-margin";
                    })(CssVariable = Enum.CssVariable || (Enum.CssVariable = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["ScrollToWidgetId"] = "ScrollToWidgetId";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let DataTypes;
                    (function (DataTypes) {
                        DataTypes["dataItem"] = "data-item";
                    })(DataTypes = Enum.DataTypes || (Enum.DataTypes = {}));
                })(Enum = SectionIndexItem.Enum || (SectionIndexItem.Enum = {}));
            })(SectionIndexItem = Patterns.SectionIndexItem || (Patterns.SectionIndexItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SectionIndexItem;
            (function (SectionIndexItem_1) {
                class SectionIndexItem extends Patterns.AbstractChild {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new SectionIndexItem_1.SectionIndexItemConfig(configs));
                        this._isActive = false;
                        this._targetElement = undefined;
                    }
                    _onKeyboardPressed(event) {
                        if (event.key === OSUI.GlobalEnum.Keycodes.Enter || event.key === OSUI.GlobalEnum.Keycodes.Space) {
                            event.preventDefault();
                            event.stopPropagation();
                            this._onSelected(event);
                        }
                    }
                    _onScreenScroll() {
                        this._setTargetElement();
                        const scrollYPosition = OSUI.Behaviors.ScrollVerticalPosition(this._mainScrollContainerElement);
                        const thresholdVal = 40;
                        const elementOffsetTopVal = this._targetElement.offsetTop - scrollYPosition.value;
                        if ((this.isFirstChild && scrollYPosition.percentageInView === 0) ||
                            (elementOffsetTopVal >= -thresholdVal && elementOffsetTopVal <= thresholdVal) ||
                            (this.isLastChild && scrollYPosition.percentageInView === 100)) {
                            this.notifyParent(Patterns.SectionIndex.Enum.ChildNotifyActionType.Active);
                        }
                    }
                    _onSelected(event) {
                        event.preventDefault();
                        event.stopPropagation();
                        this._setTargetElement();
                        this.notifyParent(Patterns.SectionIndex.Enum.ChildNotifyActionType.Click);
                    }
                    _removeEvents() {
                        this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyBoardPress);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.ScreenOnScroll, this._eventOnScreenScroll);
                    }
                    _setLinkAttribute() {
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, SectionIndexItem_1.Enum.DataTypes.dataItem, this.configs.ScrollToWidgetId);
                    }
                    _setTargetAttributes() {
                        OSUI.Helper.Dom.Styles.AddClass(this._targetElement, SectionIndexItem_1.Enum.CssClass.ItemTarget);
                        this.setTargetScrollMargin(OSUI.Helper.Dom.Styles.GetCustomProperty(this.parentObject.selfElement, Patterns.SectionIndex.Enum.CssVariable.TopPosition));
                    }
                    _setTargetElement() {
                        if (this._targetElement === undefined) {
                            try {
                                this._targetElement = document.getElementById(this.configs.ScrollToWidgetId);
                                this._setTargetAttributes();
                            }
                            catch (e) {
                                throw new Error(`${OSUI.ErrorCodes.SectionIndexItem.FailToSetTargetElement}: Target Element with the Id '${this.configs.ScrollToWidgetId}' does not exist!`);
                            }
                        }
                    }
                    _setUpEvents() {
                        this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnkeyBoardPress);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.ScreenOnScroll, this._eventOnScreenScroll);
                    }
                    _unsetTargetAttributes() {
                        OSUI.Helper.Dom.Styles.RemoveClass(this._targetElement, SectionIndexItem_1.Enum.CssClass.ItemTarget);
                        OSUI.Helper.Dom.Styles.RemoveStyleAttribute(this._targetElement, SectionIndexItem_1.Enum.CssVariable.ScrollMargin);
                    }
                    setA11YProperties() {
                        OSUI.Helper.A11Y.RoleButton(this.selfElement);
                        OSUI.Helper.A11Y.TabIndexTrue(this.selfElement);
                    }
                    setCallbacks() {
                        this._eventOnClick = this._onSelected.bind(this);
                        this._eventOnkeyBoardPress = this._onKeyboardPressed.bind(this);
                        this._eventOnScreenScroll = this._onScreenScroll.bind(this);
                    }
                    setHtmlElements() {
                        if (OSUI.Helper.Dom.Attribute.Has(document.body, OSUI.GlobalEnum.HTMLAttributes.StatusBar) &&
                            OSUI.Helper.DeviceInfo.GetOperatingSystem() === OSUI.GlobalEnum.MobileOS.IOS) {
                            this._mainScrollContainerElement = OSUI.Helper.Dom.ClassSelector(document, OSUI.GlobalEnum.CssClassElements.Content);
                        }
                        else {
                            this._mainScrollContainerElement = OSUI.Helper.Dom.ClassSelector(document, OSUI.GlobalEnum.CssClassElements.ActiveScreen);
                        }
                    }
                    unsetCallbacks() {
                        this._removeEvents();
                        this._eventOnClick = undefined;
                        this._eventOnkeyBoardPress = undefined;
                        this._eventOnScreenScroll = undefined;
                    }
                    unsetHtmlElements() {
                        this._mainScrollContainerElement = undefined;
                        this._targetElement = undefined;
                    }
                    build() {
                        super.build();
                        this.setParentInfo(OSUI.Constants.Dot + Patterns.SectionIndex.Enum.CssClass.Pattern, OutSystems.OSUI.Patterns.SectionIndexAPI.GetSectionIndexById);
                        this.notifyParent(Patterns.SectionIndex.Enum.ChildNotifyActionType.Add);
                        this.setCallbacks();
                        this.setHtmlElements();
                        this._setUpEvents();
                        this.setA11YProperties();
                        this._setLinkAttribute();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case SectionIndexItem_1.Enum.Properties.ScrollToWidgetId:
                                    console.warn(`${OSUI.GlobalEnum.PatternName.SectionIndex} (${this.widgetId}): change to ${SectionIndexItem_1.Enum.Properties.ScrollToWidgetId} on property ${SectionIndexItem_1.Enum.Properties.ScrollToWidgetId} is not editable at OnParametersChange.`);
                                    break;
                            }
                        }
                    }
                    dispose() {
                        this.unsetCallbacks();
                        this._unsetTargetAttributes();
                        this.notifyParent(Patterns.SectionIndex.Enum.ChildNotifyActionType.Removed);
                        super.dispose();
                    }
                    setIsActive() {
                        if (this._isActive === false) {
                            this._isActive = true;
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Patterns.SectionIndex.Enum.CssClass.IsActiveItem);
                        }
                    }
                    setTargetScrollMargin(margin) {
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this._targetElement, SectionIndexItem_1.Enum.CssVariable.ScrollMargin, margin);
                    }
                    unsetIsActive() {
                        if (this._isActive) {
                            this._isActive = false;
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Patterns.SectionIndex.Enum.CssClass.IsActiveItem);
                        }
                    }
                    get IsSelected() {
                        return this._isActive;
                    }
                    get TargetElement() {
                        return this._targetElement;
                    }
                }
                SectionIndexItem_1.SectionIndexItem = SectionIndexItem;
            })(SectionIndexItem = Patterns.SectionIndexItem || (Patterns.SectionIndexItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SectionIndexItem;
            (function (SectionIndexItem) {
                class SectionIndexItemConfig extends Patterns.AbstractConfiguration {
                    validateCanChange(isBuilt, key) {
                        if (isBuilt) {
                            return key !== SectionIndexItem.Enum.Properties.ScrollToWidgetId;
                        }
                        return true;
                    }
                }
                SectionIndexItem.SectionIndexItemConfig = SectionIndexItemConfig;
            })(SectionIndexItem = Patterns.SectionIndexItem || (Patterns.SectionIndexItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Sidebar;
            (function (Sidebar) {
                var Enum;
                (function (Enum) {
                    let Properties;
                    (function (Properties) {
                        Properties["StartsOpen"] = "StartsOpen";
                        Properties["Direction"] = "Direction";
                        Properties["Width"] = "Width";
                        Properties["HasOverlay"] = "HasOverlay";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let Defaults;
                    (function (Defaults) {
                        Defaults["Width"] = "500px";
                    })(Defaults = Enum.Defaults || (Enum.Defaults = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Aside"] = "osui-sidebar";
                        CssClass["Content"] = "osui-sidebar__content";
                        CssClass["ClassModifier"] = "osui-sidebar--is-";
                        CssClass["HasOverlay"] = "osui-sidebar--has-overlay";
                        CssClass["Header"] = "osui-sidebar__header";
                        CssClass["IsOpen"] = "osui-sidebar--is-open";
                        CssClass["Overlay"] = "osui-sidebar__overlay";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let CssProperty;
                    (function (CssProperty) {
                        CssProperty["Width"] = "--sidebar-width";
                    })(CssProperty = Enum.CssProperty || (Enum.CssProperty = {}));
                    let Events;
                    (function (Events) {
                        Events["OnToggle"] = "OnToggle";
                    })(Events = Enum.Events || (Enum.Events = {}));
                })(Enum = Sidebar.Enum || (Sidebar.Enum = {}));
            })(Sidebar = Patterns.Sidebar || (Patterns.Sidebar = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Sidebar;
            (function (Sidebar_1) {
                class Sidebar extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Sidebar_1.SidebarConfig(configs));
                        this._isOpen = this.configs.StartsOpen;
                        this._currentDirectionCssClass = Sidebar_1.Enum.CssClass.ClassModifier + this.configs.Direction;
                    }
                    _closeSidebar() {
                        this._isOpen = false;
                        this._focusTrapInstance.disableForA11y();
                        if (this.isBuilt) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Sidebar_1.Enum.CssClass.IsOpen);
                            OSUI.Helper.A11Y.TabIndexFalse(this.selfElement);
                            OSUI.Helper.A11Y.AriaHiddenTrue(this.selfElement);
                            this._triggerOnToggleEvent();
                            this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventSidebarKeypress);
                            OSUI.Helper.A11Y.SetElementsTabIndex(this._isOpen, this._focusTrapInstance.focusableElements);
                            if (this._clickOutsideToClose || (this.configs.HasOverlay && this._clickOutsideToClose === undefined)) {
                                OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnMouseDown, this._eventOverlayMouseDown);
                                OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._eventOverlayClick);
                            }
                        }
                        this._focusManagerInstance.setFocusToStoredElement();
                    }
                    _handleFocusBehavior() {
                        const opts = {
                            focusTargetElement: this._parentSelf,
                            canContainOtherPatterns: true,
                        };
                        this._focusTrapInstance = new OSUI.Behaviors.FocusTrap(opts);
                        this._focusManagerInstance = new OSUI.Behaviors.FocusManager();
                        if (this._isOpen === false) {
                            OSUI.Helper.A11Y.SetElementsTabIndex(false, this._focusTrapInstance.focusableElements);
                        }
                    }
                    _handleGestureEvents() {
                        if (OSUI.Helper.DeviceInfo.IsNative) {
                            this._gestureEventInstance = new OSUI.Event.GestureEvent.DragEvent(this.selfElement);
                            this.setGestureEvents(this._onGestureStart.bind(this), this._onGestureMove.bind(this), this._onGestureEnd.bind(this));
                            this._animateOnDragInstance = new OSUI.Behaviors.AnimateOnDrag(this.selfElement);
                        }
                    }
                    _onGestureEnd(offsetX, offsetY, timeTaken) {
                        this._animateOnDragInstance.onDragEnd(offsetX, offsetY, timeTaken, this._toggle.bind(this));
                        if (this.configs.HasOverlay) {
                            OSUI.Behaviors.OverlayTransitionOnDrag.UnSet(this.selfElement);
                        }
                    }
                    _onGestureMove(x, y, offsetX, offsetY, evt) {
                        this._animateOnDragInstance.onDragMove(offsetX, offsetY, x, y, evt);
                        if (this.configs.HasOverlay) {
                            OSUI.Behaviors.OverlayTransitionOnDrag.Set(this.selfElement, x, this.configs.Direction, this.configs.Width);
                        }
                    }
                    _onGestureStart(x, y) {
                        this._animateOnDragInstance.onDragStart(false, this.configs.Direction, x, y, this._isOpen, this.configs.Width);
                    }
                    _openSidebar() {
                        OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Sidebar_1.Enum.CssClass.IsOpen);
                        OSUI.Helper.A11Y.TabIndexTrue(this.selfElement);
                        OSUI.Helper.A11Y.AriaHiddenFalse(this.selfElement);
                        this._focusTrapInstance.enableForA11y();
                        this._focusManagerInstance.storeLastFocusedElement();
                        if (this.isBuilt) {
                            this._isOpen = true;
                            this._triggerOnToggleEvent();
                        }
                        if (this._clickOutsideToClose || (this.configs.HasOverlay && this._clickOutsideToClose === undefined)) {
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnMouseDown, this._eventOverlayMouseDown);
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._eventOverlayClick);
                        }
                        this.selfElement.focus();
                        this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventSidebarKeypress);
                        OSUI.Helper.A11Y.SetElementsTabIndex(this._isOpen, this._focusTrapInstance.focusableElements);
                    }
                    _overlayClickCallback(_args, e) {
                        if (this._isOpen &&
                            this._clickedOutsideElement &&
                            (e.target === this.selfElement || this._clickOutsideToClose)) {
                            this.close();
                        }
                        e.stopPropagation();
                    }
                    _overlayMouseDownCallback(_args, e) {
                        const targetElem = e.target;
                        this._clickedOutsideElement = true;
                        if (targetElem.closest(`${OSUI.Constants.Dot}${Sidebar_1.Enum.CssClass.Header}`) ||
                            targetElem.closest(`${OSUI.Constants.Dot}${Sidebar_1.Enum.CssClass.Content}`)) {
                            this._clickedOutsideElement = false;
                        }
                    }
                    _removeEvents() {
                        this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventSidebarKeypress);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnMouseDown, this._eventOverlayMouseDown);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._eventOverlayClick);
                    }
                    _setDirection() {
                        if (this._currentDirectionCssClass !== '') {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, this._currentDirectionCssClass);
                        }
                        this._currentDirectionCssClass = Sidebar_1.Enum.CssClass.ClassModifier + this.configs.Direction;
                        OSUI.Helper.Dom.Styles.AddClass(this.selfElement, this._currentDirectionCssClass);
                    }
                    _setHasOverlay() {
                        const alreadyHasOverlayClass = OSUI.Helper.Dom.Styles.ContainsClass(this.selfElement, Sidebar_1.Enum.CssClass.HasOverlay);
                        if (this.configs.HasOverlay && alreadyHasOverlayClass === false) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Sidebar_1.Enum.CssClass.HasOverlay);
                        }
                        else if (this.isBuilt) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Sidebar_1.Enum.CssClass.HasOverlay);
                        }
                    }
                    _setInitialCssClasses() {
                        this._setDirection();
                        this._setWidth();
                        this._setHasOverlay();
                        if (this._isOpen) {
                            this._openSidebar();
                        }
                    }
                    _setWidth() {
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Sidebar_1.Enum.CssProperty.Width, this.configs.Width);
                    }
                    _sidebarKeypressCallback(e) {
                        const isEscapedPressed = e.key === OSUI.GlobalEnum.Keycodes.Escape;
                        if (isEscapedPressed) {
                            this.close();
                        }
                        e.stopPropagation();
                    }
                    _toggle() {
                        if (this._isOpen) {
                            this.close();
                        }
                        else {
                            this.open();
                        }
                    }
                    _toggleGesturesSidebar(enableSwipes) {
                        if (enableSwipes && this._hasGestureEvents === false) {
                            if (this._gestureEventInstance === undefined) {
                                this._handleGestureEvents();
                            }
                        }
                        else if (enableSwipes === false && this._hasGestureEvents) {
                            this.removeGestureEvents();
                        }
                    }
                    _triggerOnToggleEvent() {
                        this.triggerPlatformEventCallback(this._platformEventOnToggle, this._isOpen);
                    }
                    setA11YProperties() {
                        OSUI.Helper.A11Y.RoleComplementary(this.selfElement);
                        OSUI.Helper.A11Y.AriaHasPopupTrue(this.selfElement);
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                        if (this._isOpen) {
                            OSUI.Helper.A11Y.TabIndexTrue(this.selfElement);
                            OSUI.Helper.A11Y.AriaHiddenFalse(this.selfElement);
                        }
                        else {
                            OSUI.Helper.A11Y.TabIndexFalse(this.selfElement);
                            OSUI.Helper.A11Y.AriaHiddenTrue(this.selfElement);
                        }
                    }
                    setCallbacks() {
                        this._eventSidebarKeypress = this._sidebarKeypressCallback.bind(this);
                        this._eventOverlayClick = this._overlayClickCallback.bind(this);
                        this._eventOverlayMouseDown = this._overlayMouseDownCallback.bind(this);
                    }
                    setHtmlElements() {
                        this._parentSelf = OSUI.Helper.Dom.GetElementById(this.widgetId);
                        this._setWidth();
                    }
                    unsetCallbacks() {
                        this._removeEvents();
                        this._eventSidebarKeypress = undefined;
                        this._eventOverlayClick = undefined;
                        this._eventOverlayMouseDown = undefined;
                    }
                    unsetHtmlElements() {
                        this._parentSelf = undefined;
                        this._platformEventOnToggle = undefined;
                    }
                    build() {
                        super.build();
                        this.setCallbacks();
                        this.setHtmlElements();
                        this._handleFocusBehavior();
                        this._setInitialCssClasses();
                        this.setA11YProperties();
                        this._handleGestureEvents();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case Sidebar_1.Enum.Properties.StartsOpen:
                                    console.warn(`Sidebar (${this.widgetId}): changes to ${Sidebar_1.Enum.Properties.StartsOpen} parameter do not affect the sidebar. Use the client actions 'SidebarOpen' and 'SidebarClose' to affect the Sidebar.`);
                                    break;
                                case Sidebar_1.Enum.Properties.Direction:
                                    this._setDirection();
                                    break;
                                case Sidebar_1.Enum.Properties.Width:
                                    this._setWidth();
                                    break;
                                case Sidebar_1.Enum.Properties.HasOverlay:
                                    this._setHasOverlay();
                                    break;
                            }
                        }
                    }
                    clickOutsideToClose(closeOnOutSideClick) {
                        this._clickOutsideToClose = closeOnOutSideClick;
                    }
                    close() {
                        if (this._isOpen) {
                            this._closeSidebar();
                        }
                    }
                    dispose() {
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        this._focusTrapInstance.dispose();
                        if (this._hasGestureEvents) {
                            this.removeGestureEvents();
                        }
                        super.dispose();
                    }
                    open() {
                        if (this._isOpen === false) {
                            this._openSidebar();
                        }
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Patterns.Sidebar.Enum.Events.OnToggle:
                                if (this._platformEventOnToggle === undefined) {
                                    this._platformEventOnToggle = callback;
                                }
                                else {
                                    console.warn(`The ${OSUI.GlobalEnum.PatternName.Sidebar} already has the toggle callback set.`);
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    removeGestureEvents() {
                        if (this._gestureEventInstance !== undefined) {
                            this._gestureEventInstance.unsetTouchEvents();
                            this._hasGestureEvents = false;
                            this._gestureEventInstance = undefined;
                        }
                    }
                    setGestureEvents(onGestureStartCallback, onGestureMoveCallback, onGestureEndCallback) {
                        this._gestureEventInstance.setSwipeEvents(onGestureStartCallback, onGestureMoveCallback, onGestureEndCallback);
                        this._hasGestureEvents = true;
                    }
                    toggleGestures(enableSwipe) {
                        this._toggleGesturesSidebar(enableSwipe);
                    }
                    get gestureEventInstance() {
                        return this._gestureEventInstance;
                    }
                    get hasGestureEvents() {
                        return this._hasGestureEvents;
                    }
                }
                Sidebar_1.Sidebar = Sidebar;
            })(Sidebar = Patterns.Sidebar || (Patterns.Sidebar = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Sidebar;
            (function (Sidebar) {
                class SidebarConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateCanChange(isBuilt, key) {
                        if (isBuilt) {
                            return key !== Sidebar.Enum.Properties.StartsOpen;
                        }
                        return true;
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case Sidebar.Enum.Properties.Direction:
                                validatedValue = this.validateInRange(value, OSUI.GlobalEnum.Direction.Right, OSUI.GlobalEnum.Direction.Right, OSUI.GlobalEnum.Direction.Left);
                                break;
                            case Sidebar.Enum.Properties.HasOverlay:
                            case Sidebar.Enum.Properties.StartsOpen:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            case Sidebar.Enum.Properties.Width:
                                validatedValue = this.validateString(value, Sidebar.Enum.Defaults.Width);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                Sidebar.SidebarConfig = SidebarConfig;
            })(Sidebar = Patterns.Sidebar || (Patterns.Sidebar = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Submenu;
            (function (Submenu) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Pattern"] = "osui-submenu";
                        CssClass["PatternActive"] = "active";
                        CssClass["PatternHeader"] = "osui-submenu__header";
                        CssClass["PatternIsDropdown"] = "osui-submenu--is-dropdown";
                        CssClass["PatternIsHidden"] = "osui-submenu--is-hidden";
                        CssClass["PatternIsHover"] = "osui-submenu--is-hover";
                        CssClass["PatternIsOpen"] = "osui-submenu--is-open";
                        CssClass["PatternIcon"] = "osui-submenu__header__icon";
                        CssClass["PatternItem"] = "osui-submenu__header__item";
                        CssClass["PatternLinks"] = "osui-submenu__items";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Events;
                    (function (Events) {
                        Events["OnToggle"] = "OnToggle";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["OpenOnHover"] = "OpenOnHover";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = Submenu.Enum || (Submenu.Enum = {}));
            })(Submenu = Patterns.Submenu || (Patterns.Submenu = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Submenu;
            (function (Submenu_1) {
                class Submenu extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Submenu_1.SubmenuConfig(configs));
                        this._hasActiveLinks = false;
                        this._hasElements = false;
                        this._isActive = false;
                        this._isOpen = false;
                        this.hasClickOutsideToClose = true;
                    }
                    _bodyClickCallback(_args, e) {
                        if (this.isBuilt && this._isOpen) {
                            if (!this.selfElement.contains(e.target)) {
                                this.close();
                            }
                            e.preventDefault();
                            e.stopPropagation();
                        }
                    }
                    _checkForActiveLinks() {
                        this._submenuActiveLinksElement =
                            OSUI.Helper.Dom.ClassSelector(this._submenuLinksElement, Submenu_1.Enum.CssClass.PatternActive) ||
                                OSUI.Helper.Dom.ClassSelector(this._submenuHeaderElement, Submenu_1.Enum.CssClass.PatternActive);
                        this._hasActiveLinks = !!this._submenuActiveLinksElement;
                    }
                    _clickCallback() {
                        this._toggleSubmenu();
                    }
                    _handleFocusBehavior() {
                        const opts = {
                            focusTargetElement: this._submenuLinksElement,
                        };
                        this._focusTrapInstance = new OSUI.Behaviors.FocusTrap(opts);
                        this._focusManagerInstance = new OSUI.Behaviors.FocusManager();
                        if (this._isOpen === false) {
                            OSUI.Helper.A11Y.SetElementsTabIndex(false, this._focusTrapInstance.focusableElements);
                        }
                    }
                    _keypressBalloonCallback(e) {
                        e.stopPropagation();
                        if (e.key === OSUI.GlobalEnum.Keycodes.Escape && this._isOpen) {
                            this.close();
                            this._submenuHeaderElement.focus();
                        }
                    }
                    _keypressCallback(e) {
                        const _clickedElem = e.target;
                        const _closestElem = _clickedElem.closest(OSUI.Constants.Dot + Submenu_1.Enum.CssClass.Pattern);
                        const _isEscapedPressed = e.key === OSUI.GlobalEnum.Keycodes.Escape;
                        const _isEnterPressed = e.key === OSUI.GlobalEnum.Keycodes.Enter;
                        const _isTabPressed = e.key === OSUI.GlobalEnum.Keycodes.Tab;
                        const _isShiftPressed = e.shiftKey;
                        const _isArrowUp = e.key === OSUI.GlobalEnum.Keycodes.ArrowUp;
                        const _isArrowDown = e.key === OSUI.GlobalEnum.Keycodes.ArrowDown;
                        const _targetAfterArrow = _isArrowUp ? this._focusTrapInstance.focusableElements.length - 1 : 0;
                        if (_isArrowDown || _isArrowUp) {
                            this.open();
                            OSUI.Helper.AsyncInvocation(() => {
                                this._focusTrapInstance.focusableElements[_targetAfterArrow].focus();
                            });
                        }
                        if (_isEnterPressed) {
                            this._toggleSubmenu();
                        }
                        if (_isEscapedPressed && this._isOpen) {
                            this.close();
                            this._submenuHeaderElement.focus();
                        }
                        if (_isShiftPressed && _isTabPressed && _clickedElem === this._submenuHeaderElement) {
                            if (_closestElem === this.selfElement && this._isOpen) {
                                this.close();
                            }
                        }
                        e.stopPropagation();
                    }
                    _onMouseEnterCallback(e) {
                        this.open();
                        e.stopPropagation();
                    }
                    _onMouseLeaveCallback(e) {
                        if (this.selfElement.querySelector(':hover') === null) {
                            this.close();
                        }
                        e.preventDefault();
                        e.stopPropagation();
                    }
                    _removeActive() {
                        if (this._isActive) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Submenu_1.Enum.CssClass.PatternActive);
                            this._isActive = false;
                        }
                    }
                    _removeEvents() {
                        if (this._hasElements) {
                            if (this.configs.OpenOnHover === false || OSUI.Helper.DeviceInfo.IsTouch) {
                                this._submenuHeaderElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventClick);
                                this._submenuHeaderElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventKeypress);
                            }
                            if (this.configs.OpenOnHover && OSUI.Helper.DeviceInfo.IsTouch === false) {
                                this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.MouseEnter, this._eventOnMouseEnter);
                                this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.MouseLeave, this._eventOnMouseLeave);
                            }
                        }
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._globalEventBody);
                    }
                    _setActive() {
                        if (this._isActive === false) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Submenu_1.Enum.CssClass.PatternActive);
                            this._isActive = true;
                        }
                    }
                    _show() {
                        if (this._isOpen === false) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Submenu_1.Enum.CssClass.PatternIsOpen);
                            this._submenuHeaderElement.focus();
                            this._isOpen = true;
                            this._updateA11yProperties();
                        }
                    }
                    _toggleSubmenu() {
                        if (this._isOpen) {
                            this.close();
                        }
                        else {
                            OSUI.Helper.AsyncInvocation(this.open.bind(this));
                        }
                    }
                    _updateA11yProperties() {
                        OSUI.Helper.A11Y.AriaExpanded(this._submenuHeaderElement, this._isOpen.toString());
                        OSUI.Helper.A11Y.AriaHidden(this._submenuLinksElement, (!this._isOpen).toString());
                        this._submenuAllLinksElement.forEach((item) => {
                            if (this._isOpen) {
                                OSUI.Helper.A11Y.TabIndexTrue(item);
                                OSUI.Helper.A11Y.AriaHiddenFalse(item);
                            }
                            else {
                                OSUI.Helper.A11Y.TabIndexFalse(item);
                                OSUI.Helper.A11Y.AriaHiddenTrue(item);
                            }
                        });
                    }
                    setA11YProperties() {
                        OSUI.Helper.A11Y.AriaHasPopupTrue(this._submenuHeaderElement);
                        OSUI.Helper.A11Y.TabIndexTrue(this._submenuHeaderElement);
                        OSUI.Helper.A11Y.AriaControls(this._submenuHeaderElement, this._submenuLinksElement.id);
                        OSUI.Helper.A11Y.RoleButton(this._submenuHeaderElement);
                        OSUI.Helper.Dom.Attribute.Set(this._submenuHeaderElement, OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                        this._submenuAllLinksElement.forEach((item) => {
                            OSUI.Helper.A11Y.RoleMenuItem(item);
                        });
                        this._updateA11yProperties();
                    }
                    setCallbacks() {
                        this._eventClick = this._clickCallback.bind(this);
                        this._globalEventBody = this._bodyClickCallback.bind(this);
                        this._eventBalloonKeypress = this._keypressBalloonCallback.bind(this);
                        this._eventKeypress = this._keypressCallback.bind(this);
                        this._eventOnMouseEnter = this._onMouseEnterCallback.bind(this);
                        this._eventOnMouseLeave = this._onMouseLeaveCallback.bind(this);
                        if (this._hasElements) {
                            if (this.configs.OpenOnHover === false || OSUI.Helper.DeviceInfo.IsTouch) {
                                this._submenuHeaderElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventClick);
                            }
                            this._submenuHeaderElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventKeypress);
                        }
                    }
                    setHtmlElements() {
                        this._submenuHeaderElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, Submenu_1.Enum.CssClass.PatternHeader);
                        this._submenuLinksElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, Submenu_1.Enum.CssClass.PatternLinks);
                        this._submenuAllLinksElement = [...this._submenuLinksElement.querySelectorAll(OSUI.GlobalEnum.HTMLElement.Link)];
                        if (this._submenuLinksElement.children.length > 0) {
                            this._hasElements = true;
                        }
                        OSUI.Helper.AsyncInvocation(this._checkForActiveLinks.bind(this));
                    }
                    setInitialStates() {
                        if (this._hasActiveLinks) {
                            this._setActive();
                        }
                        if (this._hasElements) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Submenu_1.Enum.CssClass.PatternIsDropdown);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.AddClass(this._submenuLinksElement, Submenu_1.Enum.CssClass.PatternIsHidden);
                        }
                        if (OSUI.Helper.Dom.Styles.ContainsClass(this.selfElement, Submenu_1.Enum.CssClass.PatternIsOpen) && !this._isOpen) {
                            this._isOpen = true;
                        }
                    }
                    unsetCallbacks() {
                        this._eventClick = undefined;
                        this._eventBalloonKeypress = undefined;
                        this._eventKeypress = undefined;
                        this._globalEventBody = undefined;
                        this._eventOnMouseEnter = undefined;
                        this._eventOnMouseLeave = undefined;
                        this._platformEventOnToggleCallback = undefined;
                    }
                    unsetHtmlElements() {
                        this._submenuHeaderElement = undefined;
                        this._submenuLinksElement = undefined;
                        this._submenuAllLinksElement = undefined;
                        this._submenuActiveLinksElement = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this.setInitialStates();
                        this._handleFocusBehavior();
                        this.setA11YProperties();
                        this.setCallbacks();
                        this.finishBuild();
                    }
                    clickOutsideToClose(clickOutsideToClose) {
                        this.hasClickOutsideToClose = clickOutsideToClose;
                        if (this.hasClickOutsideToClose) {
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._globalEventBody);
                        }
                        else if (this.hasClickOutsideToClose === false) {
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._globalEventBody);
                        }
                    }
                    close() {
                        if (this._isOpen) {
                            this._focusTrapInstance.disableForA11y();
                            if (this.hasClickOutsideToClose) {
                                OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._globalEventBody);
                            }
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Submenu_1.Enum.CssClass.PatternIsOpen);
                            this._isOpen = false;
                            this._updateA11yProperties();
                            this._focusManagerInstance.setFocusToStoredElement();
                            this._submenuLinksElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventBalloonKeypress.bind(this));
                            this.triggerPlatformEventCallback(this._platformEventOnToggleCallback, false);
                        }
                    }
                    dispose() {
                        this._removeEvents();
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    open() {
                        this._focusTrapInstance.enableForA11y();
                        this._focusManagerInstance.storeLastFocusedElement();
                        if (this.hasClickOutsideToClose) {
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, this._globalEventBody);
                        }
                        this._submenuLinksElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventBalloonKeypress.bind(this));
                        OSUI.Helper.AsyncInvocation(this._show.bind(this));
                        this.triggerPlatformEventCallback(this._platformEventOnToggleCallback, true);
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Submenu_1.Enum.Events.OnToggle:
                                if (this._platformEventOnToggleCallback === undefined) {
                                    this._platformEventOnToggleCallback = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    setOpenOnHover() {
                        if (OSUI.Helper.DeviceInfo.IsTouch === false) {
                            if (this._hasElements) {
                                this._submenuHeaderElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventClick);
                                this._eventClick = undefined;
                                OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Submenu_1.Enum.CssClass.PatternIsHover);
                                this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.MouseEnter, this._eventOnMouseEnter);
                                this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.MouseLeave, this._eventOnMouseLeave);
                            }
                        }
                    }
                    updateOnRender() {
                        if (this.isBuilt) {
                            this._checkForActiveLinks();
                            if (this._hasActiveLinks && this._isActive === false) {
                                this._setActive();
                            }
                            else if (this._hasActiveLinks === false && this._isActive) {
                                this._removeActive();
                            }
                        }
                    }
                }
                Submenu_1.Submenu = Submenu;
            })(Submenu = Patterns.Submenu || (Patterns.Submenu = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Submenu;
            (function (Submenu) {
                class SubmenuConfig extends Patterns.AbstractConfiguration {
                    constructor() {
                        super(...arguments);
                        this.OpenOnHover = false;
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case Submenu.Enum.Properties.OpenOnHover:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                Submenu.SubmenuConfig = SubmenuConfig;
            })(Submenu = Patterns.Submenu || (Patterns.Submenu = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SwipeEvents;
            (function (SwipeEvents) {
                var Enum;
                (function (Enum) {
                    let Events;
                    (function (Events) {
                        Events["SwipeUp"] = "SwipeUp";
                        Events["SwipeDown"] = "SwipeDown";
                        Events["SwipeRight"] = "SwipeRight";
                        Events["SwipeLeft"] = "SwipeLeft";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let Properties;
                    (function (Properties) {
                        Properties[Properties["Threshold"] = 10] = "Threshold";
                        Properties[Properties["Velocity"] = 0.3] = "Velocity";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = SwipeEvents.Enum || (SwipeEvents.Enum = {}));
            })(SwipeEvents = Patterns.SwipeEvents || (Patterns.SwipeEvents = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SwipeEvents;
            (function (SwipeEvents_1) {
                class SwipeEvents extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new SwipeEvents_1.SwipeEventsConfig(configs));
                        this._threshold = SwipeEvents_1.Enum.Properties.Threshold;
                        this._velocity = SwipeEvents_1.Enum.Properties.Velocity;
                    }
                    _removeEventListeners() {
                        if (this._swipableElement) {
                            this._swipableElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TouchStart, this._gestureStartEvent);
                            this._swipableElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TouchMove, this._gestureMoveEvent);
                        }
                    }
                    _setEventListeners() {
                        if (this._swipableElement) {
                            this._swipableElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.TouchStart, this._gestureStartEvent);
                            this._swipableElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.TouchMove, this._gestureMoveEvent);
                        }
                    }
                    _triggerSwipeDown() {
                        if (this._swipeRightCallback) {
                            OSUI.Helper.AsyncInvocation(this._swipeDownCallback);
                        }
                    }
                    _triggerSwipeLeft() {
                        if (this._swipeRightCallback) {
                            OSUI.Helper.AsyncInvocation(this._swipeLeftCallback);
                        }
                    }
                    _triggerSwipeRight() {
                        if (this._swipeRightCallback) {
                            OSUI.Helper.AsyncInvocation(this._swipeRightCallback);
                        }
                    }
                    _triggerSwipeUp() {
                        if (this._swipeRightCallback) {
                            OSUI.Helper.AsyncInvocation(this._swipeUpCallback);
                        }
                    }
                    setA11YProperties() {
                        console.warn(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        this._gestureStartEvent = this.EventGestureEnd.bind(this);
                        this._gestureMoveEvent = this.EventGestureMove.bind(this);
                        this._setEventListeners();
                    }
                    setHtmlElements() {
                        this._swipableElement = document.getElementById(this.configs.WidgetId);
                    }
                    unsetCallbacks() {
                        this._removeEventListeners();
                        this._gestureStartEvent = undefined;
                        this._gestureMoveEvent = undefined;
                    }
                    unsetHtmlElements() {
                        this._swipableElement = undefined;
                    }
                    EventGestureEnd(offsetX, offsetY, timeTaken) {
                        if ((Math.abs(offsetX) > this._threshold || Math.abs(offsetY) > this._threshold) &&
                            (Math.abs(offsetX) / timeTaken > this._velocity || Math.abs(offsetY) / timeTaken > this._velocity)) {
                            if (Math.abs(offsetX) > Math.abs(offsetY)) {
                                if (offsetX > 0) {
                                    this._triggerSwipeRight();
                                }
                                else {
                                    this._triggerSwipeLeft();
                                }
                            }
                            else if (offsetY > 0) {
                                this._triggerSwipeDown();
                            }
                            else {
                                this._triggerSwipeUp();
                            }
                        }
                    }
                    EventGestureMove(event) {
                        if (event) {
                            event.preventDefault();
                        }
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this.setCallbacks();
                        this.finishBuild();
                    }
                    dispose() {
                        super.dispose();
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Patterns.SwipeEvents.Enum.Events.SwipeDown:
                                this._swipeDownCallback = callback;
                                break;
                            case Patterns.SwipeEvents.Enum.Events.SwipeUp:
                                this._swipeUpCallback = callback;
                                break;
                            case Patterns.SwipeEvents.Enum.Events.SwipeRight:
                                this._swipeRightCallback = callback;
                                break;
                            case Patterns.SwipeEvents.Enum.Events.SwipeLeft:
                                this._swipeLeftCallback = callback;
                                break;
                        }
                    }
                }
                SwipeEvents_1.SwipeEvents = SwipeEvents;
            })(SwipeEvents = Patterns.SwipeEvents || (Patterns.SwipeEvents = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SwipeEvents;
            (function (SwipeEvents) {
                class SwipeEventsConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                SwipeEvents.SwipeEventsConfig = SwipeEventsConfig;
            })(SwipeEvents = Patterns.SwipeEvents || (Patterns.SwipeEvents = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Tabs;
            (function (Tabs) {
                var Enum;
                (function (Enum) {
                    let ChildNotifyActionType;
                    (function (ChildNotifyActionType) {
                        ChildNotifyActionType["AddContentItem"] = "add-content-item";
                        ChildNotifyActionType["AddHeaderItem"] = "add-header-item";
                        ChildNotifyActionType["Click"] = "click";
                        ChildNotifyActionType["RemovedContentItem"] = "removed-content-item";
                        ChildNotifyActionType["RemovedHeaderItem"] = "removed-header-item";
                        ChildNotifyActionType["DisabledHeaderItem"] = "disabled-header-item";
                        ChildNotifyActionType["EnabledHeaderItem"] = "enabled-header-item";
                        ChildNotifyActionType["UpdateIndicator"] = "update-indicator";
                    })(ChildNotifyActionType = Enum.ChildNotifyActionType || (Enum.ChildNotifyActionType = {}));
                    let CssClasses;
                    (function (CssClasses) {
                        CssClasses["ActiveTab"] = "osui-tabs--is-active";
                        CssClasses["IsVertical"] = "osui-tabs--is-vertical";
                        CssClasses["IsHorizontal"] = "osui-tabs--is-horizontal";
                        CssClasses["IsJustified"] = "osui-tabs--is-justified";
                        CssClasses["HasContentAutoHeight"] = "osui-tabs--has-auto-height";
                        CssClasses["HasDragGestures"] = "osui-tabs--has-drag";
                        CssClasses["Modifier"] = "osui-tabs--is-";
                        CssClasses["TabsWrapper"] = "osui-tabs";
                        CssClasses["TabsHeader"] = "osui-tabs__header";
                        CssClasses["TabsContent"] = "osui-tabs__content";
                        CssClasses["TabsHeaderItem"] = "osui-tabs__header-item";
                        CssClasses["TabsContentItem"] = "osui-tabs__content-item";
                        CssClasses["TabsIndicatorElem"] = "osui-tabs__header__indicator";
                    })(CssClasses = Enum.CssClasses || (Enum.CssClasses = {}));
                    let Attributes;
                    (function (Attributes) {
                        Attributes["DataTab"] = "data-tab";
                        Attributes["DataDirection"] = "data-direction";
                    })(Attributes = Enum.Attributes || (Enum.Attributes = {}));
                    let CssProperty;
                    (function (CssProperty) {
                        CssProperty["TabsContentItemOverflow"] = "--tabs-content-item-overflow";
                        CssProperty["TabsHeaderItems"] = "--tabs-header-items";
                        CssProperty["TabsHeight"] = "--tabs-height";
                        CssProperty["TabsIndicatorSize"] = "--tabs-indicator-size";
                        CssProperty["TabsIndicatorTransform"] = "--tabs-indicator-transform";
                    })(CssProperty = Enum.CssProperty || (Enum.CssProperty = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["ContentAutoHeight"] = "ContentAutoHeight";
                        Properties["Height"] = "Height";
                        Properties["JustifyHeaders"] = "JustifyHeaders";
                        Properties["StartingTab"] = "StartingTab";
                        Properties["TabsOrientation"] = "TabsOrientation";
                        Properties["TabsVerticalPosition"] = "TabsVerticalPosition";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let ObserverOptions;
                    (function (ObserverOptions) {
                        ObserverOptions["RootMargin"] = "1px";
                    })(ObserverOptions = Enum.ObserverOptions || (Enum.ObserverOptions = {}));
                    let ElementsBlockingOnChange;
                    (function (ElementsBlockingOnChange) {
                        ElementsBlockingOnChange["Dropdown"] = ".pop-comp-active";
                    })(ElementsBlockingOnChange = Enum.ElementsBlockingOnChange || (Enum.ElementsBlockingOnChange = {}));
                    let ChildTypes;
                    (function (ChildTypes) {
                        ChildTypes["TabsContentItem"] = "TabsContentItem";
                        ChildTypes["TabsHeaderItem"] = "TabsHeaderItem";
                    })(ChildTypes = Enum.ChildTypes || (Enum.ChildTypes = {}));
                    let Events;
                    (function (Events) {
                        Events["OnChange"] = "OnChange";
                    })(Events = Enum.Events || (Enum.Events = {}));
                })(Enum = Tabs.Enum || (Tabs.Enum = {}));
            })(Tabs = Patterns.Tabs || (Patterns.Tabs = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Tabs;
            (function (Tabs_1) {
                class Tabs extends Patterns.AbstractParent {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Tabs_1.TabsConfig(configs));
                        this._hasDragGestures =
                            OSUI.Helper.DeviceInfo.IsNative && this.configs.TabsOrientation === OSUI.GlobalEnum.Orientation.Horizontal;
                    }
                    _addContentItem(tabsContentChildItem) {
                        if (this.getChild(tabsContentChildItem.uniqueId)) {
                            throw new Error(`${OSUI.ErrorCodes.Tabs.FailSetNewChildContentItem}: There is already a ${OSUI.GlobalEnum.PatternName.TabsContentItem} under Id: '${tabsContentChildItem.widgetId}' added to ${OSUI.GlobalEnum.PatternName.Tabs} with uniqueId: ${this.uniqueId}.`);
                        }
                        else {
                            this.setChild(tabsContentChildItem);
                        }
                        if (this.isBuilt) {
                            OSUI.Helper.AsyncInvocation(this._updateItemsConnection.bind(this));
                            if (this._activeTabContentElement === undefined) {
                                this._activeTabContentElement = tabsContentChildItem;
                            }
                            if (this._hasDragGestures) {
                                tabsContentChildItem.setOnDragObserver(this._dragObserver);
                            }
                        }
                        else {
                            tabsContentChildItem.setDataTab(this.getChildItems(Tabs_1.Enum.ChildTypes.TabsContentItem).length - 1);
                        }
                    }
                    _addEvents() {
                        this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnHeaderKeypress);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.WindowResize, this._eventOnResize);
                        if (OSUI.Helper.DeviceInfo.IsPhone || OSUI.Helper.DeviceInfo.IsTablet) {
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.OrientationChange, this._eventOnResize);
                        }
                    }
                    _addHeaderItem(tabsHeaderChildItem) {
                        if (this.getChild(tabsHeaderChildItem.uniqueId)) {
                            throw new Error(`${OSUI.ErrorCodes.Tabs.FailSetNewChildHeaderItem}: There is already a ${OSUI.GlobalEnum.PatternName.TabsHeaderItem} under Id: '${tabsHeaderChildItem.widgetId}' added to ${OSUI.GlobalEnum.PatternName.Tabs} with uniqueId: ${this.uniqueId}.`);
                        }
                        else {
                            this.setChild(tabsHeaderChildItem);
                        }
                        this._headerItemsLength = this.getChildItems(Tabs_1.Enum.ChildTypes.TabsHeaderItem).length;
                        const currentIndex = this._headerItemsLength - 1;
                        if (this.isBuilt) {
                            OSUI.Helper.AsyncInvocation(this._updateItemsConnection.bind(this));
                            if ((this._activeTabHeaderElement === undefined || this._activeTabHeaderElement === null) &&
                                currentIndex === this.configs.StartingTab) {
                                OSUI.Helper.AsyncInvocation(this.changeTab.bind(this), this.configs.StartingTab, tabsHeaderChildItem);
                            }
                            this._setHeaderItemsCustomProperty(this._headerItemsLength);
                            this._handleTabIndicator();
                        }
                        else {
                            tabsHeaderChildItem.setDataTab(currentIndex);
                        }
                    }
                    _changeActiveContentItem(newTabIndex, triggeredByObserver) {
                        var _a;
                        const newContentItem = this.getChildByIndex(newTabIndex, Tabs_1.Enum.ChildTypes.TabsContentItem);
                        if (newContentItem) {
                            (_a = this._activeTabContentElement) === null || _a === void 0 ? void 0 : _a.unsetIsActive();
                            newContentItem.setIsActive();
                            this._activeTabContentElement = newContentItem;
                        }
                        if (this._hasDragGestures && this.isBuilt) {
                            this._activeTabHeaderElement.setFocus();
                        }
                        if (triggeredByObserver === false) {
                            this._scrollToTargetContent(newContentItem);
                        }
                    }
                    _changeActiveHeaderItem(newHeaderItem) {
                        var _a;
                        if (this._activeTabHeaderElement) {
                            (_a = this._activeTabHeaderElement) === null || _a === void 0 ? void 0 : _a.unsetIsActive();
                        }
                        if (newHeaderItem) {
                            newHeaderItem.setIsActive();
                            this._activeTabHeaderElement = newHeaderItem;
                        }
                    }
                    _getTargetIndex(tabIndex) {
                        let newTabIndex;
                        if (this.getChildByIndex(tabIndex, Tabs_1.Enum.ChildTypes.TabsHeaderItem)) {
                            newTabIndex = tabIndex;
                        }
                        else if (this.getChildByIndex(this.configs.StartingTab, Tabs_1.Enum.ChildTypes.TabsHeaderItem)) {
                            newTabIndex = this.configs.StartingTab;
                        }
                        else {
                            newTabIndex = 0;
                        }
                        return newTabIndex;
                    }
                    _handleKeypressEvent(e) {
                        let currentTabHeader;
                        let targetHeaderItemIndex;
                        if (e.target.closest(`${OSUI.Constants.Dot}${Tabs_1.Enum.CssClasses.TabsContent}`) ===
                            this._tabsContentElement &&
                            (e.key === OSUI.GlobalEnum.Keycodes.PageDown || e.key === OSUI.GlobalEnum.Keycodes.PageUp)) {
                            e.preventDefault();
                            return;
                        }
                        if (e.target !== this._activeTabHeaderElement.selfElement) {
                            return;
                        }
                        switch (e.key) {
                            case OSUI.GlobalEnum.Keycodes.ArrowRight:
                                currentTabHeader = this._tabsHeadersEnabled.indexOf(this._activeTabHeaderElement);
                                targetHeaderItemIndex =
                                    this._tabsHeadersEnabled[currentTabHeader + 1] === undefined
                                        ? this._tabsHeadersEnabled[0].getDataTab()
                                        : this._tabsHeadersEnabled[currentTabHeader + 1].getDataTab();
                                this.changeTab(targetHeaderItemIndex, undefined, true);
                                break;
                            case OSUI.GlobalEnum.Keycodes.ArrowLeft:
                                currentTabHeader = this._tabsHeadersEnabled.indexOf(this._activeTabHeaderElement);
                                targetHeaderItemIndex =
                                    this._tabsHeadersEnabled[currentTabHeader - 1] === undefined
                                        ? this._tabsHeadersEnabled[this._tabsHeadersEnabled.length - 1].getDataTab()
                                        : this._tabsHeadersEnabled[currentTabHeader - 1].getDataTab();
                                this.changeTab(targetHeaderItemIndex, undefined, true);
                                break;
                            case OSUI.GlobalEnum.Keycodes.End:
                            case OSUI.GlobalEnum.Keycodes.PageDown:
                                targetHeaderItemIndex = this._tabsHeadersEnabled[this._tabsHeadersEnabled.length - 1].getDataTab();
                                this.changeTab(targetHeaderItemIndex, undefined, true);
                                break;
                            case OSUI.GlobalEnum.Keycodes.Home:
                            case OSUI.GlobalEnum.Keycodes.PageUp:
                                targetHeaderItemIndex = this._tabsHeadersEnabled[0].getDataTab();
                                this.changeTab(targetHeaderItemIndex, undefined, true);
                                break;
                        }
                        const targetHeaderItem = this.getChildByIndex(targetHeaderItemIndex, Tabs_1.Enum.ChildTypes.TabsHeaderItem);
                        if (targetHeaderItem) {
                            targetHeaderItem.setFocus();
                        }
                    }
                    _handleOnResizeEvent() {
                        this._scrollToTargetContent(this._activeTabContentElement);
                        OSUI.Helper.AsyncInvocation(this._handleTabIndicator.bind(this));
                    }
                    _handleTabIndicator() {
                        var _a;
                        if ((_a = this._activeTabHeaderElement) === null || _a === void 0 ? void 0 : _a.selfElement) {
                            if (!OSUI.Helper.Dom.Attribute.Get(this._activeTabHeaderElement.selfElement, OSUI.GlobalEnum.HTMLAttributes.Disabled)) {
                                OSUI.Helper.Dom.Attribute.Remove(this._tabsIndicatorElement, OSUI.GlobalEnum.HTMLAttributes.Disabled);
                            }
                            const _isVertical = this.configs.TabsOrientation === OSUI.GlobalEnum.Orientation.Vertical;
                            const _activeElement = this._activeTabHeaderElement.selfElement;
                            const _transformValue = _isVertical
                                ? _activeElement.offsetTop
                                : OutSystems.OSUI.Utils.GetIsRTL()
                                    ? -(this._tabsHeaderElement.offsetWidth -
                                        _activeElement.offsetLeft -
                                        _activeElement.offsetWidth)
                                    : _activeElement.offsetLeft;
                            const _elementRect = _activeElement.getBoundingClientRect();
                            const _finalSize = _isVertical ? _elementRect.height : _elementRect.width;
                            function updateIndicatorUI() {
                                if (this._tabsIndicatorElement) {
                                    OSUI.Helper.Dom.Styles.SetStyleAttribute(this._tabsIndicatorElement, Tabs_1.Enum.CssProperty.TabsIndicatorTransform, _transformValue + OSUI.GlobalEnum.Units.Pixel);
                                    OSUI.Helper.Dom.Styles.SetStyleAttribute(this._tabsIndicatorElement, Tabs_1.Enum.CssProperty.TabsIndicatorSize, Math.floor(_finalSize) + OSUI.GlobalEnum.Units.Pixel);
                                }
                                else {
                                    cancelAnimationFrame(this._requestAnimationFrameOnIndicatorResize);
                                }
                            }
                            this._requestAnimationFrameOnIndicatorResize = requestAnimationFrame(updateIndicatorUI.bind(this));
                            if (Number.isNaN(_finalSize) || _finalSize === 0) {
                                const resizeObserver = new ResizeObserver((entries) => {
                                    for (const entry of entries) {
                                        if (entry.contentBoxSize) {
                                            this._handleTabIndicator();
                                            resizeObserver.unobserve(_activeElement);
                                        }
                                    }
                                });
                                resizeObserver.observe(_activeElement);
                            }
                        }
                    }
                    _prepareHeaderAndContentItems() {
                        this._hasSingleContent = this.getChildItems(Tabs_1.Enum.ChildTypes.TabsContentItem).length === 1;
                        this._activeTabHeaderElement = this.getChildByIndex(this.configs.StartingTab, Tabs_1.Enum.ChildTypes.TabsHeaderItem);
                        this._activeTabContentElement = this._hasSingleContent
                            ? this.getChildByIndex(0, Tabs_1.Enum.ChildTypes.TabsContentItem)
                            : this.getChildByIndex(this.configs.StartingTab, Tabs_1.Enum.ChildTypes.TabsContentItem);
                        if (this._hasSingleContent) {
                            this._activeTabContentElement.setIsActive();
                        }
                        this._updateItemsConnection(false);
                        this._updateListOfEnabledTabsHeader();
                    }
                    _removeContentItem(childContentId) {
                        const childContentItem = this.getChild(childContentId);
                        let auxIndex;
                        if (childContentItem) {
                            auxIndex = this.getChildIndex(childContentId);
                            this.unsetChild(childContentId);
                        }
                        else {
                            throw new Error(`${OSUI.ErrorCodes.Tabs.FailUnsetNewChildContentItem}: The ${OSUI.GlobalEnum.PatternName.TabsContentItem} under uniqueId: '${childContentId}' does not exist as an TabsContentItem from ${OSUI.GlobalEnum.PatternName.Tabs} with Id: ${this.widgetId}.`);
                        }
                        if (this._hasDragGestures) {
                            childContentItem.unobserveDragObserver(this._dragObserver);
                        }
                        const wasActive = childContentItem.IsActive;
                        if (wasActive) {
                            if (this.getChildByIndex(auxIndex)) {
                                this._activeTabContentElement = this.getChildByIndex(auxIndex, Tabs_1.Enum.ChildTypes.TabsContentItem);
                                this._activeTabContentElement.setIsActive();
                            }
                            else if (this.getChildItems(Tabs_1.Enum.ChildTypes.TabsContentItem).length > 0) {
                                this._activeTabContentElement = this.getChildItems(Tabs_1.Enum.ChildTypes.TabsContentItem).filter((item) => item.isLastChild)[0];
                                this._activeTabContentElement.setIsActive();
                            }
                            else {
                                this._activeTabContentElement = null;
                            }
                        }
                    }
                    _removeEvents() {
                        this._tabsHeaderElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnHeaderKeypress);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.WindowResize, this._eventOnResize);
                        if (OSUI.Helper.DeviceInfo.IsPhone || OSUI.Helper.DeviceInfo.IsTablet) {
                            OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.OrientationChange, this._eventOnResize);
                        }
                    }
                    _removeHeaderItem(childHeaderId) {
                        const auxIndex = this.getChildIndex(childHeaderId);
                        const wasActive = this.getChild(childHeaderId).IsActive;
                        if (this.getChild(childHeaderId)) {
                            this.unsetChild(childHeaderId);
                        }
                        else {
                            throw new Error(`${OSUI.ErrorCodes.Tabs.FailUnsetNewChildHeaderItem}: The ${OSUI.GlobalEnum.PatternName.TabsHeaderItem} under uniqueId: '${childHeaderId}' does not exist as an TabsHeaderItem from ${OSUI.GlobalEnum.PatternName.Tabs} with Id: ${this.widgetId}.`);
                        }
                        this._headerItemsLength = this._headerItemsLength - 1;
                        if (this.isBuilt) {
                            this._setHeaderItemsCustomProperty(this._headerItemsLength);
                            if (wasActive) {
                                if (this.getChildByIndex(auxIndex)) {
                                    this._activeTabHeaderElement = this.getChildByIndex(auxIndex, Tabs_1.Enum.ChildTypes.TabsHeaderItem);
                                    this._activeTabHeaderElement.setIsActive();
                                }
                                else if (this.getChildItems(Tabs_1.Enum.ChildTypes.TabsHeaderItem).length > 0) {
                                    this._activeTabHeaderElement = this.getChildItems(Tabs_1.Enum.ChildTypes.TabsHeaderItem).filter((item) => item.isLastChild)[0];
                                    this._activeTabHeaderElement.setIsActive();
                                }
                                else {
                                    this._activeTabHeaderElement = null;
                                }
                                this._handleTabIndicator();
                            }
                        }
                    }
                    _scrollToTargetContent(newContentItem) {
                        if (newContentItem) {
                            this._tabsContentElement.scrollTo({
                                top: 0,
                                left: newContentItem.getOffsetLeft(),
                                behavior: OSUI.GlobalEnum.ScrollBehavior.Auto,
                            });
                        }
                    }
                    _setContentAutoHeight(hasAutoHeight) {
                        if (this._hasDragGestures === false) {
                            if (hasAutoHeight) {
                                OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Tabs_1.Enum.CssClasses.HasContentAutoHeight);
                            }
                            else {
                                OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Tabs_1.Enum.CssClasses.HasContentAutoHeight);
                            }
                        }
                        else {
                            console.warn(`Tabs (${this.widgetId}): changes to ${Tabs_1.Enum.Properties.ContentAutoHeight} parameter do not affect tabs when Gestures are in use.`);
                        }
                    }
                    _setDragObserver() {
                        const observerOptions = {
                            root: this._tabsContentElement,
                            rootMargin: Tabs_1.Enum.ObserverOptions.RootMargin,
                            threshold: 1,
                        };
                        this._dragObserver = new IntersectionObserver((entries) => {
                            entries.forEach((entry) => {
                                if (entry.isIntersecting) {
                                    const targetIndex = parseInt(OSUI.Helper.Dom.Attribute.Get(entry.target, Tabs_1.Enum.Attributes.DataTab));
                                    const currentHeaderItem = this.getChildByIndex(targetIndex, Tabs_1.Enum.ChildTypes.TabsHeaderItem);
                                    OSUI.Helper.AsyncInvocation(this.changeTab.bind(this), targetIndex, currentHeaderItem, true, true);
                                }
                            });
                        }, observerOptions);
                        this.getChildItems(Tabs_1.Enum.ChildTypes.TabsContentItem).forEach((item) => {
                            item.setOnDragObserver(this._dragObserver);
                        });
                    }
                    _setHeaderItemsCustomProperty(itemsLength) {
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Tabs_1.Enum.CssProperty.TabsHeaderItems, itemsLength);
                    }
                    _setHeight(height) {
                        const tabsOverflow = height === OSUI.GlobalEnum.CssProperties.Auto || height === OSUI.Constants.EmptyString
                            ? OSUI.GlobalEnum.CssProperties.Initial
                            : OSUI.GlobalEnum.CssProperties.Auto;
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Tabs_1.Enum.CssProperty.TabsHeight, height);
                        OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, Tabs_1.Enum.CssProperty.TabsContentItemOverflow, tabsOverflow);
                    }
                    _setInitialOptions() {
                        this._setHeaderItemsCustomProperty(this.getChildItems(Tabs_1.Enum.ChildTypes.TabsHeaderItem).length);
                        this._setOrientation(this.configs.TabsOrientation);
                        OSUI.Helper.AsyncInvocation(this._setHeight.bind(this), this.configs.Height);
                        OSUI.Helper.AsyncInvocation(this._setPosition.bind(this), this.configs.TabsVerticalPosition);
                        OSUI.Helper.AsyncInvocation(this._setIsJustified.bind(this), this.configs.JustifyHeaders);
                        OSUI.Helper.AsyncInvocation(this._setContentAutoHeight.bind(this), this.configs.ContentAutoHeight);
                        if (this._hasDragGestures) {
                            OSUI.Helper.AsyncInvocation(this.toggleDragGestures.bind(this), true);
                        }
                    }
                    _setIsJustified(isJustified) {
                        if (isJustified) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Tabs_1.Enum.CssClasses.IsJustified);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Tabs_1.Enum.CssClasses.IsJustified);
                        }
                        if (this.isBuilt) {
                            this._handleTabIndicator();
                        }
                    }
                    _setOrientation(orientation) {
                        OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Tabs_1.Enum.CssClasses.Modifier + this._currentOrientation);
                        OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Tabs_1.Enum.CssClasses.Modifier + orientation);
                        this._currentOrientation = orientation;
                        if (this.isBuilt) {
                            this._handleTabIndicator();
                            this._scrollToTargetContent(this._activeTabContentElement);
                        }
                    }
                    _setPosition(position) {
                        OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Tabs_1.Enum.CssClasses.Modifier + this._currentVerticalPositon);
                        OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Tabs_1.Enum.CssClasses.Modifier + position);
                        this._currentVerticalPositon = position;
                    }
                    _setTabHeaderItemDisabledStatus(childHeaderId, isDisabled) {
                        const _tabHeaderItemElement = OSUI.Helper.Dom.GetElementByUniqueId(childHeaderId);
                        const _tabItemIndex = this.getChildIndex(childHeaderId);
                        const _tabContentItemId = this.getChildByIndex(this._hasSingleContent ? 0 : _tabItemIndex, Tabs_1.Enum.ChildTypes.TabsContentItem).widgetId;
                        const _tabContentItemElement = OSUI.Helper.Dom.GetElementById(_tabContentItemId);
                        const isTabHeaderItemDisabled = OSUI.Helper.Dom.Attribute.Get(_tabHeaderItemElement, OSUI.GlobalEnum.HTMLAttributes.Disabled);
                        if (isDisabled) {
                            let _allTabsDisabled = false;
                            OSUI.Helper.Dom.Attribute.Set(_tabHeaderItemElement, OSUI.GlobalEnum.HTMLAttributes.Disabled, 'true');
                            if (this._hasSingleContent) {
                                _allTabsDisabled = this.getChildItems().every((tabHeaderItem) => tabHeaderItem.selfElement.getAttribute(OSUI.GlobalEnum.HTMLAttributes.Disabled));
                            }
                            if (this._hasSingleContent === false || _allTabsDisabled) {
                                OSUI.Helper.Dom.Styles.SetStyleAttribute(_tabContentItemElement, OSUI.GlobalEnum.InlineStyle.Display, OSUI.GlobalEnum.InlineStyleValue.Display.none);
                            }
                            if (this._activeTabHeaderElement.selfElement === _tabHeaderItemElement) {
                                OSUI.Helper.Dom.Attribute.Set(this._tabsIndicatorElement, OSUI.GlobalEnum.HTMLAttributes.Disabled, true);
                            }
                        }
                        else if (!isDisabled && isTabHeaderItemDisabled) {
                            OSUI.Helper.Dom.Attribute.Remove(_tabHeaderItemElement, OSUI.GlobalEnum.HTMLAttributes.Disabled);
                            OSUI.Helper.Dom.Styles.SetStyleAttribute(_tabContentItemElement, OSUI.GlobalEnum.InlineStyle.Display, OSUI.GlobalEnum.InlineStyleValue.Display.contents);
                            if (this._activeTabHeaderElement.selfElement === _tabHeaderItemElement) {
                                OSUI.Helper.Dom.Attribute.Remove(this._tabsIndicatorElement, OSUI.GlobalEnum.HTMLAttributes.Disabled);
                            }
                        }
                    }
                    _tabHeaderItemHasBeenClicked(childHeaderId) {
                        const newHeaderItem = this.getChild(childHeaderId);
                        if (newHeaderItem === undefined) {
                            throw new Error(`${OSUI.ErrorCodes.Tabs.FailChildItemClicked}: The ${OSUI.GlobalEnum.PatternName.TabsHeaderItem} under uniqueId: '${childHeaderId}' does not exist as an TabsHeaderItem from ${OSUI.GlobalEnum.PatternName.Tabs} with Id: ${this.widgetId}.`);
                        }
                        this.changeTab(this.getChildIndex(childHeaderId), newHeaderItem, true);
                    }
                    _triggerOnChangeEvent(activeTab) {
                        if (this._platformEventTabsOnChange !== undefined) {
                            this.triggerPlatformEventCallback(this._platformEventTabsOnChange, activeTab);
                        }
                    }
                    _unsetDragObserver() {
                        this._dragObserver.disconnect();
                    }
                    _updateItemsConnection(updateDataTab = true) {
                        let currentContentItem = this.getChildByIndex(0, Tabs_1.Enum.ChildTypes.TabsContentItem);
                        this.getChildItems(Tabs_1.Enum.ChildTypes.TabsHeaderItem).forEach((item, index) => {
                            if (this._hasSingleContent === false) {
                                currentContentItem = this.getChildByIndex(index, Tabs_1.Enum.ChildTypes.TabsContentItem);
                            }
                            if (item && currentContentItem) {
                                item.setAriaControlsAttribute(currentContentItem.widgetId);
                                currentContentItem.setAriaLabelledByAttribute(item.widgetId);
                                if (updateDataTab) {
                                    item.setDataTab(index);
                                    currentContentItem.setDataTab(index);
                                }
                            }
                        });
                    }
                    _updateListOfEnabledTabsHeader() {
                        this._tabsHeadersEnabled = this.getChildItems(Tabs_1.Enum.ChildTypes.TabsHeaderItem).filter((element) => !element.selfElement.disabled);
                    }
                    setA11YProperties() {
                        OSUI.Helper.A11Y.RoleTabList(this._tabsHeaderElement.firstElementChild);
                        OSUI.Helper.A11Y.AriaHiddenTrue(this._tabsIndicatorElement);
                    }
                    setCallbacks() {
                        this._eventOnHeaderKeypress = this._handleKeypressEvent.bind(this);
                        this._eventOnResize = this._handleOnResizeEvent.bind(this);
                        this._addEvents();
                    }
                    setHtmlElements() {
                        this._tabsHeaderElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, Tabs_1.Enum.CssClasses.TabsHeader);
                        this._tabsContentElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, Tabs_1.Enum.CssClasses.TabsContent);
                        this._tabsIndicatorElement = OSUI.Helper.Dom.ClassSelector(this.selfElement, Tabs_1.Enum.CssClasses.TabsIndicatorElem);
                    }
                    unsetCallbacks() {
                        this._removeEvents();
                        this._eventOnHeaderKeypress = undefined;
                        this._eventOnResize = undefined;
                        if (this._hasDragGestures) {
                            this._unsetDragObserver();
                        }
                        this._requestAnimationFrameOnIndicatorResize = undefined;
                    }
                    unsetHtmlElements() {
                        this._tabsHeaderElement = undefined;
                        this._tabsContentElement = undefined;
                        this._tabsIndicatorElement = undefined;
                    }
                    beNotifiedByChild(childItem, notifiedTo) {
                        switch (notifiedTo) {
                            case Tabs_1.Enum.ChildNotifyActionType.AddContentItem:
                                this._addContentItem(childItem);
                                break;
                            case Tabs_1.Enum.ChildNotifyActionType.AddHeaderItem:
                                this._addHeaderItem(childItem);
                                this._updateListOfEnabledTabsHeader();
                                break;
                            case Tabs_1.Enum.ChildNotifyActionType.Click:
                                this._tabHeaderItemHasBeenClicked(childItem.uniqueId);
                                break;
                            case Tabs_1.Enum.ChildNotifyActionType.DisabledHeaderItem:
                                this._setTabHeaderItemDisabledStatus(childItem.uniqueId, true);
                                this._updateListOfEnabledTabsHeader();
                                break;
                            case Tabs_1.Enum.ChildNotifyActionType.EnabledHeaderItem:
                                this._setTabHeaderItemDisabledStatus(childItem.uniqueId, false);
                                this._updateListOfEnabledTabsHeader();
                                break;
                            case Tabs_1.Enum.ChildNotifyActionType.RemovedContentItem:
                                this._removeContentItem(childItem.uniqueId);
                                break;
                            case Tabs_1.Enum.ChildNotifyActionType.RemovedHeaderItem:
                                this._removeHeaderItem(childItem.uniqueId);
                                this._updateListOfEnabledTabsHeader();
                                break;
                            case Tabs_1.Enum.ChildNotifyActionType.UpdateIndicator:
                                this._handleTabIndicator();
                                break;
                            default:
                                throw new Error(`${OSUI.ErrorCodes.Tabs.FailToSetChildItemAction}: There no exist a '${notifiedTo}' notification type.`);
                        }
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this._setInitialOptions();
                        this._prepareHeaderAndContentItems();
                        this.changeTab(this.configs.StartingTab);
                        OSUI.Helper.AsyncInvocation(this.setCallbacks.bind(this));
                        OSUI.Helper.AsyncInvocation(this.setA11YProperties.bind(this));
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case Tabs_1.Enum.Properties.StartingTab:
                                    console.warn(`Tabs (${this.widgetId}): changes to ${Tabs_1.Enum.Properties.StartingTab} parameter do not affect the tabs. Use the client action 'SetActiveTab' to affect the Tabs.`);
                                    break;
                                case Tabs_1.Enum.Properties.Height:
                                    this._setHeight(propertyValue);
                                    break;
                                case Tabs_1.Enum.Properties.TabsOrientation:
                                    this._setOrientation(propertyValue);
                                    break;
                                case Tabs_1.Enum.Properties.TabsVerticalPosition:
                                    this._setPosition(propertyValue);
                                    break;
                                case Tabs_1.Enum.Properties.JustifyHeaders:
                                    this._setIsJustified(propertyValue);
                                    break;
                                case Tabs_1.Enum.Properties.ContentAutoHeight:
                                    this._setContentAutoHeight(propertyValue);
                                    break;
                            }
                        }
                    }
                    changeTab(tabIndex = this.configs.StartingTab, tabsHeaderItem, triggerEvent = false, triggeredByObserver = false) {
                        if (this._activeTabHeaderElement === tabsHeaderItem ||
                            (tabIndex === this.configs.StartingTab && this.isBuilt && tabsHeaderItem === undefined) ||
                            this._activeTabContentElement.selfElement.querySelector(Tabs_1.Enum.ElementsBlockingOnChange.Dropdown)) {
                            return;
                        }
                        let newTabIndex;
                        let newHeaderItem;
                        if (tabsHeaderItem === undefined) {
                            newTabIndex = this._getTargetIndex(tabIndex);
                            newHeaderItem = this.getChildByIndex(newTabIndex, Tabs_1.Enum.ChildTypes.TabsHeaderItem);
                        }
                        else {
                            newTabIndex = tabIndex;
                            newHeaderItem = tabsHeaderItem;
                        }
                        this._changeActiveHeaderItem(newHeaderItem);
                        if (this._hasSingleContent === false) {
                            this._changeActiveContentItem(newTabIndex, triggeredByObserver);
                        }
                        OSUI.Helper.AsyncInvocation(this._handleTabIndicator.bind(this));
                        this.configs.StartingTab = newTabIndex;
                        if (triggerEvent) {
                            this._triggerOnChangeEvent(newTabIndex);
                        }
                    }
                    dispose() {
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Tabs_1.Enum.Events.OnChange:
                                if (this._platformEventTabsOnChange === undefined) {
                                    this._platformEventTabsOnChange = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    toggleDragGestures(addDragGestures) {
                        if (addDragGestures) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Patterns.Tabs.Enum.CssClasses.HasDragGestures);
                            this._hasDragGestures = true;
                            this._setDragObserver();
                        }
                        else if (this._hasDragGestures) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Patterns.Tabs.Enum.CssClasses.HasDragGestures);
                            this._hasDragGestures = false;
                            this._unsetDragObserver();
                        }
                    }
                }
                Tabs_1.Tabs = Tabs;
            })(Tabs = Patterns.Tabs || (Patterns.Tabs = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Tabs;
            (function (Tabs) {
                class TabsConfig extends Patterns.AbstractConfiguration {
                    validateCanChange(isBuilt, key) {
                        if (isBuilt) {
                            return key !== Tabs.Enum.Properties.StartingTab;
                        }
                        return true;
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case Tabs.Enum.Properties.TabsOrientation:
                                validatedValue = this.validateInRange(value, OSUI.GlobalEnum.Orientation.Horizontal, OSUI.GlobalEnum.Orientation.Vertical);
                                break;
                            case Tabs.Enum.Properties.TabsVerticalPosition:
                                validatedValue = this.validateInRange(value, OSUI.GlobalEnum.Direction.Left, OSUI.GlobalEnum.Direction.Right);
                                break;
                            case Tabs.Enum.Properties.ContentAutoHeight:
                            case Tabs.Enum.Properties.JustifyHeaders:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            case Tabs.Enum.Properties.Height:
                                validatedValue = this.validateString(value, OSUI.GlobalEnum.CssProperties.Auto);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                Tabs.TabsConfig = TabsConfig;
            })(Tabs = Patterns.Tabs || (Patterns.Tabs = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TabsContentItem;
            (function (TabsContentItem_1) {
                class TabsContentItem extends Patterns.AbstractChild {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new TabsContentItem_1.TabsContentItemConfig(configs));
                    }
                    setA11YProperties(isUpdate = true) {
                        if (isUpdate) {
                            OSUI.Helper.A11Y.RoleTabPanel(this.selfElement);
                        }
                        if (this._isActive) {
                            OSUI.Helper.A11Y.TabIndexTrue(this.selfElement);
                            OSUI.Helper.A11Y.AriaHiddenFalse(this.selfElement);
                            OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                        }
                        else {
                            OSUI.Helper.A11Y.TabIndexFalse(this.selfElement);
                            OSUI.Helper.A11Y.AriaHiddenTrue(this.selfElement);
                            OSUI.Helper.Dom.Attribute.Remove(this.selfElement, OSUI.Constants.FocusableTabIndexDefault);
                        }
                        OSUI.Helper.A11Y.SetElementsTabIndex(this._isActive, this._focusableElements);
                    }
                    setCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        this._focusableElements = OSUI.Helper.Dom.GetFocusableElements(this.selfElement);
                    }
                    unsetCallbacks() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetHtmlElements() {
                        this._focusableElements = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this.setParentInfo(OSUI.Constants.Dot + Patterns.Tabs.Enum.CssClasses.TabsWrapper, OutSystems.OSUI.Patterns.TabsAPI.GetTabsById);
                        this.notifyParent(Patterns.Tabs.Enum.ChildNotifyActionType.AddContentItem);
                        this.setA11YProperties(false);
                        this.finishBuild();
                    }
                    dispose() {
                        this.unsetHtmlElements();
                        this.notifyParent(Patterns.Tabs.Enum.ChildNotifyActionType.RemovedContentItem);
                        super.dispose();
                    }
                    getDataTab() {
                        return this._dataTab;
                    }
                    getOffsetLeft() {
                        return this.selfElement.offsetLeft;
                    }
                    setAriaLabelledByAttribute(headerItemId) {
                        OSUI.Helper.A11Y.AriaLabelledBy(this.selfElement, headerItemId);
                    }
                    setDataTab(dataTab) {
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, Patterns.Tabs.Enum.Attributes.DataTab, dataTab.toString());
                        this._dataTab = dataTab;
                    }
                    setIsActive() {
                        if (this.selfElement) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Patterns.Tabs.Enum.CssClasses.ActiveTab);
                            this._isActive = true;
                            this.setA11YProperties();
                        }
                    }
                    setOnDragObserver(observer) {
                        observer.observe(this.selfElement);
                    }
                    unobserveDragObserver(observer) {
                        observer.unobserve(this.selfElement);
                    }
                    unsetIsActive() {
                        if (this.selfElement) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Patterns.Tabs.Enum.CssClasses.ActiveTab);
                            this._isActive = false;
                            this.setA11YProperties();
                        }
                    }
                    get IsActive() {
                        return this._isActive;
                    }
                }
                TabsContentItem_1.TabsContentItem = TabsContentItem;
            })(TabsContentItem = Patterns.TabsContentItem || (Patterns.TabsContentItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TabsContentItem;
            (function (TabsContentItem) {
                class TabsContentItemConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                TabsContentItem.TabsContentItemConfig = TabsContentItemConfig;
            })(TabsContentItem = Patterns.TabsContentItem || (Patterns.TabsContentItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TabsHeaderItem;
            (function (TabsHeaderItem_1) {
                class TabsHeaderItem extends Patterns.AbstractChild {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new TabsHeaderItem_1.TabsHeaderItemConfig(configs));
                        this._isActive = false;
                    }
                    _handleClickEvent() {
                        if (this._isActive === false) {
                            this.notifyParent(Patterns.Tabs.Enum.ChildNotifyActionType.Click);
                        }
                    }
                    _removeEvents() {
                        this.selfElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnTabsClick);
                    }
                    _setUpEvents() {
                        this.selfElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnTabsClick);
                    }
                    setA11YProperties(isUpdate = true) {
                        if (isUpdate === false) {
                            OSUI.Helper.A11Y.RoleTab(this.selfElement);
                            if (OSUI.Helper.DeviceInfo.IsIos || OSUI.Helper.DeviceInfo.GetOperatingSystem() === OSUI.GlobalEnum.MobileOS.MacOS) {
                                OSUI.Helper.A11Y.RolePresentation(this.selfElement.parentElement);
                            }
                        }
                        if (this._isActive) {
                            OSUI.Helper.A11Y.TabIndexTrue(this.selfElement);
                            OSUI.Helper.A11Y.AriaSelectedTrue(this.selfElement);
                            OSUI.Helper.Dom.Attribute.Set(this.selfElement, OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                        }
                        else {
                            OSUI.Helper.A11Y.TabIndexFalse(this.selfElement);
                            OSUI.Helper.A11Y.AriaSelectedFalse(this.selfElement);
                            OSUI.Helper.Dom.Attribute.Remove(this.selfElement, OSUI.Constants.FocusableTabIndexDefault);
                        }
                    }
                    setCallbacks() {
                        this._eventOnTabsClick = this._handleClickEvent.bind(this);
                    }
                    setHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetCallbacks() {
                        this._eventOnTabsClick = undefined;
                    }
                    unsetHtmlElements() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    build() {
                        super.build();
                        this.setParentInfo(OSUI.Constants.Dot + Patterns.Tabs.Enum.CssClasses.TabsWrapper, OutSystems.OSUI.Patterns.TabsAPI.GetTabsById);
                        this.notifyParent(Patterns.Tabs.Enum.ChildNotifyActionType.AddHeaderItem);
                        this.setA11YProperties(false);
                        this.setCallbacks();
                        this._setUpEvents();
                        this.finishBuild();
                    }
                    disable() {
                        this.notifyParent(Patterns.Tabs.Enum.ChildNotifyActionType.DisabledHeaderItem);
                    }
                    dispose() {
                        this.notifyParent(Patterns.Tabs.Enum.ChildNotifyActionType.RemovedHeaderItem);
                        this._removeEvents();
                        this.unsetCallbacks();
                        super.dispose();
                    }
                    enable() {
                        this.notifyParent(Patterns.Tabs.Enum.ChildNotifyActionType.EnabledHeaderItem);
                    }
                    getDataTab() {
                        return this._dataTab;
                    }
                    setAriaControlsAttribute(contentItemId) {
                        OSUI.Helper.A11Y.AriaControls(this.selfElement, contentItemId);
                    }
                    setDataTab(dataTab) {
                        OSUI.Helper.Dom.Attribute.Set(this.selfElement, Patterns.Tabs.Enum.Attributes.DataTab, dataTab.toString());
                        this._dataTab = dataTab;
                    }
                    setFocus() {
                        this.selfElement.focus();
                    }
                    setIsActive() {
                        if (this.selfElement) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Patterns.Tabs.Enum.CssClasses.ActiveTab);
                            this._isActive = true;
                            this.setA11YProperties();
                        }
                    }
                    unsetIsActive() {
                        if (this.selfElement) {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Patterns.Tabs.Enum.CssClasses.ActiveTab);
                            this._isActive = false;
                            this.setA11YProperties();
                        }
                    }
                    updateOnRender() {
                        this.notifyParent(Patterns.Tabs.Enum.ChildNotifyActionType.UpdateIndicator);
                    }
                    get IsActive() {
                        return this._isActive;
                    }
                }
                TabsHeaderItem_1.TabsHeaderItem = TabsHeaderItem;
            })(TabsHeaderItem = Patterns.TabsHeaderItem || (Patterns.TabsHeaderItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TabsHeaderItem;
            (function (TabsHeaderItem) {
                class TabsHeaderItemConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                TabsHeaderItem.TabsHeaderItemConfig = TabsHeaderItemConfig;
            })(TabsHeaderItem = Patterns.TabsHeaderItem || (Patterns.TabsHeaderItem = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TimePicker;
            (function (TimePicker) {
                class AbstractTimePicker extends Patterns.AbstractProviderPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                    }
                }
                TimePicker.AbstractTimePicker = AbstractTimePicker;
            })(TimePicker = Patterns.TimePicker || (Patterns.TimePicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TimePicker;
            (function (TimePicker) {
                class AbstractTimePickerConfig extends Patterns.AbstractProviderConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case TimePicker.Enum.Properties.Is24Hours:
                                validatedValue = this.validateBoolean(value, true);
                                break;
                            case TimePicker.Enum.Properties.InitialTime:
                            case TimePicker.Enum.Properties.MaxTime:
                            case TimePicker.Enum.Properties.MinTime:
                                validatedValue = this.validateTime(value, undefined);
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                TimePicker.AbstractTimePickerConfig = AbstractTimePickerConfig;
            })(TimePicker = Patterns.TimePicker || (Patterns.TimePicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TimePicker;
            (function (TimePicker) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Dropdown"] = "osui-timepicker__dropdown";
                        CssClass["Pattern"] = "osui-timepicker";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let TimePickerEvents;
                    (function (TimePickerEvents) {
                        TimePickerEvents["OnChange"] = "OnChange";
                    })(TimePickerEvents = Enum.TimePickerEvents || (Enum.TimePickerEvents = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["InitialTime"] = "InitialTime";
                        Properties["Is24Hours"] = "Is24Hours";
                        Properties["MaxTime"] = "MaxTime";
                        Properties["MinTime"] = "MinTime";
                        Properties["TimeFormat"] = "TimeFormat";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let Provider;
                    (function (Provider) {
                        Provider["FlatPicker"] = "flatpickr";
                    })(Provider = Enum.Provider || (Enum.Provider = {}));
                    let TimeFormatMode;
                    (function (TimeFormatMode) {
                        TimeFormatMode["Time12hFormat"] = "12";
                        TimeFormatMode["Time24hFormat"] = "24";
                    })(TimeFormatMode = Enum.TimeFormatMode || (Enum.TimeFormatMode = {}));
                })(Enum = TimePicker.Enum || (TimePicker.Enum = {}));
            })(TimePicker = Patterns.TimePicker || (Patterns.TimePicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TimePicker;
            (function (TimePicker) {
                var Factory;
                (function (Factory) {
                    function NewTimePicker(timePickerId, configs, provider) {
                        let _timePickerItem = null;
                        if (provider === TimePicker.Enum.Provider.FlatPicker) {
                            _timePickerItem = new Providers.OSUI.TimePicker.Flatpickr.OSUIFlatpickrTime(timePickerId, JSON.parse(configs));
                        }
                        else {
                            throw new Error(`There is no ${OSUI.GlobalEnum.PatternName.Timepicker} of the ${provider} provider`);
                        }
                        return _timePickerItem;
                    }
                    Factory.NewTimePicker = NewTimePicker;
                })(Factory = TimePicker.Factory || (TimePicker.Factory = {}));
            })(TimePicker = Patterns.TimePicker || (Patterns.TimePicker = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Tooltip;
            (function (Tooltip) {
                var Enum;
                (function (Enum) {
                    let AriaLabelText;
                    (function (AriaLabelText) {
                        AriaLabelText["Content"] = "toggle tooltip";
                    })(AriaLabelText = Enum.AriaLabelText || (Enum.AriaLabelText = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["Arrow"] = "osui-tooltip__balloon-arrow";
                        CssClass["BalloonContent"] = "osui-tooltip__balloon-wrapper__balloon";
                        CssClass["BalloonIsOpened"] = "osui-tooltip__balloon-wrapper--is-open";
                        CssClass["BalloonIsOpening"] = "osui-tooltip__balloon-wrapper--is-opening";
                        CssClass["BalloonWrapper"] = "osui-tooltip__balloon-wrapper";
                        CssClass["Content"] = "osui-tooltip__content";
                        CssClass["IsHover"] = "osui-tooltip--is-hover";
                        CssClass["IsOpened"] = "osui-tooltip--is-open";
                        CssClass["Pattern"] = "osui-tooltip";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Events;
                    (function (Events) {
                        Events["OnToggle"] = "OnToggle";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let InlineCssVariables;
                    (function (InlineCssVariables) {
                        InlineCssVariables["Height"] = "--osui-tooltip-height";
                        InlineCssVariables["Left"] = "--osui-tooltip-left";
                        InlineCssVariables["Top"] = "--osui-tooltip-top";
                        InlineCssVariables["Width"] = "--osui-tooltip-width";
                    })(InlineCssVariables = Enum.InlineCssVariables || (Enum.InlineCssVariables = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["IsHover"] = "IsHover";
                        Properties["Position"] = "Position";
                        Properties["StartVisible"] = "StartVisible";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                })(Enum = Tooltip.Enum || (Tooltip.Enum = {}));
            })(Tooltip = Patterns.Tooltip || (Patterns.Tooltip = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Tooltip;
            (function (Tooltip_1) {
                class Tooltip extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Tooltip_1.TooltipConfig(configs));
                        this._isBalloonWrapperMouseEnter = false;
                        this._isIconMouseEnter = false;
                        this._isOpen = false;
                        this._isOpenedByApi = false;
                    }
                    _balloonOnToggleCallback(_args, e) {
                        if (e.detail.balloonElem === this._balloonElem && e.detail.isOpen !== this._isOpen) {
                            this._triggerClose(true);
                        }
                    }
                    _onBalloonClick(e) {
                        const clickableItems = Array.from(this._tooltipBalloonContentElem.querySelectorAll(OSUI.Constants.FocusableElems + ', ' + OSUI.GlobalEnum.HTMLAttributes.AllowEventPropagation));
                        let _childHasClickEvent = false;
                        for (const item of clickableItems) {
                            if (e.target === item) {
                                _childHasClickEvent = true;
                                break;
                            }
                        }
                        if (_childHasClickEvent === false) {
                            e.stopPropagation();
                        }
                    }
                    _onBalloonWrapperMouseEnter() {
                        this._isBalloonWrapperMouseEnter = true;
                    }
                    _onBalloonWrapperMouseLeave() {
                        this._isBalloonWrapperMouseEnter = false;
                        OSUI.Helper.AsyncInvocation(() => {
                            if (this._isIconMouseEnter === false) {
                                this._triggerClose();
                            }
                        });
                    }
                    _onBlur() {
                        OSUI.Helper.AsyncInvocation(() => {
                            if (this._tooltipBalloonContentActiveElem) {
                                this._tooltipBalloonContentActiveElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Blur, this._eventOnBlur);
                            }
                            const _closestElem = document.activeElement.closest(OSUI.Constants.Dot + Tooltip_1.Enum.CssClass.Pattern);
                            if (_closestElem !== this.selfElement &&
                                (_closestElem === null || _closestElem === void 0 ? void 0 : _closestElem.contains(_closestElem.querySelector(OSUI.Constants.AllowPropagationAttr))) === false) {
                                this._triggerClose();
                            }
                            else {
                                this._tooltipBalloonContentActiveElem = document.activeElement;
                                this._tooltipBalloonContentActiveElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.Blur, this._eventOnBlur);
                            }
                        });
                    }
                    _onClick(e) {
                        e.stopPropagation();
                        this._triggerOpen();
                    }
                    _onFocus() {
                        this._triggerOpen();
                    }
                    _onIconMouseEnter() {
                        this._isIconMouseEnter = true;
                        if (this._isOpen === false) {
                            this._triggerOpen();
                        }
                    }
                    _onIconMouseLeave() {
                        this._isIconMouseEnter = false;
                        OSUI.Helper.AsyncInvocation(() => {
                            if (this._isBalloonWrapperMouseEnter === false) {
                                this._triggerClose();
                            }
                        });
                    }
                    _onkeypressCallback(e) {
                        if ((this._isOpen && e.key === OSUI.GlobalEnum.Keycodes.Escape) || e.key === OSUI.GlobalEnum.Keycodes.Tab) {
                            this.close();
                        }
                        e.stopPropagation();
                    }
                    _setBalloonFeature() {
                        this.setBalloonOptions();
                        this._balloonFeature = new OSFramework.OSUI.Feature.Balloon.Balloon(this, this._balloonElem, this.balloonOptions);
                    }
                    _setCssClasses() {
                        if (this.configs.IsHover) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Tooltip_1.Enum.CssClass.IsHover);
                        }
                        if (this.configs.StartVisible) {
                            this._triggerOpen();
                        }
                    }
                    _setUpEvents() {
                        if (this.configs.IsHover === false) {
                            this._tooltipIconElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.Blur, this._eventOnBlur);
                            this._tooltipIconElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._eventOnFocus);
                            this._tooltipIconElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeypress);
                        }
                        if (this.configs.IsHover === false || OSUI.Helper.DeviceInfo.IsDesktop === false) {
                            this._tooltipBalloonContentElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnBalloonClick);
                            this._tooltipIconElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        }
                        if (this.configs.IsHover && OSUI.Helper.DeviceInfo.IsDesktop === true) {
                            this._tooltipIconElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.MouseEnter, this._eventIconOnMouseEnter);
                            this._tooltipIconElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.MouseLeave, this._eventIconOnMouseLeave);
                            this._tooltipBalloonWrapperElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.MouseEnter, this._eventBalloonWrapperOnMouseEnter);
                            this._tooltipBalloonWrapperElem.addEventListener(OSUI.GlobalEnum.HTMLEvent.MouseLeave, this._eventBalloonWrapperOnMouseLeave);
                        }
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSUI.Event.DOMEvents.Listeners.Type.BalloonOnToggle, this._eventBalloonOnToggle);
                    }
                    _transformPosition(tooltipPosition) {
                        let _finalPosition;
                        switch (tooltipPosition) {
                            case OSUI.GlobalEnum.Position.BottomLeft:
                                _finalPosition = OSUI.GlobalEnum.FloatingPosition.BottomStart;
                                break;
                            case OSUI.GlobalEnum.Position.TopLeft:
                                _finalPosition = OSUI.GlobalEnum.FloatingPosition.TopStart;
                                break;
                            case OSUI.GlobalEnum.Position.BottomRight:
                                _finalPosition = OSUI.GlobalEnum.FloatingPosition.BottomEnd;
                                break;
                            case OSUI.GlobalEnum.Position.TopRight:
                                _finalPosition = OSUI.GlobalEnum.FloatingPosition.TopEnd;
                                break;
                            case OSUI.GlobalEnum.Position.Center:
                                _finalPosition = OSUI.GlobalEnum.FloatingPosition.Bottom;
                                break;
                            default:
                                _finalPosition = tooltipPosition;
                        }
                        return _finalPosition;
                    }
                    _triggerClose(isFromBalloonEvent = false) {
                        if (this._isOpen) {
                            if (!isFromBalloonEvent) {
                                this._balloonFeature.close();
                            }
                            this._isOpen = false;
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Tooltip_1.Enum.CssClass.IsOpened);
                            OSUI.Helper.Dom.Styles.RemoveClass(this._tooltipBalloonWrapperElem, Tooltip_1.Enum.CssClass.BalloonIsOpened);
                            this.triggerPlatformEventCallback(this._platformEventOnToggleCallback, false);
                        }
                    }
                    _triggerOpen() {
                        if (this._isOpen === false) {
                            this._balloonFeature.open(this._isOpenedByApi, OSUI.GlobalEnum.Keycodes.ArrowDown);
                            this._isOpen = true;
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Tooltip_1.Enum.CssClass.IsOpened);
                            OSUI.Helper.Dom.Styles.AddClass(this._tooltipBalloonWrapperElem, Tooltip_1.Enum.CssClass.BalloonIsOpened);
                            this.triggerPlatformEventCallback(this._platformEventOnToggleCallback, true);
                            OSUI.Helper.AsyncInvocation(() => {
                                this._isOpenedByApi = false;
                            });
                        }
                    }
                    _unsetEvents() {
                        this._tooltipIconElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnClick);
                        this._tooltipIconElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Blur, this._eventOnBlur);
                        this._tooltipIconElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Focus, this._eventOnFocus);
                        this._tooltipIconElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.keyDown, this._eventOnKeypress);
                        this._tooltipBalloonContentElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.Click, this._eventOnBalloonClick);
                        this._tooltipIconElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.MouseEnter, this._eventIconOnMouseEnter);
                        this._tooltipIconElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.MouseLeave, this._eventIconOnMouseLeave);
                        this._tooltipBalloonWrapperElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.MouseEnter, this._eventBalloonWrapperOnMouseEnter);
                        this._tooltipBalloonWrapperElem.removeEventListener(OSUI.GlobalEnum.HTMLEvent.MouseLeave, this._eventBalloonWrapperOnMouseLeave);
                        OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSUI.Event.DOMEvents.Listeners.Type.BalloonOnToggle, this._eventBalloonOnToggle);
                    }
                    _updateIsHover() {
                        if (this.configs.IsHover) {
                            OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Tooltip_1.Enum.CssClass.IsHover);
                        }
                        else {
                            OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, Tooltip_1.Enum.CssClass.IsHover);
                        }
                        this._unsetEvents();
                        this._setUpEvents();
                    }
                    setA11YProperties() {
                        OSUI.Helper.A11Y.RoleButton(this._tooltipIconElem);
                        OSUI.Helper.A11Y.AriaDescribedBy(this._tooltipIconElem, this._tooltipBalloonContentElem.id);
                        OSUI.Helper.A11Y.TabIndexTrue(this._tooltipIconElem);
                        OSUI.Helper.A11Y.RoleTooltip(this._tooltipBalloonWrapperElem);
                        OSUI.Helper.Dom.Attribute.Set(this._tooltipIconElem, OSUI.Constants.FocusableTabIndexDefault, OSUI.Constants.EmptyString);
                    }
                    setCallbacks() {
                        this._eventBalloonOnToggle = this._balloonOnToggleCallback.bind(this);
                        this._eventOnBalloonClick = this._onBalloonClick.bind(this);
                        this._eventOnClick = this._onClick.bind(this);
                        this._eventOnBlur = this._onBlur.bind(this);
                        this._eventOnFocus = this._onFocus.bind(this);
                        this._eventOnKeypress = this._onkeypressCallback.bind(this);
                        this._eventBalloonWrapperOnMouseEnter = this._onBalloonWrapperMouseEnter.bind(this);
                        this._eventBalloonWrapperOnMouseLeave = this._onBalloonWrapperMouseLeave.bind(this);
                        this._eventIconOnMouseEnter = this._onIconMouseEnter.bind(this);
                        this._eventIconOnMouseLeave = this._onIconMouseLeave.bind(this);
                    }
                    setHtmlElements() {
                        this._arrowElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, Tooltip_1.Enum.CssClass.Arrow);
                        this._tooltipIconElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, Tooltip_1.Enum.CssClass.Content);
                        this._tooltipBalloonContentElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, Tooltip_1.Enum.CssClass.BalloonContent);
                        this._tooltipBalloonWrapperElem = OSUI.Helper.Dom.ClassSelector(this.selfElement, Tooltip_1.Enum.CssClass.BalloonWrapper);
                        this._balloonElem = this._tooltipBalloonWrapperElem;
                    }
                    unsetCallbacks() {
                        this._eventBalloonOnToggle = undefined;
                        this._eventOnBalloonClick = undefined;
                        this._eventOnBlur = undefined;
                        this._eventOnClick = undefined;
                        this._eventOnFocus = undefined;
                        this._eventOnKeypress = undefined;
                        this._eventBalloonWrapperOnMouseEnter = undefined;
                        this._eventBalloonWrapperOnMouseLeave = undefined;
                        this._eventIconOnMouseEnter = undefined;
                        this._eventIconOnMouseLeave = undefined;
                    }
                    unsetHtmlElements() {
                        this._arrowElem = undefined;
                        this._tooltipIconElem = undefined;
                        this._tooltipBalloonContentElem = undefined;
                        this._tooltipBalloonWrapperElem = undefined;
                    }
                    build() {
                        super.build();
                        this.setCallbacks();
                        this.setHtmlElements();
                        this.setA11YProperties();
                        this._setUpEvents();
                        this._setBalloonFeature();
                        this._setCssClasses();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case Tooltip_1.Enum.Properties.IsHover:
                                    this._updateIsHover();
                                    break;
                                case Tooltip_1.Enum.Properties.StartVisible:
                                    console.warn(`Tooltip (${this.widgetId}): changes to StartOpen parameter do not affect the tooltip. Use the cliend actions 'TooltipOpen' and 'TooltipClose' to affect the Tooltip.`);
                                    break;
                                case Tooltip_1.Enum.Properties.Position:
                                    if (propertyValue !== OSUI.Constants.EmptyString) {
                                        this._balloonFeature.updatePositionOption(this._transformPosition(propertyValue));
                                    }
                                    break;
                            }
                        }
                    }
                    close() {
                        if (this._balloonFeature.isOpen) {
                            this._triggerClose();
                        }
                    }
                    dispose() {
                        var _a;
                        this._unsetEvents();
                        (_a = this._balloonFeature) === null || _a === void 0 ? void 0 : _a.dispose();
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    open() {
                        if (this._balloonFeature.isOpen === false) {
                            this._isOpenedByApi = true;
                            this._triggerOpen();
                        }
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Tooltip_1.Enum.Events.OnToggle:
                                if (this._platformEventOnToggleCallback === undefined) {
                                    this._platformEventOnToggleCallback = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    setBalloonOptions(balloonOptions) {
                        if (balloonOptions !== undefined) {
                            this.balloonOptions = balloonOptions;
                        }
                        else {
                            const _focusOptions = {
                                useFocus: false,
                            };
                            this.balloonOptions = {
                                alignment: OSUI.GlobalEnum.FloatingAlignment.Start,
                                anchorElem: this._tooltipIconElem,
                                arrowElem: this._arrowElem,
                                allowedPlacements: [
                                    OSUI.GlobalEnum.FloatingPosition.Right,
                                    OSUI.GlobalEnum.FloatingPosition.Top,
                                    OSUI.GlobalEnum.FloatingPosition.Left,
                                    OSUI.GlobalEnum.FloatingPosition.Bottom,
                                    OSUI.GlobalEnum.FloatingPosition.BottomEnd,
                                    OSUI.GlobalEnum.FloatingPosition.BottomStart,
                                    OSUI.GlobalEnum.FloatingPosition.TopEnd,
                                    OSUI.GlobalEnum.FloatingPosition.TopStart,
                                    OSUI.GlobalEnum.FloatingPosition.Center,
                                ],
                                focusOptions: _focusOptions,
                                position: this._transformPosition(this.configs.Position),
                                shape: OSUI.GlobalEnum.ShapeTypes.Sharp,
                            };
                        }
                    }
                    get IsOpen() {
                        return this._isOpen;
                    }
                }
                Tooltip_1.Tooltip = Tooltip;
            })(Tooltip = Patterns.Tooltip || (Patterns.Tooltip = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Tooltip;
            (function (Tooltip) {
                class TooltipConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                    validateCanChange(isBuilt, key) {
                        if (isBuilt) {
                            return key !== Tooltip.Enum.Properties.StartVisible;
                        }
                        return true;
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case Tooltip.Enum.Properties.IsHover:
                                validatedValue = this.validateBoolean(value, true);
                                break;
                            case Tooltip.Enum.Properties.StartVisible:
                                validatedValue = this.validateBoolean(value, false);
                                break;
                            case Tooltip.Enum.Properties.Position:
                                validatedValue = this.validateInRange(value, OSUI.GlobalEnum.Position.Right, Object.values(OSUI.GlobalEnum.Position));
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                Tooltip.TooltipConfig = TooltipConfig;
            })(Tooltip = Patterns.Tooltip || (Patterns.Tooltip = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TouchEvents;
            (function (TouchEvents) {
                var Enum;
                (function (Enum) {
                    let Properties;
                    (function (Properties) {
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let Events;
                    (function (Events) {
                        Events["End"] = "End";
                        Events["Move"] = "Move";
                        Events["Start"] = "Start";
                    })(Events = Enum.Events || (Enum.Events = {}));
                })(Enum = TouchEvents.Enum || (TouchEvents.Enum = {}));
            })(TouchEvents = Patterns.TouchEvents || (Patterns.TouchEvents = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TouchEvents;
            (function (TouchEvents_1) {
                class TouchEvents extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new TouchEvents_1.TouchEventsConfig(configs));
                        this._startX = 0;
                        this._startY = 0;
                        this._currentX = 0;
                        this._currentY = 0;
                        this._touchingElement = false;
                    }
                    _eventTouchEnd() {
                        if (this._touchingElement) {
                            this._touchingElement = false;
                            this._translateX = this._currentX - this._startX;
                            this._translateY = this._currentY - this._startY;
                            this._timeTaken = new Date().getTime() - this._startTime;
                            this._triggerTouchEnd();
                        }
                    }
                    _eventTouchMove(evt) {
                        if (this._touchingElement) {
                            this._currentX = evt.changedTouches[0].pageX;
                            this._currentY = evt.changedTouches[0].pageY;
                            this._translateX = this._currentX - this._startX;
                            this._translateY = this._currentY - this._startY;
                            this._triggerTouchMove(evt);
                        }
                    }
                    _eventTouchStart(evt) {
                        this._startTime = new Date().getTime();
                        this._startX = evt.changedTouches[0].pageX;
                        this._currentX = this._startX;
                        this._startY = evt.changedTouches[0].pageY;
                        this._currentY = this._startY;
                        this._touchingElement = true;
                        this._triggerTouchStart();
                    }
                    _removeEventListeners() {
                        if (this._trackableElement) {
                            this._trackableElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TouchStart, this._startEvent);
                            this._trackableElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TouchMove, this._moveEvent);
                            this._trackableElement.removeEventListener(OSUI.GlobalEnum.HTMLEvent.TouchEnd, this._endEvent);
                        }
                    }
                    _setEventListeners() {
                        if (this._trackableElement) {
                            this._trackableElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.TouchStart, this._startEvent);
                            this._trackableElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.TouchMove, this._moveEvent);
                            this._trackableElement.addEventListener(OSUI.GlobalEnum.HTMLEvent.TouchEnd, this._endEvent);
                        }
                    }
                    _triggerTouchEnd() {
                        if (this._endEventCallback) {
                            OSUI.Helper.AsyncInvocation(this._endEventCallback, this._currentX, this._currentY, this._translateX, this._translateY, this._timeTaken);
                        }
                    }
                    _triggerTouchMove(event) {
                        if (this._eventMoveCallback) {
                            OSUI.Helper.AsyncInvocation(this._eventMoveCallback, this._currentX, this._currentY, this._translateX, this._translateY, event);
                        }
                    }
                    _triggerTouchStart() {
                        if (this._eventStartCallback) {
                            OSUI.Helper.AsyncInvocation(this._eventStartCallback, this._startX, this._startY);
                        }
                    }
                    setA11YProperties() {
                        console.warn(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        this._endEvent = this._eventTouchEnd.bind(this);
                        this._moveEvent = this._eventTouchMove.bind(this);
                        this._startEvent = this._eventTouchStart.bind(this);
                        this._setEventListeners();
                    }
                    setHtmlElements() {
                        this._trackableElement = document.getElementById(this.configs.WidgetId);
                    }
                    unsetCallbacks() {
                        this._removeEventListeners();
                        this._endEvent = undefined;
                        this._moveEvent = undefined;
                        this._startEvent = undefined;
                    }
                    unsetHtmlElements() {
                        this._trackableElement = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this.setCallbacks();
                        this.finishBuild();
                    }
                    dispose() {
                        super.dispose();
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Patterns.TouchEvents.Enum.Events.End:
                                this._endEventCallback = callback;
                                break;
                            case Patterns.TouchEvents.Enum.Events.Move:
                                this._eventMoveCallback = callback;
                                break;
                            case Patterns.TouchEvents.Enum.Events.Start:
                                this._eventStartCallback = callback;
                                break;
                        }
                    }
                }
                TouchEvents_1.TouchEvents = TouchEvents;
            })(TouchEvents = Patterns.TouchEvents || (Patterns.TouchEvents = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TouchEvents;
            (function (TouchEvents) {
                class TouchEventsConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                TouchEvents.TouchEventsConfig = TouchEventsConfig;
            })(TouchEvents = Patterns.TouchEvents || (Patterns.TouchEvents = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Video;
            (function (Video) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["VideoSource"] = "osui-video-source";
                        CssClass["VideoTrack"] = "osui-video-track";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Events;
                    (function (Events) {
                        Events["OnStateChanged"] = "StateChanged";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let VideoStates;
                    (function (VideoStates) {
                        VideoStates["OnEnded"] = "Ended";
                        VideoStates["OnPause"] = "Paused";
                        VideoStates["OnPlaying"] = "Playing";
                        VideoStates["Unstarted"] = "Unstarted";
                    })(VideoStates = Enum.VideoStates || (Enum.VideoStates = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["Autoplay"] = "Autoplay";
                        Properties["Controls"] = "Controls";
                        Properties["Height"] = "Height";
                        Properties["Loop"] = "Loop";
                        Properties["Muted"] = "Muted";
                        Properties["PosterURL"] = "PosterURL";
                        Properties["URL"] = "URL";
                        Properties["Width"] = "Width";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let VideoTags;
                    (function (VideoTags) {
                        VideoTags["Source"] = "source";
                        VideoTags["Track"] = "track";
                    })(VideoTags = Enum.VideoTags || (Enum.VideoTags = {}));
                    let VideoAttributes;
                    (function (VideoAttributes) {
                        VideoAttributes["Captions"] = "captions";
                        VideoAttributes["Default"] = "default";
                        VideoAttributes["Height"] = "height";
                        VideoAttributes["TypePath"] = "video/";
                        VideoAttributes["Width"] = "width";
                        VideoAttributes["Muted"] = "muted";
                    })(VideoAttributes = Enum.VideoAttributes || (Enum.VideoAttributes = {}));
                })(Enum = Video.Enum || (Video.Enum = {}));
            })(Video = Patterns.Video || (Patterns.Video = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Video;
            (function (Video_1) {
                class Video extends Patterns.AbstractPattern {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Video_1.VideoConfig(configs));
                    }
                    _setAutoplay() {
                        this._videoElement.autoplay = this.configs.Autoplay;
                        if (this.configs.Autoplay && this.configs.Muted === false) {
                            console.warn(`Some modern browsers will not autoplay your video on ${OSUI.GlobalEnum.PatternName.Video} if it's not muted. The general rule of many browsers is that a user must opt-in to certain actions before they can happen. Set the Muted parameter to True, to start the video automatically.`);
                        }
                    }
                    _setControls() {
                        this._videoElement.controls = this.configs.Controls;
                    }
                    _setHeight() {
                        if (this.configs.Height !== OSUI.Constants.EmptyString) {
                            OSUI.Helper.Dom.Attribute.Set(this._videoElement, Patterns.Video.Enum.VideoAttributes.Height, this.configs.Height);
                        }
                        else {
                            OSUI.Helper.Dom.Attribute.Remove(this._videoElement, Patterns.Video.Enum.VideoAttributes.Height);
                        }
                    }
                    _setLoop() {
                        this._videoElement.loop = this.configs.Loop;
                    }
                    _setMuted() {
                        this._videoElement.muted = this.configs.Muted;
                    }
                    _setPosterUrl() {
                        if (this.configs.PosterURL !== OSUI.Constants.EmptyString) {
                            this._videoElement.poster = this.configs.PosterURL;
                        }
                        else {
                            this._videoElement.poster = OSUI.Constants.EmptyString;
                        }
                    }
                    _setVideoConfigs() {
                        this._setAutoplay();
                        this._setControls();
                        this._setLoop();
                        this._setMuted();
                        this._setPosterUrl();
                        this._setWidth();
                        this._setHeight();
                        if (this._videoElement.currentTime === 0) {
                            this._triggerOnStateChangedEvent(Patterns.Video.Enum.VideoStates.Unstarted);
                        }
                    }
                    _setVideoSource() {
                        const _urlFileExtension = OSUI.Helper.URL.GetFileTypeFromURL(this.configs.URL);
                        if (_urlFileExtension === null) {
                            console.warn(`The URL '${this.configs.URL}' is not a valid URL.`);
                        }
                        OSUI.Helper.Dom.Styles.AddClass(this._videoSourceElement, Patterns.Video.Enum.CssClass.VideoSource);
                        this._videoSourceElement.src = this.configs.URL;
                        this._videoSourceElement.type = Patterns.Video.Enum.VideoAttributes.TypePath + _urlFileExtension;
                    }
                    _setVideoTrack() {
                        const captionsList = JSON.parse(this.configs.Captions);
                        if (captionsList.length > 0) {
                            for (const item of captionsList) {
                                const trackElement = document.createElement(Patterns.Video.Enum.VideoTags.Track);
                                OSUI.Helper.Dom.Styles.AddClass(trackElement, Patterns.Video.Enum.CssClass.VideoTrack);
                                trackElement.kind = Patterns.Video.Enum.VideoAttributes.Captions;
                                trackElement.srclang = item.LanguageCode;
                                trackElement.src = item.SourceFile;
                                trackElement.label = item.Label;
                                this.selfElement.appendChild(trackElement);
                            }
                        }
                    }
                    _setWidth() {
                        if (this.configs.Width !== OSUI.Constants.EmptyString) {
                            OSUI.Helper.Dom.Attribute.Set(this._videoElement, Patterns.Video.Enum.VideoAttributes.Width, this.configs.Width);
                        }
                        else {
                            OSUI.Helper.Dom.Attribute.Remove(this._videoElement, Patterns.Video.Enum.VideoAttributes.Width);
                        }
                    }
                    _triggerOnStateChangedEvent(stateChanged) {
                        if (stateChanged === Patterns.Video.Enum.VideoStates.Unstarted) {
                            if (this._videoElement.currentTime === 0) {
                                this.triggerPlatformEventCallback(this._platformEventOnStateChanged.bind(this), stateChanged);
                            }
                        }
                        else {
                            this.triggerPlatformEventCallback(this._platformEventOnStateChanged.bind(this), stateChanged);
                        }
                        this._videoState = stateChanged;
                    }
                    setA11YProperties() {
                        console.log(OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        this._videoElement.onplay = this._triggerOnStateChangedEvent.bind(this, Patterns.Video.Enum.VideoStates.Unstarted);
                        this._videoElement.onplaying = this._triggerOnStateChangedEvent.bind(this, Patterns.Video.Enum.VideoStates.OnPlaying);
                        this._videoElement.onpause = this._triggerOnStateChangedEvent.bind(this, Patterns.Video.Enum.VideoStates.OnPause);
                        this._videoElement.onended = this._triggerOnStateChangedEvent.bind(this, Patterns.Video.Enum.VideoStates.OnEnded);
                    }
                    setHtmlElements() {
                        this._videoElement = this.selfElement;
                        this._videoSourceElement = document.createElement(Patterns.Video.Enum.VideoTags.Source);
                        this.selfElement.appendChild(this._videoSourceElement);
                        this._setVideoSource();
                        this._setVideoConfigs();
                        this._setVideoTrack();
                    }
                    unsetCallbacks() {
                        this._platformEventOnStateChanged = undefined;
                        this._videoElement.onended = undefined;
                        this._videoElement.onpause = undefined;
                        this._videoElement.onplay = undefined;
                        this._videoElement.onplaying = undefined;
                    }
                    unsetHtmlElements() {
                        this._videoElement = undefined;
                        this._videoSourceElement = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this.setCallbacks();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case Video_1.Enum.Properties.Autoplay:
                                    this._setAutoplay();
                                    break;
                                case Video_1.Enum.Properties.Controls:
                                    this._setControls();
                                    break;
                                case Video_1.Enum.Properties.Loop:
                                    this._setLoop();
                                    break;
                                case Video_1.Enum.Properties.Muted:
                                    this._setMuted();
                                    break;
                                case Video_1.Enum.Properties.PosterURL:
                                    this._setPosterUrl();
                                    break;
                                case Video_1.Enum.Properties.URL:
                                    this._setVideoSource();
                                    break;
                                case Video_1.Enum.Properties.Width:
                                    this._setWidth();
                                    break;
                                case Video_1.Enum.Properties.Height:
                                    this._setHeight();
                                    break;
                            }
                        }
                    }
                    dispose() {
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    get getVideoState() {
                        return this._videoState;
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case Patterns.Video.Enum.Events.OnStateChanged:
                                if (this._platformEventOnStateChanged === undefined) {
                                    this._platformEventOnStateChanged = callback;
                                }
                                else {
                                    console.warn(`The ${OSUI.GlobalEnum.PatternName.Video} already has the state changed callback set.`);
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                        }
                    }
                    setVideoJumpToTime(currentTime) {
                        this._videoElement.currentTime = currentTime;
                    }
                    setVideoPause() {
                        this._videoElement.pause();
                    }
                    setVideoPlay() {
                        this._videoElement.play();
                    }
                }
                Video_1.Video = Video;
            })(Video = Patterns.Video || (Patterns.Video = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var Video;
            (function (Video) {
                class VideoConfig extends Patterns.AbstractConfiguration {
                    constructor(config) {
                        super(config);
                    }
                }
                Video.VideoConfig = VideoConfig;
            })(Video = Patterns.Video || (Patterns.Video = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var FloatingPosition;
            (function (FloatingPosition) {
                var Enum;
                (function (Enum) {
                    let CssCustomProperties;
                    (function (CssCustomProperties) {
                        CssCustomProperties["Offset"] = "--osui-floating-offset";
                        CssCustomProperties["YPosition"] = "--osui-floating-position-y";
                        CssCustomProperties["XPosition"] = "--osui-floating-position-x";
                    })(CssCustomProperties = Enum.CssCustomProperties || (Enum.CssCustomProperties = {}));
                    let Provider;
                    (function (Provider) {
                        Provider["FloatingUI"] = "FloatingUI";
                    })(Provider = Enum.Provider || (Enum.Provider = {}));
                })(Enum = FloatingPosition.Enum || (FloatingPosition.Enum = {}));
            })(FloatingPosition = Utils.FloatingPosition || (Utils.FloatingPosition = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var FloatingPosition;
            (function (FloatingPosition_1) {
                class FloatingPosition {
                    constructor(options) {
                        this.floatingConfigs = options;
                        this.build();
                    }
                    getOffsetValue() {
                        return parseInt(getComputedStyle(this.floatingConfigs.AnchorElem).getPropertyValue(FloatingPosition_1.Enum.CssCustomProperties.Offset));
                    }
                    build() {
                        this.setFloatingPosition();
                        this.isBuilt = true;
                    }
                    dispose() {
                        this.isBuilt = false;
                    }
                    update(options) {
                        this.floatingConfigs = options;
                        this.setFloatingPosition();
                    }
                }
                FloatingPosition_1.FloatingPosition = FloatingPosition;
            })(FloatingPosition = Utils.FloatingPosition || (Utils.FloatingPosition = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var FloatingPosition;
            (function (FloatingPosition) {
                class FloatingPositionConfig {
                }
                FloatingPosition.FloatingPositionConfig = FloatingPositionConfig;
            })(FloatingPosition = Utils.FloatingPosition || (Utils.FloatingPosition = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OSFramework;
(function (OSFramework) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var FloatingPosition;
            (function (FloatingPosition) {
                var Factory;
                (function (Factory) {
                    function NewFloatingPosition(configs, provider) {
                        let _floatingPositionItem = null;
                        switch (provider) {
                            case FloatingPosition.Enum.Provider.FloatingUI:
                                _floatingPositionItem = new Providers.OSUI.Utils.FloatingUI(configs);
                                break;
                            default:
                                throw new Error(`There is no FloatingPosition of the ${provider} provider`);
                        }
                        return _floatingPositionItem;
                    }
                    Factory.NewFloatingPosition = NewFloatingPosition;
                })(Factory = FloatingPosition.Factory || (FloatingPosition.Factory = {}));
            })(FloatingPosition = Utils.FloatingPosition || (Utils.FloatingPosition = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OSFramework.OSUI || (OSFramework.OSUI = {}));
})(OSFramework || (OSFramework = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var ErrorCodes;
        (function (ErrorCodes) {
            ErrorCodes.Success = {
                code: '200',
                message: 'Success',
            };
            ErrorCodes.Dropdown = {
                FailChangeProperty: 'OSUI-API-01001',
                FailClear: 'OSUI-API-01002',
                FailClose: 'OSUI-API-010014',
                FailDisable: 'OSUI-API-01003',
                FailDispose: 'OSUI-API-01004',
                FailEnable: 'OSUI-API-01005',
                FailGetSelectedValues: 'OSUI-API-01006',
                FailOpen: 'OSUI-API-010015',
                FailRegisterCallback: 'OSUI-API-01007',
                FailRegisterProviderConfig: 'OSUI-API-01009',
                FailRegisterProviderEvent: 'OSUI-API-060010',
                FailRemoveProviderEvent: 'OSUI-API-06011',
                FailSetValidation: 'OSUI-API-01008',
                FailSetValues: 'OSUI-API-06012',
                FailTogglePopup: 'OSUI-API-01013',
            };
            ErrorCodes.Notification = {
                FailChangeProperty: 'OSUI-API-02001',
                FailDispose: 'OSUI-API-02002',
                FailHide: 'OSUI-API-02003',
                FailRegisterCallback: 'OSUI-API-02004',
                FailShow: 'OSUI-API-02005',
            };
            ErrorCodes.SectionIndex = {
                FailChangeProperty: 'OSUI-API-03001',
                FailDisable: 'OSUI-API-03002',
                FailDispose: 'OSUI-API-03003',
                FailEnable: 'OSUI-API-03004',
                FailRegisterCallback: 'OSUI-API-03005',
            };
            ErrorCodes.Accordion = {
                FailChangeProperty: 'OSUI-API-04001',
                FailCollapseAll: 'OSUI-API-04002',
                FailDispose: 'OSUI-API-04003',
                FailExpandAll: 'OSUI-API-04004',
                FailRegisterCallback: 'OSUI-API-04005',
            };
            ErrorCodes.AccordionItem = {
                FailAllowTitleEvents: 'OSUI-API-05001',
                FailChangeProperty: 'OSUI-API-05002',
                FailCollapseItem: 'OSUI-API-05003',
                FailDispose: 'OSUI-API-05004',
                FailExpandItem: 'OSUI-API-05005',
                FailRegisterCallback: 'OSUI-API-05006',
            };
            ErrorCodes.Carousel = {
                FailChangeProperty: 'OSUI-API-06001',
                FailDispose: 'OSUI-API-06002',
                FailDirection: 'OSUI-API-06003',
                FailGoTo: 'OSUI-API-06004',
                FailNext: 'OSUI-API-06005',
                FailPrevious: 'OSUI-API-06006',
                FailRegisterCallback: 'OSUI-API-06007',
                FailToggleDrag: 'OSUI-API-06008',
                FailUpdate: 'OSUI-API-06009',
                FailRegisterProviderConfig: 'OSUI-API-06010',
                FailRegisterProviderEvent: 'OSUI-API-06011',
                FailRemoveProviderEvent: 'OSUI-API-06012',
                FailEnableOnRender: 'OSUI-API-06013',
                FailDisableOnRender: 'OSUI-API-06014',
            };
            ErrorCodes.DatePicker = {
                FailChangeProperty: 'OSUI-API-07001',
                FailClear: 'OSUI-API-07002',
                FailClose: 'OSUI-API-07003',
                FailDisableDays: 'OSUI-API-07011',
                FailDisableWeekDays: 'OSUI-API-07012',
                FailDispose: 'OSUI-API-07004',
                FailOpen: 'OSUI-API-07005',
                FailRedraw: 'OSUI-API-07006',
                FailRegisterCallback: 'OSUI-API-07007',
                FailRegisterProviderConfig: 'OSUI-API-07008',
                FailRegisterProviderEvent: 'OSUI-API-07009',
                FailRemoveProviderEvent: 'OSUI-API-07010',
                FailSetEditableInput: 'OSUI-API-07013',
                FailSetLanguage: 'OSUI-API-07014',
                FailToggleNativeBehavior: 'OSUI-API-07015',
                FailUpdateInitialDate: 'OSUI-API-07016',
                FailUpdatePrompt: 'OSUI-API-07017',
                FailOnRender: 'OSUI-API-07018',
            };
            ErrorCodes.FlipContent = {
                FailChangeProperty: 'OSUI-API-08001',
                FailDispose: 'OSUI-API-08002',
                FailRegisterCallback: 'OSUI-API-08003',
                FailShowBack: 'OSUI-API-08004',
                FailShowFront: 'OSUI-API-08005',
                FailToggle: 'OSUI-API-08006',
            };
            ErrorCodes.Progress = {
                FailChangeProperty: 'OSUI-API-09001',
                FailDispose: 'OSUI-API-09002',
                FailProgressValue: 'OSUI-API-09003',
                FailProgressReset: 'OSUI-API-09004',
                FailtProgressGradient: 'OSUI-API-09005',
                FailRegisterCallback: 'OSUI-API-09006',
            };
            ErrorCodes.RangeSlider = {
                FailChangeProperty: 'OSUI-API-10001',
                FailDispose: 'OSUI-API-10002',
                FailOnDragEnd: 'OSUI-API-10003',
                FailRegisterCallback: 'OSUI-API-10004',
                FailSetValues: 'OSUI-API-10005',
                FailResetValues: 'OSUI-API-10006',
                FailRegisterProviderConfig: 'OSUI-API-10007',
                FailRegisterProviderEvent: 'OSUI-API-10008',
                FailRemoveProviderEvent: 'OSUI-API-10009',
                FailEnable: 'OSUI-API-10010',
                FailDisable: 'OSUI-API-10011',
            };
            ErrorCodes.Sidebar = {
                FailChangeProperty: 'OSUI-API-11001',
                FailClose: 'OSUI-API-11002',
                FailDispose: 'OSUI-API-11003',
                FailOpen: 'OSUI-API-11004',
                FailRegisterCallback: 'OSUI-API-11005',
                FailToggleSwipe: 'OSUI-API-11006',
                FailClickOutsideToClose: 'OSUI-API-11007',
            };
            ErrorCodes.Submenu = {
                FailChangeProperty: 'OSUI-API-12001',
                FailClose: 'OSUI-API-12002',
                FailDispose: 'OSUI-API-12003',
                FailOpen: 'OSUI-API-12004',
                FailOpenOnHover: 'OSUI-API-12005',
                FailRegisterCallback: 'OSUI-API-12006',
                FailUpdate: 'OSUI-API-12007',
                FailClickOutsideToClose: 'OSUI-API-12008',
            };
            ErrorCodes.Tooltip = {
                FailChangeProperty: 'OSUI-API-13001',
                FailClose: 'OSUI-API-13002',
                FailDispose: 'OSUI-API-13003',
                FailOpen: 'OSUI-API-13004',
                FailRegisterCallback: 'OSUI-GEN-13005',
            };
            ErrorCodes.AnimatedLabel = {
                FailChangeProperty: 'OSUI-API-14001',
                FailDispose: 'OSUI-API-14002',
                FailRegisterCallback: 'OSUI-API-14004',
                FailUpdate: 'OSUI-API-14003',
            };
            ErrorCodes.ButtonLoading = {
                FailChangeProperty: 'OSUI-API-15001',
                FailDispose: 'OSUI-API-15002',
                FailRegisterCallback: 'OSUI-API-15003',
            };
            ErrorCodes.DropdownServerSideItem = {
                FailChangeProperty: 'OSUI-API-16001',
                FailDispose: 'OSUI-API-16002',
                FailRegisterCallback: 'OSUI-API-16003',
            };
            ErrorCodes.FloatingActions = {
                FailChangeProperty: 'OSUI-API-17001',
                FailDispose: 'OSUI-API-17002',
                FailRegisterCallback: 'OSUI-API-17003',
            };
            ErrorCodes.Gallery = {
                FailChangeProperty: 'OSUI-API-18001',
                FailDispose: 'OSUI-API-18002',
                FailRegisterCallback: 'OSUI-API-18003',
            };
            ErrorCodes.Rating = {
                FailChangeProperty: 'OSUI-API-19001',
                FailDispose: 'OSUI-API-19002',
                FailRegisterCallback: 'OSUI-API-19003',
                FailEnable: 'OSUI-API-19004',
                FailDisable: 'OSUI-API-19005',
            };
            ErrorCodes.Search = {
                FailChangeProperty: 'OSUI-API-20001',
                FailDispose: 'OSUI-API-20002',
                FailRegisterCallback: 'OSUI-API-20003',
            };
            ErrorCodes.SectionIndexItem = {
                FailChangeProperty: 'OSUI-API-21001',
                FailDispose: 'OSUI-API-21002',
                FailRegisterCallback: 'OSUI-API-21003',
            };
            ErrorCodes.Tabs = {
                FailChangeProperty: 'OSUI-API-22001',
                FailDispose: 'OSUI-API-22002',
                FailRegisterCallback: 'OSUI-API-22003',
                FailSetActive: 'OSUI-API-22004',
                FailToggleSwipe: 'OSUI-API-22005',
            };
            ErrorCodes.TabsContentItem = {
                FailChangeProperty: 'OSUI-API-23001',
                FailDispose: 'OSUI-API-23002',
                FailRegisterCallback: 'OSUI-API-23003',
            };
            ErrorCodes.TabsHeaderItem = {
                FailChangeProperty: 'OSUI-API-24001',
                FailDisableTabHeader: 'OSUI-API-24002',
                FailDispose: 'OSUI-API-24003',
                FailEnableTabHeader: 'OSUI-API-24004',
                FailRegisterCallback: 'OSUI-API-24006',
                FailUpdate: 'OSUI-API-24005',
            };
            ErrorCodes.BottomSheet = {
                FailChangeProperty: 'OSUI-API-25001',
                FailDispose: 'OSUI-API-25002',
                FailRegisterCallback: 'OSUI-API-25003',
                FailOpen: 'OSUI-API-25004',
                FailClose: 'OSUI-API-25005',
            };
            ErrorCodes.TimePicker = {
                FailChangeProperty: 'OSUI-API-26001',
                FailClear: 'OSUI-API-26002',
                FailClose: 'OSUI-API-26003',
                FailDispose: 'OSUI-API-26004',
                FailOpen: 'OSUI-API-26005',
                FailRedraw: 'OSUI-API-26006',
                FailRegisterCallback: 'OSUI-API-26007',
                FailRegisterProviderConfig: 'OSUI-API-26008',
                FailRegisterProviderEvent: 'OSUI-API-26009',
                FailRemoveProviderEvent: 'OSUI-API-26010',
                FailToggleNativeBehavior: 'OSUI-API-26011',
                FailSetLanguage: 'OSUI-API-26012',
                FailUpdateInitialTime: 'OSUI-API-26013',
                FailSetEditableInput: 'OSUI-API-26014',
                FailUpdatePrompt: 'OSUI-API-26015',
                FailOnRender: 'OSUI-API-26016',
            };
            ErrorCodes.MonthPicker = {
                FailChangeProperty: 'OSUI-API-27001',
                FailClear: 'OSUI-API-27002',
                FailClose: 'OSUI-API-27003',
                FailDispose: 'OSUI-API-27004',
                FailOpen: 'OSUI-API-27005',
                FailRedraw: 'OSUI-API-27006',
                FailRegisterCallback: 'OSUI-API-27007',
                FailRegisterProviderConfig: 'OSUI-API-27008',
                FailRegisterProviderEvent: 'OSUI-API-27009',
                FailRemoveProviderEvent: 'OSUI-API-27010',
                FailSetEditableInput: 'OSUI-API-27011',
                FailSetLanguage: 'OSUI-API-27012',
                FailUpdateInitialMonth: 'OSUI-API-27013',
                FailUpdatePrompt: 'OSUI-API-27014',
                FailOnRender: 'OSUI-API-27015',
            };
            ErrorCodes.Utilities = {
                FailGetInvalidInput: 'OSUI-API-28001',
                FailScrollToElement: 'OSUI-API-28002',
                FailSetFocus: 'OSUI-API-28003',
                FailAddFavicon: 'OSUI-API-28004',
                FailMoveElement: 'OSUI-API-28005',
                FailSetActiveElement: 'OSUI-API-28006',
                FailSetSelectedRow: 'OSUI-API-28007',
                FailShowPassword: 'OSUI-API-28008',
                FailMasterDetailSetContentFocus: 'OSUI-API-28009',
                FailSetAccessibilityRole: 'OSUI-API-28010',
                FailSetAriaHidden: 'OSUI-API-28011',
                FailSetLang: 'OSUI-API-28012',
                FailSkipToContent: 'OSUI-API-28013',
                FailToggleTextSpacing: 'OSUI-API-28014',
                FailSetActiveMenuItems: 'OSUI-API-28015',
                FailSetBottomBarActiveElement: 'OSUI-API-28016',
                FailSetMenuAttributes: 'OSUI-API-28017',
                FailSetMenuIcon: 'OSUI-API-28018',
                FailSetMenuIconListeners: 'OSUI-API-28019',
                FailSetMenuListeners: 'OSUI-API-28020',
                FailToggleSideMenu: 'OSUI-API-28021',
                FailListItemAnimate: 'OSUI-API-28022',
                FailCheckIsMenuDraggable: 'OSUI-API-28023',
                FailSetExtendedMenuHide: 'OSUI-API-28024',
                FailSetExtendedMenuShow: 'OSUI-API-28025',
                FailCheckIsRTL: 'OSUI-API-28026',
                FailSetMenuOnReady: 'OSUI-API-28027',
                FailSetMenuOnDestroy: 'OSUI-API-28028',
            };
            ErrorCodes.InlineSvg = {
                FailChangeProperty: 'OSUI-API-29001',
                FailDispose: 'OSUI-API-29002',
                FailRegisterCallback: 'OSUI-API-29003',
            };
            ErrorCodes.OverflowMenu = {
                FailChangeProperty: 'OSUI-API-30001',
                FailDispose: 'OSUI-API-30002',
                FailRegisterCallback: 'OSUI-API-30003',
                FailOpen: 'OSUI-API-30004',
                FailClose: 'OSUI-API-30005',
                FailEnable: 'OSUI-API-30006',
                FailDisable: 'OSUI-API-30007',
            };
            ErrorCodes.Video = {
                FailChangeProperty: 'OSUI-API-31001',
                FailDispose: 'OSUI-API-31002',
                FailRegisterCallback: 'OSUI-API-31003',
                FailGetState: 'OSUI-API-31004',
                FailPause: 'OSUI-API-31005',
                FailPlay: 'OSUI-API-31006',
                FailSetTime: 'OSUI-API-31007',
            };
            ErrorCodes.Legacy = {
                FailAddFavicon_Legacy: 'OSUI-LEG-000001',
                MoveElement_Legacy: 'OSUI-LEG-000002',
                MasterDetailSetContentFocus_Legacy: 'OSUI-LEG-000003',
                SetAccessibilityRole_Legacy: 'OSUI-LEG-000004',
                SetAriaHidden_Legacy: 'OSUI-LEG-000005',
                SetFocus_Legacy: 'OSUI-LEG-000006',
                SetLang_Legacy: 'OSUI-LEG-000007',
                SkipToContent_Legacy: 'OSUI-LEG-000008',
                ToggleTextSpacing_Legacy: 'OSUI-LEG-000009',
            };
        })(ErrorCodes = OSUI.ErrorCodes || (OSUI.ErrorCodes = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        function GetVersion() {
            return OSFramework.OSUI.Constants.OSUIVersion;
        }
        OSUI.GetVersion = GetVersion;
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var AccordionAPI;
            (function (AccordionAPI) {
                const _accordionMap = new Map();
                function ChangeProperty(accordionId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Accordion.FailChangeProperty,
                        callback: () => {
                            const accordion = GetAccordionById(accordionId);
                            accordion.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                AccordionAPI.ChangeProperty = ChangeProperty;
                function CollapseAllItems(accordionId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Accordion.FailCollapseAll,
                        callback: () => {
                            const accordion = GetAccordionById(accordionId);
                            accordion.collapseAllItems();
                        },
                    });
                    return result;
                }
                AccordionAPI.CollapseAllItems = CollapseAllItems;
                function Create(accordionId, configs) {
                    if (_accordionMap.has(accordionId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Accordion} registered under id: ${accordionId}`);
                    }
                    const _newAccordion = new OSFramework.OSUI.Patterns.Accordion.Accordion(accordionId, JSON.parse(configs));
                    _accordionMap.set(accordionId, _newAccordion);
                    return _newAccordion;
                }
                AccordionAPI.Create = Create;
                function Dispose(accordionId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Accordion.FailDispose,
                        callback: () => {
                            const accordion = GetAccordionById(accordionId);
                            accordion.dispose();
                            _accordionMap.delete(accordion.uniqueId);
                        },
                    });
                    return result;
                }
                AccordionAPI.Dispose = Dispose;
                function ExpandAllItems(accordionId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Accordion.FailExpandAll,
                        callback: () => {
                            const accordion = GetAccordionById(accordionId);
                            accordion.expandAllItems();
                        },
                    });
                    return result;
                }
                AccordionAPI.ExpandAllItems = ExpandAllItems;
                function GetAllAccordions() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_accordionMap);
                }
                AccordionAPI.GetAllAccordions = GetAllAccordions;
                function GetAccordionById(AccordionId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('Accordion', AccordionId, _accordionMap);
                }
                AccordionAPI.GetAccordionById = GetAccordionById;
                function Initialize(accordionId) {
                    const accordion = GetAccordionById(accordionId);
                    accordion.build();
                    return accordion;
                }
                AccordionAPI.Initialize = Initialize;
                function RegisterCallback(accordionId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Accordion.FailRegisterCallback,
                        callback: () => {
                            const accordion = GetAccordionById(accordionId);
                            accordion.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                AccordionAPI.RegisterCallback = RegisterCallback;
            })(AccordionAPI = Patterns.AccordionAPI || (Patterns.AccordionAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var AccordionItemAPI;
            (function (AccordionItemAPI) {
                const _accordionItemMap = new Map();
                function AllowTitleEvents(accordionItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AccordionItem.FailAllowTitleEvents,
                        callback: () => {
                            const accordionItem = GetAccordionItemById(accordionItemId);
                            accordionItem.allowTitleEvents();
                        },
                    });
                    return result;
                }
                AccordionItemAPI.AllowTitleEvents = AllowTitleEvents;
                function ChangeProperty(accordionItemId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AccordionItem.FailChangeProperty,
                        callback: () => {
                            const accordionItem = GetAccordionItemById(accordionItemId);
                            accordionItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                AccordionItemAPI.ChangeProperty = ChangeProperty;
                function Collapse(accordionItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AccordionItem.FailCollapseItem,
                        callback: () => {
                            const accordionItem = GetAccordionItemById(accordionItemId);
                            accordionItem.close();
                        },
                    });
                    return result;
                }
                AccordionItemAPI.Collapse = Collapse;
                function Create(accordionItemId, configs) {
                    if (_accordionItemMap.has(accordionItemId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.AccordionItem} registered under id: ${accordionItemId}`);
                    }
                    const _newAccordionItem = new OSFramework.OSUI.Patterns.AccordionItem.AccordionItem(accordionItemId, JSON.parse(configs));
                    _accordionItemMap.set(accordionItemId, _newAccordionItem);
                    return _newAccordionItem;
                }
                AccordionItemAPI.Create = Create;
                function Dispose(accordionItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AccordionItem.FailDispose,
                        callback: () => {
                            const accordionItem = GetAccordionItemById(accordionItemId);
                            accordionItem.dispose();
                            _accordionItemMap.delete(accordionItem.uniqueId);
                        },
                    });
                    return result;
                }
                AccordionItemAPI.Dispose = Dispose;
                function Expand(accordionItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AccordionItem.FailExpandItem,
                        callback: () => {
                            const accordionItem = GetAccordionItemById(accordionItemId);
                            accordionItem.open();
                        },
                    });
                    return result;
                }
                AccordionItemAPI.Expand = Expand;
                function GetAllAccordionItems() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_accordionItemMap);
                }
                AccordionItemAPI.GetAllAccordionItems = GetAllAccordionItems;
                function GetAccordionItemById(accordionItemId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('AccordionItem', accordionItemId, _accordionItemMap);
                }
                AccordionItemAPI.GetAccordionItemById = GetAccordionItemById;
                function Initialize(accordionItemId) {
                    const accordionItem = GetAccordionItemById(accordionItemId);
                    accordionItem.build();
                    return accordionItem;
                }
                AccordionItemAPI.Initialize = Initialize;
                function RegisterCallback(accordionItemId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AccordionItem.FailRegisterCallback,
                        callback: () => {
                            const accordionItem = GetAccordionItemById(accordionItemId);
                            accordionItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                AccordionItemAPI.RegisterCallback = RegisterCallback;
                function ToggleClickableZone(accordionItemId, isIconOnly) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AccordionItem.FailRegisterCallback,
                        callback: () => {
                            const accordionItem = GetAccordionItemById(accordionItemId);
                            accordionItem.changeProperty(OSFramework.OSUI.Patterns.AccordionItem.Enum.Properties.ToggleWithIcon, isIconOnly);
                        },
                    });
                    return result;
                }
                AccordionItemAPI.ToggleClickableZone = ToggleClickableZone;
            })(AccordionItemAPI = Patterns.AccordionItemAPI || (Patterns.AccordionItemAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var AnimatedLabelAPI;
            (function (AnimatedLabelAPI) {
                const _animatedLabelsMap = new Map();
                function ChangeProperty(animatedLabelId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AnimatedLabel.FailChangeProperty,
                        callback: () => {
                            const animatedlabel = GetAnimatedLabelById(animatedLabelId);
                            animatedlabel.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                AnimatedLabelAPI.ChangeProperty = ChangeProperty;
                function Create(animatedLabelId, configs) {
                    if (_animatedLabelsMap.has(animatedLabelId)) {
                        throw new Error(`There is already an ${OSFramework.OSUI.GlobalEnum.PatternName.AnimatedLabel} registered under id: ${animatedLabelId}`);
                    }
                    const _newAnimatedLabel = new OSFramework.OSUI.Patterns.AnimatedLabel.AnimatedLabel(animatedLabelId, JSON.parse(configs));
                    _animatedLabelsMap.set(animatedLabelId, _newAnimatedLabel);
                    return _newAnimatedLabel;
                }
                AnimatedLabelAPI.Create = Create;
                function Dispose(animatedLabelId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AnimatedLabel.FailDispose,
                        callback: () => {
                            const animatedlabel = GetAnimatedLabelById(animatedLabelId);
                            animatedlabel.dispose();
                            _animatedLabelsMap.delete(animatedlabel.uniqueId);
                        },
                    });
                    return result;
                }
                AnimatedLabelAPI.Dispose = Dispose;
                function GetAllAnimatedLabels() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_animatedLabelsMap);
                }
                AnimatedLabelAPI.GetAllAnimatedLabels = GetAllAnimatedLabels;
                function GetAnimatedLabelById(animatedLabelId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.AnimatedLabel, animatedLabelId, _animatedLabelsMap);
                }
                AnimatedLabelAPI.GetAnimatedLabelById = GetAnimatedLabelById;
                function Initialize(animatedLabelId) {
                    const animatedlabel = GetAnimatedLabelById(animatedLabelId);
                    animatedlabel.build();
                    return animatedlabel;
                }
                AnimatedLabelAPI.Initialize = Initialize;
                function RegisterCallback(dropdownId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AnimatedLabel.FailRegisterCallback,
                        callback: () => {
                            const animatedlabel = this.GetAnimatedLabelById(dropdownId);
                            animatedlabel.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                AnimatedLabelAPI.RegisterCallback = RegisterCallback;
                function UpdateOnRender(animatedLabelId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.AnimatedLabel.FailUpdate,
                        callback: () => {
                            const animatedlabel = GetAnimatedLabelById(animatedLabelId);
                            animatedlabel.updateOnRender();
                        },
                    });
                    return result;
                }
                AnimatedLabelAPI.UpdateOnRender = UpdateOnRender;
            })(AnimatedLabelAPI = Patterns.AnimatedLabelAPI || (Patterns.AnimatedLabelAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var BottomSheetAPI;
            (function (BottomSheetAPI) {
                const _bottomSheetItemsMap = new Map();
                function ChangeProperty(bottomSheetId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.BottomSheet.FailChangeProperty,
                        callback: () => {
                            const _bottomSheetItem = GetBottomSheetItemById(bottomSheetId);
                            _bottomSheetItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                BottomSheetAPI.ChangeProperty = ChangeProperty;
                function Create(bottomSheetId, configs) {
                    if (_bottomSheetItemsMap.has(bottomSheetId)) {
                        throw new Error('There is already an BottomSheet registered under id: ' + bottomSheetId);
                    }
                    const _bottomSheetItem = new OSFramework.OSUI.Patterns.BottomSheet.BottomSheet(bottomSheetId, JSON.parse(configs));
                    _bottomSheetItemsMap.set(bottomSheetId, _bottomSheetItem);
                    return _bottomSheetItem;
                }
                BottomSheetAPI.Create = Create;
                function Dispose(bottomSheetId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.BottomSheet.FailDispose,
                        callback: () => {
                            const _bottomSheetItem = GetBottomSheetItemById(bottomSheetId);
                            _bottomSheetItem.dispose();
                            _bottomSheetItemsMap.delete(_bottomSheetItem.uniqueId);
                        },
                    });
                    return result;
                }
                BottomSheetAPI.Dispose = Dispose;
                function GetAllBottomSheetItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_bottomSheetItemsMap);
                }
                BottomSheetAPI.GetAllBottomSheetItemsMap = GetAllBottomSheetItemsMap;
                function GetBottomSheetItemById(bottomSheetId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('BottomSheet', bottomSheetId, _bottomSheetItemsMap);
                }
                BottomSheetAPI.GetBottomSheetItemById = GetBottomSheetItemById;
                function Initialize(bottomSheetId) {
                    const _bottomSheetItem = GetBottomSheetItemById(bottomSheetId);
                    _bottomSheetItem.build();
                    return _bottomSheetItem;
                }
                BottomSheetAPI.Initialize = Initialize;
                function Open(bottomSheetId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.BottomSheet.FailOpen,
                        callback: () => {
                            const _bottomSheetItem = GetBottomSheetItemById(bottomSheetId);
                            _bottomSheetItem.open();
                        },
                    });
                    return result;
                }
                BottomSheetAPI.Open = Open;
                function Close(bottomSheetId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.BottomSheet.FailClose,
                        callback: () => {
                            const _bottomSheetItem = GetBottomSheetItemById(bottomSheetId);
                            _bottomSheetItem.close();
                        },
                    });
                    return result;
                }
                BottomSheetAPI.Close = Close;
                function RegisterCallback(bottomSheetId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.BottomSheet.FailRegisterCallback,
                        callback: () => {
                            const bottomSheet = GetBottomSheetItemById(bottomSheetId);
                            bottomSheet.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                BottomSheetAPI.RegisterCallback = RegisterCallback;
            })(BottomSheetAPI = Patterns.BottomSheetAPI || (Patterns.BottomSheetAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var ButtonLoadingAPI;
            (function (ButtonLoadingAPI) {
                const _buttonsLoadingMap = new Map();
                function ChangeProperty(buttonLoadingId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.ButtonLoading.FailChangeProperty,
                        callback: () => {
                            const buttonLoading = GetButtonLoadingById(buttonLoadingId);
                            buttonLoading.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                ButtonLoadingAPI.ChangeProperty = ChangeProperty;
                function Create(buttonLoadingId, configs) {
                    if (_buttonsLoadingMap.has(buttonLoadingId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.ButtonLoading} registered under id: ${buttonLoadingId}`);
                    }
                    const _newButtonLoading = new OSFramework.OSUI.Patterns.ButtonLoading.ButtonLoading(buttonLoadingId, JSON.parse(configs));
                    _buttonsLoadingMap.set(buttonLoadingId, _newButtonLoading);
                    return _newButtonLoading;
                }
                ButtonLoadingAPI.Create = Create;
                function Dispose(buttonLoadingId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.ButtonLoading.FailDispose,
                        callback: () => {
                            const buttonLoading = GetButtonLoadingById(buttonLoadingId);
                            buttonLoading.dispose();
                            _buttonsLoadingMap.delete(buttonLoading.uniqueId);
                        },
                    });
                    return result;
                }
                ButtonLoadingAPI.Dispose = Dispose;
                function GetAllButtonsLoading() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_buttonsLoadingMap);
                }
                ButtonLoadingAPI.GetAllButtonsLoading = GetAllButtonsLoading;
                function GetButtonLoadingById(buttonLoadingId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.ButtonLoading, buttonLoadingId, _buttonsLoadingMap);
                }
                ButtonLoadingAPI.GetButtonLoadingById = GetButtonLoadingById;
                function Initialize(buttonLoadingId) {
                    const buttonLoading = GetButtonLoadingById(buttonLoadingId);
                    buttonLoading.build();
                    return buttonLoading;
                }
                ButtonLoadingAPI.Initialize = Initialize;
                function RegisterCallback(dropdownId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.ButtonLoading.FailRegisterCallback,
                        callback: () => {
                            const buttonLoading = this.GetButtonLoadingById(dropdownId);
                            buttonLoading.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                ButtonLoadingAPI.RegisterCallback = RegisterCallback;
            })(ButtonLoadingAPI = Patterns.ButtonLoadingAPI || (Patterns.ButtonLoadingAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var CarouselAPI;
            (function (CarouselAPI) {
                const _carouselItemsMap = new Map();
                function CarouselEnableOnRender(carouselId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailEnableOnRender,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.toggleOnRender(false);
                        },
                    });
                    return result;
                }
                CarouselAPI.CarouselEnableOnRender = CarouselEnableOnRender;
                function CarouselDisableOnRender(carouselId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailDisableOnRender,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.toggleOnRender(true);
                        },
                    });
                    return result;
                }
                CarouselAPI.CarouselDisableOnRender = CarouselDisableOnRender;
                function ChangeProperty(carouselId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailChangeProperty,
                        callback: () => {
                            const _carouselItem = GetCarouselItemById(carouselId);
                            _carouselItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                CarouselAPI.ChangeProperty = ChangeProperty;
                function Create(carouselId, configs, provider) {
                    if (_carouselItemsMap.has(carouselId)) {
                        throw new Error(`There is already an ${OSFramework.OSUI.GlobalEnum.PatternName.Carousel} registered under id: ${carouselId}`);
                    }
                    const _carouselItem = OSFramework.OSUI.Patterns.Carousel.Factory.NewCarousel(carouselId, configs, provider);
                    _carouselItemsMap.set(carouselId, _carouselItem);
                    return _carouselItem;
                }
                CarouselAPI.Create = Create;
                function Dispose(carouselId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailDispose,
                        callback: () => {
                            const _carouselItem = GetCarouselItemById(carouselId);
                            _carouselItem.dispose();
                            _carouselItemsMap.delete(_carouselItem.uniqueId);
                        },
                    });
                    return result;
                }
                CarouselAPI.Dispose = Dispose;
                function GetAllCarouselItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_carouselItemsMap);
                }
                CarouselAPI.GetAllCarouselItemsMap = GetAllCarouselItemsMap;
                function GetCarouselItemById(carouselId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('Carousel', carouselId, _carouselItemsMap);
                }
                CarouselAPI.GetCarouselItemById = GetCarouselItemById;
                function GoTo(carouselId, index) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailGoTo,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.goTo(index);
                        },
                    });
                    return result;
                }
                CarouselAPI.GoTo = GoTo;
                function Initialize(carouselId) {
                    const _carouselItem = GetCarouselItemById(carouselId);
                    _carouselItem.build();
                    return _carouselItem;
                }
                CarouselAPI.Initialize = Initialize;
                function Next(carouselId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailNext,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.next();
                        },
                    });
                    return result;
                }
                CarouselAPI.Next = Next;
                function Previous(carouselId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailPrevious,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.previous();
                        },
                    });
                    return result;
                }
                CarouselAPI.Previous = Previous;
                function RegisterCallback(carouselId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailRegisterCallback,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                CarouselAPI.RegisterCallback = RegisterCallback;
                function ToggleDrag(carouselId, hasDrag) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailToggleDrag,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.toggleDrag(hasDrag);
                        },
                    });
                    return result;
                }
                CarouselAPI.ToggleDrag = ToggleDrag;
                function UpdateOnRender(carouselId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailUpdate,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.updateOnRender();
                        },
                    });
                    return result;
                }
                CarouselAPI.UpdateOnRender = UpdateOnRender;
                function SetCarouselDirection(carouselId, direction) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailDirection,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.setCarouselDirection(direction);
                        },
                    });
                    return result;
                }
                CarouselAPI.SetCarouselDirection = SetCarouselDirection;
                function SetProviderConfigs(carouselId, configs) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailRegisterProviderConfig,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.setProviderConfigs(configs);
                        },
                    });
                    return result;
                }
                CarouselAPI.SetProviderConfigs = SetProviderConfigs;
                function SetProviderEvent(carouselId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailRegisterProviderEvent,
                        hasValue: true,
                        callback: () => {
                            const _eventUniqueId = OSFramework.OSUI.Helper.Dom.GenerateUniqueId();
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.setProviderEvent(eventName, callback, _eventUniqueId);
                            return _eventUniqueId;
                        },
                    });
                    return result;
                }
                CarouselAPI.SetProviderEvent = SetProviderEvent;
                function UnsetProviderEvent(carouselId, eventId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Carousel.FailRemoveProviderEvent,
                        callback: () => {
                            const carousel = GetCarouselItemById(carouselId);
                            carousel.unsetProviderEvent(eventId);
                        },
                    });
                    return result;
                }
                CarouselAPI.UnsetProviderEvent = UnsetProviderEvent;
            })(CarouselAPI = Patterns.CarouselAPI || (Patterns.CarouselAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DatePickerAPI;
            (function (DatePickerAPI) {
                const _datePickerItemsMap = new Map();
                function ChangeProperty(datePickerId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailChangeProperty,
                        callback: () => {
                            const _datePickerItem = GetDatePickerItemById(datePickerId);
                            _datePickerItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                DatePickerAPI.ChangeProperty = ChangeProperty;
                function Clear(datePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailClear,
                        callback: () => {
                            const _datePickerItem = GetDatePickerItemById(datePickerId);
                            _datePickerItem.clear();
                        },
                    });
                    return result;
                }
                DatePickerAPI.Clear = Clear;
                function Close(datePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailClose,
                        callback: () => {
                            const _datePickerItem = GetDatePickerItemById(datePickerId);
                            _datePickerItem.close();
                        },
                    });
                    return result;
                }
                DatePickerAPI.Close = Close;
                function Create(datePickerId, configs, mode, provider) {
                    if (_datePickerItemsMap.has(datePickerId)) {
                        throw new Error(`There is already an DatePicker registered under id: ${datePickerId}`);
                    }
                    const _datePickerItem = OSFramework.OSUI.Patterns.DatePicker.Factory.NewDatePicker(datePickerId, configs, mode, provider);
                    _datePickerItemsMap.set(datePickerId, _datePickerItem);
                    return _datePickerItem;
                }
                DatePickerAPI.Create = Create;
                function ToggleNativeBehavior(datePickerId, IsNative) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailToggleNativeBehavior,
                        callback: () => {
                            const _datePicker = this.GetDatePickerItemById(datePickerId);
                            _datePicker.toggleNativeBehavior(IsNative);
                        },
                    });
                    return result;
                }
                DatePickerAPI.ToggleNativeBehavior = ToggleNativeBehavior;
                function Dispose(datePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailDispose,
                        callback: () => {
                            const _datePickerItem = GetDatePickerItemById(datePickerId);
                            _datePickerItem.dispose();
                            _datePickerItemsMap.delete(_datePickerItem.uniqueId);
                        },
                    });
                    return result;
                }
                DatePickerAPI.Dispose = Dispose;
                function GetAllDatePickerItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_datePickerItemsMap);
                }
                DatePickerAPI.GetAllDatePickerItemsMap = GetAllDatePickerItemsMap;
                function GetDatePickerItemById(datePickerId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('DatePicker', datePickerId, _datePickerItemsMap);
                }
                DatePickerAPI.GetDatePickerItemById = GetDatePickerItemById;
                function Initialize(datePickerId) {
                    const _datePickerItem = GetDatePickerItemById(datePickerId);
                    _datePickerItem.build();
                    return _datePickerItem;
                }
                DatePickerAPI.Initialize = Initialize;
                function Open(datePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailOpen,
                        callback: () => {
                            const _datePickerItem = GetDatePickerItemById(datePickerId);
                            _datePickerItem.open();
                        },
                    });
                    return result;
                }
                DatePickerAPI.Open = Open;
                function OnRender(datePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailOnRender,
                        callback: () => {
                            const _datePickerItem = GetDatePickerItemById(datePickerId);
                            _datePickerItem.onRender();
                        },
                    });
                    return result;
                }
                DatePickerAPI.OnRender = OnRender;
                function RegisterCallback(datePickerId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailRegisterCallback,
                        callback: () => {
                            const _datePicker = this.GetDatePickerItemById(datePickerId);
                            _datePicker.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                DatePickerAPI.RegisterCallback = RegisterCallback;
                function Redraw(datePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailRedraw,
                        callback: () => {
                            const _datePicker = this.GetDatePickerItemById(datePickerId);
                            _datePicker.redraw();
                        },
                    });
                    return result;
                }
                DatePickerAPI.Redraw = Redraw;
                function SetLanguage(datePickerId, isoCode) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailSetLanguage,
                        callback: () => {
                            const _datePicker = this.GetDatePickerItemById(datePickerId);
                            _datePicker.setLanguage(isoCode);
                        },
                    });
                    return result;
                }
                DatePickerAPI.SetLanguage = SetLanguage;
                function UpdateInitialDate(datePickerId, date1, date2) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailUpdateInitialDate,
                        callback: () => {
                            if (OSFramework.OSUI.Helper.Dates.IsNull(date1)) {
                                throw new Error(`Given Date: '${date1}', can't be Null.`);
                            }
                            else if (OSFramework.OSUI.Helper.Dates.IsNull(date1) === false &&
                                date2 !== undefined &&
                                OSFramework.OSUI.Helper.Dates.IsNull(date2) === false &&
                                OSFramework.OSUI.Helper.Dates.IsBeforeThan(date1, date2) === false) {
                                throw new Error(`Date1: '${date1}', can't be after Date2: '${date2}'.`);
                            }
                            else {
                                const _datePicker = this.GetDatePickerItemById(datePickerId);
                                _datePicker.updateInitialDate(date1, date2);
                            }
                        },
                    });
                    return result;
                }
                DatePickerAPI.UpdateInitialDate = UpdateInitialDate;
                function UpdatePrompt(datePickerId, promptMessage) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailUpdatePrompt,
                        callback: () => {
                            const _datePicker = this.GetDatePickerItemById(datePickerId);
                            _datePicker.updatePrompt(promptMessage);
                        },
                    });
                    return result;
                }
                DatePickerAPI.UpdatePrompt = UpdatePrompt;
                function DisableDays(datePickerId, disableDays) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailDisableDays,
                        callback: () => {
                            const datePicker = GetDatePickerItemById(datePickerId);
                            datePicker.disableDays(disableDays);
                        },
                    });
                    return result;
                }
                DatePickerAPI.DisableDays = DisableDays;
                function DisableWeekDays(datePickerId, disableWeekDays) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailDisableWeekDays,
                        callback: () => {
                            const datePicker = GetDatePickerItemById(datePickerId);
                            datePicker.disableWeekDays(disableWeekDays);
                        },
                    });
                    return result;
                }
                DatePickerAPI.DisableWeekDays = DisableWeekDays;
                function SetProviderConfigs(datePickerId, providerConfigs) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailRegisterProviderConfig,
                        callback: () => {
                            const datePicker = GetDatePickerItemById(datePickerId);
                            datePicker.setProviderConfigs(providerConfigs);
                        },
                    });
                    return result;
                }
                DatePickerAPI.SetProviderConfigs = SetProviderConfigs;
                function SetProviderEvent(datePickerId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailRegisterProviderEvent,
                        hasValue: true,
                        callback: () => {
                            const _eventUniqueId = OSFramework.OSUI.Helper.Dom.GenerateUniqueId();
                            const datePicker = GetDatePickerItemById(datePickerId);
                            datePicker.setProviderEvent(eventName, callback, _eventUniqueId);
                            return _eventUniqueId;
                        },
                    });
                    return result;
                }
                DatePickerAPI.SetProviderEvent = SetProviderEvent;
                function UnsetProviderEvent(datePickerId, eventId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailRemoveProviderEvent,
                        callback: () => {
                            const datePicker = GetDatePickerItemById(datePickerId);
                            datePicker.unsetProviderEvent(eventId);
                        },
                    });
                    return result;
                }
                DatePickerAPI.UnsetProviderEvent = UnsetProviderEvent;
                function SetEditableInput(datePickerId, IsEditable) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DatePicker.FailSetEditableInput,
                        callback: () => {
                            const _datePicker = this.GetDatePickerItemById(datePickerId);
                            _datePicker.setEditableInput(IsEditable);
                        },
                    });
                    return result;
                }
                DatePickerAPI.SetEditableInput = SetEditableInput;
            })(DatePickerAPI = Patterns.DatePickerAPI || (Patterns.DatePickerAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DropdownAPI;
            (function (DropdownAPI) {
                const _dropdownItemsMap = new Map();
                function ChangeProperty(dropdownId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailChangeProperty,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                DropdownAPI.ChangeProperty = ChangeProperty;
                function Clear(dropdownId, silentOnChangedEvent = true) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailClear,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.clear(silentOnChangedEvent);
                        },
                    });
                    return result;
                }
                DropdownAPI.Clear = Clear;
                function Close(dropdownId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailClose,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.close();
                        },
                    });
                    return result;
                }
                DropdownAPI.Close = Close;
                function Create(dropdownId, mode, provider, configs) {
                    if (_dropdownItemsMap.has(dropdownId)) {
                        throw new Error(`There is already an Dropdown registered under id: ${dropdownId}`);
                    }
                    const _dropdownItem = OSFramework.OSUI.Patterns.Dropdown.Factory.NewDropdown(dropdownId, mode, provider, configs);
                    _dropdownItemsMap.set(dropdownId, _dropdownItem);
                    return _dropdownItem;
                }
                DropdownAPI.Create = Create;
                function Disable(dropdownId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailDisable,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.disable();
                        },
                    });
                    return result;
                }
                DropdownAPI.Disable = Disable;
                function TogglePopup(dropdownId, isEnabled) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailTogglePopup,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.togglePopup(isEnabled);
                        },
                    });
                    return result;
                }
                DropdownAPI.TogglePopup = TogglePopup;
                function Dispose(dropdownId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailDispose,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.dispose();
                            _dropdownItemsMap.delete(_dropdownItem.uniqueId);
                        },
                    });
                    return result;
                }
                DropdownAPI.Dispose = Dispose;
                function Enable(dropdownId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailEnable,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.enable();
                        },
                    });
                    return result;
                }
                DropdownAPI.Enable = Enable;
                function GetAllDropdowns() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_dropdownItemsMap);
                }
                DropdownAPI.GetAllDropdowns = GetAllDropdowns;
                function GetDropdownById(dropdownId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.Dropdown, dropdownId, _dropdownItemsMap);
                }
                DropdownAPI.GetDropdownById = GetDropdownById;
                function GetSelectedValues(dropdownId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailGetSelectedValues,
                        hasValue: true,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            return _dropdownItem.getSelectedValues();
                        },
                    });
                    return result;
                }
                DropdownAPI.GetSelectedValues = GetSelectedValues;
                function Open(dropdownId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailOpen,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.open();
                        },
                    });
                    return result;
                }
                DropdownAPI.Open = Open;
                function Initialize(dropdownId) {
                    const _dropdownItem = GetDropdownById(dropdownId);
                    _dropdownItem.build();
                    return _dropdownItem;
                }
                DropdownAPI.Initialize = Initialize;
                function RegisterCallback(dropdownId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailRegisterCallback,
                        callback: () => {
                            const _dropdownItem = this.GetDropdownById(dropdownId);
                            _dropdownItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                DropdownAPI.RegisterCallback = RegisterCallback;
                function SetProviderConfigs(dropdownId, providerConfigs) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailRegisterProviderConfig,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            if (_dropdownItem['provider'] !== undefined) {
                                _dropdownItem.setProviderConfigs(providerConfigs);
                            }
                            else {
                                throw new Error(`Dropdown with Id:${dropdownId} does not have a provider.`);
                            }
                        },
                    });
                    return result;
                }
                DropdownAPI.SetProviderConfigs = SetProviderConfigs;
                function SetProviderEvent(dropdownId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailRegisterProviderEvent,
                        hasValue: true,
                        callback: () => {
                            const _eventUniqueId = OSFramework.OSUI.Helper.Dom.GenerateUniqueId();
                            const dropdown = GetDropdownById(dropdownId);
                            dropdown.setProviderEvent(eventName, callback, _eventUniqueId);
                            return _eventUniqueId;
                        },
                    });
                    return result;
                }
                DropdownAPI.SetProviderEvent = SetProviderEvent;
                function UnsetProviderEvent(dropdownId, eventId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailRemoveProviderEvent,
                        callback: () => {
                            const dropdown = GetDropdownById(dropdownId);
                            dropdown.unsetProviderEvent(eventId);
                        },
                    });
                    return result;
                }
                DropdownAPI.UnsetProviderEvent = UnsetProviderEvent;
                function SetValidation(dropdownId, isValid, validationMessage) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailSetValidation,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.validation(isValid, validationMessage);
                        },
                    });
                    return result;
                }
                DropdownAPI.SetValidation = SetValidation;
                function SetValues(dropdownId, selectedValues, silentOnChangedEvent = true) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Dropdown.FailSetValues,
                        callback: () => {
                            const _dropdownItem = GetDropdownById(dropdownId);
                            _dropdownItem.setValue(JSON.parse(selectedValues), silentOnChangedEvent);
                        },
                    });
                    return result;
                }
                DropdownAPI.SetValues = SetValues;
            })(DropdownAPI = Patterns.DropdownAPI || (Patterns.DropdownAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var DropdownServerSideItemAPI;
            (function (DropdownServerSideItemAPI) {
                const _dropdownServerSideItemItemsMap = new Map();
                function ChangeProperty(dropdownServerSideItemId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DropdownServerSideItem.FailChangeProperty,
                        callback: () => {
                            const _dropdownServerSideItemItem = GetDropdownServerSideItemItemById(dropdownServerSideItemId);
                            _dropdownServerSideItemItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                DropdownServerSideItemAPI.ChangeProperty = ChangeProperty;
                function Create(dropdownServerSideItemId, configs) {
                    if (_dropdownServerSideItemItemsMap.has(dropdownServerSideItemId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.DropdownServerSideItem} registered under id: ${dropdownServerSideItemId}`);
                    }
                    const _dropdownServerSideItemItem = new OSFramework.OSUI.Patterns.DropdownServerSideItem.DropdownServerSideItem(dropdownServerSideItemId, JSON.parse(configs));
                    _dropdownServerSideItemItemsMap.set(dropdownServerSideItemId, _dropdownServerSideItemItem);
                    return _dropdownServerSideItemItem;
                }
                DropdownServerSideItemAPI.Create = Create;
                function Dispose(dropdownServerSideItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DropdownServerSideItem.FailDispose,
                        callback: () => {
                            const _dropdownServerSideItemItem = GetDropdownServerSideItemItemById(dropdownServerSideItemId);
                            _dropdownServerSideItemItem.dispose();
                            _dropdownServerSideItemItemsMap.delete(_dropdownServerSideItemItem.uniqueId);
                        },
                    });
                    return result;
                }
                DropdownServerSideItemAPI.Dispose = Dispose;
                function GetAllDropdownServerSideItemItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_dropdownServerSideItemItemsMap);
                }
                DropdownServerSideItemAPI.GetAllDropdownServerSideItemItemsMap = GetAllDropdownServerSideItemItemsMap;
                function GetDropdownServerSideItemItemById(dropdownServerSideItemId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('DropdownServerSideItem', dropdownServerSideItemId, _dropdownServerSideItemItemsMap);
                }
                DropdownServerSideItemAPI.GetDropdownServerSideItemItemById = GetDropdownServerSideItemItemById;
                function Initialize(dropdownServerSideItemId) {
                    const _dropdownServerSideItemItem = GetDropdownServerSideItemItemById(dropdownServerSideItemId);
                    _dropdownServerSideItemItem.build();
                    return _dropdownServerSideItemItem;
                }
                DropdownServerSideItemAPI.Initialize = Initialize;
                function RegisterCallback(dropdownServerSideItemId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.DropdownServerSideItem.FailRegisterCallback,
                        callback: () => {
                            const _dropdownServerSideItemItem = this.GetDropdownServerSideItemItemById(dropdownServerSideItemId);
                            _dropdownServerSideItemItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                DropdownServerSideItemAPI.RegisterCallback = RegisterCallback;
            })(DropdownServerSideItemAPI = Patterns.DropdownServerSideItemAPI || (Patterns.DropdownServerSideItemAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var FlipContentAPI;
            (function (FlipContentAPI) {
                const _flipContentMap = new Map();
                function ChangeProperty(flipId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.FlipContent.FailChangeProperty,
                        callback: () => {
                            const flipContent = GetFlipContentById(flipId);
                            flipContent.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                FlipContentAPI.ChangeProperty = ChangeProperty;
                function Create(flipId, configs) {
                    if (_flipContentMap.has(flipId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.FlipContent} registered under id: ${flipId}`);
                    }
                    const _newFlip = new OSFramework.OSUI.Patterns.FlipContent.FlipContent(flipId, JSON.parse(configs));
                    _flipContentMap.set(flipId, _newFlip);
                    return _newFlip;
                }
                FlipContentAPI.Create = Create;
                function Dispose(flipId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.FlipContent.FailDispose,
                        callback: () => {
                            const flipContent = GetFlipContentById(flipId);
                            flipContent.dispose();
                            _flipContentMap.delete(flipContent.uniqueId);
                        },
                    });
                    return result;
                }
                FlipContentAPI.Dispose = Dispose;
                function GetAllFlipContent() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_flipContentMap);
                }
                FlipContentAPI.GetAllFlipContent = GetAllFlipContent;
                function GetFlipContentById(flipId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('FlipContent', flipId, _flipContentMap);
                }
                FlipContentAPI.GetFlipContentById = GetFlipContentById;
                function Initialize(flipId) {
                    const flipContent = GetFlipContentById(flipId);
                    flipContent.build();
                    return flipContent;
                }
                FlipContentAPI.Initialize = Initialize;
                function RegisterCallback(flipId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.FlipContent.FailRegisterCallback,
                        callback: () => {
                            const flipContent = GetFlipContentById(flipId);
                            flipContent.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                FlipContentAPI.RegisterCallback = RegisterCallback;
                function ShowBackContent(flipId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.FlipContent.FailShowBack,
                        callback: () => {
                            const flipContent = GetFlipContentById(flipId);
                            flipContent.showBackContent();
                        },
                    });
                    return result;
                }
                FlipContentAPI.ShowBackContent = ShowBackContent;
                function ShowFrontContent(flipId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.FlipContent.FailShowFront,
                        callback: () => {
                            const flipContent = GetFlipContentById(flipId);
                            flipContent.showFrontContent();
                        },
                    });
                    return result;
                }
                FlipContentAPI.ShowFrontContent = ShowFrontContent;
                function ToggleFlipContent(flipId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.FlipContent.FailToggle,
                        callback: () => {
                            const flipContent = GetFlipContentById(flipId);
                            flipContent.toggleFlipContent();
                        },
                    });
                    return result;
                }
                FlipContentAPI.ToggleFlipContent = ToggleFlipContent;
            })(FlipContentAPI = Patterns.FlipContentAPI || (Patterns.FlipContentAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var GalleryAPI;
            (function (GalleryAPI) {
                const _galleryMap = new Map();
                function ChangeProperty(galleryId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Gallery.FailChangeProperty,
                        callback: () => {
                            const gallery = GetGalleryById(galleryId);
                            gallery.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                GalleryAPI.ChangeProperty = ChangeProperty;
                function Create(galleryId, configs) {
                    if (_galleryMap.has(galleryId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Gallery} registered under id: ${galleryId}`);
                    }
                    const _newGallery = new OSFramework.OSUI.Patterns.Gallery.Gallery(galleryId, JSON.parse(configs));
                    _galleryMap.set(galleryId, _newGallery);
                    return _newGallery;
                }
                GalleryAPI.Create = Create;
                function Dispose(galleryId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Gallery.FailDispose,
                        callback: () => {
                            const gallery = GetGalleryById(galleryId);
                            gallery.dispose();
                            _galleryMap.delete(galleryId);
                        },
                    });
                    return result;
                }
                GalleryAPI.Dispose = Dispose;
                function GetAllGalleries() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_galleryMap);
                }
                GalleryAPI.GetAllGalleries = GetAllGalleries;
                function GetGalleryById(galleryId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('Gallery', galleryId, _galleryMap);
                }
                GalleryAPI.GetGalleryById = GetGalleryById;
                function Initialize(galleryId) {
                    const gallery = GetGalleryById(galleryId);
                    gallery.build();
                    return gallery;
                }
                GalleryAPI.Initialize = Initialize;
                function RegisterCallback(dropdownId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Gallery.FailRegisterCallback,
                        callback: () => {
                            const gallery = this.GetGalleryById(dropdownId);
                            gallery.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                GalleryAPI.RegisterCallback = RegisterCallback;
            })(GalleryAPI = Patterns.GalleryAPI || (Patterns.GalleryAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var InlineSvgAPI;
            (function (InlineSvgAPI) {
                const _inlineSvgMap = new Map();
                function ChangeProperty(inlineSvgId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.InlineSvg.FailChangeProperty,
                        callback: () => {
                            const inlineSvg = GetInlineSvgById(inlineSvgId);
                            inlineSvg.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                InlineSvgAPI.ChangeProperty = ChangeProperty;
                function Create(inlineSvgId, configs) {
                    if (_inlineSvgMap.has(inlineSvgId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.InlineSvg} registered under id: ${inlineSvgId}`);
                    }
                    const _newInlineSvg = new OSFramework.OSUI.Patterns.InlineSvg.InlineSvg(inlineSvgId, JSON.parse(configs));
                    _inlineSvgMap.set(inlineSvgId, _newInlineSvg);
                    return _newInlineSvg;
                }
                InlineSvgAPI.Create = Create;
                function Dispose(inlineSvgId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.InlineSvg.FailDispose,
                        callback: () => {
                            const inlineSvg = GetInlineSvgById(inlineSvgId);
                            inlineSvg.dispose();
                            _inlineSvgMap.delete(inlineSvgId);
                        },
                    });
                    return result;
                }
                InlineSvgAPI.Dispose = Dispose;
                function GetAllInlineSvgs() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_inlineSvgMap);
                }
                InlineSvgAPI.GetAllInlineSvgs = GetAllInlineSvgs;
                function GetInlineSvgById(inlineSvgId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('InlineSvg', inlineSvgId, _inlineSvgMap);
                }
                InlineSvgAPI.GetInlineSvgById = GetInlineSvgById;
                function Initialize(inlineSvgId) {
                    const inlineSvg = GetInlineSvgById(inlineSvgId);
                    inlineSvg.build();
                    return inlineSvg;
                }
                InlineSvgAPI.Initialize = Initialize;
                function RegisterCallback(inlineSvgId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.InlineSvg.FailRegisterCallback,
                        callback: () => {
                            const _InlineSvgItem = this.GetInlineSvgById(inlineSvgId);
                            _InlineSvgItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                InlineSvgAPI.RegisterCallback = RegisterCallback;
            })(InlineSvgAPI = Patterns.InlineSvgAPI || (Patterns.InlineSvgAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var MonthPickerAPI;
            (function (MonthPickerAPI) {
                const _monthPickerItemsMap = new Map();
                function ChangeProperty(monthPickerId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailChangeProperty,
                        callback: () => {
                            const _monthPickerItem = GetMonthPickerItemById(monthPickerId);
                            _monthPickerItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                MonthPickerAPI.ChangeProperty = ChangeProperty;
                function Clear(monthPickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailClear,
                        callback: () => {
                            const _MonthPickerItem = GetMonthPickerItemById(monthPickerId);
                            _MonthPickerItem.clear();
                        },
                    });
                    return result;
                }
                MonthPickerAPI.Clear = Clear;
                function Close(monthPickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailClose,
                        callback: () => {
                            const _MonthPickerItem = GetMonthPickerItemById(monthPickerId);
                            _MonthPickerItem.close();
                        },
                    });
                    return result;
                }
                MonthPickerAPI.Close = Close;
                function Create(monthPickerId, configs, provider) {
                    if (_monthPickerItemsMap.has(monthPickerId)) {
                        throw new Error('There is already an MonthPicker registered under id: ' + monthPickerId);
                    }
                    const _monthPickerItem = OSFramework.OSUI.Patterns.MonthPicker.Factory.NewMonthPicker(monthPickerId, provider, configs);
                    _monthPickerItemsMap.set(monthPickerId, _monthPickerItem);
                    return _monthPickerItem;
                }
                MonthPickerAPI.Create = Create;
                function Dispose(monthPickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailDispose,
                        callback: () => {
                            const _monthPickerItem = GetMonthPickerItemById(monthPickerId);
                            _monthPickerItem.dispose();
                            _monthPickerItemsMap.delete(_monthPickerItem.uniqueId);
                        },
                    });
                    return result;
                }
                MonthPickerAPI.Dispose = Dispose;
                function GetAllMonthPickerItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_monthPickerItemsMap);
                }
                MonthPickerAPI.GetAllMonthPickerItemsMap = GetAllMonthPickerItemsMap;
                function GetMonthPickerItemById(monthPickerId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('MonthPicker', monthPickerId, _monthPickerItemsMap);
                }
                MonthPickerAPI.GetMonthPickerItemById = GetMonthPickerItemById;
                function Initialize(monthPickerId) {
                    const _monthPickerItem = GetMonthPickerItemById(monthPickerId);
                    _monthPickerItem.build();
                    return _monthPickerItem;
                }
                MonthPickerAPI.Initialize = Initialize;
                function Open(monthPickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailOpen,
                        callback: () => {
                            const _MonthPickerItem = GetMonthPickerItemById(monthPickerId);
                            _MonthPickerItem.open();
                        },
                    });
                    return result;
                }
                MonthPickerAPI.Open = Open;
                function OnRender(monthPickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailOnRender,
                        callback: () => {
                            const _monthPicker = this.GetMonthPickerItemById(monthPickerId);
                            _monthPicker.onRender();
                        },
                    });
                    return result;
                }
                MonthPickerAPI.OnRender = OnRender;
                function RegisterCallback(monthPickerId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailRegisterCallback,
                        callback: () => {
                            const _monthPicker = this.GetMonthPickerItemById(monthPickerId);
                            _monthPicker.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                MonthPickerAPI.RegisterCallback = RegisterCallback;
                function SetProviderConfigs(monthPickerId, providerConfigs) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailRegisterProviderConfig,
                        callback: () => {
                            const monthPicker = GetMonthPickerItemById(monthPickerId);
                            monthPicker.setProviderConfigs(providerConfigs);
                        },
                    });
                    return result;
                }
                MonthPickerAPI.SetProviderConfigs = SetProviderConfigs;
                function SetProviderEvent(monthPickerId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailRegisterProviderEvent,
                        hasValue: true,
                        callback: () => {
                            const _eventUniqueId = OSFramework.OSUI.Helper.Dom.GenerateUniqueId();
                            const monthPicker = GetMonthPickerItemById(monthPickerId);
                            monthPicker.setProviderEvent(eventName, callback, _eventUniqueId);
                            return _eventUniqueId;
                        },
                    });
                    return result;
                }
                MonthPickerAPI.SetProviderEvent = SetProviderEvent;
                function SetLanguage(monthPickerId, isoCode) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailSetLanguage,
                        callback: () => {
                            const _monthPicker = this.GetMonthPickerItemById(monthPickerId);
                            _monthPicker.setLanguage(isoCode);
                        },
                    });
                    return result;
                }
                MonthPickerAPI.SetLanguage = SetLanguage;
                function SetEditableInput(monthPickerId, IsEditable) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailSetEditableInput,
                        callback: () => {
                            const _monthPicker = this.GetMonthPickerItemById(monthPickerId);
                            _monthPicker.setEditableInput(IsEditable);
                        },
                    });
                    return result;
                }
                MonthPickerAPI.SetEditableInput = SetEditableInput;
                function UnsetProviderEvent(monthPickerId, eventId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailRemoveProviderEvent,
                        callback: () => {
                            const monthPicker = GetMonthPickerItemById(monthPickerId);
                            monthPicker.unsetProviderEvent(eventId);
                        },
                    });
                    return result;
                }
                MonthPickerAPI.UnsetProviderEvent = UnsetProviderEvent;
                function UpdateInitialMonth(monthPickerId, monthYear) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailUpdateInitialMonth,
                        callback: () => {
                            const _monthPicker = this.GetMonthPickerItemById(monthPickerId);
                            _monthPicker.updateInitialMonth(monthYear);
                        },
                    });
                    return result;
                }
                MonthPickerAPI.UpdateInitialMonth = UpdateInitialMonth;
                function UpdatePrompt(monthPickerId, promptMessage) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.MonthPicker.FailUpdatePrompt,
                        callback: () => {
                            const _monthPicker = this.GetMonthPickerItemById(monthPickerId);
                            _monthPicker.updatePrompt(promptMessage);
                        },
                    });
                    return result;
                }
                MonthPickerAPI.UpdatePrompt = UpdatePrompt;
            })(MonthPickerAPI = Patterns.MonthPickerAPI || (Patterns.MonthPickerAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var NotificationAPI;
            (function (NotificationAPI) {
                const _notificationMap = new Map();
                function ChangeProperty(notificationId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Notification.FailChangeProperty,
                        callback: () => {
                            const notification = GetNotificationById(notificationId);
                            notification.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                NotificationAPI.ChangeProperty = ChangeProperty;
                function Create(notificationId, configs) {
                    if (_notificationMap.has(notificationId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Notification} registered under id: ${notificationId}`);
                    }
                    const _newNotification = new OSFramework.OSUI.Patterns.Notification.Notification(notificationId, JSON.parse(configs));
                    _notificationMap.set(notificationId, _newNotification);
                    return _newNotification;
                }
                NotificationAPI.Create = Create;
                function Dispose(notificationId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Notification.FailDispose,
                        callback: () => {
                            const notification = GetNotificationById(notificationId);
                            notification.dispose();
                            _notificationMap.delete(notificationId);
                        },
                    });
                    return result;
                }
                NotificationAPI.Dispose = Dispose;
                function GetAllNotifications() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_notificationMap);
                }
                NotificationAPI.GetAllNotifications = GetAllNotifications;
                function GetNotificationById(notificationId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('Notification', notificationId, _notificationMap);
                }
                NotificationAPI.GetNotificationById = GetNotificationById;
                function Hide(notificationId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Notification.FailHide,
                        callback: () => {
                            const notification = GetNotificationById(notificationId);
                            notification.hide();
                        },
                    });
                    return result;
                }
                NotificationAPI.Hide = Hide;
                function Initialize(notificationId) {
                    const notification = GetNotificationById(notificationId);
                    notification.build();
                    return notification;
                }
                NotificationAPI.Initialize = Initialize;
                function RegisterCallback(notificationId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Notification.FailRegisterCallback,
                        callback: () => {
                            const _notificationItem = this.GetNotificationById(notificationId);
                            _notificationItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                NotificationAPI.RegisterCallback = RegisterCallback;
                function Show(notificationId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Notification.FailShow,
                        callback: () => {
                            const notification = GetNotificationById(notificationId);
                            notification.show();
                        },
                    });
                    return result;
                }
                NotificationAPI.Show = Show;
            })(NotificationAPI = Patterns.NotificationAPI || (Patterns.NotificationAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var OverflowMenuAPI;
            (function (OverflowMenuAPI) {
                const _overflowMenuMap = new Map();
                function ChangeProperty(overflowMenuId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.OverflowMenu.FailChangeProperty,
                        callback: () => {
                            const overflowMenu = GetOverflowMenuById(overflowMenuId);
                            overflowMenu.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                OverflowMenuAPI.ChangeProperty = ChangeProperty;
                function Create(overflowMenuId, configs) {
                    if (_overflowMenuMap.has(overflowMenuId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.OverflowMenu} registered under id: ${overflowMenuId}`);
                    }
                    const _overflowMenuItem = new OSFramework.OSUI.Patterns.OverflowMenu.OverflowMenu(overflowMenuId, JSON.parse(configs));
                    _overflowMenuMap.set(overflowMenuId, _overflowMenuItem);
                    return _overflowMenuItem;
                }
                OverflowMenuAPI.Create = Create;
                function Disable(overflowMenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.OverflowMenu.FailDisable,
                        callback: () => {
                            const _overflowMenu = GetOverflowMenuById(overflowMenuId);
                            _overflowMenu.disable();
                        },
                    });
                    return result;
                }
                OverflowMenuAPI.Disable = Disable;
                function Dispose(overflowMenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.OverflowMenu.FailDispose,
                        callback: () => {
                            const _overflowMenu = GetOverflowMenuById(overflowMenuId);
                            _overflowMenu.dispose();
                            _overflowMenuMap.delete(_overflowMenu.uniqueId);
                        },
                    });
                    return result;
                }
                OverflowMenuAPI.Dispose = Dispose;
                function Enable(overflowMenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.OverflowMenu.FailEnable,
                        callback: () => {
                            const _overflowMenu = GetOverflowMenuById(overflowMenuId);
                            _overflowMenu.enable();
                        },
                    });
                    return result;
                }
                OverflowMenuAPI.Enable = Enable;
                function GetAllOverflowMenus() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_overflowMenuMap);
                }
                OverflowMenuAPI.GetAllOverflowMenus = GetAllOverflowMenus;
                function GetOverflowMenuById(overflowMenuId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.OverflowMenu, overflowMenuId, _overflowMenuMap);
                }
                OverflowMenuAPI.GetOverflowMenuById = GetOverflowMenuById;
                function Initialize(overflowMenuId) {
                    const _overflowMenu = GetOverflowMenuById(overflowMenuId);
                    _overflowMenu.build();
                    return _overflowMenu;
                }
                OverflowMenuAPI.Initialize = Initialize;
                function RegisterCallback(overflowMenuId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.OverflowMenu.FailRegisterCallback,
                        callback: () => {
                            const _overflowMenu = GetOverflowMenuById(overflowMenuId);
                            _overflowMenu.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                OverflowMenuAPI.RegisterCallback = RegisterCallback;
                function Open(overflowMenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.OverflowMenu.FailOpen,
                        callback: () => {
                            const _overflowMenuItem = GetOverflowMenuById(overflowMenuId);
                            _overflowMenuItem.open(true);
                        },
                    });
                    return result;
                }
                OverflowMenuAPI.Open = Open;
                function Close(overflowMenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.OverflowMenu.FailClose,
                        callback: () => {
                            const _overflowMenuItem = GetOverflowMenuById(overflowMenuId);
                            _overflowMenuItem.close();
                        },
                    });
                    return result;
                }
                OverflowMenuAPI.Close = Close;
            })(OverflowMenuAPI = Patterns.OverflowMenuAPI || (Patterns.OverflowMenuAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var ProgressAPI;
            (function (ProgressAPI) {
                const _progressItemsMap = new Map();
                function ChangeProperty(progressId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Progress.FailChangeProperty,
                        callback: () => {
                            const _progressItem = GetProgressItemById(progressId);
                            _progressItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                ProgressAPI.ChangeProperty = ChangeProperty;
                function Create(progressId, type, configs) {
                    if (_progressItemsMap.has(progressId)) {
                        throw new Error(`There is already an ProgressItem registered under id: ${progressId}`);
                    }
                    const _progressItem = OSFramework.OSUI.Patterns.Progress.Factory.NewProgress(progressId, type, configs);
                    _progressItemsMap.set(progressId, _progressItem);
                    return _progressItem;
                }
                ProgressAPI.Create = Create;
                function Dispose(progressId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Progress.FailDispose,
                        callback: () => {
                            const _progressItem = GetProgressItemById(progressId);
                            _progressItem.dispose();
                            _progressItemsMap.delete(_progressItem.uniqueId);
                        },
                    });
                    return result;
                }
                ProgressAPI.Dispose = Dispose;
                function GetAllProgressItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_progressItemsMap);
                }
                ProgressAPI.GetAllProgressItemsMap = GetAllProgressItemsMap;
                function GetProgressItemById(progressId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('Progress', progressId, _progressItemsMap);
                }
                ProgressAPI.GetProgressItemById = GetProgressItemById;
                function Initialize(progressId) {
                    const _progressItem = GetProgressItemById(progressId);
                    _progressItem.build();
                    return _progressItem;
                }
                ProgressAPI.Initialize = Initialize;
                function RegisterCallback(dropdownId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Progress.FailRegisterCallback,
                        callback: () => {
                            const _progressItem = this.GetProgressItemById(dropdownId);
                            _progressItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                ProgressAPI.RegisterCallback = RegisterCallback;
                function ResetProgressValue(progressId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Progress.FailProgressReset,
                        callback: () => {
                            const _progressItem = GetProgressItemById(progressId);
                            _progressItem.resetProgressValue();
                        },
                    });
                    return result;
                }
                ProgressAPI.ResetProgressValue = ResetProgressValue;
                function SetProgressValue(progressId, progress) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Progress.FailProgressValue,
                        callback: () => {
                            const _progressItem = GetProgressItemById(progressId);
                            _progressItem.setProgressValue(progress);
                        },
                    });
                    return result;
                }
                ProgressAPI.SetProgressValue = SetProgressValue;
                function ProgressApplyGradient(progressId, gradientType, colors) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Progress.FailtProgressGradient,
                        callback: () => {
                            const _progressItem = GetProgressItemById(progressId);
                            _progressItem.progressApplyGradient(gradientType, JSON.parse(colors));
                        },
                    });
                    return result;
                }
                ProgressAPI.ProgressApplyGradient = ProgressApplyGradient;
            })(ProgressAPI = Patterns.ProgressAPI || (Patterns.ProgressAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var RangeSliderAPI;
            (function (RangeSliderAPI) {
                const _rangeSliderItemsMap = new Map();
                function ChangeProperty(rangeSliderId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailChangeProperty,
                        callback: () => {
                            const _rangeSliderItem = GetRangeSliderItemById(rangeSliderId);
                            _rangeSliderItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                RangeSliderAPI.ChangeProperty = ChangeProperty;
                function Create(rangeSliderId, configs, mode, provider) {
                    if (_rangeSliderItemsMap.has(rangeSliderId)) {
                        throw new Error(`There is already an ${OSFramework.OSUI.GlobalEnum.PatternName.RangeSlider} registered under id: ${rangeSliderId}`);
                    }
                    const _rangeSliderItem = OSFramework.OSUI.Patterns.RangeSlider.Factory.NewRangeSlider(rangeSliderId, configs, mode, provider);
                    _rangeSliderItemsMap.set(rangeSliderId, _rangeSliderItem);
                    return _rangeSliderItem;
                }
                RangeSliderAPI.Create = Create;
                function Disable(rangeSliderId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailDisable,
                        callback: () => {
                            const rangeSlider = this.GetRangeSliderItemById(rangeSliderId);
                            rangeSlider.disable();
                        },
                    });
                    return result;
                }
                RangeSliderAPI.Disable = Disable;
                function Dispose(rangeSliderId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailDispose,
                        callback: () => {
                            const _rangeSliderItem = GetRangeSliderItemById(rangeSliderId);
                            _rangeSliderItem.dispose();
                            _rangeSliderItemsMap.delete(_rangeSliderItem.uniqueId);
                        },
                    });
                    return result;
                }
                RangeSliderAPI.Dispose = Dispose;
                function Enable(rangeSliderId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailEnable,
                        callback: () => {
                            const rangeSlider = this.GetRangeSliderItemById(rangeSliderId);
                            rangeSlider.enable();
                        },
                    });
                    return result;
                }
                RangeSliderAPI.Enable = Enable;
                function GetAllRangeSliderItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_rangeSliderItemsMap);
                }
                RangeSliderAPI.GetAllRangeSliderItemsMap = GetAllRangeSliderItemsMap;
                function GetRangeSliderItemById(rangeSliderId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.RangeSlider, rangeSliderId, _rangeSliderItemsMap);
                }
                RangeSliderAPI.GetRangeSliderItemById = GetRangeSliderItemById;
                function Initialize(rangeSliderId) {
                    const _rangeSliderItem = GetRangeSliderItemById(rangeSliderId);
                    _rangeSliderItem.build();
                    return _rangeSliderItem;
                }
                RangeSliderAPI.Initialize = Initialize;
                function RegisterCallback(rangeSliderId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailRegisterCallback,
                        callback: () => {
                            const rangeSlider = this.GetRangeSliderItemById(rangeSliderId);
                            rangeSlider.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                RangeSliderAPI.RegisterCallback = RegisterCallback;
                function SetRangeIntervalChangeOnDragEnd(rangeSliderId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailOnDragEnd,
                        callback: () => {
                            const rangeSlider = this.GetRangeSliderItemById(rangeSliderId);
                            rangeSlider.setRangeIntervalChangeOnDragEnd();
                        },
                    });
                    return result;
                }
                RangeSliderAPI.SetRangeIntervalChangeOnDragEnd = SetRangeIntervalChangeOnDragEnd;
                function SetRangeSliderValue(rangeSliderId, valueFrom, valueTo) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailSetValues,
                        callback: () => {
                            const rangeSlider = this.GetRangeSliderItemById(rangeSliderId);
                            rangeSlider.setValue(valueFrom, valueTo);
                        },
                    });
                    return result;
                }
                RangeSliderAPI.SetRangeSliderValue = SetRangeSliderValue;
                function ResetRangeSliderValue(rangeSliderId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailResetValues,
                        callback: () => {
                            const rangeSlider = this.GetRangeSliderItemById(rangeSliderId);
                            rangeSlider.resetValue();
                        },
                    });
                    return result;
                }
                RangeSliderAPI.ResetRangeSliderValue = ResetRangeSliderValue;
                function SetProviderConfigs(rangeSliderId, configs) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailRegisterProviderConfig,
                        callback: () => {
                            const rangeSlider = GetRangeSliderItemById(rangeSliderId);
                            rangeSlider.setProviderConfigs(configs);
                        },
                    });
                    return result;
                }
                RangeSliderAPI.SetProviderConfigs = SetProviderConfigs;
                function SetProviderEvent(rangeSliderId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailRegisterProviderEvent,
                        hasValue: true,
                        callback: () => {
                            const _eventUniqueId = OSFramework.OSUI.Helper.Dom.GenerateUniqueId();
                            const rangeSlider = GetRangeSliderItemById(rangeSliderId);
                            rangeSlider.setProviderEvent(eventName, callback, _eventUniqueId);
                            return _eventUniqueId;
                        },
                    });
                    return result;
                }
                RangeSliderAPI.SetProviderEvent = SetProviderEvent;
                function UnsetProviderEvent(rangeSliderId, eventId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.RangeSlider.FailRemoveProviderEvent,
                        callback: () => {
                            const rangeSlider = GetRangeSliderItemById(rangeSliderId);
                            rangeSlider.unsetProviderEvent(eventId);
                        },
                    });
                    return result;
                }
                RangeSliderAPI.UnsetProviderEvent = UnsetProviderEvent;
            })(RangeSliderAPI = Patterns.RangeSliderAPI || (Patterns.RangeSliderAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var RatingAPI;
            (function (RatingAPI) {
                const _ratingsMap = new Map();
                function ChangeProperty(ratingId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Rating.FailChangeProperty,
                        callback: () => {
                            const rating = GetRatingById(ratingId);
                            rating.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                RatingAPI.ChangeProperty = ChangeProperty;
                function Create(ratingId, configs) {
                    if (_ratingsMap.has(ratingId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Rating} registered under id: ${ratingId}`);
                    }
                    const _newRating = new OSFramework.OSUI.Patterns.Rating.Rating(ratingId, JSON.parse(configs));
                    _ratingsMap.set(ratingId, _newRating);
                    return _newRating;
                }
                RatingAPI.Create = Create;
                function Disable(ratingId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Rating.FailDisable,
                        callback: () => {
                            const rating = GetRatingById(ratingId);
                            rating.disable();
                        },
                    });
                    return result;
                }
                RatingAPI.Disable = Disable;
                function Dispose(ratingId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Rating.FailDispose,
                        callback: () => {
                            const rating = GetRatingById(ratingId);
                            rating.dispose();
                            _ratingsMap.delete(ratingId);
                        },
                    });
                    return result;
                }
                RatingAPI.Dispose = Dispose;
                function Enable(ratingId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Rating.FailEnable,
                        callback: () => {
                            const rating = GetRatingById(ratingId);
                            rating.enable();
                        },
                    });
                    return result;
                }
                RatingAPI.Enable = Enable;
                function GetAllRatings() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_ratingsMap);
                }
                RatingAPI.GetAllRatings = GetAllRatings;
                function GetRatingById(ratingId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('Rating', ratingId, _ratingsMap);
                }
                RatingAPI.GetRatingById = GetRatingById;
                function Initialize(ratingId) {
                    const rating = GetRatingById(ratingId);
                    rating.build();
                    return rating;
                }
                RatingAPI.Initialize = Initialize;
                function RegisterCallback(ratingId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Rating.FailRegisterCallback,
                        callback: () => {
                            const rating = GetRatingById(ratingId);
                            rating.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                RatingAPI.RegisterCallback = RegisterCallback;
            })(RatingAPI = Patterns.RatingAPI || (Patterns.RatingAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SearchAPI;
            (function (SearchAPI) {
                const _searchMap = new Map();
                function ChangeProperty(searchId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Search.FailChangeProperty,
                        callback: () => {
                            const search = GetSearchById(searchId);
                            search.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                SearchAPI.ChangeProperty = ChangeProperty;
                function Create(searchId, configs) {
                    if (_searchMap.has(searchId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Search} registered under id: ${searchId}`);
                    }
                    const _newSearch = new OSFramework.OSUI.Patterns.Search.Search(searchId, JSON.parse(configs));
                    _searchMap.set(searchId, _newSearch);
                    return _newSearch;
                }
                SearchAPI.Create = Create;
                function Dispose(searchId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Search.FailDispose,
                        callback: () => {
                            const search = GetSearchById(searchId);
                            search.dispose();
                            _searchMap.delete(searchId);
                        },
                    });
                    return result;
                }
                SearchAPI.Dispose = Dispose;
                function GetAllSearches() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_searchMap);
                }
                SearchAPI.GetAllSearches = GetAllSearches;
                function GetSearchById(searchId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('Search', searchId, _searchMap);
                }
                SearchAPI.GetSearchById = GetSearchById;
                function Initialize(searchId) {
                    const search = GetSearchById(searchId);
                    search.build();
                    return search;
                }
                SearchAPI.Initialize = Initialize;
                function RegisterCallback(searchId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Search.FailRegisterCallback,
                        callback: () => {
                            const _SearchItem = this.GetSearchById(searchId);
                            _SearchItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                SearchAPI.RegisterCallback = RegisterCallback;
            })(SearchAPI = Patterns.SearchAPI || (Patterns.SearchAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SectionIndexAPI;
            (function (SectionIndexAPI) {
                const _sectionIndexItemsMap = new Map();
                function ChangeProperty(sectionIndexId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.SectionIndex.FailChangeProperty,
                        callback: () => {
                            const _sectionIndexItem = GetSectionIndexById(sectionIndexId);
                            _sectionIndexItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                SectionIndexAPI.ChangeProperty = ChangeProperty;
                function Create(sectionIndexId, configs) {
                    if (_sectionIndexItemsMap.has(sectionIndexId)) {
                        throw new Error(`There is already an SectionIndex registered under id: ${sectionIndexId}`);
                    }
                    const _sectionIndexItem = new OSFramework.OSUI.Patterns.SectionIndex.SectionIndex(sectionIndexId, JSON.parse(configs));
                    _sectionIndexItemsMap.set(sectionIndexId, _sectionIndexItem);
                    return _sectionIndexItem;
                }
                SectionIndexAPI.Create = Create;
                function Dispose(sectionIndexId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.SectionIndex.FailDispose,
                        callback: () => {
                            const _sectionIndexItem = GetSectionIndexById(sectionIndexId);
                            _sectionIndexItem.dispose();
                            _sectionIndexItemsMap.delete(_sectionIndexItem.uniqueId);
                        },
                    });
                    return result;
                }
                SectionIndexAPI.Dispose = Dispose;
                function GetAllSectionIndexItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_sectionIndexItemsMap);
                }
                SectionIndexAPI.GetAllSectionIndexItemsMap = GetAllSectionIndexItemsMap;
                function GetSectionIndexById(sectionIndexId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.SectionIndex, sectionIndexId, _sectionIndexItemsMap);
                }
                SectionIndexAPI.GetSectionIndexById = GetSectionIndexById;
                function Initialize(sectionIndexId) {
                    const _sectionIndexItem = GetSectionIndexById(sectionIndexId);
                    _sectionIndexItem.build();
                    return _sectionIndexItem;
                }
                SectionIndexAPI.Initialize = Initialize;
                function RegisterCallback(sectionIndexId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.SectionIndex.FailRegisterCallback,
                        callback: () => {
                            const _sectionIndexItem = GetSectionIndexById(sectionIndexId);
                            _sectionIndexItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                SectionIndexAPI.RegisterCallback = RegisterCallback;
            })(SectionIndexAPI = Patterns.SectionIndexAPI || (Patterns.SectionIndexAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SectionIndexItemAPI;
            (function (SectionIndexItemAPI) {
                const _sectionIndexItemMap = new Map();
                function ChangeProperty(sectionIndexItemId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.SectionIndexItem.FailChangeProperty,
                        callback: () => {
                            const _sectionIndexItem = GetSectionIndexItemById(sectionIndexItemId);
                            _sectionIndexItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                SectionIndexItemAPI.ChangeProperty = ChangeProperty;
                function Create(sectionIndexItemId, configs) {
                    if (_sectionIndexItemMap.has(sectionIndexItemId)) {
                        throw new Error(`There is already a SectionIndexItem registered under id: ${sectionIndexItemId}`);
                    }
                    const _sectionIndexItem = new OSFramework.OSUI.Patterns.SectionIndexItem.SectionIndexItem(sectionIndexItemId, JSON.parse(configs));
                    _sectionIndexItemMap.set(sectionIndexItemId, _sectionIndexItem);
                    return _sectionIndexItem;
                }
                SectionIndexItemAPI.Create = Create;
                function Dispose(sectionIndexItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.SectionIndexItem.FailDispose,
                        callback: () => {
                            const _sectionIndexItemItem = GetSectionIndexItemById(sectionIndexItemId);
                            _sectionIndexItemItem.dispose();
                            _sectionIndexItemMap.delete(_sectionIndexItemItem.uniqueId);
                        },
                    });
                    return result;
                }
                SectionIndexItemAPI.Dispose = Dispose;
                function GetAllSectionIndexItemItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_sectionIndexItemMap);
                }
                SectionIndexItemAPI.GetAllSectionIndexItemItemsMap = GetAllSectionIndexItemItemsMap;
                function GetSectionIndexItemById(sectionIndexItemId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('SectionIndexItem', sectionIndexItemId, _sectionIndexItemMap);
                }
                SectionIndexItemAPI.GetSectionIndexItemById = GetSectionIndexItemById;
                function Initialize(sectionIndexItemId) {
                    const _sectionIndexItem = GetSectionIndexItemById(sectionIndexItemId);
                    _sectionIndexItem.build();
                    return _sectionIndexItem;
                }
                SectionIndexItemAPI.Initialize = Initialize;
                function RegisterCallback(sectionIndexItemId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.SectionIndexItem.FailRegisterCallback,
                        callback: () => {
                            const _sectionIndexItem = this.GetSectionIndexItemById(sectionIndexItemId);
                            _sectionIndexItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                SectionIndexItemAPI.RegisterCallback = RegisterCallback;
            })(SectionIndexItemAPI = Patterns.SectionIndexItemAPI || (Patterns.SectionIndexItemAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SidebarAPI;
            (function (SidebarAPI) {
                const _sidebarMap = new Map();
                function ChangeProperty(sidebarId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Sidebar.FailChangeProperty,
                        callback: () => {
                            const sidebar = GetSidebarById(sidebarId);
                            sidebar.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                SidebarAPI.ChangeProperty = ChangeProperty;
                function ClickOutsideToClose(sidebarId, closeOnOutSIdeClick) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Sidebar.FailClickOutsideToClose,
                        callback: () => {
                            const sidebar = GetSidebarById(sidebarId);
                            sidebar.clickOutsideToClose(closeOnOutSIdeClick);
                        },
                    });
                    return result;
                }
                SidebarAPI.ClickOutsideToClose = ClickOutsideToClose;
                function Close(sidebarId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Sidebar.FailClose,
                        callback: () => {
                            const sidebar = GetSidebarById(sidebarId);
                            sidebar.close();
                        },
                    });
                    return result;
                }
                SidebarAPI.Close = Close;
                function Create(sidebarId, configs) {
                    if (_sidebarMap.has(sidebarId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Sidebar} registered under id: ${sidebarId}`);
                    }
                    const _newSidebar = new OSFramework.OSUI.Patterns.Sidebar.Sidebar(sidebarId, JSON.parse(configs));
                    _sidebarMap.set(sidebarId, _newSidebar);
                    return _newSidebar;
                }
                SidebarAPI.Create = Create;
                function Dispose(sidebarId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Sidebar.FailDispose,
                        callback: () => {
                            const sidebar = GetSidebarById(sidebarId);
                            sidebar.dispose();
                            _sidebarMap.delete(sidebarId);
                        },
                    });
                    return result;
                }
                SidebarAPI.Dispose = Dispose;
                function GetAllSidebars() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_sidebarMap);
                }
                SidebarAPI.GetAllSidebars = GetAllSidebars;
                function GetSidebarById(sidebarId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.Sidebar, sidebarId, _sidebarMap);
                }
                SidebarAPI.GetSidebarById = GetSidebarById;
                function Initialize(sidebarId) {
                    const sidebar = GetSidebarById(sidebarId);
                    sidebar.build();
                    return sidebar;
                }
                SidebarAPI.Initialize = Initialize;
                function Open(sidebarId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Sidebar.FailOpen,
                        callback: () => {
                            const sidebar = GetSidebarById(sidebarId);
                            sidebar.open();
                        },
                    });
                    return result;
                }
                SidebarAPI.Open = Open;
                function RegisterCallback(sidebarId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Sidebar.FailRegisterCallback,
                        callback: () => {
                            const _sidebarItem = this.GetSidebarById(sidebarId);
                            _sidebarItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                SidebarAPI.RegisterCallback = RegisterCallback;
                function ToggleGestures(sidebarId, enableSwipe) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Sidebar.FailToggleSwipe,
                        callback: () => {
                            const sidebar = GetSidebarById(sidebarId);
                            sidebar.toggleGestures(enableSwipe);
                        },
                    });
                    return result;
                }
                SidebarAPI.ToggleGestures = ToggleGestures;
            })(SidebarAPI = Patterns.SidebarAPI || (Patterns.SidebarAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SubmenuAPI;
            (function (SubmenuAPI) {
                const _submenusMap = new Map();
                function ChangeProperty(submenuId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Submenu.FailChangeProperty,
                        callback: () => {
                            const submenu = GetSubmenuById(submenuId);
                            submenu.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                SubmenuAPI.ChangeProperty = ChangeProperty;
                function ClickOutsideToClose(submenuId, clickOutsideToClose) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Submenu.FailClickOutsideToClose,
                        callback: () => {
                            const submenu = GetSubmenuById(submenuId);
                            submenu.clickOutsideToClose(clickOutsideToClose);
                        },
                    });
                    return result;
                }
                SubmenuAPI.ClickOutsideToClose = ClickOutsideToClose;
                function Close(submenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Submenu.FailClose,
                        callback: () => {
                            const submenu = GetSubmenuById(submenuId);
                            submenu.close();
                        },
                    });
                    return result;
                }
                SubmenuAPI.Close = Close;
                function Open(submenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Submenu.FailOpen,
                        callback: () => {
                            const submenu = GetSubmenuById(submenuId);
                            submenu.open();
                        },
                    });
                    return result;
                }
                SubmenuAPI.Open = Open;
                function Create(submenuId, configs) {
                    if (_submenusMap.has(submenuId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Submenu} registered under id: ${submenuId}`);
                    }
                    const _newSubmenu = new OSFramework.OSUI.Patterns.Submenu.Submenu(submenuId, JSON.parse(configs));
                    _submenusMap.set(submenuId, _newSubmenu);
                    return _newSubmenu;
                }
                SubmenuAPI.Create = Create;
                function Dispose(submenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Submenu.FailDispose,
                        callback: () => {
                            const submenu = GetSubmenuById(submenuId);
                            submenu.dispose();
                            _submenusMap.delete(submenuId);
                        },
                    });
                    return result;
                }
                SubmenuAPI.Dispose = Dispose;
                function GetAllSubmenus() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_submenusMap);
                }
                SubmenuAPI.GetAllSubmenus = GetAllSubmenus;
                function GetSubmenuById(submenuId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.Submenu, submenuId, _submenusMap);
                }
                SubmenuAPI.GetSubmenuById = GetSubmenuById;
                function Initialize(submenuId) {
                    const submenu = GetSubmenuById(submenuId);
                    submenu.build();
                    return submenu;
                }
                SubmenuAPI.Initialize = Initialize;
                function RegisterCallback(submenuId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Submenu.FailRegisterCallback,
                        callback: () => {
                            const submenu = GetSubmenuById(submenuId);
                            submenu.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                SubmenuAPI.RegisterCallback = RegisterCallback;
                function SubmenuOpenOnHover(submenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Submenu.FailOpenOnHover,
                        callback: () => {
                            const submenu = GetSubmenuById(submenuId);
                            submenu.setOpenOnHover();
                        },
                    });
                    return result;
                }
                SubmenuAPI.SubmenuOpenOnHover = SubmenuOpenOnHover;
                function UpdateOnRender(submenuId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Submenu.FailUpdate,
                        callback: () => {
                            const submenu = GetSubmenuById(submenuId);
                            submenu.updateOnRender();
                        },
                    });
                    return result;
                }
                SubmenuAPI.UpdateOnRender = UpdateOnRender;
            })(SubmenuAPI = Patterns.SubmenuAPI || (Patterns.SubmenuAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var SwipeEventsAPI;
            (function (SwipeEventsAPI) {
                const _swipeEventsMap = new Map();
                function Create(swipeEventsId, configs) {
                    if (_swipeEventsMap.has(swipeEventsId)) {
                        throw new Error(`There is already an ${OSFramework.OSUI.GlobalEnum.PatternName.SwipeEvents} registered under id: ${swipeEventsId}`);
                    }
                    const _newSwipeEvents = new OSFramework.OSUI.Patterns.SwipeEvents.SwipeEvents(swipeEventsId, JSON.parse(configs));
                    _swipeEventsMap.set(swipeEventsId, _newSwipeEvents);
                    return _newSwipeEvents;
                }
                SwipeEventsAPI.Create = Create;
                function Dispose(swipeEventsId) {
                    const swipeEvent = GetSwipeEventsById(swipeEventsId);
                    swipeEvent.dispose();
                    _swipeEventsMap.delete(swipeEvent.uniqueId);
                }
                SwipeEventsAPI.Dispose = Dispose;
                function GetAllSwipeEvents() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_swipeEventsMap);
                }
                SwipeEventsAPI.GetAllSwipeEvents = GetAllSwipeEvents;
                function GetSwipeEventsById(swipeEventsId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('SwipeEvents', swipeEventsId, _swipeEventsMap);
                }
                SwipeEventsAPI.GetSwipeEventsById = GetSwipeEventsById;
                function Initialize(swipeEventsId) {
                    const SwipeEvents = GetSwipeEventsById(swipeEventsId);
                    SwipeEvents.build();
                    return SwipeEvents;
                }
                SwipeEventsAPI.Initialize = Initialize;
                function RegisterCallback(swipeEventsID, eventName, callback) {
                    const swipeEvents = this.GetSwipeEventsById(swipeEventsID);
                    swipeEvents.registerCallback(eventName, callback);
                }
                SwipeEventsAPI.RegisterCallback = RegisterCallback;
                function GestureMove(swipeEventsId, event) {
                    const SwipeEvents = GetSwipeEventsById(swipeEventsId);
                    SwipeEvents.EventGestureMove(event);
                }
                SwipeEventsAPI.GestureMove = GestureMove;
                function GestureEnd(swipeEventsId, offsetX, offsetY, timeTaken) {
                    const SwipeEvents = GetSwipeEventsById(swipeEventsId);
                    SwipeEvents.EventGestureEnd(offsetX, offsetY, timeTaken);
                }
                SwipeEventsAPI.GestureEnd = GestureEnd;
            })(SwipeEventsAPI = Patterns.SwipeEventsAPI || (Patterns.SwipeEventsAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TabsAPI;
            (function (TabsAPI) {
                const _tabsMap = new Map();
                function ChangeProperty(tabsId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tabs.FailChangeProperty,
                        callback: () => {
                            const tabs = GetTabsById(tabsId);
                            tabs.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                TabsAPI.ChangeProperty = ChangeProperty;
                function Create(tabsId, configs) {
                    if (_tabsMap.has(tabsId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Tabs} registered under id: ${tabsId}`);
                    }
                    const _newTabs = new OSFramework.OSUI.Patterns.Tabs.Tabs(tabsId, JSON.parse(configs));
                    _tabsMap.set(tabsId, _newTabs);
                    return _newTabs;
                }
                TabsAPI.Create = Create;
                function Dispose(tabsId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tabs.FailDispose,
                        callback: () => {
                            const tabs = GetTabsById(tabsId);
                            tabs.dispose();
                            _tabsMap.delete(tabs.uniqueId);
                        },
                    });
                    return result;
                }
                TabsAPI.Dispose = Dispose;
                function GetAllTabs() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_tabsMap);
                }
                TabsAPI.GetAllTabs = GetAllTabs;
                function GetTabsById(tabsId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('Tabs', tabsId, _tabsMap);
                }
                TabsAPI.GetTabsById = GetTabsById;
                function Initialize(tabsId) {
                    const tabs = GetTabsById(tabsId);
                    tabs.build();
                    return tabs;
                }
                TabsAPI.Initialize = Initialize;
                function RegisterCallback(tabsId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tabs.FailRegisterCallback,
                        callback: () => {
                            const tabs = GetTabsById(tabsId);
                            tabs.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                TabsAPI.RegisterCallback = RegisterCallback;
                function TabsToggleSwipe(tabsId, enableSwipe) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tabs.FailToggleSwipe,
                        callback: () => {
                            const tabs = GetTabsById(tabsId);
                            tabs.toggleDragGestures(enableSwipe);
                        },
                    });
                    return result;
                }
                TabsAPI.TabsToggleSwipe = TabsToggleSwipe;
                function SetActiveTab(tabsId, tabsNumber) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tabs.FailSetActive,
                        callback: () => {
                            const tabs = GetTabsById(tabsId);
                            tabs.changeTab(tabsNumber, undefined, true);
                        },
                    });
                    return result;
                }
                TabsAPI.SetActiveTab = SetActiveTab;
            })(TabsAPI = Patterns.TabsAPI || (Patterns.TabsAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TabsContentItemAPI;
            (function (TabsContentItemAPI) {
                const _tabsContentItemMap = new Map();
                function ChangeProperty(tabsContentItemId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TabsContentItem.FailChangeProperty,
                        callback: () => {
                            const tabsContentItem = GetTabsContentItemById(tabsContentItemId);
                            tabsContentItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                TabsContentItemAPI.ChangeProperty = ChangeProperty;
                function Create(tabsContentItemId, configs) {
                    if (_tabsContentItemMap.has(tabsContentItemId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.TabsContentItem} registered under id: ${tabsContentItemId}`);
                    }
                    const _newTabsContentItem = new OSFramework.OSUI.Patterns.TabsContentItem.TabsContentItem(tabsContentItemId, JSON.parse(configs));
                    _tabsContentItemMap.set(tabsContentItemId, _newTabsContentItem);
                    return _newTabsContentItem;
                }
                TabsContentItemAPI.Create = Create;
                function Dispose(tabsContentItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TabsContentItem.FailDispose,
                        callback: () => {
                            const tabsContentItem = GetTabsContentItemById(tabsContentItemId);
                            tabsContentItem.dispose();
                            _tabsContentItemMap.delete(tabsContentItem.uniqueId);
                        },
                    });
                    return result;
                }
                TabsContentItemAPI.Dispose = Dispose;
                function GetAllTabsContentItems() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_tabsContentItemMap);
                }
                TabsContentItemAPI.GetAllTabsContentItems = GetAllTabsContentItems;
                function GetTabsContentItemById(tabsContentItemId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('TabsContentItem', tabsContentItemId, _tabsContentItemMap);
                }
                TabsContentItemAPI.GetTabsContentItemById = GetTabsContentItemById;
                function Initialize(tabsContentItemId) {
                    const tabsContentItem = GetTabsContentItemById(tabsContentItemId);
                    tabsContentItem.build();
                    return tabsContentItem;
                }
                TabsContentItemAPI.Initialize = Initialize;
                function RegisterCallback(tabsContentItemId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TabsContentItem.FailRegisterCallback,
                        callback: () => {
                            const tabsContentItem = GetTabsContentItemById(tabsContentItemId);
                            tabsContentItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                TabsContentItemAPI.RegisterCallback = RegisterCallback;
            })(TabsContentItemAPI = Patterns.TabsContentItemAPI || (Patterns.TabsContentItemAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TabsHeaderItemAPI;
            (function (TabsHeaderItemAPI) {
                const _tabsHeaderItemMap = new Map();
                function ChangeProperty(tabsHeaderItemId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TabsHeaderItem.FailChangeProperty,
                        callback: () => {
                            const tabsHeaderItem = GetTabsHeaderItemById(tabsHeaderItemId);
                            tabsHeaderItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                TabsHeaderItemAPI.ChangeProperty = ChangeProperty;
                function Create(tabsHeaderItemId, configs) {
                    if (_tabsHeaderItemMap.has(tabsHeaderItemId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.TabsHeaderItem} registered under id: ${tabsHeaderItemId}`);
                    }
                    const _newTabsHeaderItem = new OSFramework.OSUI.Patterns.TabsHeaderItem.TabsHeaderItem(tabsHeaderItemId, JSON.parse(configs));
                    _tabsHeaderItemMap.set(tabsHeaderItemId, _newTabsHeaderItem);
                    return _newTabsHeaderItem;
                }
                TabsHeaderItemAPI.Create = Create;
                function DisableTabItem(tabsHeaderItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TabsHeaderItem.FailDisableTabHeader,
                        callback: () => {
                            const tabsHeaderItem = GetTabsHeaderItemById(tabsHeaderItemId);
                            tabsHeaderItem.disable();
                        },
                    });
                    return result;
                }
                TabsHeaderItemAPI.DisableTabItem = DisableTabItem;
                function Dispose(tabsHeaderItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TabsHeaderItem.FailDispose,
                        callback: () => {
                            const tabsHeaderItem = GetTabsHeaderItemById(tabsHeaderItemId);
                            tabsHeaderItem.dispose();
                            _tabsHeaderItemMap.delete(tabsHeaderItem.uniqueId);
                        },
                    });
                    return result;
                }
                TabsHeaderItemAPI.Dispose = Dispose;
                function EnableTabItem(tabsHeaderItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TabsHeaderItem.FailEnableTabHeader,
                        callback: () => {
                            const tabsHeaderItem = GetTabsHeaderItemById(tabsHeaderItemId);
                            tabsHeaderItem.enable();
                        },
                    });
                    return result;
                }
                TabsHeaderItemAPI.EnableTabItem = EnableTabItem;
                function GetAllTabsHeaderItems() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_tabsHeaderItemMap);
                }
                TabsHeaderItemAPI.GetAllTabsHeaderItems = GetAllTabsHeaderItems;
                function GetTabsHeaderItemById(tabsHeaderItemId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('TabsHeaderItem', tabsHeaderItemId, _tabsHeaderItemMap);
                }
                TabsHeaderItemAPI.GetTabsHeaderItemById = GetTabsHeaderItemById;
                function UpdateOnRender(tabsHeaderItemId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TabsHeaderItem.FailUpdate,
                        callback: () => {
                            const tabsHeaderItem = GetTabsHeaderItemById(tabsHeaderItemId);
                            tabsHeaderItem.updateOnRender();
                        },
                    });
                    return result;
                }
                TabsHeaderItemAPI.UpdateOnRender = UpdateOnRender;
                function Initialize(tabsHeaderItemId) {
                    const tabsHeaderItem = GetTabsHeaderItemById(tabsHeaderItemId);
                    tabsHeaderItem.build();
                    return tabsHeaderItem;
                }
                TabsHeaderItemAPI.Initialize = Initialize;
                function RegisterCallback(tabsHeaderItemId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TabsHeaderItem.FailRegisterCallback,
                        callback: () => {
                            const tabsHeaderItem = GetTabsHeaderItemById(tabsHeaderItemId);
                            tabsHeaderItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                TabsHeaderItemAPI.RegisterCallback = RegisterCallback;
            })(TabsHeaderItemAPI = Patterns.TabsHeaderItemAPI || (Patterns.TabsHeaderItemAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TimePickerAPI;
            (function (TimePickerAPI) {
                const _timePickerItemsMap = new Map();
                function ChangeProperty(timePickerId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailChangeProperty,
                        callback: () => {
                            const _timePickerItem = GetTimePickerItemById(timePickerId);
                            _timePickerItem.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                TimePickerAPI.ChangeProperty = ChangeProperty;
                function Clear(timePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailClear,
                        callback: () => {
                            const _timePickerItem = GetTimePickerItemById(timePickerId);
                            _timePickerItem.clear();
                        },
                    });
                    return result;
                }
                TimePickerAPI.Clear = Clear;
                function Close(timePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailClose,
                        callback: () => {
                            const _timePickerItem = GetTimePickerItemById(timePickerId);
                            _timePickerItem.close();
                        },
                    });
                    return result;
                }
                TimePickerAPI.Close = Close;
                function Create(timePickerId, configs, provider) {
                    if (_timePickerItemsMap.has(timePickerId)) {
                        throw new Error(`There is already an TimePicker registered under id: ${timePickerId}`);
                    }
                    const _timePickerItem = OSFramework.OSUI.Patterns.TimePicker.Factory.NewTimePicker(timePickerId, configs, provider);
                    _timePickerItemsMap.set(timePickerId, _timePickerItem);
                    return _timePickerItem;
                }
                TimePickerAPI.Create = Create;
                function ToggleNativeBehavior(timePickerId, IsNative) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailToggleNativeBehavior,
                        callback: () => {
                            const _timePicker = this.GetTimePickerItemById(timePickerId);
                            _timePicker.toggleNativeBehavior(IsNative);
                        },
                    });
                    return result;
                }
                TimePickerAPI.ToggleNativeBehavior = ToggleNativeBehavior;
                function Dispose(timePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailDispose,
                        callback: () => {
                            const _timePickerItem = GetTimePickerItemById(timePickerId);
                            _timePickerItem.dispose();
                            _timePickerItemsMap.delete(_timePickerItem.uniqueId);
                        },
                    });
                    return result;
                }
                TimePickerAPI.Dispose = Dispose;
                function GetAllTimePickerItemsMap() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_timePickerItemsMap);
                }
                TimePickerAPI.GetAllTimePickerItemsMap = GetAllTimePickerItemsMap;
                function GetTimePickerItemById(timePickerId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.Timepicker, timePickerId, _timePickerItemsMap);
                }
                TimePickerAPI.GetTimePickerItemById = GetTimePickerItemById;
                function Initialize(timePickerId) {
                    const _timePickerItem = GetTimePickerItemById(timePickerId);
                    _timePickerItem.build();
                    return _timePickerItem;
                }
                TimePickerAPI.Initialize = Initialize;
                function OnRender(timePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailOnRender,
                        callback: () => {
                            const _timePickerItem = this.GetTimePickerItemById(timePickerId);
                            _timePickerItem.onRender();
                        },
                    });
                    return result;
                }
                TimePickerAPI.OnRender = OnRender;
                function Open(timePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailOpen,
                        callback: () => {
                            const _timePickerItem = GetTimePickerItemById(timePickerId);
                            _timePickerItem.open();
                        },
                    });
                    return result;
                }
                TimePickerAPI.Open = Open;
                function RegisterCallback(timePickerId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailRegisterCallback,
                        callback: () => {
                            const _timePicker = this.GetTimePickerItemById(timePickerId);
                            _timePicker.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                TimePickerAPI.RegisterCallback = RegisterCallback;
                function Redraw(timePickerId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailRedraw,
                        callback: () => {
                            const _timePicker = this.GetTimePickerItemById(timePickerId);
                            _timePicker.redraw();
                        },
                    });
                    return result;
                }
                TimePickerAPI.Redraw = Redraw;
                function SetLanguage(timePickerId, isoCode) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailSetLanguage,
                        callback: () => {
                            const _timePicker = this.GetTimePickerItemById(timePickerId);
                            _timePicker.setLanguage(isoCode);
                        },
                    });
                    return result;
                }
                TimePickerAPI.SetLanguage = SetLanguage;
                function UpdateInitialTime(timePickerId, time) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailUpdateInitialTime,
                        callback: () => {
                            const _timePicker = this.GetTimePickerItemById(timePickerId);
                            _timePicker.updateInitialTime(time);
                        },
                    });
                    return result;
                }
                TimePickerAPI.UpdateInitialTime = UpdateInitialTime;
                function UpdatePrompt(timePickerId, promptMessage) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailUpdatePrompt,
                        callback: () => {
                            const _timePicker = this.GetTimePickerItemById(timePickerId);
                            _timePicker.updatePrompt(promptMessage);
                        },
                    });
                    return result;
                }
                TimePickerAPI.UpdatePrompt = UpdatePrompt;
                function SetProviderConfigs(timePickerId, providerConfigs) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailRegisterProviderConfig,
                        callback: () => {
                            const timePicker = GetTimePickerItemById(timePickerId);
                            timePicker.setProviderConfigs(providerConfigs);
                        },
                    });
                    return result;
                }
                TimePickerAPI.SetProviderConfigs = SetProviderConfigs;
                function SetProviderEvent(timePickerId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailRegisterProviderEvent,
                        hasValue: true,
                        callback: () => {
                            const _eventUniqueId = OSFramework.OSUI.Helper.Dom.GenerateUniqueId();
                            const timePicker = GetTimePickerItemById(timePickerId);
                            timePicker.setProviderEvent(eventName, callback, _eventUniqueId);
                            return _eventUniqueId;
                        },
                    });
                    return result;
                }
                TimePickerAPI.SetProviderEvent = SetProviderEvent;
                function UnsetProviderEvent(timePickerId, eventId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailRemoveProviderEvent,
                        callback: () => {
                            const timePicker = GetTimePickerItemById(timePickerId);
                            timePicker.unsetProviderEvent(eventId);
                        },
                    });
                    return result;
                }
                TimePickerAPI.UnsetProviderEvent = UnsetProviderEvent;
                function SetEditableInput(timePickerId, IsEditable) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.TimePicker.FailSetEditableInput,
                        callback: () => {
                            const _timePicker = this.GetTimePickerItemById(timePickerId);
                            _timePicker.setEditableInput(IsEditable);
                        },
                    });
                    return result;
                }
                TimePickerAPI.SetEditableInput = SetEditableInput;
            })(TimePickerAPI = Patterns.TimePickerAPI || (Patterns.TimePickerAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TooltipAPI;
            (function (TooltipAPI) {
                const _tooltipsMap = new Map();
                function ChangeProperty(tooltipId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tooltip.FailChangeProperty,
                        callback: () => {
                            const tooltip = GetTooltipById(tooltipId);
                            tooltip.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                TooltipAPI.ChangeProperty = ChangeProperty;
                function Close(tooltipId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tooltip.FailClose,
                        callback: () => {
                            const tooltip = GetTooltipById(tooltipId);
                            tooltip.close();
                        },
                    });
                    return result;
                }
                TooltipAPI.Close = Close;
                function Create(tooltipId, configs) {
                    if (_tooltipsMap.has(tooltipId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Tooltip} registered under id: ${tooltipId}`);
                    }
                    const _newTooltip = new OSFramework.OSUI.Patterns.Tooltip.Tooltip(tooltipId, JSON.parse(configs));
                    _tooltipsMap.set(tooltipId, _newTooltip);
                    return _newTooltip;
                }
                TooltipAPI.Create = Create;
                function Dispose(tooltipId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tooltip.FailDispose,
                        callback: () => {
                            const tooltip = GetTooltipById(tooltipId);
                            tooltip.dispose();
                            _tooltipsMap.delete(tooltip.uniqueId);
                        },
                    });
                    return result;
                }
                TooltipAPI.Dispose = Dispose;
                function GetAllTooltips() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_tooltipsMap);
                }
                TooltipAPI.GetAllTooltips = GetAllTooltips;
                function GetTooltipById(tooltipId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.Tooltip, tooltipId, _tooltipsMap);
                }
                TooltipAPI.GetTooltipById = GetTooltipById;
                function Initialize(tooltipId) {
                    const tooltip = GetTooltipById(tooltipId);
                    tooltip.build();
                    return tooltip;
                }
                TooltipAPI.Initialize = Initialize;
                function Open(tooltipId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tooltip.FailOpen,
                        callback: () => {
                            const tooltip = GetTooltipById(tooltipId);
                            tooltip.open();
                        },
                    });
                    return result;
                }
                TooltipAPI.Open = Open;
                function RegisterCallback(tooltipId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Tooltip.FailRegisterCallback,
                        callback: () => {
                            const tooltip = this.GetTooltipById(tooltipId);
                            tooltip.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                TooltipAPI.RegisterCallback = RegisterCallback;
            })(TooltipAPI = Patterns.TooltipAPI || (Patterns.TooltipAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var TouchEventsAPI;
            (function (TouchEventsAPI) {
                const _touchEventsMap = new Map();
                function Create(touchEventsId, configs) {
                    if (_touchEventsMap.has(touchEventsId)) {
                        throw new Error(`There is already an ${OSFramework.OSUI.GlobalEnum.PatternName.TouchEvents} registered under id: ${touchEventsId}`);
                    }
                    const _newTouchEvents = new OSFramework.OSUI.Patterns.TouchEvents.TouchEvents(touchEventsId, JSON.parse(configs));
                    _touchEventsMap.set(touchEventsId, _newTouchEvents);
                    return _newTouchEvents;
                }
                TouchEventsAPI.Create = Create;
                function Dispose(touchEventsId) {
                    const swipeEvent = GetTouchEventsById(touchEventsId);
                    swipeEvent.dispose();
                    _touchEventsMap.delete(swipeEvent.uniqueId);
                }
                TouchEventsAPI.Dispose = Dispose;
                function GetAllTouchEvents() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_touchEventsMap);
                }
                TouchEventsAPI.GetAllTouchEvents = GetAllTouchEvents;
                function GetTouchEventsById(touchEventsId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap('TouchEvents', touchEventsId, _touchEventsMap);
                }
                TouchEventsAPI.GetTouchEventsById = GetTouchEventsById;
                function Initialize(touchEventsId) {
                    const TouchEvents = GetTouchEventsById(touchEventsId);
                    TouchEvents.build();
                    return TouchEvents;
                }
                TouchEventsAPI.Initialize = Initialize;
                function RegisterCallback(touchEventsID, eventName, callback) {
                    const touchEvents = this.GetTouchEventsById(touchEventsID);
                    touchEvents.registerCallback(eventName, callback);
                }
                TouchEventsAPI.RegisterCallback = RegisterCallback;
            })(TouchEventsAPI = Patterns.TouchEventsAPI || (Patterns.TouchEventsAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Patterns;
        (function (Patterns) {
            var VideoAPI;
            (function (VideoAPI) {
                const _videoMap = new Map();
                function ChangeProperty(videoId, propertyName, propertyValue) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Video.FailChangeProperty,
                        callback: () => {
                            const video = GetVideoById(videoId);
                            video.changeProperty(propertyName, propertyValue);
                        },
                    });
                    return result;
                }
                VideoAPI.ChangeProperty = ChangeProperty;
                function Create(videoId, configs) {
                    if (_videoMap.has(videoId)) {
                        throw new Error(`There is already a ${OSFramework.OSUI.GlobalEnum.PatternName.Video} registered under id: ${videoId}`);
                    }
                    const _newVideo = new OSFramework.OSUI.Patterns.Video.Video(videoId, JSON.parse(configs));
                    _videoMap.set(videoId, _newVideo);
                    return _newVideo;
                }
                VideoAPI.Create = Create;
                function Dispose(videoId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Video.FailDispose,
                        callback: () => {
                            const video = GetVideoById(videoId);
                            video.dispose();
                            _videoMap.delete(videoId);
                        },
                    });
                    return result;
                }
                VideoAPI.Dispose = Dispose;
                function GetAllVideos() {
                    return OSFramework.OSUI.Helper.MapOperation.ExportKeys(_videoMap);
                }
                VideoAPI.GetAllVideos = GetAllVideos;
                function GetVideoById(videoId) {
                    return OSFramework.OSUI.Helper.MapOperation.FindInMap(OSFramework.OSUI.GlobalEnum.PatternName.Video, videoId, _videoMap);
                }
                VideoAPI.GetVideoById = GetVideoById;
                function Initialize(videoId) {
                    const video = GetVideoById(videoId);
                    video.build();
                    return video;
                }
                VideoAPI.Initialize = Initialize;
                function RegisterCallback(videoId, eventName, callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Video.FailRegisterCallback,
                        callback: () => {
                            const _videoItem = this.GetVideoById(videoId);
                            _videoItem.registerCallback(eventName, callback);
                        },
                    });
                    return result;
                }
                VideoAPI.RegisterCallback = RegisterCallback;
                function GetState(videoId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Video.FailGetState,
                        hasValue: true,
                        callback: () => {
                            const video = GetVideoById(videoId);
                            return video.getVideoState;
                        },
                    });
                    return result;
                }
                VideoAPI.GetState = GetState;
                function Pause(videoId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Video.FailPause,
                        callback: () => {
                            const video = GetVideoById(videoId);
                            video.setVideoPause();
                        },
                    });
                    return result;
                }
                VideoAPI.Pause = Pause;
                function Play(videoId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Video.FailPlay,
                        callback: () => {
                            const video = GetVideoById(videoId);
                            video.setVideoPlay();
                        },
                    });
                    return result;
                }
                VideoAPI.Play = Play;
                function JumpToTime(videoId, currentTime) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Video.FailSetTime,
                        callback: () => {
                            const video = GetVideoById(videoId);
                            video.setVideoJumpToTime(currentTime);
                        },
                    });
                    return result;
                }
                VideoAPI.JumpToTime = JumpToTime;
            })(VideoAPI = Patterns.VideoAPI || (Patterns.VideoAPI = {}));
        })(Patterns = OSUI.Patterns || (OSUI.Patterns = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var Accessibility;
            (function (Accessibility) {
                function SetAccessibilityRole(widgetId, role) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetAccessibilityRole,
                        callback: () => {
                            const element = OSFramework.OSUI.Helper.Dom.GetElementById(widgetId);
                            if (element) {
                                const isBlock = OSFramework.OSUI.Helper.Dom.Attribute.Has(element, OSFramework.OSUI.GlobalEnum.DataBlocksTag.DataBlock);
                                if (isBlock) {
                                    OSFramework.OSUI.Helper.Dom.Attribute.Set(element.children[0], OSFramework.OSUI.Constants.A11YAttributes.Role.AttrName, role);
                                }
                                else {
                                    OSFramework.OSUI.Helper.Dom.Attribute.Set(element, OSFramework.OSUI.Constants.A11YAttributes.Role.AttrName, role);
                                }
                            }
                        },
                    });
                    return result;
                }
                Accessibility.SetAccessibilityRole = SetAccessibilityRole;
                function SetAriaHidden(widgetId, isHidden) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetAriaHidden,
                        callback: () => {
                            const elem = OSFramework.OSUI.Helper.Dom.GetElementById(widgetId);
                            if (elem) {
                                OSFramework.OSUI.Helper.A11Y.AriaHidden(elem, `${isHidden}`);
                            }
                        },
                    });
                    return result;
                }
                Accessibility.SetAriaHidden = SetAriaHidden;
                function SetFocus(widgetId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetFocus,
                        callback: () => {
                            const elementId = OSFramework.OSUI.Helper.Dom.GetElementById(widgetId);
                            if (elementId) {
                                elementId.focus();
                            }
                        },
                    });
                    return result;
                }
                Accessibility.SetFocus = SetFocus;
                function SetLang(lang) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetLang,
                        callback: () => {
                            OSFramework.OSUI.Helper.Language.Set(lang);
                        },
                    });
                    return result;
                }
                Accessibility.SetLang = SetLang;
                function SkipToContent(targetId) {
                    function _skipToContentOnBlur(e) {
                        OSFramework.OSUI.Helper.AsyncInvocation(() => {
                            const target = e.target;
                            if (target) {
                                OSFramework.OSUI.Helper.Dom.Attribute.Remove(target, 'tabindex');
                                target.removeEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.Blur, _skipToContentOnBlur);
                            }
                        });
                    }
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSkipToContent,
                        callback: () => {
                            const target = OSFramework.OSUI.Helper.Dom.GetElementById(targetId);
                            if (target) {
                                const isFocusable = OSFramework.OSUI.Helper.Dom.Attribute.Get(target, 'tabindex');
                                if (isFocusable === undefined) {
                                    OSFramework.OSUI.Helper.Dom.Attribute.Set(target, 'tabindex', '0');
                                    target.focus();
                                    target.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.Blur, _skipToContentOnBlur);
                                }
                                else {
                                    target.focus();
                                }
                            }
                        },
                    });
                    return result;
                }
                Accessibility.SkipToContent = SkipToContent;
                function ToggleTextSpacing() {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailToggleTextSpacing,
                        callback: () => {
                            let spacingStyles = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.AcessibilityStyleTag);
                            if (spacingStyles === undefined) {
                                spacingStyles = document.createElement('style');
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(spacingStyles, OSFramework.OSUI.GlobalEnum.CssClassElements.AcessibilityStyleTag);
                                spacingStyles.textContent =
                                    ' * { line-height: 1.5 !important; letter-spacing: 0.12em !important; word-spacing: 0.16em !important; } p { margin-bottom: 2em !important; } ';
                                OSFramework.OSUI.Helper.Dom.Move(spacingStyles, document.head);
                            }
                            else if (spacingStyles) {
                                spacingStyles.remove();
                            }
                        },
                    });
                    return result;
                }
                Accessibility.ToggleTextSpacing = ToggleTextSpacing;
                function WCAGMetaTag() {
                    OSFramework.OSUI.Helper.Dom.Attribute.Set(OSFramework.OSUI.Helper.Dom.TagSelector(document.head, '[name="viewport"]'), 'content', 'viewport-fit=cover, width=device-width, initial-scale=1');
                }
                Accessibility.WCAGMetaTag = WCAGMetaTag;
            })(Accessibility = Utils.Accessibility || (Utils.Accessibility = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var Application;
            (function (Application) {
                function SetExpandableExceptions() {
                    const layout = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.Layout);
                    const body = document.body;
                    if (layout) {
                        const expandableMenuBehavior = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(layout, OSFramework.OSUI.GlobalEnum.CssClassElements.AsideExpandable);
                        const isLayoutNative = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(layout, OSFramework.OSUI.GlobalEnum.CssClassElements.LayoutNative);
                        if (expandableMenuBehavior && isLayoutNative) {
                            const deviceDetectionClasses = (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.tablet) &&
                                OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.DeviceOrientation.landscape)) ||
                                OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.desktop);
                            if (deviceDetectionClasses) {
                                const isHideOnScroll = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(layout, OSFramework.OSUI.GlobalEnum.CssClassElements.HeaderHideOnScroll);
                                Utils.Menu.ToggleSideMenu();
                                if (isHideOnScroll) {
                                    Utils.LayoutPrivate.SetStickyObserver();
                                }
                            }
                        }
                    }
                }
                Application.SetExpandableExceptions = SetExpandableExceptions;
            })(Application = Utils.Application || (Utils.Application = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function _bodyClick(eventName, event) {
                const target = event.target;
                if (target.classList.contains('btn')) {
                    _buttonEffect(target);
                    return;
                }
                const foundElement = _hasSomeParentTheClass(target, 'list-item') || _hasSomeParentTheClass(target, 'bottom-bar-item');
                if (foundElement) {
                    _clickEffect(foundElement);
                }
            }
            function _clickEffect(el) {
                const spanEl = document.createElement(OSFramework.OSUI.GlobalEnum.HTMLElement.Span);
                spanEl.classList.add('scale-animation');
                el.appendChild(spanEl);
                el.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.AnimationEnd, OnTransitionEnd, false);
                el.addEventListener('webkitAnimationEnd', OnTransitionEnd, false);
                function OnTransitionEnd() {
                    if (spanEl && this === el && this === spanEl.parentNode) {
                        this.removeChild(spanEl);
                    }
                }
            }
            function _buttonEffect(el) {
                const spanEl = document.createElement(OSFramework.OSUI.GlobalEnum.HTMLElement.Span);
                spanEl.classList.add('btn-animation');
                el.appendChild(spanEl);
                setTimeout(function () {
                    el.removeChild(spanEl);
                }, 1800);
            }
            function _hasSomeParentTheClass(element, classname) {
                if (element) {
                    if (typeof element.className !== 'undefined' &&
                        !element.classList.contains('.main-content') &&
                        !(element instanceof SVGElement)) {
                        if (element.className.split(' ').indexOf(classname) >= 0) {
                            return element;
                        }
                        else {
                            return _hasSomeParentTheClass(element.parentElement, classname);
                        }
                    }
                }
                return undefined;
            }
            OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick, _bodyClick);
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function ChildrenMatches(elem, selector) {
                let matchingChildren = [];
                if (elem) {
                    matchingChildren = [...elem.children].filter((child) => child.matches(selector));
                }
                return matchingChildren;
            }
            Utils.ChildrenMatches = ChildrenMatches;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function CreateApiResponse({ callback, errorCode, hasValue = false }) {
                const responseObj = {
                    code: OutSystems.OSUI.ErrorCodes.Success.code,
                    isSuccess: true,
                    message: OutSystems.OSUI.ErrorCodes.Success.message,
                };
                try {
                    if (hasValue) {
                        responseObj.value = callback();
                    }
                    else {
                        callback();
                    }
                }
                catch (error) {
                    responseObj.code = errorCode;
                    responseObj.isSuccess = false;
                    responseObj.message = error.message;
                }
                return JSON.stringify(responseObj);
            }
            Utils.CreateApiResponse = CreateApiResponse;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Dates;
        (function (Dates) {
            function GetServerDateFormat() {
                return OSFramework.OSUI.Helper.Dates.ServerFormat;
            }
            Dates.GetServerDateFormat = GetServerDateFormat;
            function SetServerDateFormat(date) {
                OSFramework.OSUI.Helper.Dates.SetServerDateFormat(date);
            }
            Dates.SetServerDateFormat = SetServerDateFormat;
        })(Dates = OSUI.Dates || (OSUI.Dates = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var DeviceDetection;
            (function (DeviceDetection) {
                function GetDeviceOrientation() {
                    return OSFramework.OSUI.Helper.DeviceInfo.GetDeviceOrientation();
                }
                DeviceDetection.GetDeviceOrientation = GetDeviceOrientation;
                function GetDeviceType() {
                    return OSFramework.OSUI.Helper.DeviceInfo.GetDeviceType();
                }
                DeviceDetection.GetDeviceType = GetDeviceType;
                function IsTouch() {
                    return OSFramework.OSUI.Helper.DeviceInfo.IsTouch;
                }
                DeviceDetection.IsTouch = IsTouch;
                function GetOperatingSystem(UserAgent) {
                    return OSFramework.OSUI.Helper.DeviceInfo.GetOperatingSystem(UserAgent);
                }
                DeviceDetection.GetOperatingSystem = GetOperatingSystem;
                function IsDesktop() {
                    return OSFramework.OSUI.Helper.DeviceInfo.IsDesktop;
                }
                DeviceDetection.IsDesktop = IsDesktop;
                function CheckIsLayoutNative() {
                    const layout = OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, OSFramework.OSUI.GlobalEnum.CssClassElements.Layout);
                    if (layout) {
                        return OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(layout, OSFramework.OSUI.GlobalEnum.CssClassElements.LayoutNative);
                    }
                    else {
                        return false;
                    }
                }
                DeviceDetection.CheckIsLayoutNative = CheckIsLayoutNative;
                function CheckIsLayoutSide() {
                    const layout = OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, OSFramework.OSUI.GlobalEnum.CssClassElements.Layout);
                    if (layout) {
                        return OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(layout, OSFramework.OSUI.GlobalEnum.CssClassElements.LayoutSide);
                    }
                    else {
                        return false;
                    }
                }
                DeviceDetection.CheckIsLayoutSide = CheckIsLayoutSide;
                function IsRunningAsPWA() {
                    return OSFramework.OSUI.Helper.DeviceInfo.IsPwa;
                }
                DeviceDetection.IsRunningAsPWA = IsRunningAsPWA;
                function IsPhone() {
                    return OSFramework.OSUI.Helper.DeviceInfo.IsPhone;
                }
                DeviceDetection.IsPhone = IsPhone;
                function IsRunningAsNativeApp() {
                    return OSFramework.OSUI.Helper.DeviceInfo.IsNative;
                }
                DeviceDetection.IsRunningAsNativeApp = IsRunningAsNativeApp;
                function IsTablet() {
                    return OSFramework.OSUI.Helper.DeviceInfo.IsTablet;
                }
                DeviceDetection.IsTablet = IsTablet;
                function IsWebApp() {
                    const layout = OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, OSFramework.OSUI.GlobalEnum.CssClassElements.Layout);
                    if (layout) {
                        const isNotOldNativeLayouts = OSFramework.OSUI.Helper.Dom.TagSelector(document.body, '.active-screen .layout.layout-top') ||
                            OSFramework.OSUI.Helper.Dom.TagSelector(document.body, '.active-screen .layout.layout-side') ||
                            OSFramework.OSUI.Helper.Dom.TagSelector(document.body, '.active-screen .layout.blank') ||
                            OSFramework.OSUI.Helper.Dom.TagSelector(document.body, '.active-screen .layout.layout-blank');
                        return !!isNotOldNativeLayouts && CheckIsLayoutNative() === false;
                    }
                    else {
                        return false;
                    }
                }
                DeviceDetection.IsWebApp = IsWebApp;
                function SetDeviceBreakpoints(phoneWidth, tabletWidth) {
                    return function () {
                        const windowWidth = window.innerWidth || document.documentElement.clientWidth;
                        const windowHeight = window.innerHeight || document.documentElement.clientHeight;
                        const orient = windowWidth > windowHeight
                            ? OSFramework.OSUI.GlobalEnum.DeviceOrientation.landscape
                            : OSFramework.OSUI.GlobalEnum.DeviceOrientation.portrait;
                        const userValues = {
                            phone: phoneWidth,
                            tablet: tabletWidth,
                        };
                        const phoneMax = userValues.phone ? userValues.phone : 700;
                        const tabletMax = userValues.tablet ? userValues.tablet : 1024;
                        const deviceList = [
                            OSFramework.OSUI.GlobalEnum.DeviceType.phone,
                            OSFramework.OSUI.GlobalEnum.DeviceType.tablet,
                            OSFramework.OSUI.GlobalEnum.DeviceType.desktop,
                        ];
                        let device;
                        if (windowWidth <= phoneMax) {
                            device = 0;
                        }
                        else if (windowWidth <= tabletMax) {
                            device = 1;
                        }
                        else {
                            device = 2;
                        }
                        return [orient, deviceList[device]];
                    };
                }
                DeviceDetection.SetDeviceBreakpoints = SetDeviceBreakpoints;
            })(DeviceDetection = Utils.DeviceDetection || (Utils.DeviceDetection = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var InvalidInputs;
            (function (InvalidInputs) {
                function FocusFirstInvalidInput(elementId, isSmooth, elementParentClass) {
                    return OSFramework.OSUI.Helper.InvalidInputs.FocusFirstInvalidInput(elementId, isSmooth, elementParentClass);
                }
                InvalidInputs.FocusFirstInvalidInput = FocusFirstInvalidInput;
            })(InvalidInputs = Utils.InvalidInputs || (Utils.InvalidInputs = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function GenerateUniqueId() {
                return OSFramework.OSUI.Helper.Dom.GenerateUniqueId();
            }
            Utils.GenerateUniqueId = GenerateUniqueId;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function GetBrowser(useragent = '') {
                return OSFramework.OSUI.Helper.DeviceInfo.GetBrowser(useragent);
            }
            Utils.GetBrowser = GetBrowser;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function GetClosest(elem, selector) {
                return elem.closest(selector) ? elem.closest(selector) : false;
            }
            Utils.GetClosest = GetClosest;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function GetHasListInside(targetElem) {
                const listElements = OSUI.Utils.ChildrenMatches(targetElem, OSFramework.OSUI.Constants.Dot + OSFramework.OSUI.GlobalEnum.CssClassElements.List);
                return listElements.length > 0;
            }
            Utils.GetHasListInside = GetHasListInside;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            let APIMethod;
            (function (APIMethod) {
                APIMethod["SetProviderConfigs"] = "SetProviderConfigs";
                APIMethod["SetProviderEvent"] = "SetProviderEvent";
                APIMethod["UnsetProviderEvent"] = "UnsetProviderEvent";
            })(APIMethod = Utils.APIMethod || (Utils.APIMethod = {}));
            function GetPickerExtensibilityAPI(widgetId, method) {
                try {
                    OutSystems.OSUI.Patterns.DatePickerAPI.GetDatePickerItemById(widgetId);
                    return OutSystems.OSUI.Patterns.DatePickerAPI[method];
                }
                catch (error) {
                    try {
                        OutSystems.OSUI.Patterns.TimePickerAPI.GetTimePickerItemById(widgetId);
                        return OutSystems.OSUI.Patterns.TimePickerAPI[method];
                    }
                    catch (error) {
                        try {
                            OutSystems.OSUI.Patterns.MonthPickerAPI.GetMonthPickerItemById(widgetId);
                            return OutSystems.OSUI.Patterns.MonthPickerAPI[method];
                        }
                        catch (error) {
                            console.warn(`WidgetId: ${widgetId} is not valid.`);
                        }
                    }
                }
            }
            Utils.GetPickerExtensibilityAPI = GetPickerExtensibilityAPI;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var HideOnScroll;
            (function (HideOnScroll) {
                function addEvents(header) {
                    var _a;
                    const content = document.querySelector('.active-screen .content');
                    if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(header, 'hide') && content) {
                        let startY = 0;
                        const mainContentHeight = (_a = OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, 'main-content')) === null || _a === void 0 ? void 0 : _a.scrollHeight;
                        const threshold = 60;
                        const layout = OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, OSFramework.OSUI.GlobalEnum.CssClassElements.Layout);
                        if (mainContentHeight - threshold > content.offsetHeight) {
                            content.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.TouchStart, (e) => {
                                startY = e.touches[0].pageY;
                            }, false);
                            content.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.TouchMove, (e) => {
                                const c = e.touches[0].pageY;
                                const translateY = c - startY;
                                if (c < startY - threshold && translateY < 0) {
                                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(header, 'header-on-scroll');
                                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(layout, 'header-is-hidden');
                                }
                                else if (c > startY + threshold) {
                                    OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(header, 'header-on-scroll');
                                    OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(layout, 'header-is-hidden');
                                }
                            }, false);
                        }
                    }
                }
                function Init() {
                    const header = OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, OSFramework.OSUI.GlobalEnum.CssClassElements.Header);
                    if (header) {
                        addEvents(header);
                    }
                }
                HideOnScroll.Init = Init;
            })(HideOnScroll = Utils.HideOnScroll || (Utils.HideOnScroll = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Language;
        (function (Language) {
            function Get() {
                return OSFramework.OSUI.Helper.Language.Lang;
            }
            Language.Get = Get;
            function GetShort() {
                return OSFramework.OSUI.Helper.Language.ShortLang;
            }
            Language.GetShort = GetShort;
            function Set(lang) {
                OSFramework.OSUI.Helper.Language.Set(lang);
            }
            Language.Set = Set;
        })(Language = OSUI.Language || (OSUI.Language = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var LayoutPrivate;
            (function (LayoutPrivate) {
                function Dispose() {
                    LayoutPrivate.OnOrientationChange.Unset();
                }
                LayoutPrivate.Dispose = Dispose;
                function FixInputs() {
                    let originalPosition = 0;
                    let currentPosition = 0;
                    const content = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.Content);
                    const inputs = document.querySelectorAll(OSFramework.OSUI.Constants.JustInputs);
                    if (inputs.length !== 0) {
                        for (let i = inputs.length - 1; i >= 0; i--) {
                            inputs[i].style.webkitUserSelect = 'auto';
                        }
                        if (content) {
                            content.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.TouchStart, function (e) {
                                originalPosition = e.changedTouches[0].pageY;
                                for (let i = inputs.length - 1; i >= 0; i--) {
                                    inputs[i].style.webkitUserSelect = 'auto';
                                }
                            });
                            content.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.TouchMove, function (e) {
                                currentPosition = e.touches[0].pageY;
                                if (Math.abs(originalPosition - currentPosition) > 10) {
                                    for (let i = inputs.length - 1; i >= 0; i--) {
                                        inputs[i].style.webkitUserSelect = 'none';
                                    }
                                }
                                else {
                                    for (let i = inputs.length - 1; i >= 0; i--) {
                                        inputs[i].style.webkitUserSelect = 'auto';
                                    }
                                }
                            });
                            content.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.TouchEnd, function () {
                                setTimeout(function () {
                                    for (let i = inputs.length - 1; i >= 0; i--) {
                                        inputs[i].style.webkitUserSelect = 'auto';
                                    }
                                }, 0);
                            });
                        }
                    }
                }
                LayoutPrivate.FixInputs = FixInputs;
                function HideHeader(HideHeader) {
                    if (HideHeader) {
                        const loadTime = window.performance.timing.domContentLoadedEventEnd - window.performance.timing.navigationStart;
                        setTimeout(function () {
                            OSUI.Utils.HideOnScroll.Init();
                        }, loadTime);
                    }
                }
                LayoutPrivate.HideHeader = HideHeader;
                function RTLObserver(callback) {
                    console.warn(`This method is deprecated. Use instead the API OSFramework.OSUI.Event.DOMEvents.Observers.GlobalObserverManager.Instance.addHandler`);
                    OSFramework.OSUI.Event.DOMEvents.Observers.GlobalObserverManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Observers.ObserverEvent.RTL, callback);
                }
                LayoutPrivate.RTLObserver = RTLObserver;
                function SetDeviceClass(IsWebApp) {
                    const operatingSystem = OSFramework.OSUI.Helper.DeviceInfo.GetOperatingSystem();
                    const body = document.body;
                    if (body) {
                        if (operatingSystem !== OSFramework.OSUI.GlobalEnum.MobileOS.Unknown) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(body, operatingSystem);
                        }
                        if (operatingSystem === OSFramework.OSUI.GlobalEnum.MobileOS.IOS &&
                            OSFramework.OSUI.Helper.DeviceInfo.IsIphoneWithNotch) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(body, OSFramework.OSUI.GlobalEnum.NotchClasses.IPhoneX);
                        }
                        if (IsWebApp) {
                            const browser = OSFramework.OSUI.Helper.DeviceInfo.GetBrowser();
                            if (browser !== OSFramework.OSUI.GlobalEnum.Browser.unknown) {
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(body, browser);
                            }
                            if (OSFramework.OSUI.Helper.DeviceInfo.IsTouch) {
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(body, OSFramework.OSUI.GlobalEnum.CssClassElements.IsTouch);
                            }
                        }
                        else {
                            if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.phone) === false &&
                                OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.tablet) === false) {
                                body.classList.add(OSFramework.OSUI.GlobalEnum.DeviceType.desktop);
                            }
                        }
                        if (OSFramework.OSUI.Helper.DeviceInfo.IsRtlLang) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(body, OSFramework.OSUI.Constants.IsRTLDeviceType);
                        }
                        LayoutPrivate.OnOrientationChange.Set();
                    }
                }
                LayoutPrivate.SetDeviceClass = SetDeviceClass;
                function SetStickyObserver() {
                    const layout = document.querySelector('.active-screen .layout');
                    const stickyObserver = document.querySelector('.active-screen .sticky-observer');
                    const observer = new IntersectionObserver(function (entries) {
                        if (entries[0].isIntersecting) {
                            layout.classList.add(OSFramework.OSUI.GlobalEnum.CssClassElements.HeaderIsVisible);
                        }
                        else {
                            layout.classList.remove(OSFramework.OSUI.GlobalEnum.CssClassElements.HeaderIsVisible);
                        }
                    });
                    observer.observe(stickyObserver);
                }
                LayoutPrivate.SetStickyObserver = SetStickyObserver;
            })(LayoutPrivate = Utils.LayoutPrivate || (Utils.LayoutPrivate = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var LayoutPrivate;
            (function (LayoutPrivate) {
                class CssBodyVariables {
                    static _checkDarkModeStatus(callback) {
                        if (typeof window !== 'undefined' && window.matchMedia) {
                            const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)');
                            callback(darkModeQuery.matches);
                            const listener = (event) => {
                                callback(event.matches);
                            };
                            darkModeQuery.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.Change, listener);
                        }
                        else {
                            console.warn('Dark mode detection is not supported at this context.');
                            callback(false);
                        }
                    }
                    static _checkHighContrastStatus(callback) {
                        if (typeof window !== 'undefined' && window.matchMedia) {
                            const highContrastModeQuery = window.matchMedia('(forced-colors: active)');
                            callback(highContrastModeQuery.matches);
                            const listener = (event) => {
                                callback(event.matches);
                            };
                            highContrastModeQuery.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.Change, listener);
                        }
                        else {
                            console.warn('HighContrast mode detection is not supported at this context.');
                            callback(false);
                        }
                    }
                    static _isPhoneOrTablet() {
                        OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(document.body, OSFramework.OSUI.GlobalEnum.CSSVariables.ViewportHeight, window.innerHeight + OSFramework.OSUI.GlobalEnum.Units.Pixel);
                    }
                    static _setCssVars() {
                        if (OSUI.Utils.DeviceDetection.IsWebApp() === false) {
                            this._setNotWebApp();
                        }
                        if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(document.body, OSFramework.OSUI.GlobalEnum.DeviceType.phone) ||
                            OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(document.body, OSFramework.OSUI.GlobalEnum.DeviceType.tablet)) {
                            this._isPhoneOrTablet();
                        }
                        this._checkHighContrastStatus((isHighContrast) => {
                            if (isHighContrast) {
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(document.body, OSFramework.OSUI.GlobalEnum.CssClassElements.HighContrast);
                            }
                            else {
                                OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(document.body, OSFramework.OSUI.GlobalEnum.CssClassElements.HighContrast);
                            }
                        });
                        this._checkDarkModeStatus((isDarkMode) => {
                            if (isDarkMode) {
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(document.body, OSFramework.OSUI.GlobalEnum.CssClassElements.DarkMode);
                            }
                            else {
                                OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(document.body, OSFramework.OSUI.GlobalEnum.CssClassElements.DarkMode);
                            }
                        });
                    }
                    static _setNotWebApp() {
                        const headerContent = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.HeaderTopContent);
                        const footer = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.Footer);
                        if (headerContent) {
                            OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(document.body, OSFramework.OSUI.GlobalEnum.CSSVariables.HeaderContentHeight, headerContent.getBoundingClientRect().height + OSFramework.OSUI.GlobalEnum.Units.Pixel);
                        }
                        if (footer) {
                            OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(document.body, OSFramework.OSUI.GlobalEnum.CSSVariables.FooterHeight, footer.getBoundingClientRect().height + OSFramework.OSUI.GlobalEnum.Units.Pixel);
                        }
                    }
                    static Set() {
                        this._setCssVars();
                    }
                }
                LayoutPrivate.CssBodyVariables = CssBodyVariables;
            })(LayoutPrivate = Utils.LayoutPrivate || (Utils.LayoutPrivate = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var LayoutPrivate;
            (function (LayoutPrivate) {
                class CloseDeprecatedSubmenu {
                    static _checkDeprecatedSubmenu() {
                        const activeScreen = document.querySelector(OSFramework.OSUI.Constants.Dot + OSFramework.OSUI.GlobalEnum.CssClassElements.ActiveScreen);
                        this._checkMenuLinks = activeScreen.querySelector(OSFramework.OSUI.Constants.Dot + OSFramework.OSUI.GlobalEnum.CssClassElements.MenuLinks);
                        if (this._checkMenuLinks) {
                            this._deprecatedSubmenuItems = this._checkMenuLinks.querySelectorAll(OSFramework.OSUI.Constants.Dot + OSFramework.OSUI.GlobalEnum.CssClassElements.DeprecatedSubmenu);
                        }
                    }
                    static _closeDeprecatedSubmenu() {
                        if (this._deprecatedSubmenuItems && this._deprecatedSubmenuItems.length > 0) {
                            for (const item of this._deprecatedSubmenuItems) {
                                if (item.classList.contains('open')) {
                                    item.CloseMenu();
                                }
                            }
                        }
                    }
                    static Set() {
                        this._checkDeprecatedSubmenu();
                        this.Unset();
                        if (this._deprecatedSubmenuItems &&
                            this._deprecatedSubmenuItems.length > 0 &&
                            OSFramework.OSUI.Helper.DeviceInfo.IsDesktop &&
                            !OSUI.Utils.DeviceDetection.CheckIsLayoutSide()) {
                            this._closeMenuEvent = this._closeDeprecatedSubmenu.bind(this);
                            document.body.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.Click, this._closeMenuEvent);
                        }
                    }
                    static Unset() {
                        document.body.removeEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.Click, this._closeMenuEvent);
                    }
                }
                LayoutPrivate.CloseDeprecatedSubmenu = CloseDeprecatedSubmenu;
            })(LayoutPrivate = Utils.LayoutPrivate || (Utils.LayoutPrivate = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var LayoutPrivate;
            (function (LayoutPrivate) {
                class OnOrientationChange {
                    static _onOrientationChange() {
                        const body = document.body;
                        if (body) {
                            setTimeout(() => {
                                if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.NotchClasses.IPhoneX)) {
                                    OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.tablet);
                                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.phone);
                                }
                                if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.phone) === false &&
                                    OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.tablet) === false) {
                                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.desktop);
                                }
                                else if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.desktop) &&
                                    OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.tablet)) {
                                    OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(body, OSFramework.OSUI.GlobalEnum.DeviceType.desktop);
                                }
                                LayoutPrivate.CssBodyVariables.Set();
                            }, 500);
                        }
                    }
                    static Set() {
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.OrientationChange, this._onOrientationChange);
                    }
                    static Unset() {
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.OrientationChange, this._onOrientationChange);
                    }
                }
                LayoutPrivate.OnOrientationChange = OnOrientationChange;
            })(LayoutPrivate = Utils.LayoutPrivate || (Utils.LayoutPrivate = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var LayoutPrivate;
            (function (LayoutPrivate) {
                class SkipContentLink {
                    static _setLink() {
                        const mainContent = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.MainContent);
                        const skipContentLink = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.SkipContent);
                        if (mainContent && skipContentLink) {
                            skipContentLink.setAttribute(OSFramework.OSUI.GlobalEnum.HTMLAttributes.Href, mainContent.getAttribute(OSFramework.OSUI.GlobalEnum.HTMLAttributes.Id));
                        }
                    }
                    static Set() {
                        this._setLink();
                    }
                }
                LayoutPrivate.SkipContentLink = SkipContentLink;
            })(LayoutPrivate = Utils.LayoutPrivate || (Utils.LayoutPrivate = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function LogMessage(message) {
                if (OSFramework.OSUI.Helper.LogMessage(message)) {
                    console.log(OSFramework.OSUI.Helper.LogMessage(message));
                }
            }
            Utils.LogMessage = LogMessage;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function HasMasterDetail() {
                let returnOutput = false;
                const masterDetail = OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, 'split-screen-wrapper');
                const content = document.querySelector('.active-screen .content');
                if (content && content.contains(masterDetail)) {
                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(content, 'has-master-detail');
                    returnOutput = true;
                }
                return returnOutput;
            }
            Utils.HasMasterDetail = HasMasterDetail;
            function SetFocusBehaviour(contentId, triggerItem) {
                const result = OutSystems.OSUI.Utils.CreateApiResponse({
                    errorCode: OSUI.ErrorCodes.Utilities.FailMasterDetailSetContentFocus,
                    callback: () => {
                        const element = OSFramework.OSUI.Helper.Dom.GetElementById(contentId);
                        const isPhone = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(document.body, 'phone');
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(element, 'tabindex', '0');
                        element.focus();
                        if (isPhone === false) {
                            const focusItemTop = element
                                .closest('.split-right-content')
                                .querySelector('span.focus-item.top');
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(focusItemTop, 'tabindex', '0');
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(focusItemTop, 'focusItemId', triggerItem);
                            const focusItemBottom = element
                                .closest('.split-right-content')
                                .querySelector('span.focus-item.bottom');
                            const itemChild = OSFramework.OSUI.Helper.Dom.TagSelector(OSFramework.OSUI.Helper.Dom.GetElementById(triggerItem), 'div');
                            if (itemChild) {
                                OSFramework.OSUI.Helper.Dom.Attribute.Set(focusItemBottom, 'tabindex', '0');
                                OSFramework.OSUI.Helper.Dom.Attribute.Set(focusItemBottom, 'focusItemId', itemChild.id);
                            }
                            else {
                                OSFramework.OSUI.Helper.Dom.Attribute.Set(focusItemBottom, 'tabindex', '-1');
                                OSFramework.OSUI.Helper.Dom.Attribute.Remove(focusItemBottom, 'focusItemId');
                            }
                        }
                    },
                });
                return result;
            }
            Utils.SetFocusBehaviour = SetFocusBehaviour;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var Menu;
            (function (Menu) {
                let _onOrientationChangeCallback;
                const _appProp = {
                    device: {
                        isLandscape: false,
                        type: undefined,
                    },
                    layout: {
                        element: undefined,
                        isAsideExpandable: false,
                        isAsideMenu: false,
                        isAsideMenuOverlay: false,
                        isBlank: false,
                        isTopMenu: false,
                    },
                    menu: {
                        element: undefined,
                        hasEventListeners: false,
                        isOpen: false,
                    },
                };
                const _menuFocusableElems = 'a[href]:not([disabled]), [tabindex], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])';
                const _addMenuEventListeners = (hasTriggeredByAPI = false) => {
                    if (hasTriggeredByAPI) {
                        _removeMenuEventListeners();
                    }
                    const shouldKeyDownBeAdded = OSFramework.OSUI.Helper.DeviceInfo.IsDesktop === false ||
                        _appProp.layout.isAsideMenuOverlay ||
                        _appProp.layout.isAsideExpandable;
                    if (shouldKeyDownBeAdded && _appProp.menu.hasEventListeners === false) {
                        _appProp.menu.hasEventListeners = true;
                        _appProp.menu.element.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.keyDown, _menuOnKeypress);
                    }
                };
                const _addMenuOnResize = () => {
                    OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.WindowResize, _onResizeCallbackHandler);
                };
                const _addMenuOnOrientationChange = (callback) => {
                    if (callback && OSFramework.OSUI.Helper.DeviceInfo.IsTablet) {
                        _onOrientationChangeCallback = callback;
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.OrientationChange, _onOrientationChangeCallbackHandler);
                    }
                };
                const _hideMenu = () => {
                    if (_appProp.menu.element === undefined || _appProp.layout.element === undefined) {
                        _setAppProps();
                    }
                    const menuIcon = OSFramework.OSUI.Helper.Dom.ClassSelector(document, 'menu-icon');
                    _appProp.layout.element.classList.remove('menu-visible');
                    _appProp.menu.isOpen = false;
                    menuIcon === null || menuIcon === void 0 ? void 0 : menuIcon.focus();
                    _updatePropsAndAttrs();
                };
                const _menuOnKeypress = function (e) {
                    const isTabPressed = e.key === 'Tab';
                    const isEscapedPressed = e.key === 'Escape';
                    const isShiftKey = e.shiftKey;
                    const focusableEls = OSFramework.OSUI.Helper.Dom.TagSelectorAll(_appProp.menu.element, _menuFocusableElems);
                    const firstFocusableEl = focusableEls[0];
                    const lastFocusableEl = focusableEls[focusableEls.length - 1];
                    if (!isTabPressed && !isEscapedPressed) {
                        return;
                    }
                    if (isEscapedPressed && _appProp.menu.isOpen) {
                        e.preventDefault();
                        e.stopPropagation();
                        _toggleMenu();
                    }
                    if (isShiftKey) {
                        if (document.activeElement === firstFocusableEl) {
                            lastFocusableEl.focus();
                            e.preventDefault();
                        }
                    }
                    else if (document.activeElement === lastFocusableEl) {
                        firstFocusableEl.focus();
                        e.preventDefault();
                    }
                };
                const _onOrientationChangeCallbackHandler = (callback) => {
                    if (callback) {
                        OSFramework.OSUI.Helper.ApplySetTimeOut(() => {
                            _onOrientationChangeCallback();
                        }, 300);
                    }
                };
                const _onResizeCallbackHandler = () => {
                    const currentDeviceType = OSFramework.OSUI.Helper.DeviceInfo.GetDeviceType();
                    if (_appProp.device.type === currentDeviceType) {
                        return;
                    }
                    _appProp.device.type = currentDeviceType;
                    if (_appProp.menu.isOpen) {
                        _toggleMenu();
                    }
                    else {
                        _updatePropsAndAttrs();
                    }
                    _removeMenuEventListeners();
                    _addMenuEventListeners();
                };
                const _removeMenuEventListeners = () => {
                    if (_appProp.menu.hasEventListeners) {
                        _appProp.menu.hasEventListeners = false;
                        _appProp.menu.element.removeEventListener('keydown', _menuOnKeypress);
                    }
                };
                const _removeMenuOnOrientationChange = () => {
                    if (_onOrientationChangeCallback && OSFramework.OSUI.Helper.DeviceInfo.IsTablet) {
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.OrientationChange, _onOrientationChangeCallbackHandler);
                        _onOrientationChangeCallback = undefined;
                    }
                };
                const _removeMenuOnResize = () => {
                    OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.WindowResize, _onResizeCallbackHandler);
                };
                const _setA11YAttributes = (menu) => {
                    if (menu === undefined) {
                        menu = _appProp.menu.element;
                    }
                    const focusableEls = Array.from(menu.querySelectorAll(_menuFocusableElems));
                    const menuItems = Array.from(menu.querySelectorAll('.app-menu-links > a'));
                    for (let i = 0; i < focusableEls.length; ++i) {
                        if (focusableEls[i].closest('.osui-submenu__items')) {
                            focusableEls.splice(i, 1);
                        }
                    }
                    if (menuItems.length > 0) {
                        for (const item of menuItems) {
                            if (!item.hasAttribute('role')) {
                                item.setAttribute('role', 'menuitem');
                            }
                        }
                    }
                    const enableA11Y = _appProp.menu.isOpen ||
                        (OSFramework.OSUI.Helper.DeviceInfo.IsDesktop &&
                            _appProp.layout.isAsideMenuOverlay === false &&
                            _appProp.layout.isAsideExpandable === false);
                    if (enableA11Y) {
                        OSFramework.OSUI.Helper.A11Y.TabIndexTrue(menu);
                        OSFramework.OSUI.Helper.A11Y.AriaExpandedTrue(menu);
                        for (const item of focusableEls) {
                            OSFramework.OSUI.Helper.A11Y.TabIndexTrue(item);
                        }
                    }
                    else {
                        OSFramework.OSUI.Helper.A11Y.TabIndexFalse(menu);
                        OSFramework.OSUI.Helper.A11Y.AriaExpandedFalse(menu);
                        for (const item of focusableEls) {
                            OSFramework.OSUI.Helper.A11Y.TabIndexFalse(item);
                        }
                    }
                };
                const _setAppProps = () => {
                    _appProp.menu.element =
                        OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, 'app-menu-content') ||
                            OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, 'app-menu-container');
                    _appProp.layout.element = OSFramework.OSUI.Helper.Dom.ClassSelector(document.body, 'layout');
                    _appProp.device.type = OSFramework.OSUI.Helper.DeviceInfo.GetDeviceType();
                    _appProp.device.isLandscape =
                        OSFramework.OSUI.Helper.DeviceInfo.GetDeviceOrientation() ===
                            OSFramework.OSUI.GlobalEnum.DeviceOrientation.landscape;
                    _appProp.menu.isOpen = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(_appProp.layout.element, 'menu-visible');
                    _appProp.layout.isTopMenu = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(_appProp.layout.element, 'layout-top');
                    _appProp.layout.isAsideMenu = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(_appProp.layout.element, 'aside-visible');
                    _appProp.layout.isAsideMenuOverlay = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(_appProp.layout.element, 'aside-overlay');
                    _appProp.layout.isBlank = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(_appProp.layout.element, 'layout-blank');
                    _appProp.layout.isAsideExpandable = OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(_appProp.layout.element, 'aside-expandable');
                };
                const _showMenu = () => {
                    const shouldShowMenu = OSFramework.OSUI.Helper.DeviceInfo.IsDesktop === false ||
                        _appProp.layout.isAsideMenuOverlay ||
                        _appProp.layout.isAsideExpandable;
                    if (shouldShowMenu === false) {
                        return;
                    }
                    if (_appProp.menu.element === undefined || _appProp.layout.element === undefined) {
                        _setAppProps();
                    }
                    _appProp.layout.element.classList.add('menu-visible');
                    _appProp.menu.element.focus();
                    _appProp.menu.isOpen = true;
                    _updatePropsAndAttrs();
                };
                const _toggleMenu = () => {
                    if (_appProp.menu.isOpen) {
                        _hideMenu();
                    }
                    else {
                        _showMenu();
                    }
                };
                const _updatePropsAndAttrs = () => {
                    _setAppProps();
                    _setA11YAttributes();
                };
                Menu.addMenuOnOrientationChange = _addMenuOnOrientationChange;
                Menu.removeMenuOnOrientationChange = _removeMenuOnOrientationChange;
                function IsMenuDraggable() {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailCheckIsMenuDraggable,
                        hasValue: true,
                        callback: () => {
                            _setAppProps();
                            const _layoutSideMenuVisible = _appProp.layout.isAsideMenu;
                            let _addDragGestures = false;
                            if (window.cordova !== undefined && Utils.DeviceDetection.IsRunningAsPWA() === false) {
                                if ((_layoutSideMenuVisible && OSFramework.OSUI.Helper.DeviceInfo.IsDesktop) ||
                                    (_layoutSideMenuVisible &&
                                        OSFramework.OSUI.Helper.DeviceInfo.IsTablet &&
                                        _appProp.device.isLandscape)) {
                                    _addDragGestures = false;
                                }
                                else {
                                    _addDragGestures = true;
                                }
                            }
                            return _addDragGestures;
                        },
                    });
                    return result;
                }
                Menu.IsMenuDraggable = IsMenuDraggable;
                function MenuHide() {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetExtendedMenuHide,
                        callback: () => {
                            const deprecatedMenu = OSFramework.OSUI.Helper.Dom.ClassSelector(document, 'menu');
                            if (deprecatedMenu) {
                                const appMenu = OSFramework.OSUI.Helper.Dom.ClassSelector(document, 'app-menu-container');
                                const menuOverlay = OSFramework.OSUI.Helper.Dom.ClassSelector(document, 'menu-background');
                                const onTransitionEnd = () => {
                                    OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(deprecatedMenu, 'menu--animatable');
                                    deprecatedMenu.removeEventListener('transitionend', onTransitionEnd);
                                };
                                OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(deprecatedMenu, 'menu--visible');
                                if (menuOverlay) {
                                    menuOverlay.style.opacity = '';
                                }
                                appMenu.style.transform = '';
                                deprecatedMenu.addEventListener('transitionend', onTransitionEnd, false);
                            }
                            else {
                                _hideMenu();
                            }
                            _updatePropsAndAttrs();
                        },
                    });
                    return result;
                }
                Menu.MenuHide = MenuHide;
                function MenuShow() {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetExtendedMenuShow,
                        callback: () => {
                            const deprecatedMenu = OSFramework.OSUI.Helper.Dom.ClassSelector(document, 'menu');
                            if (deprecatedMenu) {
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(deprecatedMenu, 'menu--visible');
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(deprecatedMenu, 'menu--animatable');
                                _updatePropsAndAttrs();
                            }
                            else {
                                _showMenu();
                            }
                        },
                    });
                    return result;
                }
                Menu.MenuShow = MenuShow;
                function OnDestroy() {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetMenuOnDestroy,
                        callback: () => {
                            _removeMenuOnResize();
                            _removeMenuOnOrientationChange();
                        },
                    });
                    return result;
                }
                Menu.OnDestroy = OnDestroy;
                function OnReady(callback) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetMenuOnReady,
                        callback: () => {
                            _updatePropsAndAttrs();
                            _addMenuOnResize();
                            _addMenuOnOrientationChange(callback);
                        },
                    });
                    return result;
                }
                Menu.OnReady = OnReady;
                function SetActiveMenuItems(WidgetId, ActiveItem, ActiveSubItem) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetActiveMenuItems,
                        callback: () => {
                            let widgetSelector = '';
                            if (WidgetId !== '') {
                                widgetSelector = '#' + WidgetId + ' ';
                            }
                            const appMenuLinks = OSFramework.OSUI.Helper.Dom.TagSelector(document.body, widgetSelector + '.app-menu-links') ||
                                OSFramework.OSUI.Helper.Dom.TagSelector(document.body, widgetSelector + '.app-sidemenu-links');
                            if (appMenuLinks) {
                                const activeLinkBlock = appMenuLinks.children[ActiveItem];
                                if (activeLinkBlock) {
                                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(activeLinkBlock, 'active');
                                    const activeSubMenu = OSFramework.OSUI.Helper.Dom.ClassSelector(activeLinkBlock, 'submenu') ||
                                        OSFramework.OSUI.Helper.Dom.ClassSelector(activeLinkBlock, 'osui-submenu');
                                    if (activeSubMenu) {
                                        OSFramework.OSUI.Helper.Dom.Styles.AddClass(activeSubMenu, 'active');
                                        const subMenuItem = OSFramework.OSUI.Helper.Dom.ClassSelector(activeSubMenu, 'submenu-items') ||
                                            OSFramework.OSUI.Helper.Dom.ClassSelector(activeSubMenu, 'osui-submenu__items');
                                        const activeSubMenuItem = subMenuItem.querySelectorAll('[' +
                                            OSFramework.OSUI.Constants.A11YAttributes.Role.AttrName +
                                            "='" +
                                            OSFramework.OSUI.Constants.A11YAttributes.Role.MenuItem +
                                            "']")[ActiveSubItem];
                                        if (activeSubMenuItem) {
                                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(activeSubMenuItem, 'active');
                                        }
                                    }
                                }
                            }
                        },
                    });
                    return result;
                }
                Menu.SetActiveMenuItems = SetActiveMenuItems;
                function SetBottomBarActiveElement(ActiveItem = -1) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetBottomBarActiveElement,
                        callback: () => {
                            const bottomBar = OSFramework.OSUI.Helper.Dom.ClassSelector(document, 'bottom-bar');
                            const bottomBarChild = (bottomBar ? bottomBar.children[ActiveItem] : undefined);
                            if (bottomBar && bottomBarChild) {
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(bottomBarChild, 'active');
                            }
                        },
                    });
                    return result;
                }
                Menu.SetBottomBarActiveElement = SetBottomBarActiveElement;
                function SetMenuAttributes() {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetMenuAttributes,
                        callback: () => {
                            if (_appProp.menu.element === undefined) {
                                _setAppProps();
                            }
                            _setA11YAttributes();
                        },
                    });
                    return result;
                }
                Menu.SetMenuAttributes = SetMenuAttributes;
                function SetMenuIcon(MenuAction) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetMenuIcon,
                        callback: () => {
                            if (MenuAction === 'Auto') {
                                const appMenu = Array.prototype.slice.call(OSFramework.OSUI.Helper.Dom.TagSelectorAll(document, '.bottom-bar a'));
                                const bottomBar = Array.prototype.slice.call(OSFramework.OSUI.Helper.Dom.TagSelectorAll(document, '.app-menu a'));
                                const links = appMenu.concat(bottomBar);
                                let showMenu = false;
                                for (let i = 0; i < links.length; i++) {
                                    const timestampIndex = window.location.href.indexOf('_ts') - 1;
                                    const currentPage = timestampIndex > 0
                                        ? window.location.href.substring(0, timestampIndex)
                                        : window.location.href;
                                    if (links[i].attributes['href']) {
                                        if (currentPage.indexOf(links[i].attributes['href'].value) >= 0 ||
                                            currentPage[currentPage.length - 1] === '/') {
                                            showMenu = window.history ? window.history.length > 0 : true;
                                        }
                                    }
                                }
                                const menuIcon = OSFramework.OSUI.Helper.Dom.ClassSelector(document, 'app-menu-icon');
                                if (showMenu) {
                                    OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(menuIcon, 'back');
                                }
                                else {
                                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(menuIcon, 'back');
                                }
                            }
                        },
                    });
                    return result;
                }
                Menu.SetMenuIcon = SetMenuIcon;
                function SetMenuIconListeners() {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetMenuIconListeners,
                        callback: () => {
                            const menuIcon = OSFramework.OSUI.Helper.Dom.ClassSelector(document, 'menu-icon');
                            if (menuIcon) {
                                const menuIconOnKeypress = function (e) {
                                    if (e.keyCode === 32 || e.keyCode === 13) {
                                        e.preventDefault();
                                        e.stopPropagation();
                                        _toggleMenu();
                                    }
                                };
                                menuIcon.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.keyDown, menuIconOnKeypress);
                            }
                        },
                    });
                    return result;
                }
                Menu.SetMenuIconListeners = SetMenuIconListeners;
                function SetMenuListeners(WidgetId) {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailSetMenuListeners,
                        callback: () => {
                            let widgetSelector = '';
                            if (WidgetId !== '') {
                                widgetSelector = '#' + WidgetId;
                            }
                            if (_appProp.menu.element === undefined || _appProp.layout.element === undefined) {
                                _setAppProps();
                            }
                            const menu = OSFramework.OSUI.Helper.Dom.TagSelector(document.body, widgetSelector + '.app-menu-content');
                            _appProp.menu.element = menu;
                            if (_appProp.layout.element && menu) {
                                OSFramework.OSUI.Helper.AsyncInvocation(() => {
                                    _addMenuEventListeners(true);
                                });
                            }
                        },
                    });
                    return result;
                }
                Menu.SetMenuListeners = SetMenuListeners;
                function ToggleSideMenu() {
                    const result = OutSystems.OSUI.Utils.CreateApiResponse({
                        errorCode: OSUI.ErrorCodes.Utilities.FailToggleSideMenu,
                        callback: () => {
                            _toggleMenu();
                        },
                    });
                    return result;
                }
                Menu.ToggleSideMenu = ToggleSideMenu;
            })(Menu = Utils.Menu || (Utils.Menu = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var Network;
            (function (Network) {
                function IsOnline() {
                    return navigator.onLine;
                }
                Network.IsOnline = IsOnline;
                function Type() {
                    let typeofConnection = 'webbrowser';
                    if (navigator.connection !== undefined && navigator.connection.type !== undefined) {
                        typeofConnection = navigator.connection.type;
                    }
                    return typeofConnection;
                }
                Network.Type = Type;
            })(Network = Utils.Network || (Utils.Network = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function AbstractNormalizeProviderConfigs(providerConfigs, htmlElementsProps) {
                for (const keyName of Object.keys(providerConfigs)) {
                    let keyValue = providerConfigs[keyName];
                    if (typeof keyValue !== 'string') {
                        continue;
                    }
                    if ((htmlElementsProps === null || htmlElementsProps === void 0 ? void 0 : htmlElementsProps.indexOf(keyName)) > -1) {
                        providerConfigs[keyName] = OSFramework.OSUI.Helper.Dom.GetElementById(keyValue);
                    }
                    else {
                        keyValue = keyValue.toLowerCase().trim();
                        if (keyValue === 'true' || keyValue === 'false') {
                            providerConfigs[keyName] = keyValue === 'true';
                        }
                    }
                }
                return providerConfigs;
            }
            Utils.AbstractNormalizeProviderConfigs = AbstractNormalizeProviderConfigs;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function ScrollToElement(ElementId, IsSmooth = true, OffSet = 0, ElementParentClass, ScrollDelay) {
                const result = OutSystems.OSUI.Utils.CreateApiResponse({
                    errorCode: OSUI.ErrorCodes.Utilities.FailScrollToElement,
                    callback: () => {
                        const elementToScrollTo = OSFramework.OSUI.Helper.Dom.GetElementById(ElementId);
                        setTimeout(() => {
                            if (elementToScrollTo) {
                                const isHeaderFixed = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.HeaderIsFixed) ||
                                    OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CSSSelectors.LayoutNativeHeader);
                                const isIosBounce = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CSSSelectors.IosBounceScroll);
                                const scrollBehavior = IsSmooth
                                    ? OSFramework.OSUI.GlobalEnum.ScrollBehavior.Smooth
                                    : OSFramework.OSUI.GlobalEnum.ScrollBehavior.Auto;
                                let scrollableElement = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.ActiveScreen);
                                if (ElementParentClass !== OSFramework.OSUI.Constants.EmptyString) {
                                    const isElementParentClass = elementToScrollTo.closest(OSFramework.OSUI.Constants.Dot + ElementParentClass);
                                    if (isElementParentClass) {
                                        scrollableElement = isElementParentClass;
                                    }
                                    else {
                                        console.warn(`The element with class '${ElementParentClass}' doesn't exist on DOM.`);
                                    }
                                }
                                else if (isIosBounce) {
                                    scrollableElement = isIosBounce;
                                }
                                let top = scrollableElement.scrollTop + elementToScrollTo.getBoundingClientRect().top + OffSet;
                                if (isHeaderFixed) {
                                    const header = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.Header);
                                    top = -header.offsetHeight + top;
                                }
                                scrollableElement.scrollTo({
                                    top: top,
                                    left: 0,
                                    behavior: scrollBehavior,
                                });
                            }
                        }, ScrollDelay);
                    },
                });
                return result;
            }
            Utils.ScrollToElement = ScrollToElement;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function ToggleClass(element, state, className) {
                if (!state) {
                    setTimeout(function () {
                        if (!state) {
                            OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(element, className);
                        }
                    }, 500);
                }
                else {
                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(element, className);
                    element.offsetHeight;
                }
            }
            Utils.ToggleClass = ToggleClass;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            function AddFavicon(URL) {
                const result = OutSystems.OSUI.Utils.CreateApiResponse({
                    errorCode: OSUI.ErrorCodes.Utilities.FailAddFavicon,
                    callback: () => {
                        const existingFavicon = OSFramework.OSUI.Helper.Dom.TagSelector(document.head, "link[rel='shortcut icon']");
                        if (existingFavicon) {
                            existingFavicon.href = URL;
                        }
                        else {
                            const link = document.createElement('link');
                            link.type = 'image/x-icon';
                            link.rel = 'shortcut icon';
                            link.href = URL;
                            document.getElementsByTagName('head')[0].appendChild(link);
                        }
                    },
                });
                return result;
            }
            Utils.AddFavicon = AddFavicon;
            function GetIsRTL() {
                return OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(document.body, OSFramework.OSUI.Constants.IsRTLClass);
            }
            Utils.GetIsRTL = GetIsRTL;
            function ListItemAnimate(ListId, HasLeftAction, HasRightAction, AnimationTime) {
                const result = OutSystems.OSUI.Utils.CreateApiResponse({
                    errorCode: OSUI.ErrorCodes.Utilities.FailListItemAnimate,
                    callback: () => {
                        let timeoutVar;
                        const timeAnimation = AnimationTime / 6;
                        const waitListRender = function () {
                            const listEl = OSFramework.OSUI.Helper.Dom.GetElementById(ListId);
                            if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(listEl, 'list-loading') === false) {
                                listAnimateItems();
                                clearTimeout(timeoutVar);
                            }
                            else {
                                timeoutVar = setTimeout(waitListRender, 50);
                            }
                        };
                        const listAnimateItems = function () {
                            setTimeout(function () {
                                const listElement = OSFramework.OSUI.Helper.Dom.GetElementById(ListId)
                                    .childNodes[1];
                                const listItemContentLeft = OSFramework.OSUI.Helper.Dom.TagSelector(listElement, '.active-screen .list-item-left-actions');
                                const listItemContentRight = OSFramework.OSUI.Helper.Dom.TagSelector(listElement, '.active-screen .list-item-right-actions');
                                listElement.style.pointerEvents = 'none';
                                if (HasLeftAction) {
                                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(listItemContentLeft, 'has-content-animation');
                                    OSFramework.OSUI.Helper.Dom.Attribute.Set(listItemContentLeft, 'style', 'width:75px; transition: all ' + timeAnimation + 'ms !important;');
                                    setTimeout(function () {
                                        listItemContentLeft.style.width = '';
                                        listItemContentLeft.addEventListener('transitionend', function () {
                                            OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(listItemContentLeft, 'has-content-animation');
                                            OSFramework.OSUI.Helper.Dom.Attribute.Remove(listItemContentLeft, 'style');
                                            listElement.style.pointerEvents = '';
                                        }, false);
                                    }, timeAnimation * 3);
                                }
                                else if (HasRightAction) {
                                    OSFramework.OSUI.Helper.Dom.Styles.AddClass(listItemContentRight, 'has-content-animation-right');
                                    OSFramework.OSUI.Helper.Dom.Attribute.Set(listItemContentRight, 'style', 'width:75px; transition: all ' +
                                        timeAnimation +
                                        'ms !important; height: ' +
                                        listElement.offsetHeight +
                                        'px;');
                                    setTimeout(function () {
                                        listItemContentRight.style.width = '';
                                        listItemContentRight.addEventListener('transitionend', function () {
                                            OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(listItemContentRight, 'has-content-animation-right');
                                            OSFramework.OSUI.Helper.Dom.Attribute.Remove(listItemContentRight, 'style');
                                            listElement.style.pointerEvents = '';
                                        }, false);
                                    }, timeAnimation * 3);
                                }
                            }, timeAnimation);
                        };
                        waitListRender();
                    },
                });
                return result;
            }
            Utils.ListItemAnimate = ListItemAnimate;
            function MoveElement(ElementId, TargetSelector, TimeoutVal = 200) {
                const result = OutSystems.OSUI.Utils.CreateApiResponse({
                    errorCode: OSUI.ErrorCodes.Utilities.FailMoveElement,
                    callback: () => {
                        if (TargetSelector && ElementId) {
                            const elementToMove = OSFramework.OSUI.Helper.Dom.GetElementById(ElementId);
                            const targetElement = OSFramework.OSUI.Helper.Dom.TagSelector(document.body, TargetSelector);
                            if (elementToMove && targetElement) {
                                setTimeout(function () {
                                    OSFramework.OSUI.Helper.Dom.Move(elementToMove, targetElement);
                                }, TimeoutVal);
                            }
                        }
                    },
                });
                return result;
            }
            Utils.MoveElement = MoveElement;
            function SetActiveElement(ElementId, IsActive) {
                const result = OutSystems.OSUI.Utils.CreateApiResponse({
                    errorCode: OSUI.ErrorCodes.Utilities.FailSetActiveElement,
                    callback: () => {
                        const elem = OSFramework.OSUI.Helper.Dom.GetElementById(ElementId);
                        if (IsActive) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(elem, 'active-element');
                        }
                        else {
                            OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(elem, 'active-element');
                        }
                    },
                });
                return result;
            }
            Utils.SetActiveElement = SetActiveElement;
            function SetSelectedTableRow(TableId, RowNumber, IsSelected) {
                const result = OutSystems.OSUI.Utils.CreateApiResponse({
                    errorCode: OSUI.ErrorCodes.Utilities.FailSetSelectedRow,
                    callback: () => {
                        const tableRow = OSFramework.OSUI.Helper.Dom.TagSelectorAll(document, '#' + TableId + ' .table-row')[RowNumber];
                        if (tableRow) {
                            if (IsSelected) {
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(tableRow, 'table-row-selected');
                            }
                            else {
                                OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(tableRow, 'table-row-selected');
                            }
                        }
                    },
                });
                return result;
            }
            Utils.SetSelectedTableRow = SetSelectedTableRow;
            function GetPlatformType() {
                return OSFramework.OSUI.Constants.OSPlatform;
            }
            Utils.GetPlatformType = GetPlatformType;
            function ShowPassword(WidgetId) {
                const result = OutSystems.OSUI.Utils.CreateApiResponse({
                    errorCode: OSUI.ErrorCodes.Utilities.FailShowPassword,
                    callback: () => {
                        if (WidgetId) {
                            const _inputPassword = OSFramework.OSUI.Helper.Dom.GetElementById(WidgetId);
                            if (_inputPassword.tagName.toLowerCase() !== OSFramework.OSUI.GlobalEnum.HTMLElement.Input ||
                                (_inputPassword.type !== OSFramework.OSUI.GlobalEnum.InputTypeAttr.Text &&
                                    _inputPassword.type !== OSFramework.OSUI.GlobalEnum.InputTypeAttr.Password)) {
                                console.warn(`Object with WidgetId '${WidgetId}' should be an input element.`);
                            }
                            const _typeInputPassword = _inputPassword.type === OSFramework.OSUI.GlobalEnum.InputTypeAttr.Password
                                ? OSFramework.OSUI.GlobalEnum.InputTypeAttr.Text
                                : OSFramework.OSUI.GlobalEnum.InputTypeAttr.Password;
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(_inputPassword, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Type, _typeInputPassword);
                        }
                        else {
                            const _inputPassword = OSFramework.OSUI.Helper.Dom.ClassSelector(document, OSFramework.OSUI.GlobalEnum.CssClassElements.LoginPassword);
                            const _typeInputPassword = _inputPassword.type;
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(_inputPassword, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Type, _typeInputPassword === OSFramework.OSUI.GlobalEnum.InputTypeAttr.Password
                                ? OSFramework.OSUI.GlobalEnum.InputTypeAttr.Text
                                : OSFramework.OSUI.GlobalEnum.InputTypeAttr.Password);
                        }
                    },
                });
                return result;
            }
            Utils.ShowPassword = ShowPassword;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var OutSystems;
(function (OutSystems) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var PreviewInDevices;
            (function (PreviewInDevices) {
                class OnPostMessage {
                    static _addInPreviewCssClass() {
                        OnPostMessage._isInPreviewInDevices = true;
                        document.body.classList.add('PreviewInDevices');
                    }
                    static _createPhonePreviewStyle(notchValue) {
                        if (!notchValue) {
                            return;
                        }
                        const style = document.createElement('style');
                        style.textContent = `
				body * {
					user-select: none !important
				}
	
				body.is-phone.android.portrait {
					--status-bar-height: ${notchValue}px;
				} 
				
				body.portrait.is-phone {
					--os-safe-area-top: ${notchValue}px;
				} 
				
				body.landscape.is-phone {
					--os-safe-area-right: ${notchValue}px;
					--os-safe-area-left: ${notchValue}px;
				}
	
				.is-phone .active-screen.screen-container::-webkit-scrollbar, html::-webkit-scrollbar,
				.is-phone.ios .active-screen.screen-container .content::-webkit-scrollbar, html::-webkit-scrollbar {
					display: none;
				}
			`;
                        document.body.classList.add('is-phone');
                        document.body.setAttribute('data-status-bar-height', `${notchValue}px`);
                        document.head.appendChild(style);
                    }
                    static _createTabletPreviewStyle() {
                        const style = document.createElement('style');
                        style.textContent = `
				body * {
					user-select: none !important
				}
				
				.tablet .active-screen.screen-container::-webkit-scrollbar, html::-webkit-scrollbar,
				.tablet.ios .active-screen.screen-container .content::-webkit-scrollbar, html::-webkit-scrollbar {
					display: none;
				}
			`;
                        document.head.appendChild(style);
                    }
                    static _message(evtName, evt) {
                        if (OSFramework.OSUI.GlobalEnum.HTMLEvent.Message === evtName &&
                            (evt.origin.includes('outsystems.app') || evt.origin.includes('outsystems.dev'))) {
                            OnPostMessage._messageFromPreview(evt);
                        }
                    }
                    static _messageFromPreview(evt) {
                        OnPostMessage._addInPreviewCssClass();
                        if (OSFramework.OSUI.Helper.DeviceInfo.IsPhone) {
                            OnPostMessage._createPhonePreviewStyle(evt.data.notchValue);
                        }
                        else if (OSFramework.OSUI.Helper.DeviceInfo.IsTablet) {
                            OnPostMessage._createTabletPreviewStyle();
                        }
                        sessionStorage.setItem('previewDevicesUserAgent', evt.data.userAgent);
                        sessionStorage.setItem('previewDevicesPixelRatio', evt.data.pixelRatio);
                        OnPostMessage.Unset();
                        evt.source.postMessage('received', { targetOrigin: evt.origin });
                        OSFramework.OSUI.Helper.DeviceInfo.RefreshOperatingSystem();
                        Utils.LayoutPrivate.SetDeviceClass(false);
                    }
                    static get IsInPreviewInDevices() {
                        return OnPostMessage._isInPreviewInDevices;
                    }
                    static Set() {
                        if (window.self !== window.top) {
                            OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.WindowMessage, OnPostMessage._message);
                        }
                    }
                    static Unset() {
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.WindowMessage, OnPostMessage._message);
                    }
                }
                OnPostMessage._isInPreviewInDevices = false;
                OnPostMessage.Set();
            })(PreviewInDevices = Utils.PreviewInDevices || (Utils.PreviewInDevices = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = OutSystems.OSUI || (OutSystems.OSUI = {}));
})(OutSystems || (OutSystems = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var ErrorCodes;
        (function (ErrorCodes) {
            ErrorCodes.FloatingUI = {
                FailCallProvider: 'OSUI-PVR-01001',
                FailSetPosition: 'OSUI-PVR-01002',
            };
        })(ErrorCodes = OSUI.ErrorCodes || (OSUI.ErrorCodes = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Carousel;
        (function (Carousel) {
            var Splide;
            (function (Splide) {
                var Enum;
                (function (Enum) {
                    let CssClass;
                    (function (CssClass) {
                        CssClass["SplideWrapper"] = "splide";
                        CssClass["SplideTrack"] = "splide__track";
                        CssClass["SplideList"] = "splide__list";
                        CssClass["SplideSlide"] = "splide__slide";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Go;
                    (function (Go) {
                        Go["Next"] = ">";
                        Go["Previous"] = "<";
                    })(Go = Enum.Go || (Enum.Go = {}));
                    let KeyboardOptions;
                    (function (KeyboardOptions) {
                        KeyboardOptions["Focused"] = "focused";
                    })(KeyboardOptions = Enum.KeyboardOptions || (Enum.KeyboardOptions = {}));
                    let SpliderEvents;
                    (function (SpliderEvents) {
                        SpliderEvents["Mounted"] = "mounted";
                        SpliderEvents["Moved"] = "moved";
                    })(SpliderEvents = Enum.SpliderEvents || (Enum.SpliderEvents = {}));
                    let ProviderInfo;
                    (function (ProviderInfo) {
                        ProviderInfo["Name"] = "Splide";
                        ProviderInfo["Version"] = "4.1.3";
                    })(ProviderInfo = Enum.ProviderInfo || (Enum.ProviderInfo = {}));
                    let TypeOptions;
                    (function (TypeOptions) {
                        TypeOptions["Loop"] = "loop";
                        TypeOptions["Slide"] = "slide";
                    })(TypeOptions = Enum.TypeOptions || (Enum.TypeOptions = {}));
                })(Enum = Splide.Enum || (Splide.Enum = {}));
            })(Splide = Carousel.Splide || (Carousel.Splide = {}));
        })(Carousel = OSUI.Carousel || (OSUI.Carousel = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Carousel;
        (function (Carousel) {
            var Splide;
            (function (Splide) {
                class OSUISplide extends OSFramework.OSUI.Patterns.Carousel.AbstractCarousel {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Splide.SplideConfig(configs));
                        this._blockOnRender = false;
                    }
                    _checkListWidget() {
                        this._hasList = OutSystems.OSUI.Utils.GetHasListInside(this._carouselPlaceholderElem);
                        if (this._hasList) {
                            this._carouselListWidgetElem = this.selfElement.querySelector(OSFramework.OSUI.Constants.Dot + OSFramework.OSUI.GlobalEnum.CssClassElements.List);
                            this._carouselProviderElem = this._carouselTrackElem;
                        }
                        else {
                            this._carouselProviderElem = this.selfElement;
                        }
                    }
                    _initProvider() {
                        this.provider = new window.Splide(this._carouselProviderElem, this._splideOptions);
                        this.updateProviderEvents({
                            name: Splide.Enum.ProviderInfo.Name,
                            version: Splide.Enum.ProviderInfo.Version,
                            events: this.provider,
                        });
                        this._setOnInitializedEvent();
                        this._setOnSlideMovedEvent();
                        this._setCarouselWidth();
                        this.provider.mount();
                        this._togglePaginationClass();
                    }
                    _prepareCarouselItems() {
                        const _targetList = this._hasList ? this._carouselListWidgetElem : this._carouselPlaceholderElem;
                        const _childrenList = _targetList.children;
                        if (_childrenList.length > 0) {
                            for (const item of _childrenList) {
                                if (!item.classList.contains(Splide.Enum.CssClass.SplideSlide)) {
                                    item.classList.add(Splide.Enum.CssClass.SplideSlide);
                                }
                            }
                        }
                    }
                    _redefineCarouselWidth() {
                        OSFramework.OSUI.Helper.ApplySetTimeOut(() => {
                            this.provider.refresh();
                            this._setCarouselWidth();
                            if (this.selfElement.offsetWidth >= window.innerWidth) {
                                this.redraw();
                                this._setCarouselWidth();
                            }
                        }, 500);
                    }
                    _setCarouselWidth() {
                        OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(this._carouselTrackElem, OSFramework.OSUI.Patterns.Carousel.Enum.CssVariables.CarouselWidth, this.selfElement.offsetWidth + OSFramework.OSUI.GlobalEnum.Units.Pixel);
                    }
                    _setOnInitializedEvent() {
                        this.provider.on(Splide.Enum.SpliderEvents.Mounted, () => {
                            this.triggerPlatformInitializedEventCallback();
                        });
                    }
                    _setOnSlideMovedEvent() {
                        this.provider.on(Splide.Enum.SpliderEvents.Moved, (index) => {
                            if (index !== this._currentIndex) {
                                this.triggerPlatformEventCallback(this._platformEventOnSlideMoved, index);
                                this._currentIndex = index;
                            }
                        });
                    }
                    _togglePaginationClass() {
                        if (this.configs.Navigation === OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.Dots ||
                            this.configs.Navigation === OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.Both) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.selfElement, OSFramework.OSUI.Patterns.Carousel.Enum.CssClass.HasPagination);
                        }
                        else {
                            OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, OSFramework.OSUI.Patterns.Carousel.Enum.CssClass.HasPagination);
                        }
                    }
                    prepareConfigs() {
                        this._prepareCarouselItems();
                        this._splideOptions = this.configs.getProviderConfig();
                        this._initProvider();
                    }
                    setA11YProperties() {
                        console.warn(OSFramework.OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setCallbacks() {
                        this._eventOnResize = this._redefineCarouselWidth.bind(this);
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.WindowResize, this._eventOnResize);
                    }
                    setHtmlElements() {
                        this._carouselPlaceholderElem = OSFramework.OSUI.Helper.Dom.ClassSelector(this.selfElement, OSFramework.OSUI.Patterns.Carousel.Enum.CssClass.Content);
                        this._carouselTrackElem = OSFramework.OSUI.Helper.Dom.ClassSelector(this.selfElement, OSFramework.OSUI.Patterns.Carousel.Enum.CssClass.Track);
                    }
                    setInitialCssClasses() {
                        if (this._hasList) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this._carouselTrackElem, Splide.Enum.CssClass.SplideWrapper);
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this._carouselPlaceholderElem, Splide.Enum.CssClass.SplideTrack);
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this._carouselListWidgetElem, Splide.Enum.CssClass.SplideList);
                        }
                        else {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.selfElement, Splide.Enum.CssClass.SplideWrapper);
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this._carouselTrackElem, Splide.Enum.CssClass.SplideTrack);
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this._carouselPlaceholderElem, Splide.Enum.CssClass.SplideList);
                        }
                        this._togglePaginationClass();
                    }
                    unsetCallbacks() {
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.WindowResize, this._eventOnResize);
                        this._eventOnResize = undefined;
                        this._platformEventOnSlideMoved = undefined;
                        super.unsetCallbacks();
                    }
                    unsetHtmlElements() {
                        this._carouselPlaceholderElem = undefined;
                        this._carouselTrackElem = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                        this.setCallbacks();
                        this._checkListWidget();
                        this.setInitialCssClasses();
                        this.prepareConfigs();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            this.toggleOnRender(true);
                            switch (propertyName) {
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.StartingPosition:
                                    console.warn(`Carousel (${this.widgetId}): changes to ${OSFramework.OSUI.Patterns.Carousel.Enum.Properties.StartingPosition} parameter do not affect the carousel. Use the client action 'CarouselGoTo' to change the current item.`);
                                    break;
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.Navigation:
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.AutoPlay:
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.Loop:
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.ItemsDesktop:
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.ItemsTablet:
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.ItemsPhone:
                                    this.redraw();
                                    break;
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.Height:
                                    this.provider.options = { height: propertyValue };
                                    break;
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.Padding:
                                    this.provider.options = { padding: propertyValue };
                                    break;
                                case OSFramework.OSUI.Patterns.Carousel.Enum.Properties.ItemsGap:
                                    this.provider.options = { gap: propertyValue };
                                    break;
                            }
                        }
                        OSFramework.OSUI.Helper.AsyncInvocation(this.toggleOnRender.bind(this), false);
                    }
                    dispose() {
                        if (this.isBuilt) {
                            this.provider.destroy();
                        }
                        this.unsetCallbacks();
                        this.unsetHtmlElements();
                        super.dispose();
                    }
                    goTo(index) {
                        this.provider.go(index);
                    }
                    next() {
                        this.provider.go(Splide.Enum.Go.Next);
                    }
                    previous() {
                        this.provider.go(Splide.Enum.Go.Previous);
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case OSFramework.OSUI.Patterns.Carousel.Enum.CarouselEvents.OnSlideMoved:
                                this._platformEventOnSlideMoved = callback;
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                                break;
                        }
                    }
                    setCarouselDirection(direction) {
                        if (direction === OSFramework.OSUI.Patterns.Carousel.Enum.Direction.None &&
                            OutSystems.OSUI.Utils.GetIsRTL()) {
                            this.configs.Direction = OSFramework.OSUI.GlobalEnum.Direction.RTL;
                        }
                        else if (direction === OSFramework.OSUI.Patterns.Carousel.Enum.Direction.RightToLeft &&
                            this.configs.AutoPlay) {
                            this.configs.Direction = OSFramework.OSUI.GlobalEnum.Direction.RTL;
                        }
                        else {
                            this.configs.Direction = OSFramework.OSUI.GlobalEnum.Direction.LTR;
                        }
                        this.redraw();
                    }
                    setProviderConfigs(newConfigs) {
                        this.configs.setExtensibilityConfigs(newConfigs);
                        this.redraw();
                        super.setProviderConfigs(newConfigs);
                    }
                    toggleDrag(hasDrag) {
                        this.provider.options = { drag: hasDrag };
                    }
                    toggleOnRender(blockOnRender) {
                        this._blockOnRender = blockOnRender;
                    }
                    updateOnRender() {
                        if (this._blockOnRender === false) {
                            this.setInitialCssClasses();
                            if (typeof this.provider === 'object') {
                                if (this._currentIndex !== undefined || this.configs.AutoPlay === true) {
                                    this.configs.StartingPosition = this.provider.index;
                                }
                                this.redraw();
                            }
                        }
                    }
                }
                Splide.OSUISplide = OSUISplide;
            })(Splide = Carousel.Splide || (Carousel.Splide = {}));
        })(Carousel = OSUI.Carousel || (OSUI.Carousel = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Carousel;
        (function (Carousel) {
            var Splide;
            (function (Splide) {
                class SplideConfig extends OSFramework.OSUI.Patterns.Carousel.AbstractCarouselConfig {
                    _getArrowConfig() {
                        let arrows;
                        switch (this.Navigation) {
                            case OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.None:
                                arrows = false;
                                break;
                            case OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.Dots:
                                arrows = false;
                                break;
                            case OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.Arrows:
                                arrows = true;
                                break;
                            case OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.Both:
                                arrows = true;
                                break;
                        }
                        return arrows;
                    }
                    _getDirectionConfig() {
                        let direction;
                        if (this.Direction === undefined && OutSystems.OSUI.Utils.GetIsRTL()) {
                            direction = OSFramework.OSUI.GlobalEnum.Direction.RTL;
                        }
                        else {
                            direction = this.Direction || OSFramework.OSUI.GlobalEnum.Direction.LTR;
                        }
                        return direction;
                    }
                    _getPaginationConfig() {
                        let pagination;
                        switch (this.Navigation) {
                            case OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.None:
                                pagination = false;
                                break;
                            case OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.Dots:
                                pagination = true;
                                break;
                            case OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.Arrows:
                                pagination = false;
                                break;
                            case OSFramework.OSUI.Patterns.Carousel.Enum.Navigation.Both:
                                pagination = true;
                                break;
                        }
                        return pagination;
                    }
                    getProviderConfig() {
                        this._providerOptions = {
                            arrows: this._getArrowConfig(),
                            breakpoints: {
                                768: {
                                    perPage: this.ItemsPhone,
                                },
                                1024: {
                                    perPage: this.ItemsTablet,
                                },
                            },
                            keyboard: Splide.Enum.KeyboardOptions.Focused,
                            direction: this._getDirectionConfig(),
                            height: this.Height,
                            type: this.Loop ? Splide.Enum.TypeOptions.Loop : Splide.Enum.TypeOptions.Slide,
                            focus: 0,
                            perPage: this.ItemsDesktop,
                            autoplay: this.AutoPlay,
                            padding: this.Padding,
                            pagination: this._getPaginationConfig(),
                            gap: this.ItemsGap,
                            start: this.StartingPosition,
                            snap: true,
                            dragMinThreshold: 30,
                        };
                        return this.mergeConfigs(this._providerOptions, undefined, this._providerExtendedOptions);
                    }
                    setExtensibilityConfigs(newConfigs) {
                        this._providerExtendedOptions = newConfigs;
                    }
                }
                Splide.SplideConfig = SplideConfig;
            })(Splide = Carousel.Splide || (Carousel.Splide = {}));
        })(Carousel = OSUI.Carousel || (OSUI.Carousel = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Carousel;
        (function (Carousel) {
            var Splide;
            (function (Splide) {
                var Utils;
                (function (Utils) {
                    function NormalizeSplideConfigs(splideConfigs) {
                        return OutSystems.OSUI.Utils.AbstractNormalizeProviderConfigs(splideConfigs);
                    }
                    Utils.NormalizeSplideConfigs = NormalizeSplideConfigs;
                })(Utils = Splide.Utils || (Splide.Utils = {}));
            })(Splide = Carousel.Splide || (Carousel.Splide = {}));
        })(Carousel = OSUI.Carousel || (OSUI.Carousel = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                class AbstractFlatpickr extends OSFramework.OSUI.Patterns.DatePicker.AbstractDatePicker {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                        this.onCloseCustomCallback = undefined;
                        this.configs.OnChange = this.onDateSelectedEvent.bind(this);
                        this.configs.OnClose = this.onDatePickerClose.bind(this);
                        this.configs.OnOpen = this.onDatePickerOpen.bind(this);
                    }
                    _setAttributes() {
                        if (this.datePickerPlatformInputElem.nextSibling) {
                            this.flatpickrInputElem = this.datePickerPlatformInputElem.nextSibling;
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.DataInput, '');
                            if (this.flatpickrInputElem.disabled) {
                                OSFramework.OSUI.Helper.Dom.Attribute.Remove(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Disabled);
                            }
                        }
                    }
                    _setCalendarCssClasses() {
                        OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.provider.calendarContainer, OSFramework.OSUI.Patterns.DatePicker.Enum.CssClass.Calendar);
                        if (this.configs.ExtendedClass !== '') {
                            OSFramework.OSUI.Helper.Dom.Styles.ExtendedClass(this.provider.calendarContainer, '', this.configs.ExtendedClass);
                        }
                    }
                    _setParentMinHeight() {
                        OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, OSFramework.OSUI.GlobalEnum.InlineStyle.Height, this.selfElement.clientHeight + OSFramework.OSUI.GlobalEnum.Units.Pixel);
                    }
                    _todayButtonKeydown(e) {
                        switch (e.key) {
                            case OSFramework.OSUI.GlobalEnum.Keycodes.Tab:
                                return;
                            case OSFramework.OSUI.GlobalEnum.Keycodes.Enter:
                            case OSFramework.OSUI.GlobalEnum.Keycodes.Space:
                                e.preventDefault();
                                this.provider.setDate(this.provider.now, true);
                                this.jumpIntoToday();
                                break;
                        }
                    }
                    _unsetParentMinHeight() {
                        OSFramework.OSUI.Helper.Dom.Styles.RemoveStyleAttribute(this.selfElement, OSFramework.OSUI.GlobalEnum.InlineStyle.Height);
                    }
                    _updateA11yProperties() {
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.flatpickrInputElem, OSFramework.OSUI.Constants.A11YAttributes.TabIndex, this._isPlatformInputDisabled
                            ? OSFramework.OSUI.Constants.A11YAttributes.States.TabIndexHidden
                            : OSFramework.OSUI.Constants.A11YAttributes.States.TabIndexShow);
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.flatpickrInputElem, OSFramework.OSUI.Constants.A11YAttributes.Aria.Hidden, this._isPlatformInputDisabled.toString());
                    }
                    addTodayBtn() {
                        this._todayButtonElem = document.createElement(OSFramework.OSUI.GlobalEnum.HTMLElement.Div);
                        this._todayButtonElem.classList.add(Flatpickr.Enum.CssClasses.TodayBtn);
                        const todayBtn = document.createElement(OSFramework.OSUI.GlobalEnum.HTMLElement.Link);
                        if (this.provider.isOpen) {
                            OSFramework.OSUI.Helper.A11Y.TabIndexTrue(todayBtn);
                        }
                        else {
                            OSFramework.OSUI.Helper.A11Y.TabIndexFalse(todayBtn);
                        }
                        const langCode = Flatpickr.l10ns.TodayBtn[this.configs.Lang] !== undefined ? this.configs.Lang : 'en';
                        todayBtn.innerHTML = Flatpickr.l10ns.TodayBtn[langCode].title;
                        OSFramework.OSUI.Helper.A11Y.AriaLabel(todayBtn, Flatpickr.l10ns.TodayBtn[langCode].ariaLabel);
                        todayBtn.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.Click, this.todayBtnClick.bind(this));
                        todayBtn.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.keyDown, this._todayButtonKeydown.bind(this));
                        this._todayButtonElem.appendChild(todayBtn);
                        this._providerFocusSpanTarget = this.provider.calendarContainer.querySelector('.focus-trap-bottom-element');
                        if (this._providerFocusSpanTarget) {
                            this.provider.calendarContainer.insertBefore(this._todayButtonElem, this._providerFocusSpanTarget);
                        }
                        else {
                            this.provider.calendarContainer.appendChild(this._todayButtonElem);
                        }
                    }
                    createProviderInstance() {
                        this.provider = window.flatpickr(this.datePickerPlatformInputElem, this.flatpickrOpts);
                        this.updateProviderEvents({
                            name: OSUI.SharedProviderResources.Flatpickr.Enum.ProviderInfo.Name,
                            version: OSUI.SharedProviderResources.Flatpickr.Enum.ProviderInfo.Version,
                            events: this.provider.config,
                        });
                        this._setAttributes();
                        this.updatePlatformInputAttrs();
                        this.setA11YProperties();
                        if (this.provider.calendarContainer !== undefined) {
                            if (this.configs.DisableMobile === true ||
                                OSFramework.OSUI.Helper.DeviceInfo.IsDesktop ||
                                this.configs.CalendarMode === OSFramework.OSUI.Patterns.DatePicker.Enum.Mode.Range) {
                                if (this.configs.ShowTodayButton) {
                                    this.addTodayBtn();
                                }
                                this._setCalendarCssClasses();
                                this._bodyScrollCommonBehaviour = new OSUI.SharedProviderResources.Flatpickr.UpdatePositionOnScroll(this);
                                this._zindexCommonBehavior = new OSUI.SharedProviderResources.Flatpickr.UpdateZindex(this);
                            }
                        }
                        if (this.flatpickrInputElem !== undefined && this.isBuilt) {
                            OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.CssClassElements.InputNotValid);
                        }
                        this._unsetParentMinHeight();
                        this.triggerPlatformInitializedEventCallback();
                    }
                    jumpIntoToday() {
                        this.provider.jumpToDate(this.provider.now);
                    }
                    onDatePickerClose() {
                        if (this.provider.selectedDates.length === 0) {
                            this.onDateSelectedEvent(this.provider.selectedDates);
                        }
                        if (this.configs.ShowTodayButton && this._todayButtonElem) {
                            OSFramework.OSUI.Helper.A11Y.TabIndexFalse(this._todayButtonElem.querySelector(OSFramework.OSUI.GlobalEnum.HTMLElement.Link));
                        }
                        if (this.onCloseCustomCallback !== undefined &&
                            typeof this.onCloseCustomCallback === OSFramework.OSUI.Constants.JavaScriptTypes.Function) {
                            this.onCloseCustomCallback(this.provider);
                        }
                    }
                    onDatePickerOpen() {
                        if (this.configs.ShowTodayButton && this._todayButtonElem) {
                            OSFramework.OSUI.Helper.A11Y.TabIndexTrue(this._todayButtonElem.querySelector(OSFramework.OSUI.GlobalEnum.HTMLElement.Link));
                        }
                    }
                    prepareConfigs() {
                        this.flatpickrOpts = this.configs.getProviderConfig();
                        this.createProviderInstance();
                    }
                    prepareToAndRedraw() {
                        this._setParentMinHeight();
                        this.redraw();
                    }
                    setA11YProperties() {
                        if (this.provider.calendarContainer !== undefined && this.flatpickrInputElem !== undefined) {
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(this.datePickerPlatformInputElem, OSFramework.OSUI.Constants.A11YAttributes.TabIndex, OSFramework.OSUI.Constants.A11YAttributes.States.TabIndexHidden);
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(this.datePickerPlatformInputElem, OSFramework.OSUI.Constants.A11YAttributes.Aria.Hidden, OSFramework.OSUI.Constants.A11YAttributes.States.True);
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(this._a11yInfoContainerElem, OSFramework.OSUI.Constants.A11YAttributes.Aria.Hidden, OSFramework.OSUI.Constants.A11YAttributes.States.True);
                            this._updateA11yProperties();
                            let ariaLabelValue = Flatpickr.Enum.Attribute.DefaultAriaLabel;
                            if (this.datePickerPlatformInputElem.hasAttribute(OSFramework.OSUI.Constants.A11YAttributes.Aria.Label)) {
                                ariaLabelValue = this.datePickerPlatformInputElem.getAttribute(OSFramework.OSUI.Constants.A11YAttributes.Aria.Label);
                            }
                            OSFramework.OSUI.Helper.A11Y.AriaLabel(this.flatpickrInputElem, ariaLabelValue);
                            if (OSFramework.OSUI.Helper.DeviceInfo.IsDesktop)
                                OSFramework.OSUI.Helper.A11Y.AriaDescribedBy(this.flatpickrInputElem, this._a11yInfoContainerElem.id);
                            if (this.configs.Lang !== OSFramework.OSUI.Constants.Language.short) {
                                this._a11yInfoContainerElem.innerHTML =
                                    Datepicker.Flatpickr.l10ns.A11yContainerInfo[this.configs.Lang] !== undefined
                                        ? Datepicker.Flatpickr.l10ns.A11yContainerInfo[this.configs.Lang].htmlTex
                                        : Datepicker.Flatpickr.l10ns.A11yContainerInfo.en.htmlTex;
                            }
                        }
                    }
                    setCallbacks() {
                        console.log(OSFramework.OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        this.datePickerPlatformInputElem = this.selfElement.querySelector('input.form-control');
                        this._isPlatformInputDisabled = this.datePickerPlatformInputElem.disabled;
                        this._a11yInfoContainerElem = OSFramework.OSUI.Helper.Dom.TagSelector(this.selfElement.parentElement, OSFramework.OSUI.Constants.Dot + Flatpickr.Enum.CssClasses.AccessibilityContainerInfo);
                        if (!this.datePickerPlatformInputElem) {
                            throw new Error(`The datepicker input at DatepickerId '${this.widgetId}' is missing`);
                        }
                    }
                    unsetCallbacks() {
                        this.configs.OnChange = undefined;
                        this.onSelectedCallbackEvent = undefined;
                        super.unsetCallbacks();
                    }
                    unsetHtmlElements() {
                        this._a11yInfoContainerElem = undefined;
                        this.datePickerPlatformInputElem = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                    }
                    changeProperty(propertyName, propertyValue) {
                        const oldExtendedClass = this.configs.ExtendedClass;
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case OSFramework.OSUI.Patterns.DatePicker.Enum.Properties.FirstWeekDay:
                                case OSFramework.OSUI.Patterns.DatePicker.Enum.Properties.MaxDate:
                                case OSFramework.OSUI.Patterns.DatePicker.Enum.Properties.MinDate:
                                case OSFramework.OSUI.Patterns.DatePicker.Enum.Properties.ShowTodayButton:
                                case OSFramework.OSUI.Patterns.DatePicker.Enum.Properties.ShowWeekNumbers:
                                    this.prepareToAndRedraw();
                                    break;
                                case OSFramework.OSUI.GlobalEnum.CommonPatternsProperties.ExtendedClass:
                                    OSFramework.OSUI.Helper.Dom.Styles.ExtendedClass(this.provider.calendarContainer, oldExtendedClass, propertyValue);
                                    break;
                            }
                        }
                    }
                    clear() {
                        const isInputDisable = this.datePickerPlatformInputElem.disabled;
                        if (isInputDisable === false) {
                            this.provider.clear();
                        }
                    }
                    close() {
                        if (this.provider.isOpen) {
                            this.provider.close();
                            if (this.configs.ShowTodayButton) {
                                OSFramework.OSUI.Helper.A11Y.TabIndexFalse(this._todayButtonElem);
                            }
                        }
                    }
                    disableDays(disableDays) {
                        this.configs.DisabledDays = disableDays;
                        this.prepareToAndRedraw();
                    }
                    disableWeekDays(disableWeekDays) {
                        this.configs.DisabledWeekDays = disableWeekDays;
                        this.prepareToAndRedraw();
                    }
                    dispose() {
                        if (this.isBuilt) {
                            this.unsetCallbacks();
                            this.unsetHtmlElements();
                            if (this._bodyScrollCommonBehaviour !== undefined) {
                                this._bodyScrollCommonBehaviour.dispose();
                                this._bodyScrollCommonBehaviour = undefined;
                            }
                            OSFramework.OSUI.Helper.AsyncInvocation(this.provider.destroy);
                        }
                        super.dispose();
                    }
                    onRender() {
                        const isInputDisable = this.datePickerPlatformInputElem.disabled;
                        if (this._isPlatformInputDisabled !== isInputDisable) {
                            this._isPlatformInputDisabled = isInputDisable;
                            this._updateA11yProperties();
                        }
                    }
                    open() {
                        const isInputDisable = this.datePickerPlatformInputElem.disabled;
                        if (this.provider.isOpen === false && isInputDisable === false) {
                            this.provider.open();
                            if (this.flatpickrInputElem) {
                                this.flatpickrInputElem.focus();
                            }
                            if (this.configs.ShowTodayButton) {
                                OSFramework.OSUI.Helper.A11Y.TabIndexTrue(this._todayButtonElem);
                            }
                        }
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case OSFramework.OSUI.Patterns.DatePicker.Enum.DatePickerEvents.OnChange:
                                this.onSelectedCallbackEvent = callback;
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                                break;
                        }
                    }
                    setEditableInput(isEditable) {
                        if (this.configs.AllowInput !== isEditable) {
                            this.configs.AllowInput = isEditable;
                            this.prepareToAndRedraw();
                        }
                    }
                    setLanguage(value) {
                        this.configs.Lang = value.toLowerCase();
                        if (this.provider !== undefined) {
                            this.prepareToAndRedraw();
                        }
                    }
                    setProviderConfigs(newConfigs) {
                        this.configs.setExtensibilityConfigs(newConfigs);
                        this.prepareToAndRedraw();
                        super.setProviderConfigs(newConfigs);
                    }
                    updatePrompt(promptMessage) {
                        this.flatpickrInputElem.placeholder = promptMessage;
                    }
                }
                Flatpickr.AbstractFlatpickr = AbstractFlatpickr;
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                class AbstractFlatpickrConfig extends OSFramework.OSUI.Patterns.DatePicker
                    .AbstractDatePickerConfig {
                    constructor(config) {
                        super(config);
                        this._disabledDays = [];
                        this._disabledWeekDays = [];
                        this.AllowInput = false;
                        this.Disable = [];
                        this.DisableMobile = false;
                        this._lang = OSFramework.OSUI.Helper.Language.ShortLang;
                    }
                    _checkAltFormat() {
                        let _altFormat = this.DateFormat !== '' ? this._mapProviderDateFormat() : this.ServerDateFormat;
                        if (this.TimeFormat === OSFramework.OSUI.Patterns.DatePicker.Enum.TimeFormatMode.Time12hFormat) {
                            _altFormat = _altFormat + ' - h:i K';
                        }
                        else if (this.TimeFormat === OSFramework.OSUI.Patterns.DatePicker.Enum.TimeFormatMode.Time24hFormat) {
                            _altFormat = _altFormat + ' - H:i';
                        }
                        return _altFormat;
                    }
                    _checkDisableWeeksDay(date) {
                        return this._disabledWeekDays.indexOf(date.getDay()) > -1;
                    }
                    _checkLocale() {
                        let _locale = window.flatpickr.l10ns.en;
                        try {
                            _locale = window.flatpickr.l10ns[this._lang];
                            _locale.firstDayOfWeek = this.FirstWeekDay;
                        }
                        catch (error) {
                            console.error(`${Flatpickr.ErrorCodes.FailSetLocale}: Locale '${this._lang}' not found!`);
                        }
                        return _locale;
                    }
                    _mapProviderDateFormat() {
                        const _dateFormat = this.DateFormat.replace(/[^a-zA-Z]/g, ' ').split(' ');
                        for (const format of _dateFormat) {
                            switch (format) {
                                case OSFramework.OSUI.GlobalEnum.DateFormat.YYYY:
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.YYYY, OSFramework.OSUI.GlobalEnum.DateFormat.Y);
                                    break;
                                case OSFramework.OSUI.GlobalEnum.DateFormat.YY:
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.YY, OSFramework.OSUI.GlobalEnum.DateFormat.y);
                                    break;
                                case OSFramework.OSUI.GlobalEnum.DateFormat.MMM:
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.MMM, OSFramework.OSUI.GlobalEnum.DateFormat.M);
                                    break;
                                case OSFramework.OSUI.GlobalEnum.DateFormat.MM:
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.MM, OSFramework.OSUI.GlobalEnum.DateFormat.m);
                                    break;
                                case OSFramework.OSUI.GlobalEnum.DateFormat.DDD:
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.DDD, OSFramework.OSUI.GlobalEnum.DateFormat.D);
                                    break;
                                case OSFramework.OSUI.GlobalEnum.DateFormat.DD:
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.DD, OSFramework.OSUI.GlobalEnum.DateFormat.d);
                                    break;
                            }
                        }
                        return this.DateFormat;
                    }
                    _setDisable() {
                        this.Disable = [];
                        if (this._disabledWeekDays.length > 0) {
                            this.Disable.push((date) => {
                                return this._checkDisableWeeksDay(date);
                            });
                        }
                        if (this._disabledDays.length > 0) {
                            for (const date of this._disabledDays) {
                                this.Disable.push(date);
                            }
                        }
                    }
                    _validateDate(date, isMaxDate) {
                        const _finalDate = date;
                        if (OSFramework.OSUI.Helper.Dates.IsNull(_finalDate)) {
                            return undefined;
                        }
                        else if (this._isUsingDateTime) {
                            return _finalDate;
                        }
                        else {
                            return OSFramework.OSUI.Helper.Dates.NormalizeDateTime(_finalDate, isMaxDate);
                        }
                    }
                    getProviderConfig() {
                        this._isUsingDateTime =
                            this.TimeFormat !== OSFramework.OSUI.Patterns.DatePicker.Enum.TimeFormatMode.Disable;
                        this._setDisable();
                        this._providerOptions = {
                            altFormat: this._checkAltFormat(),
                            altInput: true,
                            allowInput: this.AllowInput,
                            disable: this.Disable.length === 0 ? undefined : this.Disable,
                            disableMobile: this.DisableMobile,
                            dateFormat: this._isUsingDateTime
                                ? this.ServerDateFormat + ' H:i:S'
                                : this.ServerDateFormat,
                            maxDate: this._validateDate(this.MaxDate, true),
                            minDate: this._validateDate(this.MinDate),
                            onChange: this.OnChange,
                            onClose: this.OnClose,
                            onOpen: this.OnOpen,
                            time_24hr: this.TimeFormat === OSFramework.OSUI.Patterns.DatePicker.Enum.TimeFormatMode.Time24hFormat,
                            updateInputVal: false,
                            weekNumbers: this.ShowWeekNumbers,
                        };
                        if (this._providerOptions.locale === undefined) {
                            this._providerOptions.locale = this._checkLocale();
                        }
                        return this._providerOptions;
                    }
                    setExtensibilityConfigs(newConfigs) {
                        this.providerExtendedOptions = newConfigs;
                    }
                    get Lang() {
                        return this._lang;
                    }
                    set Lang(value) {
                        this._lang = value.substring(0, 2);
                    }
                    get ServerDateFormat() {
                        return OSFramework.OSUI.Helper.Dates.ServerFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.YYYY, OSFramework.OSUI.GlobalEnum.DateFormat.Y)
                            .replace(OSFramework.OSUI.GlobalEnum.DateFormat.MM, OSFramework.OSUI.GlobalEnum.DateFormat.m)
                            .replace(OSFramework.OSUI.GlobalEnum.DateFormat.DD, OSFramework.OSUI.GlobalEnum.DateFormat.d);
                    }
                    set DisabledDays(value) {
                        this._disabledDays = value;
                    }
                    set DisabledWeekDays(value) {
                        this._disabledWeekDays = value;
                    }
                }
                Flatpickr.AbstractFlatpickrConfig = AbstractFlatpickrConfig;
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                Flatpickr.ErrorCodes = {
                    FailSetLocale: 'OSUI-PRO-02001',
                };
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var Enum;
                (function (Enum) {
                    let Attribute;
                    (function (Attribute) {
                        Attribute["DefaultAriaLabel"] = "Select a date.";
                    })(Attribute = Enum.Attribute || (Enum.Attribute = {}));
                    let CssClasses;
                    (function (CssClasses) {
                        CssClasses["AccessibilityContainerInfo"] = "osui-datepicker-a11y";
                        CssClasses["TodayBtn"] = "flatpickr-today-button";
                    })(CssClasses = Enum.CssClasses || (Enum.CssClasses = {}));
                    let CSSSelectors;
                    (function (CSSSelectors) {
                        CSSSelectors["DatepickerNotValid"] = "osui-datepicker .not-valid + .input";
                    })(CSSSelectors = Enum.CSSSelectors || (Enum.CSSSelectors = {}));
                    let DisableDate;
                    (function (DisableDate) {
                        DisableDate["Weekdays"] = "Weekdays";
                    })(DisableDate = Enum.DisableDate || (Enum.DisableDate = {}));
                })(Enum = Flatpickr.Enum || (Flatpickr.Enum = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var Factory;
                (function (Factory) {
                    function NewFlatpickr(datePickerId, mode, configs) {
                        let _flatpickrItem = null;
                        switch (mode) {
                            case OSFramework.OSUI.Patterns.DatePicker.Enum.Mode.Single:
                                _flatpickrItem = new Providers.OSUI.Datepicker.Flatpickr.SingleDate.OSUIFlatpickrSingleDate(datePickerId, JSON.parse(configs));
                                break;
                            case OSFramework.OSUI.Patterns.DatePicker.Enum.Mode.Range:
                                _flatpickrItem = new Providers.OSUI.Datepicker.Flatpickr.RangeDate.OSUIFlatpickrRangeDate(datePickerId, JSON.parse(configs));
                                break;
                            default:
                                throw new Error(`There is no Flatpickr of ${mode} type`);
                        }
                        return _flatpickrItem;
                    }
                    Factory.NewFlatpickr = NewFlatpickr;
                })(Factory = Flatpickr.Factory || (Flatpickr.Factory = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var RangeDate;
                (function (RangeDate) {
                    var Enum;
                    (function (Enum) {
                        let Properties;
                        (function (Properties) {
                            Properties["InitialEndDate"] = "InitialEndDate";
                            Properties["InitialStartDate"] = "InitialStartDate";
                        })(Properties = Enum.Properties || (Enum.Properties = {}));
                    })(Enum = RangeDate.Enum || (RangeDate.Enum = {}));
                })(RangeDate = Flatpickr.RangeDate || (Flatpickr.RangeDate = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var RangeDate;
                (function (RangeDate) {
                    class OSUIFlatpickrRangeDate extends Flatpickr.AbstractFlatpickr {
                        constructor(uniqueId, configs) {
                            super(uniqueId, new RangeDate.FlatpickrRangeDateConfig(configs));
                        }
                        _onUpdateDateFormat() {
                            if (this.provider.selectedDates.length > 0) {
                                this.configs.InitialStartDate = this.provider.formatDate(this.provider.selectedDates[0], this.flatpickrOpts.dateFormat);
                                if (this.provider.selectedDates[1]) {
                                    this.configs.InitialEndDate = this.provider.formatDate(this.provider.selectedDates[1], this.flatpickrOpts.dateFormat);
                                }
                            }
                            this.prepareToAndRedraw();
                        }
                        _updateInitialStartAndEndDates() {
                            if (this.configs.InitialStartDate !== undefined &&
                                this.configs.InitialEndDate !== undefined &&
                                OSFramework.OSUI.Helper.Dates.IsBeforeThan(this.configs.InitialStartDate, this.configs.InitialEndDate) === false) {
                                console.error(`Given StartDate:'${this.provider.formatDate(this.configs.InitialStartDate, this.configs.ServerDateFormat)}' can not be greater than given EndDate:'${this.provider.formatDate(this.configs.InitialEndDate, this.configs.ServerDateFormat)}'.`);
                            }
                            else {
                                this.prepareToAndRedraw();
                            }
                        }
                        onDateSelectedEvent(selectedDates) {
                            const _selectedDate = [];
                            if (selectedDates.length > 0) {
                                _selectedDate[0] = this.provider.formatDate(selectedDates[0], this.flatpickrOpts.dateFormat);
                                if (selectedDates[1]) {
                                    _selectedDate[1] = this.provider.formatDate(selectedDates[1], this.flatpickrOpts.dateFormat);
                                }
                            }
                            if (selectedDates.length === 0 || selectedDates.length === 2) {
                                OSFramework.OSUI.Helper.Dom.SetInputValue(this.datePickerPlatformInputElem, this.flatpickrInputElem.value);
                                this.triggerPlatformEventCallback(this.onSelectedCallbackEvent, _selectedDate[0], _selectedDate[1]);
                            }
                        }
                        todayBtnClick(event) {
                            event.preventDefault();
                            this.jumpIntoToday();
                        }
                        updatePlatformInputAttrs() {
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(this.datePickerPlatformInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Type, OSFramework.OSUI.GlobalEnum.InputTypeAttr.Text);
                        }
                        build() {
                            super.build();
                            this.prepareConfigs();
                            this.finishBuild();
                        }
                        changeProperty(propertyName, propertyValue) {
                            super.changeProperty(propertyName, propertyValue);
                            if (this.isBuilt) {
                                switch (propertyName) {
                                    case OSFramework.OSUI.Patterns.DatePicker.Enum.Properties.DateFormat:
                                        this._onUpdateDateFormat();
                                        break;
                                    case RangeDate.Enum.Properties.InitialEndDate:
                                    case RangeDate.Enum.Properties.InitialStartDate:
                                        this._updateInitialStartAndEndDates();
                                        break;
                                }
                            }
                        }
                        toggleNativeBehavior() {
                            console.log(OSFramework.OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                        }
                        updateInitialDate(startDate, endDate) {
                            if (OSFramework.OSUI.Helper.Dates.IsNull(startDate) === false &&
                                OSFramework.OSUI.Helper.Dates.IsNull(endDate) === false &&
                                this.datePickerPlatformInputElem.disabled === false) {
                                this.configs.InitialStartDate = startDate;
                                this.configs.InitialEndDate = endDate;
                                if (OSFramework.OSUI.Helper.Dates.IsBeforeThan(startDate, endDate)) {
                                    this.prepareToAndRedraw();
                                }
                                else {
                                    console.error(`Given StartDate:'${this.provider.formatDate(this.configs.InitialStartDate, this.configs.ServerDateFormat)}' can not be greater than given EndDate:'${this.provider.formatDate(this.configs.InitialEndDate, this.configs.ServerDateFormat)}'.`);
                                }
                            }
                        }
                    }
                    RangeDate.OSUIFlatpickrRangeDate = OSUIFlatpickrRangeDate;
                })(RangeDate = Flatpickr.RangeDate || (Flatpickr.RangeDate = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var RangeDate;
                (function (RangeDate) {
                    class FlatpickrRangeDateConfig extends Flatpickr.AbstractFlatpickrConfig {
                        constructor(config) {
                            super(config);
                            this.CalendarMode = OSFramework.OSUI.Patterns.DatePicker.Enum.Mode.Range;
                        }
                        _setDefaultDate() {
                            if (OSFramework.OSUI.Helper.Dates.IsNull(this.InitialStartDate)) {
                                this.InitialStartDate = undefined;
                            }
                            if (OSFramework.OSUI.Helper.Dates.IsNull(this.InitialEndDate)) {
                                this.InitialEndDate = undefined;
                            }
                            if (this.InitialEndDate !== undefined &&
                                this.InitialStartDate !== undefined &&
                                OSFramework.OSUI.Helper.Dates.IsBeforeThan(this.InitialStartDate, this.InitialEndDate) === false) {
                                throw new Error(`StartDate '${this.InitialStartDate}' can't be after EndDate '${this.InitialEndDate}'`);
                            }
                            return [this.InitialStartDate, this.InitialEndDate];
                        }
                        getProviderConfig() {
                            const flatpickrRangeDateOpts = {
                                defaultDate: this._setDefaultDate(),
                                mode: OSFramework.OSUI.Patterns.DatePicker.Enum.Mode.Range,
                            };
                            return this.mergeConfigs(super.getProviderConfig(), flatpickrRangeDateOpts, this.providerExtendedOptions);
                        }
                    }
                    RangeDate.FlatpickrRangeDateConfig = FlatpickrRangeDateConfig;
                })(RangeDate = Flatpickr.RangeDate || (Flatpickr.RangeDate = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var SingleDate;
                (function (SingleDate) {
                    var Enum;
                    (function (Enum) {
                        let Properties;
                        (function (Properties) {
                            Properties["InitialDate"] = "InitialDate";
                        })(Properties = Enum.Properties || (Enum.Properties = {}));
                    })(Enum = SingleDate.Enum || (SingleDate.Enum = {}));
                })(SingleDate = Flatpickr.SingleDate || (Flatpickr.SingleDate = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var SingleDate;
                (function (SingleDate) {
                    class OSUIFlatpickrSingleDate extends Flatpickr.AbstractFlatpickr {
                        constructor(uniqueId, configs) {
                            super(uniqueId, new SingleDate.FlatpickrSingleDateConfig(configs));
                            this._isUpdatedInitialDateByClientAction = false;
                        }
                        _checkInitialDate() {
                            let clearPlatformInput = false;
                            if (OSFramework.OSUI.Helper.Dates.IsNull(this.configs.InitialDate)) {
                                if (this.datePickerPlatformInputElem.value !== OSFramework.OSUI.Constants.EmptyString &&
                                    OSFramework.OSUI.Helper.Dates.IsValid(this.datePickerPlatformInputElem.value)) {
                                    this.configs.InitialDate = OSFramework.OSUI.Helper.Dates.NormalizeDate(this.datePickerPlatformInputElem.value);
                                }
                                else {
                                    clearPlatformInput = true;
                                }
                            }
                            else if (this.datePickerPlatformInputElem.value !== OSFramework.OSUI.Constants.EmptyString) {
                                clearPlatformInput = true;
                            }
                            if (clearPlatformInput) {
                                OSFramework.OSUI.Helper.Dom.Attribute.Set(this.datePickerPlatformInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Value, OSFramework.OSUI.Constants.EmptyString);
                            }
                            this.prepareConfigs();
                        }
                        onDateSelectedEvent(selectedDates) {
                            let _selectedDate = '';
                            if (selectedDates.length > 0) {
                                _selectedDate = this.provider.formatDate(selectedDates[0], this.provider.config.enableTime ? 'Y-m-d H:i:S' : 'Y-m-d');
                            }
                            OSFramework.OSUI.Helper.Dom.SetInputValue(this.datePickerPlatformInputElem, _selectedDate);
                            if (this._isUpdatedInitialDateByClientAction === false) {
                                this.triggerPlatformEventCallback(this.onSelectedCallbackEvent, _selectedDate);
                            }
                            this._isUpdatedInitialDateByClientAction = false;
                        }
                        prepareToAndRedraw() {
                            this._isUpdatedInitialDateByClientAction = false;
                            super.prepareToAndRedraw();
                        }
                        todayBtnClick(event) {
                            event.preventDefault();
                            this.provider.setDate(this.provider.now, true);
                            this.jumpIntoToday();
                        }
                        updatePlatformInputAttrs() {
                            const dateType = this.configs.TimeFormat === OSFramework.OSUI.Patterns.DatePicker.Enum.TimeFormatMode.Disable
                                ? OSFramework.OSUI.GlobalEnum.InputTypeAttr.Date
                                : OSFramework.OSUI.GlobalEnum.InputTypeAttr.DateTime;
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(this.datePickerPlatformInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Type, dateType);
                        }
                        build() {
                            super.build();
                            this._checkInitialDate();
                            this.finishBuild();
                        }
                        changeProperty(propertyName, propertyValue) {
                            var _a;
                            let redrawAtInitialDateChange = false;
                            if (propertyName === SingleDate.Enum.Properties.InitialDate) {
                                const newDateValue = propertyValue;
                                const providerSelectedDate = ((_a = this.provider) === null || _a === void 0 ? void 0 : _a.selectedDates.length) > 0
                                    ? new Date(this.provider.selectedDates[0])
                                    : undefined;
                                if (providerSelectedDate === undefined &&
                                    OSFramework.OSUI.Helper.Dates.IsNull(newDateValue) === false) {
                                    redrawAtInitialDateChange = true;
                                }
                                else if (providerSelectedDate !== undefined &&
                                    (providerSelectedDate === null || providerSelectedDate === void 0 ? void 0 : providerSelectedDate.getTime()) !== newDateValue.getTime()) {
                                    redrawAtInitialDateChange = true;
                                }
                            }
                            super.changeProperty(propertyName, propertyValue);
                            if (this.isBuilt) {
                                switch (propertyName) {
                                    case OSFramework.OSUI.Patterns.DatePicker.Enum.Properties.DateFormat:
                                        if (this.provider.selectedDates.length > 0) {
                                            this.configs.InitialDate = this.provider.formatDate(this.provider.selectedDates[0], this.flatpickrOpts.dateFormat);
                                        }
                                        this.prepareToAndRedraw();
                                        break;
                                    case SingleDate.Enum.Properties.InitialDate:
                                        if (redrawAtInitialDateChange) {
                                            this.prepareToAndRedraw();
                                        }
                                        break;
                                    case OSFramework.OSUI.Patterns.DatePicker.Enum.Properties.TimeFormat:
                                        this.prepareToAndRedraw();
                                        break;
                                }
                            }
                        }
                        toggleNativeBehavior(isNative) {
                            if (this.configs.DisableMobile !== !isNative) {
                                this.configs.DisableMobile = !isNative;
                                this.prepareToAndRedraw();
                            }
                        }
                        updateInitialDate(value) {
                            if (this.datePickerPlatformInputElem.disabled === false) {
                                this._isUpdatedInitialDateByClientAction = true;
                                this.configs.InitialDate = value;
                                OSFramework.OSUI.Helper.Dom.SetInputValue(this.datePickerPlatformInputElem, this.provider.formatDate(value, this.flatpickrOpts.dateFormat));
                                this.prepareToAndRedraw();
                            }
                        }
                    }
                    SingleDate.OSUIFlatpickrSingleDate = OSUIFlatpickrSingleDate;
                })(SingleDate = Flatpickr.SingleDate || (Flatpickr.SingleDate = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var SingleDate;
                (function (SingleDate) {
                    class FlatpickrSingleDateConfig extends Flatpickr.AbstractFlatpickrConfig {
                        constructor(config) {
                            super(config);
                            this.CalendarMode = OSFramework.OSUI.Patterns.DatePicker.Enum.Mode.Single;
                        }
                        getProviderConfig() {
                            const flatpickrSingleDateOpts = {
                                defaultDate: OSFramework.OSUI.Helper.Dates.IsNull(this.InitialDate) ? undefined : this.InitialDate,
                                mode: OSFramework.OSUI.Patterns.DatePicker.Enum.Mode.Single,
                                enableTime: this.TimeFormat !== OSFramework.OSUI.Patterns.DatePicker.Enum.TimeFormatMode.Disable,
                                onChange: this.OnChange,
                            };
                            return this.mergeConfigs(super.getProviderConfig(), flatpickrSingleDateOpts, this.providerExtendedOptions);
                        }
                    }
                    SingleDate.FlatpickrSingleDateConfig = FlatpickrSingleDateConfig;
                })(SingleDate = Flatpickr.SingleDate || (Flatpickr.SingleDate = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var l10ns;
                (function (l10ns) {
                    l10ns.A11yContainerInfo = {
                        ar: {
                            htmlTex: 'استخدم مفتاح السهم للأسفل لفتح التقويم؛ استخدم مفاتيح الأسهم للتنقل في أيام التقويم؛ استخدم مفتاح Ctrl أو Cmd + الأسهم اليمين أو اليسار للتنقل بين الشهور؛ استخدم مفتاح Ctrl أو Cmd + الأسهم للأعلى أو للأسفل للتنقل بين السنوات؛',
                        },
                        at: {
                            htmlTex: 'Verwenden Sie die Pfeiltaste nach unten, um den Kalender zu öffnen; Verwenden Sie die Pfeiltasten, um sich durch die Kalendertage zu bewegen; Verwenden Sie die Strg- oder Cmd-Taste + die rechte oder linke Pfeiltaste, um sich durch die Monate zu bewegen; Verwenden Sie die Strg- oder Cmd-Taste + die Pfeiltasten nach oben oder unten, um sich durch die Jahre zu bewegen;',
                        },
                        az: {
                            htmlTex: 'Təqvim açmaq üçün aşağı ox düyməsindən istifadə edin; Təqvim gününü gəzmək üçün aşağı və ya yuxarı ox düymələrindən istifadə edin; Aylar arasında gəzmək üçün Ctrl və ya Cmd + sağ və ya sol ox düymələrindən istifadə edin; İllər arasında gəzmək üçün Ctrl və ya Cmd + yuxarı və ya aşağı ox düymələrindən istifadə edin;',
                        },
                        be: {
                            htmlTex: 'Выкарыстоўвайце клавішу стрэлкі ўніз, каб адкрыць каляндар; Выкарыстоўвайце стрэлкі для навігацыі па днях каляндара; Выкарыстоўвайце клавішу Ctrl або Cmd + стрэлкі ўправа або ўлева для навігацыі па месяцах; Выкарыстоўвайце клавішу Ctrl або Cmd + стрэлкі ўверх або ўніз для навігацыі па гадах;',
                        },
                        bg: {
                            htmlTex: 'Използвайте клавиша със стрелка надолу, за да отворите календара; Използвайте стрелките за да навигирате през дните в календара; Използвайте Ctrl или Cmd + стрелка надясно или наляво, за да навигирате през месеците; Използвайте Ctrl или Cmd + стрелка нагоре или надолу, за да навигирате през годините;',
                        },
                        bn: {
                            htmlTex: 'ক্যালেন্ডার খোলার জন্য ডাউন অ্যারো কি ব্যবহার করুন; ক্যালেন্ডারের দিনগুলি নেভিগেট করতে এরো কি ব্যবহার করুন; মাসের মধ্যে নেভিগেট করতে Ctrl বা Cmd + ডান বা বাম অ্যারো কি ব্যবহার করুন; বছরের মধ্যে নেভিগেট করতে Ctrl বা Cmd + উপর বা নিচে অ্যারো কি ব্যবহার করুন;',
                        },
                        bs: {
                            htmlTex: 'Koristite strelicu prema dolje za otvaranje kalendara; Koristite strelice za navigaciju kroz dane u kalendaru; Koristite Ctrl ili Cmd + desnu ili lijevu strelicu za navigaciju kroz mjesece; Koristite Ctrl ili Cmd + strelicu prema gore ili prema dolje za navigaciju kroz godine;',
                        },
                        ca: {
                            htmlTex: 'Utilitzeu la tecla de la fletxa cap avall per obrir el calendari; Utilitzeu les fletxes per navegar pels dies del calendari; Utilitzeu Ctrl o Cmd + la fletxa de dreta o esquerra per navegar pels mesos; Utilitzeu Ctrl o Cmd + la fletxa cap amunt o cap avall per navegar pels anys;',
                        },
                        cat: {
                            htmlTex: 'Utilitzeu la tecla de la fletxa cap avall per obrir el calendari; Utilitzeu les tecles de la fletxa per navegar pels dies del calendari; Utilitzeu cmd o ctrl + tecla de la fletxa dreta o esquerra per navegar pels mesos; Utilitzeu cmd o ctrl + tecla de la fletxa cap amunt o cap avall per navegar pels anys;',
                        },
                        ckb: {
                            htmlTex: 'ئەم توندوتان بەکاربهێنە بۆ کردنەوەی ڕۆژنامە; توندوتانی تیر بۆ ناوی ڕۆژەکانی ڕۆژنامە بکەن; دوگمەی cmd یان ctrl + توندوی ئەستوو یان چەپ بۆ ناوی مانگەکان بکەن; دوگمەی cmd یان ctrl + توندوی سەرەوە یان خوار بۆ ناوی ساڵەکان بکەن;',
                        },
                        cs: {
                            htmlTex: 'Použijte klávesu šipka dolů k otevření kalendáře; Použijte šipky k navigaci mezi dny v kalendáři; Použijte klávesu Ctrl nebo Cmd + šipky vpravo nebo vlevo k navigaci mezi měsíci; Použijte klávesu Ctrl nebo Cmd + šipky nahoru nebo dolů k navigaci mezi roky;',
                        },
                        cy: {
                            htmlTex: 'Defnyddiwch y botwm saeth i lawr i agor y calendr; Defnyddiwch y bysellau i lywio drwy ddyddiau calendr; Defnyddiwch Ctrl neu Cmd + y bysellau de neu lafur i lywio drwy fisoedd; Defnyddiwch Ctrl neu Cmd + y bysellau i fyny neu i lawr i lywio drwy flynyddoedd;',
                        },
                        da: {
                            htmlTex: 'Brug pil ned for at åbne kalenderen; Brug piletasterne til at navigere gennem kalenderens dage; Brug Ctrl eller Cmd + højre eller venstre pil for at navigere gennem månederne; Brug Ctrl eller Cmd + op eller ned pilene for at navigere gennem årene;',
                        },
                        de: {
                            htmlTex: 'Verwenden Sie die Pfeiltaste nach unten, um den Kalender zu öffnen; Verwenden Sie die Pfeiltasten, um durch die Kalendertage zu navigieren; Verwenden Sie die Befehlstaste oder Strg + Pfeiltaste rechts oder links, um durch die Monate zu navigieren; Verwenden Sie die Befehlstaste oder Strg + Pfeiltaste nach oben oder unten, um durch die Jahre zu navigieren;',
                        },
                        en: {
                            htmlTex: 'Use arrow down key to open the calendar; Use arrow keys to navigate through calendar days; Use cmd or ctrl + right or left arrow keys to navigate through months; Use cmd or ctrl + up or down arrow keys to navigate through years;',
                        },
                        eo: {
                            htmlTex: 'Uzu la malsupran sago-butonon por malfermi la kalendaron; Uzu sago-butonojn por navigi tra kalendaraj tagoj; Uzu cmd aŭ ctrl + dekstren aŭ maldekstren sago-butonojn por navigi tra monatoj; Uzu cmd aŭ ctrl + supren aŭ malsupren sago-butonojn por navigi tra jaroj;',
                        },
                        es: {
                            htmlTex: 'Utiliza la tecla de flecha hacia abajo para abrir el calendario; Utiliza las teclas de flecha para navegar por los días del calendario; Utiliza cmd o ctrl + teclas de flecha derecha o izquierda para navegar por los meses; Utiliza cmd o ctrl + teclas de flecha arriba o abajo para navegar por los años;',
                        },
                        et: {
                            htmlTex: 'Kasutage allanoolt, et avada kalender; Kasutage nooleklahve kalendripäevade sirvimiseks; Kasutage käsku või ctrl + parema või vasaku nooleklahvi, et sirvida kuude vahel; Kasutage käsku või ctrl + üles või alla nooleklahvi, et sirvida aastate vahel;',
                        },
                        fa: {
                            htmlTex: 'از کلید پایین فشار دهید تا تقویم باز شود؛ از کلید‌های پایین برای ناوبری در ایام تقویم استفاده کنید؛ از کلیدهای cmd یا ctrl + راست یا چپ برای ناوبری در ماه‌ها استفاده کنید؛ از کلیدهای cmd یا ctrl + پایین یا بالا برای ناوبری در سال‌ها استفاده کنید؛',
                        },
                        fi: {
                            htmlTex: 'Käytä nuolinäppäintä alentaaksesi kalenterin; Käytä nuolinäppäimiä navigoidaksesi kalenterin päivien läpi; Käytä cmd- tai ctrl-näppäintä ja nuolinäppäimiä oikealle tai vasemmalle navigoidaksesi kuukausien läpi; Käytä cmd- tai ctrl-näppäintä ja nuolinäppäimiä ylös tai alas navigoidaksesi vuosien läpi;',
                        },
                        fo: {
                            htmlTex: 'Brúk niður píl til at opna kalendara; Brúk niður pílar til at navigera ímillum kalenderdagar; Brúk cmd ella ctrl + høgri ella vinstri niður pílar til at navigera ímillum mánaðir; Brúk cmd ella ctrl + upp ella niður pílar til at navigera ímillum ár;',
                        },
                        fr: {
                            htmlTex: 'Utilisez la touche flèche vers le bas pour ouvrir le calendrier ; Utilisez les touches flèches pour naviguer à travers les jours du calendrier ; Utilisez la touche cmd ou ctrl + flèche droite ou gauche pour naviguer à travers les mois ; Utilisez la touche cmd ou ctrl + flèche vers le haut ou vers le bas pour naviguer à travers les années ;',
                        },
                        ga: {
                            htmlTex: 'Úsáid an gcnaipe síos freisin chun an féilire a oscailt; Úsáid na siorafí siar chun bealach a aimsiú trí laethanta na féilire; Úsáid an cmd nó an cnaipe ctrl + saigheada ar dheis nó ar chlé chun aistriú trí mhíonna; Úsáid an cmd nó an cnaipe ctrl + saigheada suas nó síos chun aistriú trí blianta;',
                        },
                        gr: {
                            htmlTex: 'Χρησιμοποιήστε το πλήκτρο κάτω βέλους για να ανοίξετε το ημερολόγιο. Χρησιμοποιήστε τα πλήκτρα βέλους για να περιηγηθείτε στις ημέρες του ημερολογίου. Χρησιμοποιήστε το πλήκτρο cmd ή ctrl + δεξιά ή αριστερά βέλη για να περιηγηθείτε στους μήνες. Χρησιμοποιήστε το πλήκτρο cmd ή ctrl + πάνω ή κάτω βέλος για να περιηγηθείτε στα έτη.',
                        },
                        he: {
                            htmlTex: 'השתמש במקש חץ למטה כדי לפתוח את הלוח שנה; השתמש במקשי החץ לניווט בימי לוח השנה; השתמש במקש cmd או ctrl + מקשי החץ ימינה או שמאלה לניווט בין חודשים; השתמש במקש cmd או ctrl + מקשי החץ למעלה או למטה לניווט בין שנים;',
                        },
                        hi: {
                            htmlTex: 'कैलेंडर खोलने के लिए नीचे तीर का उपयोग करें; कैलेंडर के दिनों में नेविगेट करने के लिए तीर का उपयोग करें; महीनों में नेविगेट करने के लिए cmd या ctrl + दायां या बाएं तीर का उपयोग करें; वर्षों में नेविगेट करने के लिए cmd या ctrl + ऊपर या नीचे तीर का उपयोग करें;',
                        },
                        hr: {
                            htmlTex: 'Koristite tipku za strelicu prema dolje da biste otvorili kalendar; Koristite tipke sa strelicama za navigaciju kroz dane kalendara; Koristite tipke cmd ili ctrl + desno ili lijevo za navigaciju kroz mjesece; Koristite tipke cmd ili ctrl + gore ili dolje za navigaciju kroz godine;',
                        },
                        hu: {
                            htmlTex: 'Használja az "Arrow Down" gombot a naptár megnyitásához; Használja az "Arrow" gombokat a naptári napok közötti navigáláshoz; Használja a cmd vagy ctrl + jobb vagy bal nyilakat a hónapok közötti navigáláshoz; Használja a cmd vagy ctrl + fel vagy le nyilakat az évek közötti navigáláshoz;',
                        },
                        hy: {
                            htmlTex: 'Օգտագործեք "Ներքև" սլաքը թողնելու համար՝ օգտագործեք սլաքերը օրվանին նավահանելու համար։ օգտագործեք cmd կամ ctrl + աջ կամ ձախ սլաքերը ամսերի մեջ հանելու համար։ օգտագործեք cmd կամ ctrl + վերև կամ ներքև սլաքերը տասնամյա մեջ հանելու համար։',
                        },
                        id: {
                            htmlTex: 'Gunakan tombol panah bawah untuk membuka kalender; Gunakan tombol panah untuk menavigasi melalui hari-hari kalender; Gunakan cmd atau ctrl + tombol panah kanan atau kiri untuk menavigasi melalui bulan-bulan; Gunakan cmd atau ctrl + tombol panah atas atau bawah untuk menavigasi melalui tahun-tahun;',
                        },
                        is: {
                            htmlTex: 'Notaðu niður örvarna til að opna dagatalið; Notaðu örvarnar til að sigla í gegnum daga dagatalið; Notaðu cmd eða ctrl + hægri eða vinstri örvarnar til að sigla í gegnum mánaði; Notaðu cmd eða ctrl + upp eða niður örvarnar til að sigla í gegnum árin;',
                        },
                        it: {
                            htmlTex: 'Usa il tasto freccia giù per aprire il calendario; Usa le frecce per navigare attraverso i giorni del calendario; Usa cmd o ctrl + freccia destra o sinistra per navigare attraverso i mesi; Usa cmd o ctrl + freccia su o giù per navigare attraverso gli anni;',
                        },
                        ja: {
                            htmlTex: 'カレンダーを開くには矢印キーを下に使用してください;カレンダーの日付を移動するには矢印キーを使用してください;月を移動するにはcmdまたはctrlキーと右矢印キーまたは左矢印キーを使用してください;年を移動するにはcmdまたはctrlキーと上矢印キーまたは下矢印キーを使用してください;',
                        },
                        ka: {
                            htmlTex: 'გამოიყენეთ ქვევით მდგომარე ღილაკი კალენდრის გახსნისათვის; გამოიყენეთ კლავიში კალენდრის დღეებზე ნავიგაციისთვის; გამოიყენეთ cmd ან ctrl + მარჯვნაის ან მარცხნაის ღილაკები თვეების შესამოწმებლად; გამოიყენეთ cmd ან ctrl + ზემოთ ან ქვემოთ მდგარე ღილაკები წლების შესამოწმებლად;',
                        },
                        km: {
                            htmlTex: 'ប្រើព្រួញក្រាហ្វាសក្រាហ្វាសដើម្បីបើកប្រតិទិន; ប្រើព្រួញក្រាហ្វាសដើម្បីរុករុករបស់ថ្ងៃកូនក្នុងប្រតិទិន; ប្រើព្រួញ cmd ឬ ctrl + ព្រួញស្ដាំឬស្តាំខ្លីដើម្បីរុករុករបស់ខែ; ប្រើព្រួញ cmd ឬ ctrl + ព្រួញឡើងឬឡើងដើម្បីរុករុករបស់ឆ្នាំ;',
                        },
                        ko: {
                            htmlTex: '달력을 열려면 아래쪽 화살표 키를 사용하십시오. 달력 날짜를 탐색하려면 화살표 키를 사용하십시오. 월을 탐색하려면 cmd 또는 ctrl + 오른쪽 또는 왼쪽 화살표 키를 사용하십시오. 년도를 탐색하려면 cmd 또는 ctrl + 위쪽 또는 아래쪽 화살표 키를 사용하십시오.',
                        },
                        kz: {
                            htmlTex: 'Қалендарды ашу үшін жоғары жақ көрсеткінді пайдаланыңыз; Календардың күндері арасында навигациялау үшін көрсеткінді пайдаланыңыз; Айдарды навигациялау үшін cmd немесе ctrl + оң немесе сол көрсеткінді пайдаланыңыз; Жылдарды навигациялау үшін cmd немесе ctrl + жоғары немесе төмен көрсеткінді пайдаланыңыз;',
                        },
                        lt: {
                            htmlTex: 'Naudokite rodyklės žemyn klavišą, kad atidarytumėte kalendorių; Naudokite rodykles, kad naršytumėte kalendoriaus dienas; Naudokite cmd arba ctrl + dešinįjį arba kairįjį rodyklę, kad naršytumėte mėnesius; Naudokite cmd arba ctrl + aukštyn arba žemyn rodyklę, kad naršytumėte metus;',
                        },
                        lv: {
                            htmlTex: 'Izmantojiet bultiņu uz leju taustiņu, lai atvērtu kalendāru; Izmantojiet bultiņas, lai navigētu caur kalendāra dienām; Izmantojiet cmd vai ctrl + pa labi vai pa kreisi bultiņas, lai navigētu mēnešos; Izmantojiet cmd vai ctrl + uz augšu vai uz leju bultiņas, lai navigētu gados;',
                        },
                        mk: {
                            htmlTex: 'Користете го копчето со стрелка надолу за да отворите календар; Користете стрелките за да навигирате низ деновите во календарот; Користете го копчето cmd или ctrl + стрелка десно или лево за да навигирате низ месеци; Користете го копчето cmd или ctrl + стрелка горе или долу за да навигирате низ годините;',
                        },
                        mn: {
                            htmlTex: 'Календарыг нээхийн тулд доошилтуур товчлуурыг ашиглана уу; Календарын өдөрүүдэд хүрэхийн тулд доошилтуур товчлуурыг ашиглана уу; Саруудад нэвтрүүлгэн тохируулахын тулд cmd эсвэл ctrl + баруун эсвэл зүүн доошилтуур товчлуурыг ашиглана уу; Жилийг нэвтрүүлгэн тохируулахын тулд cmd эсвэл ctrl + доошилтуур товчлуурыг дээш эсвэл доошилтуур ашиглана уу;',
                        },
                        ms: {
                            htmlTex: 'Guna pakai ke bawah panah untuk membuka kalendar; Guna ke bawah panah untuk melayari hari-hari kalendar; Guna cmd atau ctrl + panah ke kanan atau kiri untuk melayari bulan; Guna cmd atau ctrl + panah ke atas atau bawah untuk melayari tahun;',
                        },
                        my: {
                            htmlTex: 'ကော်နာနှင့် ရွှေတိုးကို ဖွင့်ပါ။ ကိုက်ဘ်လက်များကို ရှာဖွေရန်အသုံးပြုပါ။ ကိုနှင့် ctrl သို့မဟုတ်အမြင်ကို ညာဘက်သို့မဟုတ် ညာမြက်သို့မှစားရင်းသားကို ရှာဖွေရန်အသုံးပြုပါ။',
                        },
                        nl: {
                            htmlTex: 'Gebruik de pijl-omlaag-toets om de kalender te openen; Gebruik de pijltoetsen om door kalenderdagen te navigeren; Gebruik cmd of ctrl + rechter- of linkerpijltoetsen om door maanden te navigeren; Gebruik cmd of ctrl + omhoog- of omlaagpijltoetsen om door jaren te navigeren;',
                        },
                        nb: {
                            htmlTex: 'Bruk piltasten ned for å åpne kalenderen; Bruk piltastene for å navigere gjennom kalenderens dager; Bruk cmd eller ctrl + høyre eller venstre piltast for å navigere gjennom månedene; Bruk cmd eller ctrl + opp eller ned piltast for å navigere gjennom årene;',
                        },
                        nn: {
                            htmlTex: 'Bruk piltasten ned for å opne kalenderen; Bruk piltastane for å navigere gjennom kalenderdagar; Bruk cmd eller ctrl + høgre eller venstre piltast for å navigere gjennom månader; Bruk cmd eller ctrl + opp eller ned piltast for å navigere gjennom år;',
                        },
                        no: {
                            htmlTex: 'Bruk piltasten ned for å åpne kalenderen; Bruk piltastene for å navigere gjennom kalenderdager; Bruk cmd eller ctrl + høyre eller venstre piltast for å navigere gjennom månedene; Bruk cmd eller ctrl + opp eller ned piltast for å navigere gjennom år;',
                        },
                        pa: {
                            htmlTex: 'ਕੈਲੰਡਰ ਖੋਲਣ ਲਈ ਹੇਠਾਂ ਆਰੋ ਕੁੱਝ ਕਰੋ; ਕੈਲੰਡਰ ਦਿਨਾਂ ਵਿੱਚ ਸਿਰਣ ਲਈ ਆਰੋ ਕੁੱਝ ਕਰੋ; ਮਹੀਨਿਆਂ ਵਿੱਚ ਸਿਰਣ ਲਈ cmd ਜਾਂ ctrl + ਸੱਜੇ ਜਾਂ ਖੱਬੇ ਆਰੋ ਕੁੱਝ ਕਰੋ; ਸਾਲਾਂ ਵਿੱਚ ਸਿਰਣ ਲਈ cmd ਜਾਂ ctrl + ਉੱਤੇ ਜਾਂ ਹੇਠੇ ਆਰੋ ਕੁੱਝ ਕਰੋ;',
                        },
                        pl: {
                            htmlTex: 'Użyj klawisza strzałki w dół, aby otworzyć kalendarz; Użyj strzałek, aby nawigować przez dni kalendarza; Użyj klawiszy cmd lub ctrl + strzałka w prawo lub lewo, aby nawigować między miesiącami; Użyj klawiszy cmd lub ctrl + strzałka w górę lub w dół, aby nawigować między latami;',
                        },
                        pt: {
                            htmlTex: 'Use a tecla de seta para baixo para abrir o calendário; Use as teclas de seta para navegar pelos dias do calendário; Use cmd ou ctrl + seta para a direita ou esquerda para navegar pelos meses; Use cmd ou ctrl + seta para cima ou para baixo para navegar pelos anos;',
                        },
                        ro: {
                            htmlTex: 'Utilizați tasta săgeată în jos pentru a deschide calendarul; Utilizați tastele săgeată pentru a naviga prin zilele calendarului; Utilizați cmd sau ctrl + săgeată dreapta sau stânga pentru a naviga prin lunile calendarului; Utilizați cmd sau ctrl + săgeată sus sau jos pentru a naviga prin ani;',
                        },
                        ru: {
                            htmlTex: 'Используйте клавишу стрелки вниз, чтобы открыть календарь; Используйте стрелки для навигации по дням календаря; Используйте клавиши cmd или ctrl + стрелка вправо или влево для навигации между месяцами; Используйте клавиши cmd или ctrl + стрелка вверх или вниз для навигации по годам;',
                        },
                        si: {
                            htmlTex: 'දිවය විවෘත කිරීමට දවස කිරීම සඳහා ඊරාව් මෝල භාරතීය කරන්න; දින සඳහා ඊරා කිරීම සඳහා ඊරා මෝල භාරතීය කරන්න; මාමාන සඳහා cmd හෝ ctrl + වමට හෝ දකුණු ඊරා කිරීම සඳහා; වරාය සඳහා cmd හෝ ctrl + ඉහළ හෝ අසල ඊරා කිරීම සඳහා ඊරා කිරීමට භාරතීය කරන්න;',
                        },
                        sk: {
                            htmlTex: 'Použite kláves smerom nadol na otvorenie kalendára; Použite šípky smerom hore a dole na navigáciu medzi dňami v kalendári; Použite klávesy cmd alebo ctrl + vpravo alebo vľavo na navigáciu medzi mesiacmi; Použite klávesy cmd alebo ctrl + smerom hore alebo dolu na navigáciu medzi rokmi;',
                        },
                        sl: {
                            htmlTex: 'Uporabite tipko s puščico dol za odpiranje koledarja; Uporabite puščične tipke za krmarjenje med dnevi v koledarju; Uporabite tipki cmd ali ctrl + desno ali levo puščico za krmarjenje med meseci; Uporabite tipki cmd ali ctrl + puščico gor ali dol za krmarjenje med leti;',
                        },
                        sq: {
                            htmlTex: 'Përdorni tastierën me shigjetën poshtë për të hapur kalendarin; Përdorni tastierën me shigjetën lart dhe poshtë për të lëvizur nëpër ditët e kalendarit; Përdorni tastierën cmd ose ctrl + majtas ose djathtas për të lëvizur nëpër muajt; Përdorni tastierën cmd ose ctrl + shigjetën lart ose poshtë për të lëvizur nëpër vitet;',
                        },
                        sr: {
                            htmlTex: 'Koristite taster strelica nadole da biste otvorili kalendar; Koristite tasteri strelica za navigaciju kroz dane kalendara; Koristite cmd ili ctrl + strelice desno ili levo za navigaciju kroz mesece; Koristite cmd ili ctrl + strelice gore ili dole za navigaciju kroz godine;',
                        },
                        sv: {
                            htmlTex: 'Använd piltangenten nedåt för att öppna kalendern; Använd piltangenterna för att navigera genom kalenderdagar; Använd cmd eller ctrl + höger eller vänster piltangent för att navigera genom månader; Använd cmd eller ctrl + upp eller ner piltangent för att navigera genom år;',
                        },
                        th: {
                            htmlTex: 'ใช้ปุ่มลูกศรลงเพื่อเปิดปฏิทิน; ใช้ปุ่มลูกศรเพื่อนำทางผ่านวันที่ในปฏิทิน; ใช้ cmd หรือ ctrl + ปุ่มลูกศรขวาหรือซ้ายเพื่อนำทางผ่านเดือน; ใช้ cmd หรือ ctrl + ปุ่มลูกศรขึ้นหรือลงเพื่อนำทางผ่านปี;',
                        },
                        tr: {
                            htmlTex: 'Takvimi açmak için aşağı ok tuşunu kullanın; Takvim günleri arasında gezinmek için ok tuşlarını kullanın; Aylar arasında gezinmek için cmd veya ctrl + sağ veya sol ok tuşlarını kullanın; Yıllar arasında gezinmek için cmd veya ctrl + yukarı veya aşağı ok tuşlarını kullanın;',
                        },
                        uk: {
                            htmlTex: 'Використовуйте клавішу стрілка вниз, щоб відкрити календар; Використовуйте клавіші зі стрілкою, щоб переміщатися між днями календаря; Використовуйте клавіші cmd або ctrl + вправо або вліво, щоб переміщатися між місяцями; Використовуйте клавіші cmd або ctrl + стрілка вгору або вниз, щоб переміщатися між роками;',
                        },
                        uz: {
                            htmlTex: "Kalendar ochish uchun pastga yo'naltirish tugmasidan foydalaning; Kalendar kunlaridan o'tish uchun pastga va tepaga yo'naltirish tugmalari qo'llaniladi; Oy o'rtasida o'tish uchun cmd yoki ctrl + chap yoki o'ng oyoq tugmalaridan foydalaning; Yil o'rtasida o'tish uchun cmd yoki ctrl + tepaga yoki pastga yo'naltirish tugmalari qo'llaniladi;",
                        },
                        vn: {
                            htmlTex: 'Sử dụng phím mũi tên xuống để mở lịch; Sử dụng các phím mũi tên để điều hướng qua các ngày trong lịch; Sử dụng cmd hoặc ctrl + phím mũi tên phải hoặc trái để điều hướng qua các tháng; Sử dụng cmd hoặc ctrl + phím mũi tên lên hoặc xuống để điều hướng qua các năm;',
                        },
                        zh: {
                            htmlTex: '使用下箭头键打开日历; 使用箭头键在日历天数之间导航; 使用cmd或ctrl +右或左箭头键导航月份; 使用cmd或ctrl +上或下箭头键导航年份;',
                        },
                        zh_tw: {
                            htmlTex: '使用下箭頭鍵打開日曆; 使用箭頭鍵在日曆天數之間導航; 使用cmd或ctrl +右或左箭頭鍵導航月份; 使用cmd或ctrl +上或下箭頭鍵導航年份;',
                        },
                    };
                })(l10ns = Flatpickr.l10ns || (Flatpickr.l10ns = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Datepicker;
        (function (Datepicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var l10ns;
                (function (l10ns) {
                    l10ns.TodayBtn = {
                        ar: {
                            ariaLabel: 'انقر للانتقال إلى تاريخ اليوم',
                            title: 'اليوم',
                        },
                        at: {
                            ariaLabel: 'Klicken Sie hier, um zum heutigen Datum zu springen',
                            title: 'Heute',
                        },
                        az: {
                            ariaLabel: 'Bugünkü tarixə keçmək üçün bura klikləyin',
                            title: 'Bu gün',
                        },
                        be: {
                            ariaLabel: 'Націсніце тут, каб перайсці да сённяшняй даты',
                            title: 'сёння',
                        },
                        bg: {
                            ariaLabel: 'Щракнете тук, за да преминете към днешната дата',
                            title: 'Днес',
                        },
                        bn: {
                            ariaLabel: 'আজকের তারিখে যেতে এখানে ক্লিক করুন',
                            title: 'আজ',
                        },
                        bs: {
                            ariaLabel: 'Kliknite ovdje da skočite na današnji datum',
                            title: 'Danas',
                        },
                        ca: {
                            ariaLabel: "Feu clic aquí per saltar a la data d'avui",
                            title: 'Avui',
                        },
                        cat: {
                            ariaLabel: "Feu clic aquí per saltar a la data d'avui",
                            title: 'Avui',
                        },
                        ckb: {
                            ariaLabel: 'Li vir bikirtînin da ku hûn biçin roja îro',
                            title: 'Îro',
                        },
                        cs: {
                            ariaLabel: 'Kliknutím sem přejdete na dnešní datum',
                            title: 'Dnes',
                        },
                        cy: {
                            ariaLabel: "Cliciwch yma i neidio i'r dyddiad heddiw",
                            title: 'Heddiw',
                        },
                        da: {
                            ariaLabel: 'Klik her for at springe til dagens dato',
                            title: 'I dag',
                        },
                        de: {
                            ariaLabel: 'Klicken Sie hier, um zum heutigen Datum zu springen',
                            title: 'Heute',
                        },
                        eo: {
                            ariaLabel: 'Klaku ĉi tie por salti al la hodiaŭa dato',
                            title: 'Hodiaŭ',
                        },
                        es: {
                            ariaLabel: 'Haga clic para saltar a la fecha de hoy',
                            title: 'Hoy',
                        },
                        en: {
                            ariaLabel: 'Click to jump into today date',
                            title: 'Today',
                        },
                        et: {
                            ariaLabel: 'Tänasele kuupäevale liikumiseks klõpsake siin',
                            title: 'Täna',
                        },
                        fa: {
                            ariaLabel: 'برای رفتن به تاریخ امروز اینجا را کلیک کنید',
                            title: 'امروز',
                        },
                        fi: {
                            ariaLabel: 'Napsauta tästä siirtyäksesi tämän päivän päivämäärään',
                            title: 'Tänään',
                        },
                        fo: {
                            ariaLabel: 'Klicken Sie hier, um zum heutigen Datum zu springen',
                            title: 'Heute',
                        },
                        fr: {
                            ariaLabel: "Cliquez ici pour passer à la date d'aujourd'hui",
                            title: "Aujourd'hui",
                        },
                        ga: {
                            ariaLabel: 'Cliceáil anseo chun léim chuig dáta an lae inniu',
                            title: 'Inniu',
                        },
                        gr: {
                            ariaLabel: 'Κάντε κλικ εδώ για να μεταβείτε στη σημερινή ημερομηνία',
                            title: 'Σήμερα',
                        },
                        he: {
                            ariaLabel: 'לחץ כאן כדי לדלג לתאריך של היום',
                            title: 'היום',
                        },
                        hi: {
                            ariaLabel: 'आज की तारीख पर जाने के लिए यहां क्लिक करें',
                            title: 'आज',
                        },
                        hr: {
                            ariaLabel: 'Kliknite ovdje za skok na današnji datum',
                            title: 'Danas',
                        },
                        hu: {
                            ariaLabel: 'Kattintson ide, hogy a mai dátumra ugorjon',
                            title: 'Ma',
                        },
                        hy: {
                            ariaLabel: 'Սեղմեք այստեղ՝ այսօրվա օրվան անցնելու համար',
                            title: 'Այսօր',
                        },
                        id: {
                            ariaLabel: 'Klik di sini untuk melompat ke tanggal hari ini',
                            title: 'Hari ini',
                        },
                        is: {
                            ariaLabel: 'Smelltu hér til að fara á dagsetningu dagsins',
                            title: 'Í dag',
                        },
                        it: {
                            ariaLabel: 'Clicca per saltare alla data odierna',
                            title: 'Oggi',
                        },
                        ja: {
                            ariaLabel: '今日の日付にジャンプするには、ここをクリックしてください',
                            title: '今日',
                        },
                        ka: {
                            ariaLabel: 'დააწკაპუნეთ აქ დღევანდელ თარიღზე გადასასვლელად',
                            title: 'დღეს',
                        },
                        km: {
                            ariaLabel: 'សូមចុចទីនេះដើម្បីចូលទៅកាន់កាលបរិច្ឆេទថ្ងៃនេះ',
                            title: 'ថ្ងៃនេះ',
                        },
                        ko: {
                            ariaLabel: '오늘 날짜로 이동하려면 여기를 클릭하세요.',
                            title: '오늘',
                        },
                        kz: {
                            ariaLabel: 'Бүгінгі күнге өту үшін осы жерді басыңыз',
                            title: 'Бүгін',
                        },
                        lt: {
                            ariaLabel: 'Spustelėkite čia, kad pereitumėte prie šiandienos datos',
                            title: 'Šiandien',
                        },
                        lv: {
                            ariaLabel: 'Noklikšķiniet šeit, lai pārietu uz šodienas datumu',
                            title: 'Šodien',
                        },
                        mk: {
                            ariaLabel: 'Кликнете овде за да скокнете до денешниот датум',
                            title: 'Денес',
                        },
                        mn: {
                            ariaLabel: 'Өнөөдрийн огноо руу шилжихийн тулд энд дарна уу',
                            title: 'Өнөөдөр',
                        },
                        ms: {
                            ariaLabel: 'Klik di sini untuk melompat ke tarikh hari ini',
                            title: 'Hari ini',
                        },
                        my: {
                            ariaLabel: 'ယနေ့ရက်စွဲသို့ခုန်ရန် ဤနေရာကိုနှိပ်ပါ။',
                            title: 'ဒီနေ့',
                        },
                        nl: {
                            ariaLabel: 'Klik hier om naar de datum van vandaag te gaan',
                            title: 'Vandaag',
                        },
                        nb: {
                            ariaLabel: 'Klikk her for å hoppe til dagens dato',
                            title: 'I dag',
                        },
                        nn: {
                            ariaLabel: 'Klikk her for å hoppe til dagens dato',
                            title: 'I dag',
                        },
                        no: {
                            ariaLabel: 'Klikk her for å hoppe til dagens dato',
                            title: 'I dag',
                        },
                        pa: {
                            ariaLabel: "ਅੱਜ ਦੀ ਤਾਰੀਖ 'ਤੇ ਜਾਣ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ",
                            title: 'ਅੱਜ',
                        },
                        pl: {
                            ariaLabel: 'Kliknij tutaj, aby przejść do dzisiejszej daty',
                            title: 'Dziś',
                        },
                        pt: {
                            ariaLabel: 'Clique aqui para seleccionar a data de hoje.',
                            title: 'Hoje',
                        },
                        ro: {
                            ariaLabel: 'Faceți clic aici pentru a trece la data de astăzi',
                            title: 'Astăzi',
                        },
                        ru: {
                            ariaLabel: 'Нажмите здесь, чтобы перейти к сегодняшней дате',
                            title: 'Сегодня',
                        },
                        si: {
                            ariaLabel: 'අද දිනයට යාමට මෙතැන ක්ලික් කරන්න',
                            title: 'අද',
                        },
                        sk: {
                            ariaLabel: 'Kliknutím sem prejdete na dnešný dátum',
                            title: 'Dnes',
                        },
                        sl: {
                            ariaLabel: 'Kliknite tukaj za skok na današnji datum',
                            title: 'Danes',
                        },
                        sq: {
                            ariaLabel: 'Kliko këtu për të kaluar në datën e sotme',
                            title: 'Sot',
                        },
                        sr: {
                            ariaLabel: 'Кликните овде да бисте прешли на данашњи датум',
                            title: 'Данас',
                        },
                        sv: {
                            ariaLabel: 'Klicka här för att gå till dagens datum',
                            title: 'I dag',
                        },
                        th: {
                            ariaLabel: 'คลิกที่นี่เพื่อข้ามไปยังวันที่ของวันนี้',
                            title: 'ทุกวันนี้',
                        },
                        tr: {
                            ariaLabel: 'Bugünün tarihine atlamak için buraya tıklayın',
                            title: 'Bugün',
                        },
                        uk: {
                            ariaLabel: 'Натисніть тут, щоб перейти до сьогоднішньої дати',
                            title: 'Сьогодні',
                        },
                        uz: {
                            ariaLabel: "Bugungi sanaga o'tish uchun shu yerni bosing",
                            title: 'Bugun',
                        },
                        vn: {
                            ariaLabel: 'Bấm vào đây để chuyển sang ngày hôm nay',
                            title: 'Hôm nay',
                        },
                        zh: {
                            ariaLabel: '点击这里跳转到今天的日期',
                            title: '今天',
                        },
                        zh_tw: {
                            ariaLabel: '點擊這裡跳轉到今天的日期',
                            title: '今天',
                        },
                    };
                })(l10ns = Flatpickr.l10ns || (Flatpickr.l10ns = {}));
            })(Flatpickr = Datepicker.Flatpickr || (Datepicker.Flatpickr = {}));
        })(Datepicker = OSUI.Datepicker || (OSUI.Datepicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                class AbstractVirtualSelect extends OSFramework.OSUI.Patterns.Dropdown.AbstractDropdown {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                    }
                    _addErrorMessage(text) {
                        const errorMessageElement = OSFramework.OSUI.Helper.Dom.ClassSelector(this.selfElement.parentElement, VirtualSelect.Enum.CssClass.ErrorMessage);
                        if (errorMessageElement === undefined) {
                            const textContainer = document.createElement(OSFramework.OSUI.GlobalEnum.HTMLElement.Div);
                            textContainer.classList.add(VirtualSelect.Enum.CssClass.ErrorMessage);
                            textContainer.innerHTML = text;
                            this.selfElement.parentElement.appendChild(textContainer);
                        }
                    }
                    _manageAttributes() {
                        this.setA11YProperties();
                    }
                    _manageDisableStatus() {
                        if (this.configs.IsDisabled) {
                            this.provider.$ele.disable();
                        }
                        else {
                            this.provider.$ele.enable();
                        }
                    }
                    _onMouseUp(event) {
                        event.preventDefault();
                    }
                    _onOrientationChange() {
                        this.close();
                    }
                    _onSelectedOption() {
                        this.triggerPlatformEventCallback(this._platformEventSelectedOptCallback, this.getSelectedValues());
                    }
                    _onWindowResize() {
                        this.close();
                    }
                    _setDropdownProps() {
                        this.configs.ElementId = '#' + this.selfElement.id;
                        if (OSFramework.OSUI.Helper.DeviceInfo.IsMobileDevice) {
                            this.configs.PopupDropboxBreakpoint =
                                (window.innerWidth > window.innerHeight ? window.innerWidth : window.innerHeight) + 'px';
                        }
                    }
                    _setUpEvents() {
                        this.selfElement.addEventListener(VirtualSelect.Enum.Events.Change, this._onSelectedOptionEvent);
                        if (OSFramework.OSUI.Helper.DeviceInfo.GetBrowser() === OSFramework.OSUI.GlobalEnum.Browser.edge) {
                            this.selfElement.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.MouseUp, this._onMouseUpEvent);
                        }
                        if (OSFramework.OSUI.Helper.DeviceInfo.IsMobileDevice) {
                            OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.OrientationChange, this._eventOnOrientationChange);
                        }
                        else {
                            OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.WindowResize, this._eventOnWindowResize);
                        }
                    }
                    _unsetEvents() {
                        this.selfElement.removeEventListener(VirtualSelect.Enum.Events.Change, this._onSelectedOptionEvent);
                        this.selfElement.removeEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.MouseUp, this._onMouseUpEvent);
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.WindowResize, this._eventOnWindowResize);
                    }
                    createProviderInstance() {
                        this.provider = window.VirtualSelect.init(this.virtualselectOpts);
                        this.provider = Array.isArray(this.provider) ? this.provider[0] : this.provider;
                        this.virtualselectConfigs = this.provider.$ele;
                        this.provider.$dropboxContainer.setAttribute(OSFramework.OSUI.GlobalEnum.HTMLAttributes.Name, this.uniqueId);
                        if (OSFramework.OSUI.Helper.DeviceInfo.HasAccessibilityEnabled) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.provider.$dropboxContainer, OSFramework.OSUI.Constants.HasAccessibilityClass);
                        }
                        this.updateProviderEvents({
                            name: VirtualSelect.Enum.ProviderInfo.Name,
                            version: VirtualSelect.Enum.ProviderInfo.Version,
                            events: this.virtualselectConfigs,
                        });
                        this._manageAttributes();
                        const _bodyEvent = OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.events.get(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick);
                        if (_bodyEvent) {
                            this.selfElement.addEventListener(VirtualSelect.Enum.Events.BeforeOpen, () => {
                                _bodyEvent.disableBodyClickEvent();
                            });
                            this.selfElement.addEventListener(VirtualSelect.Enum.Events.BeforeClose, () => {
                                _bodyEvent.enableBodyClickEvent();
                            });
                        }
                        this.triggerPlatformInitializedEventCallback();
                    }
                    setA11YProperties() {
                        this.setHiddenInputWrapperAriaLabelVal();
                    }
                    setCallbacks() {
                        this._eventOnWindowResize = this._onWindowResize.bind(this);
                        this._eventOnOrientationChange = this._onOrientationChange.bind(this);
                        this._onMouseUpEvent = this._onMouseUp.bind(this);
                        this._onSelectedOptionEvent = this._onSelectedOption.bind(this);
                    }
                    setHtmlElements() {
                        console.log(OSFramework.OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    unsetCallbacks() {
                        this._eventOnWindowResize = undefined;
                        this._onSelectedOptionEvent = undefined;
                        this.virtualselectConfigs = undefined;
                        this.virtualselectOpts = undefined;
                        this.provider = undefined;
                        super.unsetCallbacks();
                    }
                    unsetHtmlElements() {
                        console.log(OSFramework.OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    build() {
                        super.build();
                        this._setDropdownProps();
                        this.setCallbacks();
                        this._setUpEvents();
                        this.prepareConfigs();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        this.virtualselectConfigs.close();
                        if ((propertyName === VirtualSelect.Enum.Properties.OptionsList || propertyName === VirtualSelect.Enum.Properties.StartingSelection) &&
                            typeof propertyValue === 'string') {
                            propertyValue = JSON.parse(propertyValue);
                        }
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case OSFramework.OSUI.Patterns.Dropdown.Enum.Properties.IsDisabled:
                                    this._manageDisableStatus();
                                    break;
                                case VirtualSelect.Enum.Properties.NoOptionsText:
                                case VirtualSelect.Enum.Properties.NoResultsText:
                                case VirtualSelect.Enum.Properties.OptionsList:
                                case VirtualSelect.Enum.Properties.Prompt:
                                case VirtualSelect.Enum.Properties.SearchPrompt:
                                    this.redraw();
                                    break;
                                case VirtualSelect.Enum.Properties.StartingSelection:
                                    this.setValue(propertyValue);
                                    break;
                            }
                        }
                    }
                    clear(silentOnChangedEvent = true) {
                        this.virtualselectConfigs.reset(false, silentOnChangedEvent);
                    }
                    close() {
                        if (this.provider.isOpened()) {
                            OSFramework.OSUI.Helper.AsyncInvocation(this.virtualselectConfigs.close.bind(this.virtualselectConfigs));
                        }
                    }
                    disable() {
                        if (this.configs.IsDisabled === false && this.provider !== undefined) {
                            this.configs.IsDisabled = true;
                            this.provider.$ele.disable();
                        }
                    }
                    dispose() {
                        if (this.isBuilt) {
                            if (Array.isArray(this.provider)) {
                                for (const element of this.provider) {
                                    element.destroy();
                                }
                            }
                            else {
                                this.provider.destroy();
                            }
                        }
                        this._unsetEvents();
                        this.unsetCallbacks();
                        super.dispose();
                    }
                    enable() {
                        if (this.configs.IsDisabled && this.provider !== undefined) {
                            this.configs.IsDisabled = false;
                            this.provider.$ele.enable();
                        }
                    }
                    getSelectedValues() {
                        let optionsSelected = this.getSelectedOptionsStructure();
                        if (optionsSelected !== undefined && optionsSelected.length > 0) {
                            optionsSelected = optionsSelected.map(function (option) {
                                return Object.assign({ group_name: option.customData && option.customData.group_name ? option.customData.group_name : '', description: option.customData && option.customData.description ? option.customData.description : '' }, option);
                            });
                            return JSON.stringify(optionsSelected);
                        }
                        return '';
                    }
                    open() {
                        OSFramework.OSUI.Helper.AsyncInvocation(this.virtualselectConfigs.open.bind(this.virtualselectConfigs));
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case VirtualSelect.Enum.Events.OnSelected:
                                if (this._platformEventSelectedOptCallback === undefined) {
                                    this._platformEventSelectedOptCallback = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                                break;
                        }
                    }
                    setHiddenInputWrapperAriaLabelVal(value) {
                        this.hiddenInputWrapperAriaLabelVal = value === undefined ? this.hiddenInputWrapperAriaLabelVal : value;
                        OSFramework.OSUI.Helper.A11Y.AriaLabel(this.provider.$wrapper, this.hiddenInputWrapperAriaLabelVal);
                    }
                    setProviderConfigs(newConfigs) {
                        this.configs.setExtensibilityConfigs(newConfigs);
                        this.redraw();
                        super.setProviderConfigs(newConfigs);
                    }
                    setValue(optionsToSelect, silentOnChangedEvent = true) {
                        OSFramework.OSUI.Helper.AsyncInvocation(() => {
                            const selectedValues = this.getSelectedOptionsStructure().map((value) => value.value) || [];
                            let valuesToSelect = [];
                            if (optionsToSelect.length > 0) {
                                if (this.virtualselectOpts.multiple)
                                    valuesToSelect = optionsToSelect.map((option) => option.value);
                                else
                                    valuesToSelect = [optionsToSelect[0].value];
                            }
                            if (valuesToSelect.sort().join(' ') !== selectedValues.sort().join(' '))
                                this.virtualselectConfigs.setValue(valuesToSelect, silentOnChangedEvent);
                        });
                    }
                    togglePopup(isEnabled) {
                        if (this.configs.ShowDropboxAsPopup !== isEnabled) {
                            this.configs.ShowDropboxAsPopup = isEnabled;
                            this.redraw();
                        }
                    }
                    validation(isValid, validationMessage) {
                        if (isValid === false) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.selfElement, VirtualSelect.Enum.CssClass.NotValid);
                            this._addErrorMessage(validationMessage);
                        }
                        else {
                            OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, VirtualSelect.Enum.CssClass.NotValid);
                            const errorMessageElement = OSFramework.OSUI.Helper.Dom.ClassSelector(this.selfElement.parentElement, VirtualSelect.Enum.CssClass.ErrorMessage);
                            if (errorMessageElement) {
                                errorMessageElement.remove();
                            }
                        }
                    }
                }
                VirtualSelect.AbstractVirtualSelect = AbstractVirtualSelect;
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                class AbstractVirtualSelectConfig extends OSFramework.OSUI.Patterns.Dropdown
                    .AbstractDropdownConfig {
                    constructor() {
                        super(...arguments);
                        this.ShowDropboxAsPopup = true;
                    }
                    _checkForFigType(option) {
                        let hasImage = VirtualSelect.Enum.FigureType.None;
                        if (!!option && !!option.image_url_or_class) {
                            hasImage = OSFramework.OSUI.Helper.URL.IsImage(option.image_url_or_class)
                                ? VirtualSelect.Enum.FigureType.Image
                                : VirtualSelect.Enum.FigureType.Icon;
                        }
                        return hasImage;
                    }
                    _getGroupedOptionsList() {
                        const options = [];
                        let previousKey = undefined;
                        const [hasDescription, groupedOptions] = this._groupOptions();
                        for (const key in groupedOptions) {
                            options.push({
                                label: key,
                                options: groupedOptions[key],
                                index: groupedOptions[previousKey]
                                    ? options[options.length - 1].index + groupedOptions[previousKey].length + 1
                                    : 0,
                            });
                            previousKey = key;
                        }
                        return [hasDescription, options];
                    }
                    _getOptionIconPrefix(option) {
                        return `<i class="${VirtualSelect.Enum.CssClass.OptionItemIcon} ${option.image_url_or_class}"></i>`;
                    }
                    _getOptionImagePrefix(option) {
                        const sanitizedUrl = OSFramework.OSUI.Helper.Sanitize(option.image_url_or_class);
                        return `<img class="${VirtualSelect.Enum.CssClass.OptionItemImage}" src="${sanitizedUrl}">`;
                    }
                    _getOptionInfo(data) {
                        let prefix = '';
                        let index;
                        let groupIndex;
                        if (!data.isGroupTitle) {
                            if (data.isGroupOption) {
                                groupIndex = this._groupedOptionsList.findIndex((group) => group.index === data.groupIndex);
                                index = data.index - (data.groupIndex + 1);
                            }
                            else {
                                groupIndex = 0;
                                index = data.index;
                            }
                            const hasFigureType = this._checkForFigType(this._groupedOptionsList[groupIndex].options[index]);
                            switch (hasFigureType) {
                                case VirtualSelect.Enum.FigureType.Image:
                                    prefix = this._getOptionImagePrefix(this._groupedOptionsList[groupIndex].options[index]);
                                    break;
                                case VirtualSelect.Enum.FigureType.Icon:
                                    prefix = this._getOptionIconPrefix(this._groupedOptionsList[groupIndex].options[index]);
                                    break;
                            }
                        }
                        return `${prefix}${data.label}`;
                    }
                    _getOptionsList() {
                        if (this._groupedOptionsList.length === 1 && !!!this._groupedOptionsList[0].label) {
                            return this._groupedOptionsList[0].options;
                        }
                        else {
                            return this._groupedOptionsList;
                        }
                    }
                    _groupOptions() {
                        let hasDescription = false;
                        const groupOptionsObject = this.OptionsList.reduce(function (previousValue, option) {
                            const group_name = option.group_name || '';
                            const description = option.description || '';
                            option.customData = {};
                            if (description !== '') {
                                option.customData = { description: description };
                                hasDescription = true;
                            }
                            if (group_name !== '') {
                                option.customData = Object.assign(Object.assign({}, option.customData), { group_name: group_name });
                            }
                            previousValue[group_name] = previousValue[group_name] || [];
                            previousValue[group_name].push(option);
                            return previousValue;
                        }, {});
                        return [hasDescription, groupOptionsObject];
                    }
                    getProviderConfig() {
                        for (const option of this.OptionsList) {
                            option.label = OSFramework.OSUI.Helper.Sanitize(option.label);
                        }
                        const [hasDescription, groupedOptionsList] = this._getGroupedOptionsList();
                        this._groupedOptionsList = groupedOptionsList;
                        this._providerOptions = {
                            ele: this.ElementId,
                            disabled: this.IsDisabled,
                            dropboxWrapper: OSFramework.OSUI.GlobalEnum.HTMLElement.Body,
                            hasOptionDescription: hasDescription,
                            hideClearButton: false,
                            labelRenderer: this._getOptionInfo.bind(this),
                            noOptionsText: this.NoOptionsText,
                            noSearchResultsText: this.NoResultsText,
                            options: this._getOptionsList(),
                            placeholder: this.Prompt,
                            search: true,
                            searchNormalize: true,
                            searchPlaceholderText: this.SearchPrompt,
                            selectAllOnlyVisible: true,
                            selectedValue: this.getSelectedValues(),
                            showDropboxAsPopup: this.ShowDropboxAsPopup,
                            popupDropboxBreakpoint: this.PopupDropboxBreakpoint,
                            silentInitialValueSet: true,
                            textDirection: OutSystems.OSUI.Utils.GetIsRTL()
                                ? OSFramework.OSUI.GlobalEnum.Direction.RTL
                                : OSFramework.OSUI.GlobalEnum.Direction.LTR,
                            updatePositionThrottle: 0,
                            useGroupValue: true,
                            zIndex: 251,
                        };
                        return this._providerOptions;
                    }
                    setExtensibilityConfigs(newConfigs) {
                        if (newConfigs[VirtualSelect.Enum.ExtendedConfigs.hasOptionDescription] !== undefined)
                            console.warn(`The option description may be affected when modifying the property ${VirtualSelect.Enum.ExtendedConfigs.hasOptionDescription}.`);
                        this.providerExtendedOptions = newConfigs;
                    }
                    validateDefault(key, value) {
                        let validatedValue = undefined;
                        switch (key) {
                            case VirtualSelect.Enum.Properties.OptionsList:
                                validatedValue = value;
                                break;
                            case VirtualSelect.Enum.Properties.StartingSelection:
                                validatedValue = value;
                                break;
                            default:
                                validatedValue = super.validateDefault(key, value);
                                break;
                        }
                        return validatedValue;
                    }
                }
                VirtualSelect.AbstractVirtualSelectConfig = AbstractVirtualSelectConfig;
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                var Enum;
                (function (Enum) {
                    let ProviderInfo;
                    (function (ProviderInfo) {
                        ProviderInfo["Name"] = "VirtualSelect";
                        ProviderInfo["Version"] = "1.0.47";
                    })(ProviderInfo = Enum.ProviderInfo || (Enum.ProviderInfo = {}));
                    let CssClass;
                    (function (CssClass) {
                        CssClass["ErrorMessage"] = "osui-dropdown-error-message";
                        CssClass["NotValid"] = "osui-dropdown--not-valid";
                        CssClass["OptionItemIcon"] = "osui-dropdown-option-icon";
                        CssClass["OptionItemImage"] = "osui-dropdown-option-image";
                    })(CssClass = Enum.CssClass || (Enum.CssClass = {}));
                    let Events;
                    (function (Events) {
                        Events["BeforeClose"] = "beforeClose";
                        Events["BeforeOpen"] = "beforeOpen";
                        Events["Change"] = "change";
                        Events["OnSelected"] = "OnSelected";
                    })(Events = Enum.Events || (Enum.Events = {}));
                    let Properties;
                    (function (Properties) {
                        Properties["NoOptionsText"] = "NoOptionsText";
                        Properties["NoResultsText"] = "NoResultsText";
                        Properties["OptionsList"] = "OptionsList";
                        Properties["Prompt"] = "Prompt";
                        Properties["SearchPrompt"] = "SearchPrompt";
                        Properties["StartingSelection"] = "StartingSelection";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let PropertiesValues;
                    (function (PropertiesValues) {
                        PropertiesValues["AriaLabelMultipleValue"] = "Select one or more options";
                        PropertiesValues["AriaLabelSingleValue"] = "Select an option";
                    })(PropertiesValues = Enum.PropertiesValues || (Enum.PropertiesValues = {}));
                    let FigureType;
                    (function (FigureType) {
                        FigureType["Icon"] = "Icon";
                        FigureType["Image"] = "Image";
                        FigureType["None"] = "None";
                    })(FigureType = Enum.FigureType || (Enum.FigureType = {}));
                    let ExtendedConfigs;
                    (function (ExtendedConfigs) {
                        ExtendedConfigs["hasOptionDescription"] = "hasOptionDescription";
                    })(ExtendedConfigs = Enum.ExtendedConfigs || (Enum.ExtendedConfigs = {}));
                })(Enum = VirtualSelect.Enum || (VirtualSelect.Enum = {}));
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                var Utils;
                (function (Utils) {
                    function NormalizeVirtualSelectConfigs(virtualSelectConfigs) {
                        return OutSystems.OSUI.Utils.AbstractNormalizeProviderConfigs(virtualSelectConfigs);
                    }
                    Utils.NormalizeVirtualSelectConfigs = NormalizeVirtualSelectConfigs;
                })(Utils = VirtualSelect.Utils || (VirtualSelect.Utils = {}));
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                var Factory;
                (function (Factory) {
                    function NewVirtualSelect(dropdownId, mode, configs) {
                        let _virtualSelectItem = null;
                        switch (mode) {
                            case OSFramework.OSUI.Patterns.Dropdown.Enum.Mode.Search:
                                _virtualSelectItem = new Providers.OSUI.Dropdown.VirtualSelect.Search.OSUIVirtualSelectSearch(dropdownId, configs);
                                break;
                            case OSFramework.OSUI.Patterns.Dropdown.Enum.Mode.Tags:
                                _virtualSelectItem = new Providers.OSUI.Dropdown.VirtualSelect.Tags.OSUIVirtualSelectTags(dropdownId, configs);
                                break;
                            default:
                                throw new Error(`There is no Dropdown of ${mode} mode type`);
                        }
                        return _virtualSelectItem;
                    }
                    Factory.NewVirtualSelect = NewVirtualSelect;
                })(Factory = VirtualSelect.Factory || (VirtualSelect.Factory = {}));
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                var Search;
                (function (Search) {
                    var Enum;
                    (function (Enum) {
                        let Properties;
                        (function (Properties) {
                            Properties["AllowMultipleSelection"] = "AllowMultipleSelection";
                        })(Properties = Enum.Properties || (Enum.Properties = {}));
                    })(Enum = Search.Enum || (Search.Enum = {}));
                })(Search = VirtualSelect.Search || (VirtualSelect.Search = {}));
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                var Search;
                (function (Search) {
                    class OSUIVirtualSelectSearch extends VirtualSelect.AbstractVirtualSelect {
                        constructor(uniqueId, configs) {
                            super(uniqueId, new Search.VirtualSelectSearchConfig(configs));
                            this.hiddenInputWrapperAriaLabelVal = this.configs.AllowMultipleSelection
                                ? Dropdown.VirtualSelect.Enum.PropertiesValues.AriaLabelMultipleValue
                                : Dropdown.VirtualSelect.Enum.PropertiesValues.AriaLabelSingleValue;
                        }
                        getSelectedOptionsStructure() {
                            let optionsSelected = [];
                            if (this.configs.AllowMultipleSelection) {
                                optionsSelected = this.virtualselectConfigs.getSelectedOptions();
                            }
                            else {
                                if (this.virtualselectConfigs.getSelectedOptions()) {
                                    optionsSelected.push(this.virtualselectConfigs.getSelectedOptions());
                                }
                            }
                            return optionsSelected;
                        }
                        prepareConfigs() {
                            this.virtualselectOpts = this.configs.getProviderConfig();
                            this.createProviderInstance();
                        }
                        changeProperty(propertyName, propertyValue) {
                            super.changeProperty(propertyName, propertyValue);
                            if (this.isBuilt) {
                                switch (propertyName) {
                                    case Search.Enum.Properties.AllowMultipleSelection:
                                        this.redraw();
                                        break;
                                }
                            }
                        }
                    }
                    Search.OSUIVirtualSelectSearch = OSUIVirtualSelectSearch;
                })(Search = VirtualSelect.Search || (VirtualSelect.Search = {}));
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                var Search;
                (function (Search) {
                    class VirtualSelectSearchConfig extends VirtualSelect.AbstractVirtualSelectConfig {
                        getSelectedValues() {
                            var _a;
                            const selectedKeyvalues = [];
                            if (((_a = this.StartingSelection) === null || _a === void 0 ? void 0 : _a.length) > 0) {
                                if (this.AllowMultipleSelection) {
                                    for (const option of this.StartingSelection) {
                                        if (option.value !== OSFramework.OSUI.Constants.EmptyString) {
                                            selectedKeyvalues.push(option.value);
                                        }
                                    }
                                }
                                else {
                                    if (this.StartingSelection[0].value !== OSFramework.OSUI.Constants.EmptyString) {
                                        selectedKeyvalues.push(this.StartingSelection[0].value);
                                    }
                                }
                            }
                            return selectedKeyvalues;
                        }
                        getProviderConfig() {
                            const virtualSelectSearchOpts = {
                                multiple: this.AllowMultipleSelection,
                            };
                            return this.mergeConfigs(super.getProviderConfig(), virtualSelectSearchOpts, this.providerExtendedOptions);
                        }
                        validateDefault(key, value) {
                            let validatedValue = undefined;
                            switch (key) {
                                case Search.Enum.Properties.AllowMultipleSelection:
                                    validatedValue = this.validateBoolean(value, false);
                                    break;
                                default:
                                    validatedValue = super.validateDefault(key, value);
                                    break;
                            }
                            return validatedValue;
                        }
                    }
                    Search.VirtualSelectSearchConfig = VirtualSelectSearchConfig;
                })(Search = VirtualSelect.Search || (VirtualSelect.Search = {}));
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                var Tags;
                (function (Tags) {
                    class OSUIVirtualSelectTags extends VirtualSelect.AbstractVirtualSelect {
                        constructor(uniqueId, configs) {
                            super(uniqueId, new Tags.VirtualSelectTagsConfig(configs));
                            this.hiddenInputWrapperAriaLabelVal = Dropdown.VirtualSelect.Enum.PropertiesValues.AriaLabelMultipleValue;
                        }
                        getSelectedOptionsStructure() {
                            const optionsSelected = this.virtualselectConfigs.getSelectedOptions();
                            return optionsSelected;
                        }
                        prepareConfigs() {
                            this.virtualselectOpts = this.configs.getProviderConfig();
                            this.createProviderInstance();
                        }
                    }
                    Tags.OSUIVirtualSelectTags = OSUIVirtualSelectTags;
                })(Tags = VirtualSelect.Tags || (VirtualSelect.Tags = {}));
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Dropdown;
        (function (Dropdown) {
            var VirtualSelect;
            (function (VirtualSelect) {
                var Tags;
                (function (Tags) {
                    class VirtualSelectTagsConfig extends VirtualSelect.AbstractVirtualSelectConfig {
                        getSelectedValues() {
                            const selectedKeyvalues = [];
                            if (this.StartingSelection.length > 0) {
                                for (const option of this.StartingSelection) {
                                    if (option.value !== OSFramework.OSUI.Constants.EmptyString) {
                                        selectedKeyvalues.push(option.value);
                                    }
                                }
                            }
                            return selectedKeyvalues;
                        }
                        getProviderConfig() {
                            const virtualSelectTagsOpts = {
                                multiple: true,
                                showValueAsTags: true,
                            };
                            return this.mergeConfigs(super.getProviderConfig(), virtualSelectTagsOpts, this.providerExtendedOptions);
                        }
                    }
                    Tags.VirtualSelectTagsConfig = VirtualSelectTagsConfig;
                })(Tags = VirtualSelect.Tags || (VirtualSelect.Tags = {}));
            })(VirtualSelect = Dropdown.VirtualSelect || (Dropdown.VirtualSelect = {}));
        })(Dropdown = OSUI.Dropdown || (OSUI.Dropdown = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var MonthPicker;
        (function (MonthPicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var Enum;
                (function (Enum) {
                    let Attribute;
                    (function (Attribute) {
                        Attribute["DefaultAriaLabel"] = "Select a month";
                    })(Attribute = Enum.Attribute || (Enum.Attribute = {}));
                    let CssClasses;
                    (function (CssClasses) {
                        CssClasses["AccessibilityContainerInfo"] = "osui-monthpicker-a11y";
                    })(CssClasses = Enum.CssClasses || (Enum.CssClasses = {}));
                })(Enum = Flatpickr.Enum || (Flatpickr.Enum = {}));
            })(Flatpickr = MonthPicker.Flatpickr || (MonthPicker.Flatpickr = {}));
        })(MonthPicker = OSUI.MonthPicker || (OSUI.MonthPicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var MonthPicker;
        (function (MonthPicker) {
            var Flatpickr;
            (function (Flatpickr) {
                Flatpickr.ErrorCodes = {
                    FailSetLocale: 'OSUI-PRO-01001',
                };
            })(Flatpickr = MonthPicker.Flatpickr || (MonthPicker.Flatpickr = {}));
        })(MonthPicker = OSUI.MonthPicker || (OSUI.MonthPicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var MonthPicker;
        (function (MonthPicker) {
            var Flatpickr;
            (function (Flatpickr) {
                class OSUIFlatpickrMonth extends OSFramework.OSUI.Patterns.MonthPicker.AbstractMonthPicker {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Flatpickr.FlatpickrMonthConfig(configs));
                        this.configs.OnChangeEventCallback = this.onMonthSelectedEvent.bind(this);
                        this.configs.OnCloseEventCallback = this.onClose.bind(this);
                        this.configs.OnOpenEventCallback = this.onOpen.bind(this);
                    }
                    _getBodyOnClickGlobalEvent() {
                        this._bodyOnClickGlobalEvent =
                            OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.events.get(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick);
                    }
                    _setAttributes() {
                        this.flatpickrInputElem = this.monthPickerPlatformInputElem.nextSibling;
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.DataInput, OSFramework.OSUI.Constants.EmptyString);
                        if (this.flatpickrInputElem.disabled) {
                            OSFramework.OSUI.Helper.Dom.Attribute.Remove(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Disabled);
                        }
                    }
                    _setCalendarCssClasses() {
                        OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.provider.calendarContainer, OSFramework.OSUI.Patterns.MonthPicker.Enum.CssClass.Dropdown);
                        if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.InputClassTypes.InputLarge)) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.provider.calendarContainer, OSFramework.OSUI.Patterns.Dropdown.Enum.CssClass.DropdownLarge);
                        }
                        else if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.InputClassTypes.InputSmall)) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.provider.calendarContainer, OSFramework.OSUI.Patterns.Dropdown.Enum.CssClass.DropdownSmall);
                        }
                        if (this.configs.ExtendedClass !== '') {
                            OSFramework.OSUI.Helper.Dom.Styles.ExtendedClass(this.provider.calendarContainer, '', this.configs.ExtendedClass);
                        }
                    }
                    _updateA11yProperties() {
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.flatpickrInputElem, OSFramework.OSUI.Constants.A11YAttributes.TabIndex, this._isPlatformInputDisabled
                            ? OSFramework.OSUI.Constants.A11YAttributes.States.TabIndexHidden
                            : OSFramework.OSUI.Constants.A11YAttributes.States.TabIndexShow);
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.flatpickrInputElem, OSFramework.OSUI.Constants.A11YAttributes.Aria.Hidden, this._isPlatformInputDisabled.toString());
                    }
                    createProviderInstance() {
                        if (this.monthPickerPlatformInputElem && this._flatpickrOpts.defaultDate === undefined) {
                            this.monthPickerPlatformInputElem.value = OSFramework.OSUI.Constants.EmptyString;
                        }
                        this.provider = window.flatpickr(this.monthPickerPlatformInputElem, this._flatpickrOpts);
                        this._setAttributes();
                        if (this.provider.calendarContainer !== undefined) {
                            this._setCalendarCssClasses();
                            this._bodyScrollCommonBehaviour = new OSUI.SharedProviderResources.Flatpickr.UpdatePositionOnScroll(this);
                            this._zindexCommonBehavior = new OSUI.SharedProviderResources.Flatpickr.UpdateZindex(this);
                            OSFramework.OSUI.Helper.Dom.SetInputValue(this.monthPickerPlatformInputElem, this.monthPickerPlatformInputElem.nextSibling.value);
                        }
                        this.updatePlatformInputAttrs();
                        this.setA11YProperties();
                        this.updateProviderEvents({
                            name: OSUI.SharedProviderResources.Flatpickr.Enum.ProviderInfo.Name,
                            version: OSUI.SharedProviderResources.Flatpickr.Enum.ProviderInfo.Version,
                            events: this.provider.config,
                        });
                        this.triggerPlatformInitializedEventCallback();
                    }
                    onClose() {
                        if (this._bodyOnClickGlobalEvent !== undefined) {
                            this._bodyOnClickGlobalEvent.enableBodyClickEvent();
                        }
                    }
                    onMonthSelectedEvent(selectedMonthYear) {
                        const _selectedMonthYear = {
                            month: OSFramework.OSUI.Constants.EmptyString,
                            monthOrder: OSFramework.OSUI.Constants.InvalidNumber,
                            year: OSFramework.OSUI.Constants.InvalidNumber,
                        };
                        if (selectedMonthYear.length > 0) {
                            const _selectedDate = selectedMonthYear[0];
                            const _selectedMonthIndex = _selectedDate.getMonth();
                            _selectedMonthYear.month = OSFramework.OSUI.Constants.Months[_selectedMonthIndex];
                            _selectedMonthYear.monthOrder = _selectedMonthIndex + 1;
                            _selectedMonthYear.year = _selectedDate.getFullYear();
                        }
                        else {
                            OSFramework.OSUI.Helper.Dom.SetInputValue(this.monthPickerPlatformInputElem, ' ');
                        }
                        OSFramework.OSUI.Helper.Dom.SetInputValue(this.monthPickerPlatformInputElem, this.flatpickrInputElem.value);
                        this.triggerPlatformEventCallback(this.onSelectedCallbackEvent, _selectedMonthYear.month, _selectedMonthYear.monthOrder, _selectedMonthYear.year);
                    }
                    onOpen() {
                        if (this._bodyOnClickGlobalEvent !== undefined) {
                            this._bodyOnClickGlobalEvent.disableBodyClickEvent();
                        }
                    }
                    prepareConfigs() {
                        this._flatpickrOpts = this.configs.getProviderConfig();
                        this.createProviderInstance();
                    }
                    setA11YProperties() {
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.monthPickerPlatformInputElem, OSFramework.OSUI.Constants.A11YAttributes.TabIndex, OSFramework.OSUI.Constants.A11YAttributes.States.TabIndexHidden);
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.monthPickerPlatformInputElem, OSFramework.OSUI.Constants.A11YAttributes.Aria.Hidden, OSFramework.OSUI.Constants.A11YAttributes.States.True);
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this._a11yInfoContainerElem, OSFramework.OSUI.Constants.A11YAttributes.Aria.Hidden, OSFramework.OSUI.Constants.A11YAttributes.States.True);
                        this._updateA11yProperties();
                        let ariaLabelValue = Flatpickr.Enum.Attribute.DefaultAriaLabel;
                        if (this.monthPickerPlatformInputElem.hasAttribute(OSFramework.OSUI.Constants.A11YAttributes.Aria.Label)) {
                            ariaLabelValue = this.monthPickerPlatformInputElem.getAttribute(OSFramework.OSUI.Constants.A11YAttributes.Aria.Label);
                        }
                        OSFramework.OSUI.Helper.A11Y.AriaLabel(this.flatpickrInputElem, ariaLabelValue);
                        OSFramework.OSUI.Helper.A11Y.AriaDescribedBy(this.flatpickrInputElem, this._a11yInfoContainerElem.id);
                        if (this.configs.Lang !== OSFramework.OSUI.Constants.Language.short) {
                            this._a11yInfoContainerElem.innerHTML =
                                MonthPicker.Flatpickr.l10ns.A11yContainerInfo[this.configs.Lang] !== undefined
                                    ? MonthPicker.Flatpickr.l10ns.A11yContainerInfo[this.configs.Lang].htmlTex
                                    : MonthPicker.Flatpickr.l10ns.A11yContainerInfo.en.htmlTex;
                        }
                    }
                    setCallbacks() {
                        console.log(OSFramework.OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        this.monthPickerPlatformInputElem = this.selfElement.querySelector(OSFramework.OSUI.GlobalEnum.CSSSelectors.InputFormControl);
                        this._isPlatformInputDisabled = this.monthPickerPlatformInputElem.disabled;
                        this._a11yInfoContainerElem = OSFramework.OSUI.Helper.Dom.TagSelector(this.selfElement.parentElement, OSFramework.OSUI.Constants.Dot + Flatpickr.Enum.CssClasses.AccessibilityContainerInfo);
                        if (!this.monthPickerPlatformInputElem) {
                            throw new Error(`The monthpicker input at MonthpickerId '${this.widgetId}' is missing`);
                        }
                    }
                    unsetCallbacks() {
                        this.configs.OnChangeEventCallback = undefined;
                        this.configs.OnCloseEventCallback = undefined;
                        this.configs.OnOpenEventCallback = undefined;
                        this.onSelectedCallbackEvent = undefined;
                        super.unsetCallbacks();
                    }
                    unsetHtmlElements() {
                        this.monthPickerPlatformInputElem = undefined;
                    }
                    updatePlatformInputAttrs() {
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.monthPickerPlatformInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Type, OSFramework.OSUI.GlobalEnum.InputTypeAttr.Text);
                    }
                    build() {
                        super.build();
                        this._getBodyOnClickGlobalEvent();
                        this.setHtmlElements();
                        this.prepareConfigs();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        const oldExtendedClass = this.configs.ExtendedClass;
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case OSFramework.OSUI.Patterns.MonthPicker.Enum.Properties.InitialMonth:
                                case OSFramework.OSUI.Patterns.MonthPicker.Enum.Properties.DateFormat:
                                case OSFramework.OSUI.Patterns.MonthPicker.Enum.Properties.MaxMonth:
                                case OSFramework.OSUI.Patterns.MonthPicker.Enum.Properties.MinMonth:
                                    this.redraw();
                                    break;
                                case OSFramework.OSUI.GlobalEnum.CommonPatternsProperties.ExtendedClass:
                                    OSFramework.OSUI.Helper.Dom.Styles.ExtendedClass(this.provider.calendarContainer, oldExtendedClass, propertyValue);
                                    break;
                            }
                        }
                    }
                    clear() {
                        const isInputDisable = this.monthPickerPlatformInputElem.disabled;
                        if (isInputDisable === false) {
                            this.provider.clear();
                        }
                    }
                    close() {
                        if (this.provider.isOpen) {
                            this.provider.close();
                        }
                    }
                    dispose() {
                        if (this.isBuilt) {
                            this.unsetCallbacks();
                            this.unsetHtmlElements();
                            if (this._bodyScrollCommonBehaviour !== undefined) {
                                this._bodyScrollCommonBehaviour.dispose();
                                this._bodyScrollCommonBehaviour = undefined;
                            }
                            OSFramework.OSUI.Helper.AsyncInvocation(this.provider.destroy);
                        }
                        super.dispose();
                    }
                    onRender() {
                        const isInputDisable = this.monthPickerPlatformInputElem.disabled;
                        if (this._isPlatformInputDisabled !== isInputDisable) {
                            this._isPlatformInputDisabled = isInputDisable;
                            this._updateA11yProperties();
                        }
                    }
                    open() {
                        const isInputDisable = this.monthPickerPlatformInputElem.disabled;
                        if (this.provider.isOpen === false && isInputDisable === false) {
                            this.provider.open();
                        }
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case OSFramework.OSUI.Patterns.MonthPicker.Enum.Events.OnSelected:
                                this.onSelectedCallbackEvent = callback;
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                                break;
                        }
                    }
                    setEditableInput(isEditable) {
                        if (this.configs.AllowInput !== isEditable) {
                            this.configs.AllowInput = isEditable;
                            this.redraw();
                        }
                    }
                    setLanguage(value) {
                        this.configs.Lang = value.toLowerCase();
                        if (this.provider !== undefined) {
                            this.redraw();
                        }
                    }
                    setProviderConfigs(newConfigs) {
                        this.configs.setExtensibilityConfigs(newConfigs);
                        this.redraw();
                        super.setProviderConfigs(newConfigs);
                    }
                    updateInitialMonth(monthYear) {
                        if (this.monthPickerPlatformInputElem.disabled === false) {
                            this.configs.InitialMonth = monthYear;
                            this.redraw();
                        }
                    }
                    updatePrompt(promptMessage) {
                        this.flatpickrInputElem.placeholder = promptMessage;
                    }
                }
                Flatpickr.OSUIFlatpickrMonth = OSUIFlatpickrMonth;
            })(Flatpickr = MonthPicker.Flatpickr || (MonthPicker.Flatpickr = {}));
        })(MonthPicker = OSUI.MonthPicker || (OSUI.MonthPicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var MonthPicker;
        (function (MonthPicker) {
            var Flatpickr;
            (function (Flatpickr) {
                class FlatpickrMonthConfig extends OSFramework.OSUI.Patterns.MonthPicker.AbstractMonthPickerConfig {
                    constructor(config) {
                        super(config);
                        this.AllowInput = false;
                        this.DisableMobile = true;
                        this._lang = OSFramework.OSUI.Helper.Language.ShortLang;
                    }
                    _checkDateFormat() {
                        return this.DateFormat !== '' ? this._mapProviderDateFormat() : this.ServerDateFormat;
                    }
                    _checkLocale() {
                        let _locale;
                        try {
                            _locale = window.flatpickr.l10ns[this._lang];
                        }
                        catch (error) {
                            throw new Error(`${Flatpickr.ErrorCodes.FailSetLocale}: Locale '${this._lang}' not found!`);
                        }
                        return _locale;
                    }
                    _checkServerDateFormat() {
                        this.ServerDateFormat = OSFramework.OSUI.Helper.Dates.ServerFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.YYYY, OSFramework.OSUI.GlobalEnum.DateFormat.Y)
                            .replace(OSFramework.OSUI.GlobalEnum.DateFormat.MM, OSFramework.OSUI.GlobalEnum.DateFormat.m)
                            .replace(OSFramework.OSUI.GlobalEnum.DateFormat.DD, OSFramework.OSUI.Constants.EmptyString);
                    }
                    _getDateFromMonthYear(monthYear) {
                        const _monthIndex = OSFramework.OSUI.Constants.Months.indexOf(monthYear.Month);
                        const _validatedYear = monthYear.Year < 1900 ? null : monthYear.Year;
                        let _newDate = undefined;
                        if (_monthIndex !== -1 && _validatedYear !== null) {
                            _newDate = new Date(_validatedYear, _monthIndex, 1);
                        }
                        return _newDate;
                    }
                    _mapProviderDateFormat() {
                        const _dateFormat = this.DateFormat.replace(/[^a-zA-Z]/g, ' ').split(' ');
                        for (const format of _dateFormat) {
                            switch (format) {
                                case OSFramework.OSUI.GlobalEnum.DateFormat.YYYY:
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.YYYY, OSFramework.OSUI.GlobalEnum.DateFormat.Y);
                                    break;
                                case 'YY':
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.YY, OSFramework.OSUI.GlobalEnum.DateFormat.y);
                                    break;
                                case 'MMM':
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.MMM, OSFramework.OSUI.GlobalEnum.DateFormat.M);
                                    break;
                                case 'MM':
                                    this.DateFormat = this.DateFormat.replace(OSFramework.OSUI.GlobalEnum.DateFormat.MM, OSFramework.OSUI.GlobalEnum.DateFormat.m);
                                    break;
                            }
                        }
                        return this.DateFormat;
                    }
                    getProviderConfig() {
                        this._checkServerDateFormat();
                        this._checkDateFormat();
                        this._providerOptions = {
                            altInput: true,
                            allowInput: this.AllowInput,
                            dateFormat: this.ServerDateFormat,
                            defaultDate: this._getDateFromMonthYear(this.InitialMonth),
                            disableMobile: this.DisableMobile,
                            maxDate: this._getDateFromMonthYear(this.MaxMonth),
                            minDate: this._getDateFromMonthYear(this.MinMonth),
                            onChange: this.OnChangeEventCallback,
                            onClose: this.OnCloseEventCallback,
                            onOpen: this.OnOpenEventCallback,
                            plugins: [
                                new monthSelectPlugin({
                                    shorthand: true,
                                    dateFormat: this.ServerDateFormat,
                                    altFormat: this.DateFormat,
                                }),
                            ],
                        };
                        if (this._providerOptions.locale === undefined) {
                            this._providerOptions.locale = this._checkLocale();
                        }
                        return this.mergeConfigs(this._providerOptions, undefined, this.providerExtendedOptions);
                    }
                    setExtensibilityConfigs(newConfigs) {
                        this.providerExtendedOptions = newConfigs;
                    }
                    get Lang() {
                        return this._lang;
                    }
                    set Lang(value) {
                        this._lang = value.substring(0, 2);
                    }
                }
                Flatpickr.FlatpickrMonthConfig = FlatpickrMonthConfig;
            })(Flatpickr = MonthPicker.Flatpickr || (MonthPicker.Flatpickr = {}));
        })(MonthPicker = OSUI.MonthPicker || (OSUI.MonthPicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var MonthPicker;
        (function (MonthPicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var l10ns;
                (function (l10ns) {
                    l10ns.A11yContainerInfo = {
                        ar: {
                            htmlTex: 'من أجل أن تكون قادرًا على التنقل من خلال التقويم باستخدام مفتاح لوحة المفاتيح: استخدم مفاتيح السهم اليمنى أو CTRL + CTRL + للتنقل عبر أشهر ؛ استخدم مفاتيح الأسهم CMD أو CTRL + لأعلى أو لأسفل للتنقل عبر سنوات ؛',
                        },
                        at: {
                            htmlTex: 'Um mit Tastaturschlüssel durch den Kalender navigieren zu können: Verwenden Sie CMD oder Strg + rechte oder linke Pfeiltasten, um Monate zu navigieren; Verwenden Sie CMD oder Strg + Up- oder Down -Pfeiltasten, um durch Jahre zu navigieren.',
                        },
                        az: {
                            htmlTex: 'Klaviatura açarı ilə təqvimlə naviqasiya etmək üçün: aylarla gəzmək üçün CMD və ya CTRL + sağ və ya sol ox düymələrindən istifadə edin; İllərlə gəzmək üçün CMD və ya CTRL + yuxarı və ya aşağı ox düymələrindən istifadə edin;',
                        },
                        be: {
                            htmlTex: 'Для таго, каб мець магчымасць перамяшчацца па календары з клавішнай клавішай: Выкарыстоўвайце CMD або Ctrl + правай або левай клавішы са стрэлкамі для навігацыі праз месяцы; Выкарыстоўвайце CMD або CTRL + клавішы са стрэлкамі ўверх ці ўніз, каб перамяшчацца праз гады;',
                        },
                        bg: {
                            htmlTex: 'За да можете да се движите през календара с клавиатура на клавиатурата: използвайте CMD или CTRL + десни или леви клавиши със стрелки, за да се движите през месеци; Използвайте CMD или Ctrl + нагоре или надолу клавиши със стрелки, за да навигирате през години;',
                        },
                        bn: {
                            htmlTex: 'কীবোর্ড কী দিয়ে ক্যালেন্ডারের মাধ্যমে নেভিগেট করতে সক্ষম হওয়ার জন্য: কয়েক মাস ধরে নেভিগেট করতে সিএমডি বা সিটিআরএল + ডান বা বাম তীর কী ব্যবহার করুন; কয়েক বছর ধরে নেভিগেট করতে সিএমডি বা সিটিআরএল + উপরে বা ডাউন তীর কী ব্যবহার করুন;',
                        },
                        bs: {
                            htmlTex: 'Da biste mogli kretati se kroz kalendar s tipkovnicom tipkovnicom: koristite CMD ili Ctrl + desno ili lijeve tipke sa strelicama za navigaciju kroz mjesece; Upotrijebite CMD ili Ctrl + gore ili dolje tipke sa strelicama za navigaciju kroz godine;',
                        },
                        ca: {
                            htmlTex: 'Per poder navegar pel calendari amb tecla del teclat: utilitzeu les tecles de fletxa CMD o CTRL + dreta o esquerra per navegar durant mesos; Utilitzeu les tecles de fletxa CMD o Ctrl + amunt o avall per navegar durant anys;',
                        },
                        cat: {
                            htmlTex: 'Per poder navegar pel calendari amb tecla del teclat: utilitzeu les tecles de fletxa CMD o CTRL + dreta o esquerra per navegar durant mesos; Utilitzeu les tecles de fletxa CMD o Ctrl + amunt o avall per navegar durant anys;',
                        },
                        ckb: {
                            htmlTex: 'Ji bo ku bikaribin bi kalîfar bi klavyeyê bi klavyeyê veguhezînin: Bişkojkên CMD an CTRL + Rast an çep an çepê bikar bînin da ku bi mehan rêve bibin; Bişkojkên CMD an CTRL + UP an Down bikar bînin da ku bi salan navigirin;',
                        },
                        cs: {
                            htmlTex: 'Aby bylo možné procházet kalendářem pomocí klávesnice: Použijte KMU CMD nebo CTRL + PRÁVO nebo levé šipky pro navigaci v měsících; Pro navigaci v letech použijte CMD nebo CTRL + nahoru nebo dolů klíče se šipkami;',
                        },
                        cy: {
                            htmlTex: "Er mwyn gallu llywio trwy'r calendr gydag allwedd bysellfwrdd: defnyddiwch allweddi saeth CMD neu Ctrl + dde neu chwith i lywio trwy fisoedd; Defnyddio CMD neu Ctrl + i fyny neu i lawr allweddi saeth i lywio trwy flynyddoedd;",
                        },
                        da: {
                            htmlTex: 'For at kunne navigere gennem kalender med tastaturnøgle: Brug CMD eller Ctrl + højre eller venstre piletaster til at navigere gennem måneder; Brug CMD eller CTRL + op eller ned på piletasterne til at navigere gennem år;',
                        },
                        de: {
                            htmlTex: 'Um mit Tastaturschlüssel durch den Kalender navigieren zu können: Verwenden Sie CMD oder Strg + rechte oder linke Pfeiltasten, um Monate zu navigieren; Verwenden Sie CMD oder Strg + Up- oder Down -Pfeiltasten, um durch Jahre zu navigieren.',
                        },
                        en: {
                            htmlTex: 'In order to be able to navigate through calendar with keyboard key: Use cmd or ctrl + right or left arrow keys to navigate through months; Use cmd or ctrl + up or down arrow keys to navigate through years;',
                        },
                        eo: {
                            htmlTex: 'Por povi navigi tra kalendaro per klavara ŝlosilo: Uzu CMD aŭ CTRL + dekstran aŭ maldekstran sagon por navigi tra monatoj; Uzu CMD aŭ Ctrl + supren aŭ malsupren sago -ŝlosilojn por navigi tra jaroj;',
                        },
                        es: {
                            htmlTex: 'Para poder navegar a través del calendario con la tecla de teclado: use las teclas CMD o CTRL + de flecha derecha o izquierda para navegar durante meses; Use CMD o CTRL + las teclas de flecha hacia arriba o hacia abajo para navegar durante años;',
                        },
                        et: {
                            htmlTex: 'Klaviatuuri klahviga kalendris navigeerimiseks: kasutage kuude jooksul navigeerimiseks CMD või CTRL + paremat või vasakut nooleklahvi; Kasutage aastate jooksul navigeerimiseks CMD või Ctrl + üles või alla nooleklahve;',
                        },
                        fa: {
                            htmlTex: 'برای اینکه بتوانید از طریق تقویم با کلید صفحه کلید حرکت کنید: از کلیدهای پیکان CMD یا CTRL + راست یا چپ برای حرکت در طی ماه ها استفاده کنید. برای حرکت در طی سالها از کلیدهای Arrow CMD یا Ctrl + بالا یا پایین استفاده کنید.',
                        },
                        fi: {
                            htmlTex: 'Kalenterin läpi näppäimistön näppäimellä voi kulkea CMD: n tai Ctrl +: n oikean tai vasemman nuolinäppäimen avulla kulkeaksesi kuukausia; Käytä CMD: tä tai Ctrl + ylös tai alas nuolinäppäimiä navigoidaksesi vuosien ajan;',
                        },
                        fo: {
                            htmlTex: 'Um mit Tastaturschlüssel durch den Kalender navigieren zu können: Verwenden Sie CMD oder Strg + rechte oder linke Pfeiltasten, um Monate zu navigieren; Verwenden Sie CMD oder Strg + Up- oder Down -Pfeiltasten, um durch Jahre zu navigieren.',
                        },
                        fr: {
                            htmlTex: 'Afin de pouvoir naviguer dans le calendrier avec la clé du clavier: utilisez les touches CMD ou CTRL + droite ou gauche pour naviguer dans des mois; Utilisez CMD ou CTRL + les clés de flèches vers le haut ou vers le bas pour naviguer dans des années;',
                        },
                        ga: {
                            htmlTex: "D'fhonn a bheith in ann nascleanúint a dhéanamh trí fhéilire le heochair mhéarchláir: Úsáid Eochracha saighead CMD nó CTRL + ar chlé nó ar chlé chun nascleanúint a dhéanamh trí mhí; Bain úsáid as eochracha CMD nó Ctrl + suas nó síos saighead le nascleanúint a dhéanamh trí bhlianta;",
                        },
                        gr: {
                            htmlTex: 'Προκειμένου να μπορείτε να περιηγηθείτε στο ημερολόγιο με το πλήκτρο πληκτρολογίου: Χρησιμοποιήστε CMD ή CTRL + δεξιά ή αριστερά πλήκτρα βέλους για να περιηγηθείτε σε μήνες. Χρησιμοποιήστε CMD ή CTRL + πάνω ή κάτω πλήκτρα βέλους για να περιηγηθείτε σε χρόνια.',
                        },
                        he: {
                            htmlTex: 'על מנת להיות מסוגל לנווט בלוח השנה עם מקש המקלדת: השתמש במקשי CMD או Ctrl + ימין או שמאל כדי לנווט בחודשים; השתמש במקשי CMD או Ctrl + למעלה או במורד חצים כדי לנווט בשנים;',
                        },
                        hi: {
                            htmlTex: 'कीबोर्ड कुंजी के साथ कैलेंडर के माध्यम से नेविगेट करने में सक्षम होने के लिए: महीनों के माध्यम से नेविगेट करने के लिए सीएमडी या सीटीआरएल + दाएं या बाएं तीर कुंजियों का उपयोग करें; वर्षों के माध्यम से नेविगेट करने के लिए CMD या CTRL + अप या डाउन तीर कुंजियों का उपयोग करें;',
                        },
                        hr: {
                            htmlTex: 'Da biste mogli kretati se kroz kalendar s tipkovnicom tipki: Upotrijebite CMD ili CTRL + desne ili lijeve tipke sa strelicama za kretanje kroz mjesece; Koristite CMD ili Ctrl + tipke sa strelicama gore ili dolje za kretanje kroz godine;',
                        },
                        hu: {
                            htmlTex: 'Annak érdekében, hogy a naptárban navigálhassunk a billentyűzet billentyűvel: használja a CMD vagy a CTRL + jobb vagy a bal nyíl billentyűket a hónapok navigálásához; Használja a CMD -t vagy a Ctrl + felfelé vagy lefelé nyíl kulcsokat az évek során;',
                        },
                        hy: {
                            htmlTex: 'Որպեսզի կարողանաք նավարկվել ստեղնաշարի ստեղնաշարի միջոցով. Օգտագործեք CMD կամ CTRL + աջ կամ ձախ սլաքի ստեղներ `ամիսների միջոցով նավարկելու համար; Տարիներ շարունակ նավարկելու համար օգտագործեք CMD կամ CTRL + Up կամ Down Arrow ստեղներ.',
                        },
                        id: {
                            htmlTex: 'Agar dapat menavigasi melalui kalender dengan kunci keyboard: Gunakan cmd atau ctrl + tombol panah kanan atau kiri untuk menavigasi selama berbulan -bulan; Gunakan CMD atau Ctrl + Kunci Panah Atas atau Bawah untuk menavigasi selama bertahun -tahun;',
                        },
                        is: {
                            htmlTex: 'Til þess að geta flett í gegnum dagatal með lyklaborðslykli: Notaðu CMD eða Ctrl + hægri eða vinstri örvatakkana til að sigla í gegnum mánuði; Notaðu CMD eða Ctrl + upp eða niður örvatakkana til að sigla í gegnum ár;',
                        },
                        it: {
                            htmlTex: 'Per poter navigare attraverso il calendario con il tasto tastiera: utilizzare i tasti freccia CMD o CTRL + destra o sinistra per navigare nei mesi; Utilizzare CMD o CTRL + SU o Down Freccia per navigare per anni;',
                        },
                        ja: {
                            htmlTex: 'キーボードキーを使用してカレンダーをナビゲートできるようにするCMDまたはCtrl +上または下の矢印キーを使用して、年を操作します。',
                        },
                        ka: {
                            htmlTex: 'იმისათვის, რომ შეძლოთ კალენდარი კლავიშის გასაღებით კალენდარში: გამოიყენეთ CMD ან CTRL + მარჯვენა ან მარცხენა ისრის გასაღებები, რომ მოხდეს თვეების განმავლობაში ნავიგაცია; გამოიყენეთ CMD ან CTRL + ზემოთ ან ქვემოთ ისრის გასაღებები, რომლითაც წლების განმავლობაში ნავიგაციაა;',
                        },
                        km: {
                            htmlTex: 'ដើម្បីអាចរុករកតាមប្រតិទិនដោយប្រើគ្រាប់ចុចក្តារចុច: ប្រើ cmd ឬបញ្ជា (Ctrl) + គ្រាប់ចុចព្រួញស្ដាំឬឆ្វេងដើម្បីរុករកពេញមួយខែ។ ប្រើ CMD ឬបញ្ជា (Ctrl) + គ្រាប់ចុចព្រួញចុះក្រោមឬចុះក្រោមដើម្បីរុករកពេញមួយឆ្នាំ;',
                        },
                        ko: {
                            htmlTex: '키보드 키로 캘린더를 탐색 할 수 있도록 : CMD 또는 CTRL + 오른쪽 또는 왼쪽 화살표 키를 사용하여 몇 달 동안 탐색하십시오. CMD 또는 Ctrl + Up 또는 Down Arrow 키를 사용하여 수년 동안 탐색하십시오.',
                        },
                        kz: {
                            htmlTex: 'Пернетақта пернесімен күнтізбе арқылы шарлау үшін: бірнеше айлармен шарлау үшін CMD немесе CTRL + оң немесе сол жақ көрсеткі пернелерін пайдаланыңыз; Жылдар бойына шарлау үшін CMD немесе CTRL + UP немесе төмен көрсеткілерді қолданыңыз;',
                        },
                        lt: {
                            htmlTex: 'Norėdami naršyti po kalendorių su klaviatūros klavišu: naudokite CMD arba CTRL + dešinę arba kairę rodyklės klavišus, kad galėtumėte naršyti po mėnesių; Norėdami naršyti po metus, naudokite CMD arba CTRL + aukštyn arba žemyn rodyklių klavišus;',
                        },
                        lv: {
                            htmlTex: 'Lai varētu pārvietoties pa kalendāru ar tastatūras atslēgu: izmantojiet CMD vai CTRL + labās vai kreisās bultiņas taustiņus, lai pārvietotos mēnešos; Izmantojiet cmd vai ctrl + uz augšu vai uz leju bultiņu taustiņiem, lai pārvietotos pa gadiem;',
                        },
                        mk: {
                            htmlTex: 'За да можете да се движите низ календарот со копчето за тастатура: Користете CMD или CTRL + десно или лево стрела со стрелки за да се движите низ месеци; Користете CMD или CTRL + UPAR или DOWN ARROW ARROW за да се движите низ години;',
                        },
                        mn: {
                            htmlTex: 'Гарны түлхүүрээр хуанлигаар дамжуулан явах боломжтой байхын тулд: CMD эсвэл CTD эсвэл CTRL + CRD эсвэл CTRL + RUPER эсвэл LOUT эсвэл LOW эсвэл Зүүн сум ашиглана уу; CMD эсвэл CTRL + UP эсвэл AP A эсвэл DOWN ARCE товчийг ашиглан олон жилийн турш дамжин өнгөрөх;',
                        },
                        ms: {
                            htmlTex: 'Untuk dapat menavigasi kalendar dengan kekunci papan kekunci: Gunakan kekunci anak panah kanan atau kiri CTRL + untuk menavigasi bulan; Gunakan kekunci anak panah CMD atau Ctrl + Up atau Down untuk menavigasi selama bertahun -tahun;',
                        },
                        my: {
                            htmlTex: 'ကီးဘုတ်ကီးနှင့်အတူပြက္ခဒိန်မှတဆင့်ဖြတ်သန်းသွားနိုင်ရန်အတွက်လများကိုသွားရန် CMD သို့မဟုတ် Ctrl + လက်ဝဲသို့မဟုတ်လက်ဝဲ lerow keys များကိုသုံးပါ။ နှစ်ပေါင်းသွားရန် CMD သို့မဟုတ် Ctrl + Up သို့မဟုတ် Up arrow သော့များကိုသုံးပါ။',
                        },
                        nl: {
                            htmlTex: 'Om door de kalender met toetsenbordsleutel te kunnen navigeren: gebruik CMD of CTRL + rechter- of linker pijltoetsen om maanden door te navigeren; Gebruik CMD of Ctrl + omhoog of omlaag pijltoetsen om jaren door te navigeren;',
                        },
                        nb: {
                            htmlTex: 'For å kunne navigere gjennom kalender med tastaturnøkkel: Bruk CMD eller CTRL + høyre eller venstre piltaster for å navigere gjennom måneder; Bruk CMD eller CTRL + opp eller ned piltastene for å navigere gjennom år;',
                        },
                        nn: {
                            htmlTex: 'For å kunne navigere gjennom kalender med tastaturnøkkel: Bruk CMD eller CTRL + høyre eller venstre piltaster for å navigere gjennom måneder; Bruk CMD eller CTRL + opp eller ned piltastene for å navigere gjennom år;',
                        },
                        no: {
                            htmlTex: 'For å kunne navigere gjennom kalender med tastaturnøkkel: Bruk CMD eller CTRL + høyre eller venstre piltaster for å navigere gjennom måneder; Bruk CMD eller CTRL + opp eller ned piltastene for å navigere gjennom år;',
                        },
                        pa: {
                            htmlTex: 'ਕੀਬੋਰਡ ਕੁੰਜੀ ਨਾਲ ਕੈਲੰਡਰ ਨੂੰ ਨੈਵੀਗੇਟ ਕਰਨ ਦੇ ਯੋਗ ਹੋਣ ਲਈ: ਮਹੀਨਿਆਂ ਦੇ ਜ਼ਰੀਏ ਨੈਵੀਗੇਟ ਕਰਨ ਲਈ ਸੀ.ਐੱਮ.ਡੀ. ਜਾਂ Ctrl + ਸੱਜੇ ਜਾਂ ਖੱਬੇ ਐਰੋ ਬਟਨ ਦੀ ਵਰਤੋਂ ਕਰੋ; ਸਾਲਾਂ ਦੁਆਰਾ ਨੇਵੀਗੇਟ ਕਰਨ ਲਈ ਸੀ.ਐੱਮ.ਡੀ. ਜਾਂ Ctrl + U ਉੱਪਰ ਜਾਂ ਹੇਠਾਂ ਐਰੋ ਬਟਨ ਦੀ ਵਰਤੋਂ ਕਰੋ;',
                        },
                        pl: {
                            htmlTex: 'Aby móc poruszać się po kalendarzu z klawiszem klawiatury: Użyj CMD lub CTRL + prawej lub lewej strzałki, aby nawigować przez miesiące; Użyj CMD lub CTRL + w górę lub w dół klawiszy strzałek, aby poruszać się przez lata;',
                        },
                        pt: {
                            htmlTex: 'Para poder navegar pelo calendário com a tecla do teclado: use as teclas de seta CMD ou Ctrl + direita ou esquerda para navegar por meses; Use as teclas de seta CMD ou Ctrl + para cima ou para baixo para navegar por anos;',
                        },
                        ro: {
                            htmlTex: 'Pentru a putea naviga prin calendarul cu tasta tastatură: utilizați tastele săgeată CMD sau CTRL + dreapta sau stânga pentru a naviga prin luni; Utilizați tastele săgeată CMD sau Ctrl + în sus sau în jos pentru a naviga de -a lungul anilor;',
                        },
                        ru: {
                            htmlTex: 'Чтобы иметь возможность ориентироваться в календаре с клавишной клавиш: используйте CMD или Ctrl + правый или левый клавиш стрелка, чтобы перемещаться в течение нескольких месяцев; Используйте CMD или CTRL + клавиши стрелки вверх или вниз, чтобы перемещаться по годам;',
                        },
                        si: {
                            htmlTex: 'යතුරුපුවරු යතුර සමඟ දින දර්ශනය හරහා සැරිසැරීමට හැකි වීම සඳහා: මාස ගණනක් තුළ සැරිසැරීමට CMD හෝ CTRL + දකුණ හෝ වම් ඊතල යතුරු භාවිතා කරන්න; අවුරුදු ගණනාව තුළ සැරිසැරීමට CMD හෝ CTRL + ඉහළට හෝ පහළට ඊතල යතුරු භාවිතා කරන්න;',
                        },
                        sk: {
                            htmlTex: 'Aby ste mohli prejsť v kalendári s klávesom Keyboard: Pomocou klávesov CMD alebo CTRL + vpravo alebo ľavej šípky navigujte v priebehu mesiacov; Na previgovanie rokov použite kľúče od CMD alebo CTRL + hore alebo dole;',
                        },
                        sl: {
                            htmlTex: 'Da bi se lahko pomaknili po koledarju s tipkovnico tipkovnice: uporabite CMD ali Ctrl + desno ali levo puščico za krmarjenje po mesecih; Za krmarjenje skozi leta uporabite tipke CMD ali CTRL + UP ali Down;',
                        },
                        sq: {
                            htmlTex: 'Në mënyrë që të jeni në gjendje të lundroni nëpër kalendar me çelësin e tastierës: Përdorni çelësat e shigjetës CMD ose CTRL + të djathtë ose të majtë për të lundruar me muaj; Përdorni çelësat e shigjetës CMD ose CTRL + lart ose poshtë për të lundruar me vite;',
                        },
                        sr: {
                            htmlTex: 'Да бисте могли да се крећете кроз календар са кључем тастатуре: Користите ЦМД или ЦТРЛ + десно или леве тастере са стрелицом да се крећете кроз месецима; Користите ЦМД или ЦТРЛ + горе или доле стрелице са стрелицама да бисте се кретали кроз године;',
                        },
                        sv: {
                            htmlTex: 'För att kunna navigera genom kalendern med tangentbordsknapp: Använd CMD eller CTRL + höger eller vänster pilnycklar för att navigera genom månader; Använd CMD eller CTRL + upp eller ned pilnycklar för att navigera genom år;',
                        },
                        th: {
                            htmlTex: 'เพื่อให้สามารถนำทางผ่านปฏิทินด้วยคีย์บอร์ดคีย์บอร์ด: ใช้ปุ่มลูกศร CMD หรือ CTRL + ขวาหรือซ้ายเพื่อนำทางผ่านเดือน ใช้ปุ่มลูกศร CMD หรือ CTRL + ขึ้นหรือลงเพื่อนำทางผ่านปี',
                        },
                        tr: {
                            htmlTex: 'Klavye anahtarıyla takvimde gezinebilmek için: aylar boyunca gezinmek için CMD veya CTRL + sağ veya sol ok tuşlarını kullanın; Yıllar boyunca gezinmek için CMD veya CTRL + yukarı veya aşağı ok tuşlarını kullanın;',
                        },
                        uk: {
                            htmlTex: 'Для того, щоб мати можливість орієнтуватися по календарі за допомогою клавіатури клавіатури: Використовуйте клавіші стрілки CMD або CTRL +, щоб перейти до місяців; Використовуйте клавіші стрілки CMD або CTRL + вгору або вниз, щоб орієнтуватися на роки;',
                        },
                        uz: {
                            htmlTex: "Klaviatura kaliti bilan taqvimga o'tish imkoniyatiga ega bo'lish uchun: CMD yoki CTRL + o'ng yoki chap o'q tugmalaridan oylar davomida harakatlanish uchun foydalaning; CMD yoki CTRL + yuqoriga yoki pastga o'qishni yillar davomida o'tish uchun foydalaning;",
                        },
                        vn: {
                            htmlTex: 'Để có thể điều hướng qua lịch bằng phím bàn phím: Sử dụng các phím CMD hoặc CTRL + bên phải hoặc bên trái để điều hướng qua tháng; Sử dụng các phím mũi tên CMD hoặc Ctrl + lên hoặc xuống để điều hướng qua nhiều năm;',
                        },
                        zh: {
                            htmlTex: '為了能夠使用鍵盤鍵瀏覽日曆:使用CMD或CTRL +右或左箭頭密鑰在幾個月中導航;使用CMD或CTRL +向上或向下箭頭鍵在多年中導航;',
                        },
                        zh_tw: {
                            htmlTex: '为了能够使用键盘键浏览日历:使用CMD或CTRL +右或左箭头密钥在几个月中导航;使用CMD或CTRL +向上或向下箭头键在多年中导航;',
                        },
                    };
                })(l10ns = Flatpickr.l10ns || (Flatpickr.l10ns = {}));
            })(Flatpickr = MonthPicker.Flatpickr || (MonthPicker.Flatpickr = {}));
        })(MonthPicker = OSUI.MonthPicker || (OSUI.MonthPicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var RangeSlider;
        (function (RangeSlider) {
            var NoUISlider;
            (function (NoUISlider) {
                class AbstractNoUiSlider extends OSFramework.OSUI.Patterns.RangeSlider.AbstractRangeSlider {
                    constructor(uniqueId, configs) {
                        super(uniqueId, configs);
                        this.throttleTimeValue = 200;
                        this.throttleTimer = undefined;
                        this._isInterval =
                            this.configs.rangeSliderMode === OSFramework.OSUI.Patterns.RangeSlider.Enum.Mode.Interval;
                    }
                    _setIsDisabled(isDisabled) {
                        isDisabled ? this.provider.disable() : this.provider.enable();
                    }
                    _setOnValueChangeEvent(changeEvent) {
                        this.provider.on(changeEvent, this.eventProviderValueChanged);
                    }
                    _setSize() {
                        if (this.configs.Size.includes('%') && parseFloat(this.configs.Size) > 100) {
                            this.configs.Size = OSFramework.OSUI.Patterns.RangeSlider.Enum.DefaultValues.PercentualSize;
                            console.warn(`The value of the Size property on the '${this.widgetId}' ${OSFramework.OSUI.GlobalEnum.PatternName.RangeSlider} can't be smaller than '${OSFramework.OSUI.Patterns.RangeSlider.Enum.DefaultValues.PercentualSize}'.`);
                        }
                        OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(this.selfElement, OSFramework.OSUI.Patterns.RangeSlider.Enum.CssProperties.Size, this.configs.Size);
                    }
                    _updateRangeValues() {
                        this.provider.updateOptions({
                            range: this.configs.getRangeConfig(),
                        });
                        if (this.configs.ShowTickMarks) {
                            this.provider.updateOptions({ pips: this.configs.getPipsConfig() });
                        }
                    }
                    createProviderInstance() {
                        this.provider = window.noUiSlider.create(this._rangeSliderProviderElem, this.noUiSliderOpts);
                        this.setInitialStates();
                        this.updateProviderEvents({
                            name: RangeSlider.NoUiSlider.Enum.ProviderInfo.Name,
                            version: RangeSlider.NoUiSlider.Enum.ProviderInfo.Version,
                            events: this.provider,
                        });
                        this.setInitialCSSClasses();
                        this._setOnValueChangeEvent(RangeSlider.NoUiSlider.Enum.NoUISliderEvents.Slide);
                        this.triggerPlatformInitializedEventCallback();
                    }
                    setHtmlElements() {
                        this._rangeSliderProviderElem = OSFramework.OSUI.Helper.Dom.ClassSelector(this.selfElement, OSFramework.OSUI.Patterns.RangeSlider.Enum.CssClass.RangeSliderProviderElem);
                    }
                    setInitialCSSClasses() {
                        if (this.configs.Orientation === OSFramework.OSUI.GlobalEnum.Orientation.Vertical) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.selfElement, OSFramework.OSUI.Patterns.RangeSlider.Enum.CssClass.ClassModifier +
                                OSFramework.OSUI.GlobalEnum.Orientation.Vertical);
                        }
                        else if (OSFramework.OSUI.GlobalEnum.Orientation.Horizontal) {
                            OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, OSFramework.OSUI.Patterns.RangeSlider.Enum.CssClass.ClassModifier +
                                OSFramework.OSUI.GlobalEnum.Orientation.Vertical);
                        }
                        if (this.configs.ShowTickMarks) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.selfElement, OSFramework.OSUI.Patterns.RangeSlider.Enum.CssClass.HasTicks);
                        }
                        else {
                            OSFramework.OSUI.Helper.Dom.Styles.RemoveClass(this.selfElement, OSFramework.OSUI.Patterns.RangeSlider.Enum.CssClass.HasTicks);
                        }
                    }
                    setInitialStates() {
                        this._setSize();
                        this._setIsDisabled(this.configs.IsDisabled);
                    }
                    unsetCallbacks() {
                        this.eventProviderValueChanged = undefined;
                        super.unsetCallbacks();
                    }
                    unsetHtmlElements() {
                        this._rangeSliderProviderElem = undefined;
                    }
                    build() {
                        super.build();
                        this.setHtmlElements();
                    }
                    changeProperty(propertyName, propertyValue) {
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.MinValue:
                                case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.MaxValue:
                                    this._updateRangeValues();
                                    break;
                                case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.Orientation:
                                    this.redraw();
                                    break;
                                case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.IsDisabled:
                                    this._setIsDisabled(this.configs.IsDisabled);
                                    break;
                                case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.TickMarksInterval:
                                    this.provider.updateOptions({ pips: this.configs.getPipsConfig() });
                                    break;
                                case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.Step:
                                    this.provider.updateOptions({ step: this.configs.Step });
                                    break;
                                case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.Size:
                                    this._setSize();
                                    break;
                                case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.ShowFloatingLabel:
                                    this.provider.updateOptions({ tooltips: this.configs.getTooltipFormat() });
                                    break;
                            }
                        }
                    }
                    disable() {
                        this._setIsDisabled(true);
                    }
                    dispose() {
                        if (this.isBuilt) {
                            this.unsetCallbacks();
                            this.unsetHtmlElements();
                            this.provider.destroy();
                        }
                        super.dispose();
                    }
                    enable() {
                        this._setIsDisabled(false);
                    }
                    getValue() {
                        return this.provider.get();
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case OSFramework.OSUI.Patterns.RangeSlider.Enum.RangeSliderEvents.OnValueChange:
                                if (this.platformEventValueChange === undefined) {
                                    this.platformEventValueChange = callback;
                                }
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                                break;
                        }
                    }
                    setProviderConfigs(newConfigs) {
                        this.configs.setExtensibilityConfigs(newConfigs);
                        this.redraw();
                        super.setProviderConfigs(newConfigs);
                    }
                    setRangeIntervalChangeOnDragEnd() {
                        this.provider.off(RangeSlider.NoUiSlider.Enum.NoUISliderEvents.Slide, this.eventProviderValueChanged);
                        this._setOnValueChangeEvent(RangeSlider.NoUiSlider.Enum.NoUISliderEvents.Change);
                    }
                }
                NoUISlider.AbstractNoUiSlider = AbstractNoUiSlider;
            })(NoUISlider = RangeSlider.NoUISlider || (RangeSlider.NoUISlider = {}));
        })(RangeSlider = OSUI.RangeSlider || (OSUI.RangeSlider = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var RangeSlider;
        (function (RangeSlider) {
            var NoUiSlider;
            (function (NoUiSlider) {
                class AbstractNoUiSliderConfig extends OSFramework.OSUI.Patterns.RangeSlider
                    .AbstractRangeSliderConfig {
                    getPipsConfig() {
                        let tickMarksValues = Math.floor(this.TickMarksInterval);
                        if (tickMarksValues > this.MaxValue) {
                            tickMarksValues = this.MaxValue;
                        }
                        if (tickMarksValues < 1) {
                            console.warn('The interval between tick marks, when they exist, can not be smaller than one or a decimal number (library restraint). If you do not want TickMarks to show, set the ShowTickMarks parameter to false.');
                            this.ShowTickMarks = true;
                            return null;
                        }
                        const ticksDensity = tickMarksValues * 100;
                        const list = [];
                        let tick = this.MinValue;
                        while (tick <= this.MaxValue) {
                            list.push(tick);
                            tick += tickMarksValues;
                        }
                        if (tick !== this.MaxValue) {
                            list.push(this.MaxValue);
                        }
                        return {
                            values: list,
                            density: ticksDensity,
                            mode: RangeSlider.NoUiSlider.Enum.NoUiSliderModeOptions.Values,
                        };
                    }
                    getProviderConfig() {
                        this._providerOptions = {
                            direction: OutSystems.OSUI.Utils.GetIsRTL()
                                ? OSFramework.OSUI.GlobalEnum.Direction.RTL
                                : OSFramework.OSUI.GlobalEnum.Direction.LTR,
                            step: this.Step,
                            orientation: this.Orientation,
                            pips: this.ShowTickMarks ? this.getPipsConfig() : null,
                            range: this.getRangeConfig(),
                            tooltips: this.getTooltipFormat(),
                        };
                        return this.mergeConfigs(this._providerOptions, this.providerExtendedOptions);
                    }
                    getRangeConfig() {
                        return {
                            min: this.MinValue,
                            max: this.MaxValue === this.MinValue ? 100 : this.MaxValue,
                        };
                    }
                    getTooltipFormat() {
                        const tooltipValue = this.ShowFloatingLabel ? window.wNumb({ decimals: 0 }) : false;
                        let tooltipsFormat;
                        if (this.rangeSliderMode === OSFramework.OSUI.Patterns.RangeSlider.Enum.Mode.Interval) {
                            tooltipsFormat = [tooltipValue, tooltipValue];
                        }
                        else {
                            tooltipsFormat = [tooltipValue];
                        }
                        return tooltipsFormat;
                    }
                    setExtensibilityConfigs(newConfigs) {
                        this.providerExtendedOptions = newConfigs;
                    }
                }
                NoUiSlider.AbstractNoUiSliderConfig = AbstractNoUiSliderConfig;
            })(NoUiSlider = RangeSlider.NoUiSlider || (RangeSlider.NoUiSlider = {}));
        })(RangeSlider = OSUI.RangeSlider || (OSUI.RangeSlider = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var RangeSlider;
        (function (RangeSlider) {
            var NoUiSlider;
            (function (NoUiSlider) {
                var Enum;
                (function (Enum) {
                    let ProviderInfo;
                    (function (ProviderInfo) {
                        ProviderInfo["Name"] = "noUISlider";
                        ProviderInfo["Version"] = "15.8.1";
                    })(ProviderInfo = Enum.ProviderInfo || (Enum.ProviderInfo = {}));
                    let NoUISliderLabels;
                    (function (NoUISliderLabels) {
                        NoUISliderLabels["Handle"] = "handler";
                        NoUISliderLabels["Lower"] = "lower-handle";
                        NoUISliderLabels["Single"] = "handle";
                        NoUISliderLabels["Upper"] = "upper-handle";
                    })(NoUISliderLabels = Enum.NoUISliderLabels || (Enum.NoUISliderLabels = {}));
                    let NoUISliderEvents;
                    (function (NoUISliderEvents) {
                        NoUISliderEvents["Change"] = "change";
                        NoUISliderEvents["End"] = "end";
                        NoUISliderEvents["Start"] = "start";
                        NoUISliderEvents["Slide"] = "slide";
                    })(NoUISliderEvents = Enum.NoUISliderEvents || (Enum.NoUISliderEvents = {}));
                    let NoUiSliderConnectOptions;
                    (function (NoUiSliderConnectOptions) {
                        NoUiSliderConnectOptions["Lower"] = "lower";
                    })(NoUiSliderConnectOptions = Enum.NoUiSliderConnectOptions || (Enum.NoUiSliderConnectOptions = {}));
                    let NoUiSliderModeOptions;
                    (function (NoUiSliderModeOptions) {
                        NoUiSliderModeOptions["Values"] = "values";
                    })(NoUiSliderModeOptions = Enum.NoUiSliderModeOptions || (Enum.NoUiSliderModeOptions = {}));
                })(Enum = NoUiSlider.Enum || (NoUiSlider.Enum = {}));
            })(NoUiSlider = RangeSlider.NoUiSlider || (RangeSlider.NoUiSlider = {}));
        })(RangeSlider = OSUI.RangeSlider || (OSUI.RangeSlider = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var RangeSlider;
        (function (RangeSlider) {
            var NoUiSlider;
            (function (NoUiSlider) {
                var Factory;
                (function (Factory) {
                    function NewNoUiSlider(rangeSliderId, configs, mode) {
                        let _rangeSliderItem = null;
                        switch (mode) {
                            case OSFramework.OSUI.Patterns.RangeSlider.Enum.Mode.Single:
                                _rangeSliderItem = new Providers.OSUI.RangeSlider.NoUISlider.SingleSlider.OSUINoUiSliderSingle(rangeSliderId, JSON.parse(configs));
                                break;
                            case OSFramework.OSUI.Patterns.RangeSlider.Enum.Mode.Interval:
                                _rangeSliderItem = new Providers.OSUI.RangeSlider.NoUISlider.IntervalSlider.OSUINoUiSliderInterval(rangeSliderId, JSON.parse(configs));
                                break;
                            default:
                                throw new Error(`There is no RangeSlider of ${mode} type`);
                        }
                        return _rangeSliderItem;
                    }
                    Factory.NewNoUiSlider = NewNoUiSlider;
                })(Factory = NoUiSlider.Factory || (NoUiSlider.Factory = {}));
            })(NoUiSlider = RangeSlider.NoUiSlider || (RangeSlider.NoUiSlider = {}));
        })(RangeSlider = OSUI.RangeSlider || (OSUI.RangeSlider = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var RangeSlider;
        (function (RangeSlider) {
            var NoUISlider;
            (function (NoUISlider) {
                var Utils;
                (function (Utils) {
                    function _setRangeValues(providerConfigs) {
                        const _noUiSliderConfigs = providerConfigs;
                        if (_noUiSliderConfigs.range) {
                            if (_noUiSliderConfigs.range.length <= 0) {
                                delete _noUiSliderConfigs.range;
                            }
                            else {
                                const _rangeValues = {};
                                for (const element of _noUiSliderConfigs.range) {
                                    _rangeValues[element.key] = element.value === undefined ? 0 : element.value;
                                }
                                _noUiSliderConfigs.range = _rangeValues;
                            }
                        }
                        return _noUiSliderConfigs;
                    }
                    function NormalizeNoUISliderConfigs(noUiSliderConfigs) {
                        const finalConfigs = _setRangeValues(noUiSliderConfigs);
                        return OutSystems.OSUI.Utils.AbstractNormalizeProviderConfigs(finalConfigs);
                    }
                    Utils.NormalizeNoUISliderConfigs = NormalizeNoUISliderConfigs;
                })(Utils = NoUISlider.Utils || (NoUISlider.Utils = {}));
            })(NoUISlider = RangeSlider.NoUISlider || (RangeSlider.NoUISlider = {}));
        })(RangeSlider = OSUI.RangeSlider || (OSUI.RangeSlider = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var RangeSlider;
        (function (RangeSlider) {
            var NoUISlider;
            (function (NoUISlider) {
                var IntervalSlider;
                (function (IntervalSlider) {
                    class OSUINoUiSliderInterval extends NoUISlider.AbstractNoUiSlider {
                        constructor(uniqueId, configs) {
                            super(uniqueId, new NoUISlider.SliderInterval.NoUiSliderIntervalConfig(configs));
                        }
                        _valueChangeCallback(value) {
                            if (value !== undefined) {
                                this.configs.StartingValueFrom = value[0];
                                this.configs.StartingValueTo = value[1];
                            }
                            if (this.throttleTimer === undefined) {
                                this.throttleTimer = setTimeout(() => {
                                    this.platformEventValueChange(this.widgetId, this.configs.StartingValueFrom, this.configs.StartingValueTo);
                                    this.throttleTimer = undefined;
                                }, this.throttleTimeValue);
                            }
                        }
                        prepareConfigs() {
                            this.noUiSliderOpts = this.configs.getProviderConfig();
                            this.createProviderInstance();
                        }
                        redraw() {
                            const value = this.getValue();
                            this.configs.StartingValueFrom = value[0];
                            this.configs.StartingValueTo = value[1];
                            super.redraw();
                        }
                        setA11YProperties() {
                            this.noUiSliderOpts.handleAttributes = [
                                { 'aria-label': RangeSlider.NoUiSlider.Enum.NoUISliderLabels.Lower },
                                { 'aria-label': RangeSlider.NoUiSlider.Enum.NoUISliderLabels.Upper },
                            ];
                        }
                        setCallbacks() {
                            this.eventProviderValueChanged = this._valueChangeCallback.bind(this);
                        }
                        build() {
                            super.build();
                            this.setCallbacks();
                            this.prepareConfigs();
                            this.setA11YProperties();
                            this.finishBuild();
                        }
                        changeProperty(propertyName, propertyValue) {
                            super.changeProperty(propertyName, propertyValue);
                            if (this.isBuilt) {
                                switch (propertyName) {
                                    case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.StartingValueFrom:
                                        this.setValue(propertyValue, this.configs.StartingValueTo);
                                        break;
                                    case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.StartingValueTo:
                                        this.setValue(this.configs.StartingValueFrom, propertyValue);
                                        break;
                                    case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.ShowTickMarks:
                                        this.redraw();
                                        break;
                                }
                            }
                        }
                        resetValue() {
                            this.configs.StartingValueFrom = this.configs.InitialValueFrom;
                            this.configs.StartingValueTo = this.configs.InitialValueTo;
                            this.provider.set([this.configs.InitialValueFrom, this.configs.InitialValueTo]);
                        }
                        setValue(intervalStart, intervalEnd) {
                            if (intervalStart < intervalEnd) {
                                this.configs.StartingValueFrom = intervalStart;
                                this.configs.StartingValueTo = intervalEnd;
                                this.provider.set([intervalStart, intervalEnd]);
                            }
                            else if (intervalStart > this.configs.MinValue && intervalEnd < this.configs.MaxValue) {
                                throw new Error(`${OSFramework.OSUI.ErrorCodes.RangeSlider.FailSetValue}: The values must be within the specified range.`);
                            }
                            else {
                                throw new Error(`${OSFramework.OSUI.ErrorCodes.RangeSlider.FailSetValue}: The start value cannot be bigger than the end value.`);
                            }
                        }
                    }
                    IntervalSlider.OSUINoUiSliderInterval = OSUINoUiSliderInterval;
                })(IntervalSlider = NoUISlider.IntervalSlider || (NoUISlider.IntervalSlider = {}));
            })(NoUISlider = RangeSlider.NoUISlider || (RangeSlider.NoUISlider = {}));
        })(RangeSlider = OSUI.RangeSlider || (OSUI.RangeSlider = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var RangeSlider;
        (function (RangeSlider) {
            var NoUISlider;
            (function (NoUISlider) {
                var SliderInterval;
                (function (SliderInterval) {
                    class NoUiSliderIntervalConfig extends Providers.OSUI.RangeSlider.NoUiSlider.AbstractNoUiSliderConfig {
                        constructor(config) {
                            super(config);
                            this.rangeSliderMode = OSFramework.OSUI.Patterns.RangeSlider.Enum.Mode.Interval;
                        }
                        getProviderConfig() {
                            let rangeSliderOptions = {
                                handleAttributes: [
                                    { 'aria-label': RangeSlider.NoUiSlider.Enum.NoUISliderLabels.Handle },
                                    { 'aria-label': RangeSlider.NoUiSlider.Enum.NoUISliderLabels.Handle },
                                ],
                                start: [this.StartingValueFrom, this.StartingValueTo],
                                connect: true,
                            };
                            return this.mergeConfigs(super.getProviderConfig(), rangeSliderOptions, this.providerExtendedOptions);
                        }
                    }
                    SliderInterval.NoUiSliderIntervalConfig = NoUiSliderIntervalConfig;
                })(SliderInterval = NoUISlider.SliderInterval || (NoUISlider.SliderInterval = {}));
            })(NoUISlider = RangeSlider.NoUISlider || (RangeSlider.NoUISlider = {}));
        })(RangeSlider = OSUI.RangeSlider || (OSUI.RangeSlider = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var RangeSlider;
        (function (RangeSlider) {
            var NoUISlider;
            (function (NoUISlider) {
                var SingleSlider;
                (function (SingleSlider) {
                    class OSUINoUiSliderSingle extends NoUISlider.AbstractNoUiSlider {
                        constructor(uniqueId, configs) {
                            super(uniqueId, new NoUISlider.SliderSingle.NoUiSliderSingleConfig(configs));
                        }
                        _valueChangeCallback(value) {
                            if (value !== undefined) {
                                this.configs.StartingValueFrom = value[0];
                            }
                            if (this.throttleTimer === undefined) {
                                this.throttleTimer = setTimeout(() => {
                                    this.platformEventValueChange(this.widgetId, this.configs.StartingValueFrom, undefined);
                                    this.throttleTimer = undefined;
                                }, this.throttleTimeValue);
                            }
                        }
                        prepareConfigs() {
                            this.noUiSliderOpts = this.configs.getProviderConfig();
                            this.createProviderInstance();
                        }
                        redraw() {
                            const value = this.getValue();
                            this.configs.StartingValueFrom = value;
                            super.redraw();
                        }
                        setA11YProperties() {
                            this.noUiSliderOpts.handleAttributes = [
                                { 'aria-label': RangeSlider.NoUiSlider.Enum.NoUISliderLabels.Single },
                            ];
                        }
                        setCallbacks() {
                            this.eventProviderValueChanged = this._valueChangeCallback.bind(this);
                        }
                        build() {
                            super.build();
                            this.setCallbacks();
                            this.prepareConfigs();
                            this.setA11YProperties();
                            this.finishBuild();
                        }
                        changeProperty(propertyName, propertyValue) {
                            super.changeProperty(propertyName, propertyValue);
                            if (this.isBuilt) {
                                switch (propertyName) {
                                    case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.StartingValueFrom:
                                        this.setValue(propertyValue);
                                        break;
                                    case OSFramework.OSUI.Patterns.RangeSlider.Enum.Properties.ShowTickMarks:
                                        this.redraw();
                                        break;
                                }
                            }
                        }
                        resetValue() {
                            this.configs.StartingValueFrom = this.configs.InitialValueFrom;
                            this.provider.set(this.configs.InitialValueFrom);
                        }
                        setValue(value) {
                            if (value >= this.configs.MinValue && value <= this.configs.MaxValue) {
                                this.configs.StartingValueFrom = value;
                                this.provider.set(value);
                            }
                            else {
                                throw new Error(`${OSFramework.OSUI.ErrorCodes.RangeSlider.FailSetValue}: The value must be between the minimum value and maximum value set.`);
                            }
                        }
                    }
                    SingleSlider.OSUINoUiSliderSingle = OSUINoUiSliderSingle;
                })(SingleSlider = NoUISlider.SingleSlider || (NoUISlider.SingleSlider = {}));
            })(NoUISlider = RangeSlider.NoUISlider || (RangeSlider.NoUISlider = {}));
        })(RangeSlider = OSUI.RangeSlider || (OSUI.RangeSlider = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var RangeSlider;
        (function (RangeSlider) {
            var NoUISlider;
            (function (NoUISlider) {
                var SliderSingle;
                (function (SliderSingle) {
                    class NoUiSliderSingleConfig extends Providers.OSUI.RangeSlider.NoUiSlider.AbstractNoUiSliderConfig {
                        constructor(config) {
                            super(config);
                            this.rangeSliderMode = OSFramework.OSUI.Patterns.RangeSlider.Enum.Mode.Single;
                        }
                        getProviderConfig() {
                            let singleSliderOptions = {
                                handleAttributes: [{ 'aria-label': RangeSlider.NoUiSlider.Enum.NoUISliderLabels.Handle }],
                                start: [this.StartingValueFrom],
                                connect: RangeSlider.NoUiSlider.Enum.NoUiSliderConnectOptions.Lower,
                            };
                            return this.mergeConfigs(super.getProviderConfig(), singleSliderOptions, this.providerExtendedOptions);
                        }
                    }
                    SliderSingle.NoUiSliderSingleConfig = NoUiSliderSingleConfig;
                })(SliderSingle = NoUISlider.SliderSingle || (NoUISlider.SliderSingle = {}));
            })(NoUISlider = RangeSlider.NoUISlider || (RangeSlider.NoUISlider = {}));
        })(RangeSlider = OSUI.RangeSlider || (OSUI.RangeSlider = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var SharedProviderResources;
        (function (SharedProviderResources) {
            var Flatpickr;
            (function (Flatpickr) {
                var Enum;
                (function (Enum) {
                    let CssClasses;
                    (function (CssClasses) {
                        CssClasses["CalendarContainer"] = "flatpickr-calendar";
                    })(CssClasses = Enum.CssClasses || (Enum.CssClasses = {}));
                    let ProviderInfo;
                    (function (ProviderInfo) {
                        ProviderInfo["Name"] = "Flatpickr";
                        ProviderInfo["Version"] = "4.6.13";
                    })(ProviderInfo = Enum.ProviderInfo || (Enum.ProviderInfo = {}));
                })(Enum = Flatpickr.Enum || (Flatpickr.Enum = {}));
            })(Flatpickr = SharedProviderResources.Flatpickr || (SharedProviderResources.Flatpickr = {}));
        })(SharedProviderResources = OSUI.SharedProviderResources || (OSUI.SharedProviderResources = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var SharedProviderResources;
        (function (SharedProviderResources) {
            var Flatpickr;
            (function (Flatpickr) {
                class UpdatePositionOnScroll {
                    constructor(picker) {
                        this._picker = picker;
                        this._isTimePicker = this._picker instanceof OSUI.TimePicker.Flatpickr.OSUIFlatpickrTime;
                        this._parentSidebar = picker.selfElement.closest(`${OSFramework.OSUI.Constants.Dot}${OSFramework.OSUI.Patterns.Sidebar.Enum.CssClass.Content}`);
                        this._setCallbacks();
                        this._setUpEvents();
                    }
                    _onScreenScroll() {
                        if (this._picker.isBuilt) {
                            if (this._picker.provider.isOpen && OSFramework.OSUI.Helper.DeviceInfo.IsPhone) {
                                if (this._isTimePicker ||
                                    document.activeElement.closest(`${OSFramework.OSUI.Constants.Dot}${Flatpickr.Enum.CssClasses.CalendarContainer}`) === this._picker.provider.calendarContainer) {
                                    this._picker.provider._positionCalendar();
                                }
                                else {
                                    this._picker.provider.close();
                                }
                            }
                            if (OSFramework.OSUI.Helper.DeviceInfo.IsPhone === false) {
                                if (this._picker.provider.isOpen) {
                                    this._picker.provider._positionCalendar();
                                    this._requestAnimationOnBodyScroll = requestAnimationFrame(this._onScrollEvent);
                                }
                                else if (this._requestAnimationOnBodyScroll !== undefined) {
                                    cancelAnimationFrame(this._requestAnimationOnBodyScroll);
                                }
                            }
                        }
                    }
                    _setCallbacks() {
                        this._onScrollEvent = this._onScreenScroll.bind(this);
                    }
                    _setUpEvents() {
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.addHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.ScreenOnScroll, this._onScrollEvent);
                        if (this._parentSidebar) {
                            this._parentSidebar.addEventListener(OSFramework.OSUI.GlobalEnum.HTMLEvent.Scroll, this._onScrollEvent);
                        }
                    }
                    _unsetCallbacks() {
                        this._onScrollEvent = undefined;
                    }
                    _unsetEvents() {
                        OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.removeHandler(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.ScreenOnScroll, this._onScrollEvent);
                    }
                    dispose() {
                        this._unsetEvents();
                        this._unsetCallbacks();
                        this._onScrollEvent = undefined;
                        this._requestAnimationOnBodyScroll = undefined;
                    }
                }
                Flatpickr.UpdatePositionOnScroll = UpdatePositionOnScroll;
            })(Flatpickr = SharedProviderResources.Flatpickr || (SharedProviderResources.Flatpickr = {}));
        })(SharedProviderResources = OSUI.SharedProviderResources || (OSUI.SharedProviderResources = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var SharedProviderResources;
        (function (SharedProviderResources) {
            var Flatpickr;
            (function (Flatpickr) {
                class UpdateZindex {
                    constructor(picker) {
                        this._patternExceptions = [
                            { name: 'BottomSheet', class: { get: 'osui-bottom-sheet', set: 'inside-bottom-sheet' } },
                            { name: 'Notification', class: { get: 'osui-notification', set: 'inside-notification' } },
                            { name: 'Popup', class: { get: 'popup-backdrop', set: 'inside-popup' } },
                            { name: 'Sidebar', class: { get: 'osui-sidebar', set: 'inside-sidebar' } },
                        ];
                        this._picker = picker;
                        this._updateZindex();
                    }
                    _updateZindex() {
                        for (const pattern of this._patternExceptions) {
                            if (this._picker.selfElement.closest(OSFramework.OSUI.Constants.Dot + pattern.class.get)) {
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(this._picker.selfElement, pattern.class.set);
                                OSFramework.OSUI.Helper.Dom.Styles.AddClass(this._picker.provider.calendarContainer, pattern.class.set);
                                break;
                            }
                        }
                    }
                }
                Flatpickr.UpdateZindex = UpdateZindex;
            })(Flatpickr = SharedProviderResources.Flatpickr || (SharedProviderResources.Flatpickr = {}));
        })(SharedProviderResources = OSUI.SharedProviderResources || (OSUI.SharedProviderResources = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var SharedProviderResources;
        (function (SharedProviderResources) {
            var Flatpickr;
            (function (Flatpickr) {
                function NormalizeFlatpickrConfigs(flatpickrConfigs) {
                    const _htmlElementsProps = ['positionElement', 'appendTo'];
                    return OutSystems.OSUI.Utils.AbstractNormalizeProviderConfigs(flatpickrConfigs, _htmlElementsProps);
                }
                Flatpickr.NormalizeFlatpickrConfigs = NormalizeFlatpickrConfigs;
            })(Flatpickr = SharedProviderResources.Flatpickr || (SharedProviderResources.Flatpickr = {}));
        })(SharedProviderResources = OSUI.SharedProviderResources || (OSUI.SharedProviderResources = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var TimePicker;
        (function (TimePicker) {
            var Flatpickr;
            (function (Flatpickr) {
                var Enum;
                (function (Enum) {
                    let Properties;
                    (function (Properties) {
                        Properties["InitialTime"] = "InitialTime";
                    })(Properties = Enum.Properties || (Enum.Properties = {}));
                    let InputFormats;
                    (function (InputFormats) {
                        InputFormats["Format12h"] = "h:i K";
                        InputFormats["Format24h"] = "H:i";
                    })(InputFormats = Enum.InputFormats || (Enum.InputFormats = {}));
                })(Enum = Flatpickr.Enum || (Flatpickr.Enum = {}));
            })(Flatpickr = TimePicker.Flatpickr || (TimePicker.Flatpickr = {}));
        })(TimePicker = OSUI.TimePicker || (OSUI.TimePicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var TimePicker;
        (function (TimePicker) {
            var Flatpickr;
            (function (Flatpickr) {
                Flatpickr.ErrorCodes = {
                    FailSetLocale: 'OSUI-PRO-02001',
                };
            })(Flatpickr = TimePicker.Flatpickr || (TimePicker.Flatpickr = {}));
        })(TimePicker = OSUI.TimePicker || (OSUI.TimePicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var TimePicker;
        (function (TimePicker) {
            var Flatpickr;
            (function (Flatpickr) {
                class OSUIFlatpickrTime extends OSFramework.OSUI.Patterns.TimePicker.AbstractTimePicker {
                    constructor(uniqueId, configs) {
                        super(uniqueId, new Flatpickr.FlatpickrTimeConfig(configs));
                        this.configs.OnChangeEventCallback = this.onTimeSelectedEvent.bind(this);
                        this.configs.OnCloseEventCallback = this.onClose.bind(this);
                        this.configs.OnOpenEventCallback = this.onOpen.bind(this);
                    }
                    _getBodyOnClickGlobalEvent() {
                        this._bodyOnClickGlobalEvent =
                            OSFramework.OSUI.Event.DOMEvents.Listeners.GlobalListenerManager.Instance.events.get(OSFramework.OSUI.Event.DOMEvents.Listeners.Type.BodyOnClick);
                    }
                    _setAttributes() {
                        this.flatpickrInputElem = this.timePickerPlatformInputElem.nextSibling;
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.DataInput, OSFramework.OSUI.Constants.EmptyString);
                        if (this.flatpickrInputElem.disabled) {
                            OSFramework.OSUI.Helper.Dom.Attribute.Remove(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Disabled);
                        }
                    }
                    _setCalendarCssClasses() {
                        OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.provider.calendarContainer, OSFramework.OSUI.Patterns.TimePicker.Enum.CssClass.Dropdown);
                        if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.InputClassTypes.InputLarge)) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.provider.calendarContainer, OSFramework.OSUI.Patterns.Dropdown.Enum.CssClass.DropdownLarge);
                        }
                        else if (OSFramework.OSUI.Helper.Dom.Styles.ContainsClass(this.flatpickrInputElem, OSFramework.OSUI.GlobalEnum.InputClassTypes.InputSmall)) {
                            OSFramework.OSUI.Helper.Dom.Styles.AddClass(this.provider.calendarContainer, OSFramework.OSUI.Patterns.Dropdown.Enum.CssClass.DropdownSmall);
                        }
                        if (this.configs.ExtendedClass !== '') {
                            OSFramework.OSUI.Helper.Dom.Styles.ExtendedClass(this.provider.calendarContainer, '', this.configs.ExtendedClass);
                        }
                    }
                    _updateA11yProperties() {
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.flatpickrInputElem, OSFramework.OSUI.Constants.A11YAttributes.TabIndex, this._isPlatformInputDisabled
                            ? OSFramework.OSUI.Constants.A11YAttributes.States.TabIndexHidden
                            : OSFramework.OSUI.Constants.A11YAttributes.States.TabIndexShow);
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.flatpickrInputElem, OSFramework.OSUI.Constants.A11YAttributes.Aria.Hidden, this._isPlatformInputDisabled.toString());
                    }
                    createProviderInstance() {
                        if (this.timePickerPlatformInputElem && this._flatpickrOpts.defaultDate === undefined) {
                            this.timePickerPlatformInputElem.value = OSFramework.OSUI.Constants.EmptyString;
                        }
                        this.provider = window.flatpickr(this.timePickerPlatformInputElem, this._flatpickrOpts);
                        this._setAttributes();
                        if (this.provider.calendarContainer !== undefined) {
                            this._setCalendarCssClasses();
                            this._bodyScrollCommonBehaviour = new OSUI.SharedProviderResources.Flatpickr.UpdatePositionOnScroll(this);
                            this._zindexCommonBehavior = new OSUI.SharedProviderResources.Flatpickr.UpdateZindex(this);
                            if (this.configs.InitialTime !== undefined) {
                                OSFramework.OSUI.Helper.Dom.SetInputValue(this.timePickerPlatformInputElem, this.configs.InitialTime);
                            }
                        }
                        this.updatePlatformInputAttrs();
                        this.setA11YProperties();
                        this.updateProviderEvents({
                            name: OSUI.SharedProviderResources.Flatpickr.Enum.ProviderInfo.Name,
                            version: OSUI.SharedProviderResources.Flatpickr.Enum.ProviderInfo.Version,
                            events: this.provider.config,
                        });
                        this.triggerPlatformInitializedEventCallback();
                    }
                    onClose() {
                        if (this._bodyOnClickGlobalEvent !== undefined) {
                            this._bodyOnClickGlobalEvent.enableBodyClickEvent();
                        }
                    }
                    onOpen() {
                        if (this._bodyOnClickGlobalEvent !== undefined) {
                            this._bodyOnClickGlobalEvent.disableBodyClickEvent();
                        }
                    }
                    onTimeSelectedEvent(selectedTime) {
                        const _selectedTime = selectedTime.length > 0 ? OSFramework.OSUI.Helper.Dates.GetTimeFromDate(selectedTime[0]) : '';
                        OSFramework.OSUI.Helper.Dom.SetInputValue(this.timePickerPlatformInputElem, _selectedTime);
                        this.triggerPlatformEventCallback(this.onChangeCallbackEvent, _selectedTime);
                    }
                    prepareConfigs() {
                        this._flatpickrOpts = this.configs.getProviderConfig();
                        this.createProviderInstance();
                    }
                    setA11YProperties() {
                        if (this.provider.calendarContainer !== undefined) {
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(this.timePickerPlatformInputElem, OSFramework.OSUI.Constants.A11YAttributes.TabIndex, OSFramework.OSUI.Constants.A11YAttributes.States.TabIndexHidden);
                            OSFramework.OSUI.Helper.Dom.Attribute.Set(this.timePickerPlatformInputElem, OSFramework.OSUI.Constants.A11YAttributes.Aria.Hidden, OSFramework.OSUI.Constants.A11YAttributes.States.True);
                            this._updateA11yProperties();
                        }
                    }
                    setCallbacks() {
                        console.log(OSFramework.OSUI.GlobalEnum.WarningMessages.MethodNotImplemented);
                    }
                    setHtmlElements() {
                        this.timePickerPlatformInputElem = this.selfElement.querySelector(OSFramework.OSUI.GlobalEnum.CSSSelectors.InputFormControl);
                        this._isPlatformInputDisabled = this.timePickerPlatformInputElem.disabled;
                        if (!this.timePickerPlatformInputElem) {
                            throw new Error(`The timepicker input at TimepickerId '${this.widgetId}' is missing`);
                        }
                    }
                    unsetCallbacks() {
                        this.configs.OnChangeEventCallback = undefined;
                        this.configs.OnCloseEventCallback = undefined;
                        this.configs.OnOpenEventCallback = undefined;
                        this.onChangeCallbackEvent = undefined;
                        super.unsetCallbacks();
                    }
                    unsetHtmlElements() {
                        this.timePickerPlatformInputElem = undefined;
                    }
                    updatePlatformInputAttrs() {
                        OSFramework.OSUI.Helper.Dom.Attribute.Set(this.timePickerPlatformInputElem, OSFramework.OSUI.GlobalEnum.HTMLAttributes.Type, OSFramework.OSUI.GlobalEnum.InputTypeAttr.Time);
                    }
                    build() {
                        super.build();
                        this._getBodyOnClickGlobalEvent();
                        this.setHtmlElements();
                        this.prepareConfigs();
                        this.finishBuild();
                    }
                    changeProperty(propertyName, propertyValue) {
                        const oldExtendedClass = this.configs.ExtendedClass;
                        super.changeProperty(propertyName, propertyValue);
                        if (this.isBuilt) {
                            switch (propertyName) {
                                case OSFramework.OSUI.Patterns.TimePicker.Enum.Properties.InitialTime:
                                case OSFramework.OSUI.Patterns.TimePicker.Enum.Properties.Is24Hours:
                                case OSFramework.OSUI.Patterns.TimePicker.Enum.Properties.MaxTime:
                                case OSFramework.OSUI.Patterns.TimePicker.Enum.Properties.MinTime:
                                case OSFramework.OSUI.Patterns.TimePicker.Enum.Properties.TimeFormat:
                                    this.redraw();
                                    break;
                                case OSFramework.OSUI.GlobalEnum.CommonPatternsProperties.ExtendedClass:
                                    OSFramework.OSUI.Helper.Dom.Styles.ExtendedClass(this.provider.calendarContainer, oldExtendedClass, propertyValue);
                                    break;
                            }
                        }
                    }
                    clear() {
                        const isInputDisable = this.timePickerPlatformInputElem.disabled;
                        if (isInputDisable === false) {
                            this.provider.clear();
                        }
                    }
                    close() {
                        if (this.provider.isOpen) {
                            this.provider.close();
                        }
                    }
                    dispose() {
                        if (this.isBuilt) {
                            this.unsetCallbacks();
                            this.unsetHtmlElements();
                            if (this._bodyScrollCommonBehaviour !== undefined) {
                                this._bodyScrollCommonBehaviour.dispose();
                                this._bodyScrollCommonBehaviour = undefined;
                            }
                            OSFramework.OSUI.Helper.AsyncInvocation(this.provider.destroy);
                        }
                        super.dispose();
                    }
                    onRender() {
                        const isInputDisable = this.timePickerPlatformInputElem.disabled;
                        if (this._isPlatformInputDisabled !== isInputDisable) {
                            this._isPlatformInputDisabled = isInputDisable;
                            this._updateA11yProperties();
                        }
                    }
                    open() {
                        const isInputDisable = this.timePickerPlatformInputElem.disabled;
                        if (this.provider.isOpen === false && isInputDisable === false) {
                            this.provider.open();
                        }
                    }
                    registerCallback(eventName, callback) {
                        switch (eventName) {
                            case OSFramework.OSUI.Patterns.TimePicker.Enum.TimePickerEvents.OnChange:
                                this.onChangeCallbackEvent = callback;
                                break;
                            default:
                                super.registerCallback(eventName, callback);
                                break;
                        }
                    }
                    setEditableInput(isEditable) {
                        if (this.configs.AllowInput !== isEditable) {
                            this.configs.AllowInput = isEditable;
                            this.redraw();
                        }
                    }
                    setLanguage(value) {
                        this.configs.Lang = value.toLowerCase();
                        if (this.provider !== undefined) {
                            this.redraw();
                        }
                    }
                    setProviderConfigs(newConfigs) {
                        this.configs.setExtensibilityConfigs(newConfigs);
                        this.redraw();
                        super.setProviderConfigs(newConfigs);
                    }
                    toggleNativeBehavior(isNative) {
                        if (this.configs.DisableMobile !== !isNative) {
                            this.configs.DisableMobile = !isNative;
                            this.redraw();
                        }
                    }
                    updateInitialTime(value) {
                        if (this.timePickerPlatformInputElem.disabled === false) {
                            this.configs.InitialTime = value;
                            this.redraw();
                        }
                    }
                    updatePrompt(promptMessage) {
                        this.flatpickrInputElem.placeholder = promptMessage;
                    }
                }
                Flatpickr.OSUIFlatpickrTime = OSUIFlatpickrTime;
            })(Flatpickr = TimePicker.Flatpickr || (TimePicker.Flatpickr = {}));
        })(TimePicker = OSUI.TimePicker || (OSUI.TimePicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var TimePicker;
        (function (TimePicker) {
            var Flatpickr;
            (function (Flatpickr) {
                class FlatpickrTimeConfig extends OSFramework.OSUI.Patterns.TimePicker.AbstractTimePickerConfig {
                    constructor(config) {
                        super(config);
                        this.AllowInput = false;
                        this.DisableMobile = false;
                        this._lang = OSFramework.OSUI.Helper.Language.ShortLang;
                    }
                    _checkAltFormat() {
                        let _altFormat;
                        if (this.Is24Hours) {
                            _altFormat = Flatpickr.Enum.InputFormats.Format24h;
                        }
                        else {
                            _altFormat = Flatpickr.Enum.InputFormats.Format12h;
                        }
                        return _altFormat;
                    }
                    _checkLocale() {
                        let _locale;
                        try {
                            _locale = window.flatpickr.l10ns[this._lang];
                            _locale.firstDayOfWeek = this.FirstWeekDay;
                        }
                        catch (error) {
                            throw new Error(`${Flatpickr.ErrorCodes.FailSetLocale}: Locale '${this._lang}' not found!`);
                        }
                        return _locale;
                    }
                    getProviderConfig() {
                        this._providerOptions = {
                            altFormat: this.TimeFormat ? this.TimeFormat : this._checkAltFormat(),
                            altInput: true,
                            allowInput: this.AllowInput,
                            defaultDate: OSFramework.OSUI.Helper.Times.IsNull(this.InitialTime) ? undefined : this.InitialTime,
                            disableMobile: this.DisableMobile,
                            enableTime: true,
                            noCalendar: true,
                            maxTime: OSFramework.OSUI.Helper.Times.IsNull(this.MaxTime) ? undefined : this.MaxTime,
                            minTime: OSFramework.OSUI.Helper.Times.IsNull(this.MinTime) ? undefined : this.MinTime,
                            dateFormat: Flatpickr.Enum.InputFormats.Format24h,
                            onChange: this.OnChangeEventCallback,
                            onClose: this.OnCloseEventCallback,
                            onOpen: this.OnOpenEventCallback,
                            time_24hr: this.Is24Hours,
                        };
                        if (this._providerOptions.locale === undefined) {
                            this._providerOptions.locale = this._checkLocale();
                        }
                        return this.mergeConfigs(this._providerOptions, undefined, this.providerExtendedOptions);
                    }
                    setExtensibilityConfigs(newConfigs) {
                        this.providerExtendedOptions = newConfigs;
                    }
                    get Lang() {
                        return this._lang;
                    }
                    set Lang(value) {
                        this._lang = value.substring(0, 2);
                    }
                }
                Flatpickr.FlatpickrTimeConfig = FlatpickrTimeConfig;
            })(Flatpickr = TimePicker.Flatpickr || (TimePicker.Flatpickr = {}));
        })(TimePicker = OSUI.TimePicker || (OSUI.TimePicker = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            var Enum;
            (function (Enum) {
                let ProviderInfo;
                (function (ProviderInfo) {
                    ProviderInfo["Name"] = "FloatingUI";
                    ProviderInfo["Version"] = "1.6.5";
                })(ProviderInfo = Enum.ProviderInfo || (Enum.ProviderInfo = {}));
            })(Enum = Utils.Enum || (Utils.Enum = {}));
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            class FloatingUI extends OSFramework.OSUI.Utils.FloatingPosition.FloatingPosition {
                constructor(options) {
                    super(options);
                }
                dispose() {
                    if (this.floatingConfigs.UpdatePosition) {
                        this.eventOnUpdateCallback();
                    }
                    super.dispose();
                }
                setFloatingPosition() {
                    const _middlewareArray = [];
                    if (this.floatingConfigs.AutoPlacement) {
                        if (this.floatingConfigs.AutoPlacementOptions.alignment === OSFramework.OSUI.Constants.EmptyString) {
                            this.floatingConfigs.AutoPlacementOptions.alignment = null;
                        }
                        if (this.floatingConfigs.AutoPlacementOptions.allowedPlacements.length <= 0) {
                            this.floatingConfigs.AutoPlacementOptions.allowedPlacements.push(OSFramework.OSUI.GlobalEnum.FloatingPosition.BottomStart);
                        }
                        _middlewareArray.push(window.FloatingUIDOM.autoPlacement(this.floatingConfigs.AutoPlacementOptions));
                        _middlewareArray.push(window.FloatingUIDOM.shift());
                    }
                    if (this.floatingConfigs.Position !== OSFramework.OSUI.GlobalEnum.FloatingPosition.Center) {
                        const defaultOffsetValue = this.getOffsetValue();
                        const finalOffsetValue = this.floatingConfigs.ArrowElem
                            ? Math.sqrt(defaultOffsetValue * this.floatingConfigs.ArrowElem.offsetWidth ** 2) / 2
                            : defaultOffsetValue;
                        _middlewareArray.push(window.FloatingUIDOM.offset(finalOffsetValue));
                    }
                    if (this.floatingConfigs.ArrowElem) {
                        _middlewareArray.push(window.FloatingUIDOM.arrow({
                            element: this.floatingConfigs.ArrowElem,
                        }));
                        _middlewareArray.push(window.FloatingUIDOM.flip());
                    }
                    const _eventOnUpdatePosition = () => {
                        window.FloatingUIDOM.computePosition(this.floatingConfigs.AnchorElem, this.floatingConfigs.FloatingElem, {
                            placement: this.floatingConfigs.Position,
                            middleware: _middlewareArray,
                        }).then(({ x, y, middlewareData, placement }) => {
                            OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(this.floatingConfigs.FloatingElem, OSFramework.OSUI.Utils.FloatingPosition.Enum.CssCustomProperties.YPosition, y + OSFramework.OSUI.GlobalEnum.Units.Pixel);
                            OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(this.floatingConfigs.FloatingElem, OSFramework.OSUI.Utils.FloatingPosition.Enum.CssCustomProperties.XPosition, x + OSFramework.OSUI.GlobalEnum.Units.Pixel);
                            if (this._currentPlacement !== undefined && this._currentPlacement !== placement) {
                                this.floatingConfigs.FloatingElem.classList.remove(this._currentPlacement);
                            }
                            this.floatingConfigs.FloatingElem.classList.add(placement);
                            this._currentPlacement = placement;
                            if (middlewareData.arrow) {
                                const side = placement.split('-')[0];
                                const staticSide = {
                                    top: OSFramework.OSUI.GlobalEnum.FloatingPosition.Bottom,
                                    right: OSFramework.OSUI.GlobalEnum.FloatingPosition.Left,
                                    bottom: OSFramework.OSUI.GlobalEnum.FloatingPosition.Top,
                                    left: OSFramework.OSUI.GlobalEnum.FloatingPosition.Right,
                                }[side];
                                const { x, y } = middlewareData.arrow;
                                Object.assign(this.floatingConfigs.ArrowElem.style, {
                                    left: x !== undefined
                                        ? `${x}${OSFramework.OSUI.GlobalEnum.Units.Pixel}`
                                        : OSFramework.OSUI.Constants.EmptyString,
                                    top: y !== undefined
                                        ? `${y}${OSFramework.OSUI.GlobalEnum.Units.Pixel}`
                                        : OSFramework.OSUI.Constants.EmptyString,
                                    right: OSFramework.OSUI.Constants.EmptyString,
                                    bottom: OSFramework.OSUI.Constants.EmptyString,
                                    [staticSide]: `${-this.floatingConfigs.ArrowElem.offsetWidth / 2}${OSFramework.OSUI.GlobalEnum.Units.Pixel}`,
                                });
                            }
                        });
                    };
                    _eventOnUpdatePosition();
                    if (this.floatingConfigs.UpdatePosition) {
                        this.eventOnUpdateCallback = window.FloatingUIDOM.autoUpdate(this.floatingConfigs.AnchorElem, this.floatingConfigs.FloatingElem, _eventOnUpdatePosition.bind(this));
                    }
                }
                unsetFloatingPosition() {
                    this.eventOnUpdateCallback();
                    OSFramework.OSUI.Helper.ApplySetTimeOut(() => {
                        OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(this.floatingConfigs.FloatingElem, OSFramework.OSUI.Utils.FloatingPosition.Enum.CssCustomProperties.YPosition, 0);
                        OSFramework.OSUI.Helper.Dom.Styles.SetStyleAttribute(this.floatingConfigs.FloatingElem, OSFramework.OSUI.Utils.FloatingPosition.Enum.CssCustomProperties.XPosition, 0);
                    }, 50);
                }
            }
            Utils.FloatingUI = FloatingUI;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));
var Providers;
(function (Providers) {
    var OSUI;
    (function (OSUI) {
        var Utils;
        (function (Utils) {
            class FloatingUIConfig extends OSFramework.OSUI.Utils.FloatingPosition.FloatingPositionConfig {
            }
            Utils.FloatingUIConfig = FloatingUIConfig;
        })(Utils = OSUI.Utils || (OSUI.Utils = {}));
    })(OSUI = Providers.OSUI || (Providers.OSUI = {}));
})(Providers || (Providers = {}));