{"version":3,"file":"sdk-datagrid.mjs","sources":["../../../projects/sdk-datagrid/src/lib/enums/sorts.ts","../../../projects/sdk-datagrid/src/lib/utils/clone.ts","../../../projects/sdk-datagrid/src/lib/enums/filters.ts","../../../projects/sdk-datagrid/src/lib/models/datagrid-column.ts","../../../projects/sdk-datagrid/src/lib/models/datagrid-options.ts","../../../projects/sdk-datagrid/src/lib/models/datagrid-custom-filter.ts","../../../projects/sdk-datagrid/src/lib/models/datagrid-settings.ts","../../../projects/sdk-datagrid/src/lib/models/datagrid-message.ts","../../../projects/sdk-datagrid/src/lib/options/settings/settings-option.component.ts","../../../projects/sdk-datagrid/src/lib/options/settings/settings-option.component.html","../../../projects/sdk-datagrid/src/lib/options/columns/columns-option.component.ts","../../../projects/sdk-datagrid/src/lib/options/columns/columns-option.component.html","../../../projects/sdk-datagrid/src/lib/options/sort/sort-option.component.ts","../../../projects/sdk-datagrid/src/lib/options/sort/sort-option.component.html","../../../projects/sdk-datagrid/src/lib/options/filter/filter-option.component.ts","../../../projects/sdk-datagrid/src/lib/options/filter/filter-option.component.html","../../../projects/sdk-datagrid/src/lib/models/datagrid-formula.ts","../../../projects/sdk-datagrid/src/lib/options/formula/formula-option.component.ts","../../../projects/sdk-datagrid/src/lib/options/formula/formula-option.component.html","../../../projects/sdk-datagrid/src/lib/options/export/export-option.component.ts","../../../projects/sdk-datagrid/src/lib/options/export/export-option.component.html","../../../projects/sdk-datagrid/src/lib/options/chart/chart-option.component.ts","../../../projects/sdk-datagrid/src/lib/options/chart/chart-option.component.html","../../../projects/sdk-datagrid/src/lib/sdk-datagrid.component.ts","../../../projects/sdk-datagrid/src/lib/sdk-datagrid.component.html","../../../projects/sdk-datagrid/src/lib/sdk-datagrid.module.ts","../../../projects/sdk-datagrid/src/lib/models/datagrid-filter.ts","../../../projects/sdk-datagrid/src/lib/models/datagrid-sort.ts","../../../projects/sdk-datagrid/src/lib/classes/colors.ts","../../../projects/sdk-datagrid/src/public-api.ts","../../../projects/sdk-datagrid/src/sdk-datagrid.ts"],"sourcesContent":["export enum Sorts {\n    ASC = \"asc\",\n    DESC = \"desc\",\n}","export class Clone {\n    public static deepCopy<T>(source: T): T {\n        if (Array.isArray(source)) {\n            return this.copyArray(source) as unknown as T;\n        }\n  \n        if (source instanceof Date) {\n            return this.copyDate(source) as unknown as T;\n        }\n  \n        if (source && typeof source === 'object') {\n            return this.copyObject(source);\n        }\n  \n        return source;\n    }\n  \n    private static copyArray<T>(source: T[]): T[] {\n        return source.map(item => this.deepCopy(item));\n    }\n  \n    private static copyDate(source: Date): Date {\n        return new Date(source.getTime());\n    }\n  \n    private static copyObject<T>(source: T): T {\n        const copy = Object.create(Object.getPrototypeOf(source));\n  \n        Object.getOwnPropertyNames(source).forEach(prop => {\n            const descriptor = Object.getOwnPropertyDescriptor(source, prop);\n            if (descriptor) {\n                Object.defineProperty(copy, prop, descriptor);\n                (copy as { [key: string]: any })[prop] = this.deepCopy((source as { [key: string]: any })[prop]);\n            }\n        });\n  \n        return copy as T;\n    }\n  }\n  ","export enum Filters {\n    Equals = \"Equals (=)\",\n    NotEquals = \"Not Equals (!=)\",\n    Empty = \"Empty\",\n    NotEmpty = \"Not Empty\",\n    Contains = \"Contains\",\n    NotContains = \"Not Contains\",\n    GreaterThan = \"Greater Than (>)\",\n    GreaterThanOrEqual = \"Greater Than/Equal To (>=)\",\n    LessThan = \"Less Than (<)\",\n    LessThanOrEqual = \"Less Than/Equal To (<=)\",\n    InList = \"In List\"\n}\n\nexport enum FilterType {\n    Textbox = \"text\",\n    TextboxOnly = \"text-only\",\n    Checkbox = \"checkbox\",\n    Dropdown = \"list\"\n}\n","import { TemplateRef } from \"@angular/core\";\r\n\r\nimport { FilterType } from \"../enums/filters\";\r\n\r\nimport { SDKDataGridFilter } from \"./datagrid-filter\";\r\nimport { SDKDataGridSort } from \"./datagrid-sort\";\r\n\r\nexport class SDKDataGridColumn {\r\n    public Name: string = \"\"; // Original db name.\r\n    public DisplayName?: string = \"\";  // System override of db name (Name).\r\n    public FriendlyName?: string = \"\";  // User provides. Produces * indicator.\r\n    public Sort?: SDKDataGridSort | null = null; // Sorting (asc/desc) applied to column data.\r\n    public Filter?: SDKDataGridFilter | null = null; // Filters applied to column data.\r\n    public Formulas?: any = null; // Formulas applied to column.\r\n\r\n    public showSort?: boolean = true; // Allows you to turn on/off sorting capabilities.\r\n    public showFilter?: boolean = true; // Allows you to turn on/off filtering capabilities.\r\n    public isAction?: boolean = false; // Is the column associated to an action.\r\n    public isVisible?: boolean = true; // Allows you to turn on/off the visibility of the column.\r\n\r\n    public actionSide?: string = \"right\" // right or left\r\n\r\n    // START: Filter properties\r\n    public FilterMultiSelect?: boolean = false; // Allows multiple filter values to be selected.\r\n    public FilterTypes?: any[] = []; // Allows you to define specific filter types. NOTE: If FilterMultiSelect = true, this property is forced to [Filters.Equals, Filters.NotEquals].\r\n    public FilterValues?: any[] = []; // Allows you to define specific filter values.\r\n    public FilterType?: FilterType = FilterType.Textbox; // Type of filter (Textbox, TextboxOnly, Checkbox, Dropdown).\r\n    public FilterValueDefault?: any; // Default value for Dropdown type.\r\n    // END: Filter properties\r\n\r\n    // START: editTemplate option\r\n    public allowEdit?: boolean = true;\r\n    public required?: boolean = false;\r\n    public notes?: string = \"\";\r\n    public validCharacters?: string = \"\";\r\n    public hint?: string = \"\";\r\n    public pattern?: string = \"\";\r\n    public height?: string = \"\";\r\n    public width?: string = \"\";\r\n    public border?: string = \"\";\r\n    public style?: string = \"\";\r\n    // END: editTemplate option\r\n\r\n    // Custom templates\r\n    public headerTemplate?: () => TemplateRef<any>;\r\n    public dataTemplate?: () => TemplateRef<any>;\r\n    public editTemplate?: () => TemplateRef<any>;\r\n\r\n    // Custom methods\r\n    public formatData?: (value: any) => string; // Optional callback method to format the data.\r\n    public setFilterValues?: () => Promise<any[]>; // Optional callback method to load filter values.\r\n\r\n    // Original values - used with resets\r\n    public _original?: any = {\r\n        index: null,\r\n        FriendlyName: \"\",\r\n        isVisible: true,\r\n        Sort: null,\r\n        Filter: null,\r\n        Formulas: null\r\n    };\r\n}\r\n","export enum StorageType {\r\n    Local = \"localStorage\",\r\n    Session = \"sessionStorage\"\r\n}\r\n\r\nexport class SDKDataGridOptions {\r\n    public header?: boolean = true;\r\n    public footer?: boolean = true;\r\n    public paging?: boolean = true;\r\n    public options?: boolean = true;\r\n\r\n    public datasetTabs?: boolean = false;\r\n\r\n    public autoClosePanel?: boolean = true;\r\n    public minimizeOptions?: boolean = false;\r\n    public expandableRows?: boolean = false;\r\n\r\n    public settings?: boolean = false;\r\n    public columns?: boolean = true;\r\n    public filters?: boolean = true;\r\n    public sorts?: boolean = true;\r\n    public formulas?: boolean = true;\r\n    public charts?: boolean = false;\r\n    public export?: boolean = true;\r\n    public edit?: boolean = false;\r\n    public delete?: boolean = true;\r\n    public nowrap?: boolean = false;\r\n\r\n    public settingsStorage?: StorageType = StorageType.Local;\r\n\r\n    // Maybe remove?\r\n    public panelOverlay?: boolean = true;\r\n    public selectableRows?: boolean = false;\r\n}\r\n","import { FilterType } from \"../enums/filters\";\nimport { SDKDataGridFilter } from \"./datagrid-filter\";\n\nexport class SDKDataGridCustomFilter {\n    public Name: string = \"\"; // Unique filter name.\n    public DisplayName?: string = \"\";  // Name to display to user.\n    public Type?: FilterType = FilterType.Textbox; // Type of filter (Textbox, TextboxOnly, Checkbox, Dropdown).\n    public notes?: string = \"\";\n\n    // START: sdk-select properties for Dropdown filters.\n    public FilterMultiSelect?: boolean = false; // Allows multiple filter values to be selected.\n    public FilterTypes?: any[] = []; // Allows you to define specific filter types. NOTE: If FilterMultiSelect = true, this property is forced to [Filters.Equals, Filters.NotEquals].\n    public FilterValues?: any[] = []; // Allows you to define specific filter values.\n    public Filter?: SDKDataGridFilter | null = null; // Values set for filter.\n    public FilterValueDefault?: any; // Default value for Dropdown type.\n    public setFilterValues?: () => Promise<any[]>; // Optional callback method to load filter values.\n    // END: sdk-select properties for Dropdown filters.\n\n    public _original?: any = {\n        index: null,\n        Filter: null\n    };\n}\n","import { SDKDataGridColumn } from \"./datagrid-column\";\nimport { SDKDataGridCustomFilter } from \"./datagrid-custom-filter\";\n\nexport class SDKDataGridSettings {\n    Name: string = \"\";\n    Columns: SDKDataGridColumn[] = [];\n    CustomFilters: SDKDataGridCustomFilter[] = [];\n    Active?: boolean = false;\n}\n","export class SDKDataGridMessage {\n    public Title: string = \"\";\n    public Text: string =  \"\";\n    public OKText: string =  \"\";\n    public CancelText?: string =  \"\";\n    public OK: any = () => {};\n    public Cancel?: any = () => {};\n}\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\r\n\r\nimport { Clone } from '../../utils/clone';\r\n\r\nimport { SDKDataGridSettings } from '../../models/datagrid-settings';\r\nimport { SDKDataGridColumn } from '../../models/datagrid-column';\r\nimport { SDKDataGridCustomFilter } from '../../models/datagrid-custom-filter';\r\nimport { SDKDataGridMessage } from '../../models/datagrid-message';\r\n\r\n@Component({\r\n    selector: 'sdk-datagrid-settings-option',\r\n    templateUrl: './settings-option.component.html',\r\n    styleUrls: ['./settings-option.component.scss'],\r\n    encapsulation: ViewEncapsulation.None // Used for innerHtml formatting on 'viewerText' property.\r\n})\r\n\r\nexport class SDKDataGridSettingsOptionComponent {\r\n    /**************************************************************************\r\n    * Input/Output Parameters\r\n    **************************************************************************/\r\n    @Input() settings: SDKDataGridSettings[] = [];\r\n    @Input() columns: SDKDataGridColumn[] = [];\r\n    @Input() customFilters: SDKDataGridCustomFilter[] = [];\r\n    @Output() closeEvent = new EventEmitter();\r\n    @Output() saveEvent = new EventEmitter();\r\n    @Output() applyEvent = new EventEmitter();\r\n\r\n    /**************************************************************************\r\n    * Component Variables\r\n    **************************************************************************/\r\n    protected activeSetting: SDKDataGridSettings = new SDKDataGridSettings();\r\n    protected settingsList: SDKDataGridSettings[] = [];\r\n    protected name: string = \"\";\r\n    protected viewerText: string = \"\";\r\n    protected msg: string = \"\";\r\n    protected error: string = \"\";\r\n\r\n    private activeIndex: number = 0;\r\n\r\n    private _settings: SDKDataGridSettings[] = [];\r\n    private _columns: SDKDataGridColumn[] = [];\r\n    private _customFilters: SDKDataGridCustomFilter[] = [];\r\n\r\n    /**************************************************************************\r\n    * Message Variables\r\n    **************************************************************************/\r\n    protected showMessage: boolean = false;\r\n    protected message: SDKDataGridMessage = new SDKDataGridMessage();\r\n\r\n    protected ngOnChanges(_args: any) {\r\n        this._settings = Clone.deepCopy(this.settings);\r\n        this._columns = Clone.deepCopy(this.columns);\r\n        this._customFilters = Clone.deepCopy(this.customFilters);\r\n\r\n        this.initialze();\r\n    }\r\n\r\n    /**************************************************************************\r\n    * Setup Methods\r\n    **************************************************************************/\r\n    private initialze() {\r\n        this.settingsList = this._settings;\r\n\r\n        // Reset current settings based on columns and custom filters.\r\n        let currentSetting: SDKDataGridSettings = {\r\n            Name: \"[Current Settings]\",\r\n            Columns: this._columns,\r\n            CustomFilters: this._customFilters,\r\n            Active: false\r\n        }\r\n\r\n        let ndx = this.settingsList.findIndex((settings: SDKDataGridSettings) => settings.Name === \"[Current Settings]\");\r\n\r\n        if (ndx === -1) {\r\n            this.settingsList.unshift(currentSetting);\r\n        } else {\r\n            this.settingsList[ndx] = currentSetting;\r\n        }\r\n\r\n        // Pre-load any settings that are flagged as 'active'.\r\n        let activeNdx = this.settingsList.findIndex((setting: SDKDataGridSettings) => setting.Active === true);\r\n\r\n        if (activeNdx > -1) {\r\n            this.activeIndex = activeNdx;\r\n        }\r\n\r\n        this.activeSetting = this.settingsList[this.activeIndex];\r\n        this.name = this.activeSetting.Name;\r\n\r\n        this.validateSettings();\r\n        this.setViewerText();\r\n    }\r\n\r\n    private saveSetting() {\r\n        this.settingsList[this.activeIndex].Name = this.name;\r\n\r\n        if (this.activeIndex === 0) {\r\n            let currentSetting: SDKDataGridSettings = Clone.deepCopy(this.settingsList[this.activeIndex]);\r\n\r\n            currentSetting.Name = \"[Current Settings]\";\r\n\r\n            this.settingsList.unshift(currentSetting);\r\n        }\r\n\r\n        this.resetProperties();\r\n\r\n        this.activeIndex = this.settingsList.findIndex((setting: any) => setting.Name === this.name) + 1;\r\n\r\n        this.saveEvent.emit(this.settingsList);\r\n\r\n        this.msg = \"Settings have been saved.\";\r\n    }\r\n\r\n    private sortSettings() {\r\n        this.settingsList.sort((a: SDKDataGridSettings, b: SDKDataGridSettings) => {\r\n            const aName = a.Name.toUpperCase();\r\n            const bName = b.Name.toUpperCase();\r\n\r\n            if (aName > bName) {\r\n                return 1;\r\n            }\r\n\r\n            if (aName < bName) {\r\n                return -1;\r\n            }\r\n\r\n            return 0;\r\n        });\r\n    }\r\n\r\n    private resetProperties() {\r\n        this.sortSettings();\r\n\r\n        this.settingsList.forEach((setting: SDKDataGridSettings) => {\r\n            setting.Active = false;\r\n        });\r\n    }\r\n\r\n    private setViewerText() {\r\n        setTimeout(() => {\r\n            this.viewerText = `Columns:<br />`;\r\n\r\n            this.viewerText += \"<ul>\";\r\n            this.activeSetting.Columns.filter((column: SDKDataGridColumn) => !column.isAction).forEach((column: SDKDataGridColumn) => {\r\n                this.viewerText += `<li>${(column.FriendlyName !== \"\") ? column.FriendlyName : (column.DisplayName !== \"\") ? column.DisplayName : column.Name} (${column.isVisible ? \"visible\" : \"hidden\"})</li>`;\r\n            });\r\n            this.viewerText += \"</ul>\";\r\n\r\n            this.viewerText += `<br />Sorts:<br />`;\r\n\r\n            this.viewerText += \"<ul>\";\r\n            this.activeSetting.Columns.forEach((column: SDKDataGridColumn) => {\r\n                if (column.Sort) {\r\n                    this.viewerText += `<li>${(column.DisplayName !== \"\") ? column.DisplayName : column.Name} (${column.Sort.direction})</li>`;\r\n                }\r\n            });\r\n            this.viewerText += \"</ul>\";\r\n\r\n            this.viewerText += `<br />Filters:<br />`;\r\n\r\n            this.viewerText += \"<ul>\";\r\n            this.activeSetting.CustomFilters.forEach((filter: SDKDataGridCustomFilter) => {\r\n                if (filter.Filter) {\r\n                    if (filter.Filter.operation) {\r\n                        this.viewerText += `<li>${(filter.DisplayName !== \"\") ? filter.DisplayName : filter.Name} (${filter.Filter.operation}: ${filter.Filter.value})</li>`;\r\n                    } else {\r\n                        this.viewerText += `<li>${(filter.DisplayName !== \"\") ? filter.DisplayName : filter.Name} (${filter.Filter.value})</li>`;\r\n                    }\r\n                }\r\n            });\r\n            this.activeSetting.Columns.forEach((column: SDKDataGridColumn) => {\r\n                if (column.Filter) {\r\n                    if (column.Filter.operation) {\r\n                        this.viewerText += `<li>${(column.DisplayName !== \"\") ? column.DisplayName : column.Name} (${column.Filter.operation}: ${column.Filter.value})</li>`;\r\n                    } else {\r\n                        this.viewerText += `<li>${(column.DisplayName !== \"\") ? column.DisplayName : column.Name} (${column.Filter.value})</li>`;\r\n                    }\r\n                }\r\n            });\r\n            this.viewerText += \"</ul>\";\r\n\r\n            this.viewerText += `<br />Formulas:<br />`;\r\n\r\n            this.viewerText += \"<ul>\";\r\n            this.activeSetting.Columns.forEach((column: SDKDataGridColumn) => {\r\n                if (column.Formulas) {\r\n                    column.Formulas.forEach((formula: any) => {\r\n                        this.viewerText += `<li>${(column.DisplayName !== \"\") ? column.DisplayName : column.Name} (${formula.Operation}: #.${formula.Format})</li>`;\r\n                    });\r\n                }\r\n            });\r\n            this.viewerText += \"</ul>\";\r\n        }, 10);\r\n    }\r\n\r\n    private validateSettings() {\r\n        let issue: boolean = false;\r\n        this.error = \"\";\r\n\r\n        if (this._columns.length !== this.activeSetting.Columns.length) {\r\n            issue = true;\r\n        }\r\n\r\n        this.activeSetting.Columns.forEach((column: SDKDataGridColumn) => {\r\n            let ndx = this._columns.findIndex((c: SDKDataGridColumn) => c.Name === column.Name);\r\n\r\n            if (ndx === -1) {\r\n                issue = true;\r\n                column.FriendlyName = column.Name + '<span> <-- Does NOT exist!</span>';\r\n            }\r\n        });\r\n\r\n        this._columns.forEach((column: SDKDataGridColumn) => {\r\n            let ndx = this.activeSetting.Columns.findIndex((c: SDKDataGridColumn) => c.Name === column.Name);\r\n\r\n            if (ndx === -1) {\r\n                issue = true;\r\n                this.activeSetting.Columns.push({\r\n                    Name: column.Name,\r\n                    DisplayName: \"\",\r\n                    FriendlyName: column.Name + '<span> <-- Missing!</span>',\r\n                    isVisible: column.isVisible\r\n                });\r\n            }\r\n        });\r\n\r\n        if (this._customFilters.length !== this.activeSetting.CustomFilters.length) {\r\n            issue = true;\r\n        }\r\n\r\n        this.activeSetting.CustomFilters.forEach((filter: SDKDataGridCustomFilter) => {\r\n            let ndx = this._customFilters.findIndex((f: SDKDataGridCustomFilter) => f.Name === filter.Name);\r\n\r\n            if (ndx === -1) {\r\n                issue = true;\r\n                filter.DisplayName = filter.Name + '<span> <-- Does NOT exist!</span>';\r\n            }\r\n        });\r\n\r\n        this._customFilters.forEach((filter: SDKDataGridCustomFilter) => {\r\n            let ndx = this.activeSetting.CustomFilters.findIndex((f: SDKDataGridCustomFilter) => f.Name === filter.Name);\r\n\r\n            if (ndx === -1) {\r\n                issue = true;\r\n                this.activeSetting.CustomFilters.push({\r\n                    Name: filter.Name,\r\n                    DisplayName: filter.Name = '<span> <-- Missing!</span>',\r\n                    Type: filter.Type,\r\n                    Filter: {\r\n                        operation: [],\r\n                        value: \"\"\r\n                    }\r\n                });\r\n            }\r\n        });\r\n\r\n        if (issue) {\r\n            this.error = \"There are issues with these settings!\";\r\n        }\r\n    }\r\n\r\n    /**************************************************************************\r\n    * User Action Methods\r\n    **************************************************************************/\r\n    protected setName(event: any) {\r\n        this.name = event.trim();\r\n    }\r\n\r\n    protected save() {\r\n        if (this.name !== \"\") {\r\n            let dup = this.settingsList.findIndex((setting: SDKDataGridSettings) => setting.Name === this.name);\r\n\r\n            if (dup > -1) {\r\n                this.message = {\r\n                    Title: \"Duplicate Settings\",\r\n                    Text: `'${this.name}' already exists. Would you like to override it?`,\r\n                    OKText: \"YES\",\r\n                    CancelText: \"NO\",\r\n                    OK: () => {\r\n                        this.showMessage = false;\r\n\r\n                        this.settingsList.splice(dup, 1);\r\n\r\n                        this.saveSetting();\r\n                    },\r\n                    Cancel: () => {\r\n                        this.showMessage = false;\r\n                    }\r\n                };\r\n\r\n                this.showMessage = true;\r\n            } else {\r\n                this.saveSetting();\r\n            }\r\n        }\r\n    }\r\n\r\n    protected remove() {\r\n        if (this.activeSetting.Name !== \"[Current Settings]\") {\r\n            this.message = {\r\n                Title: \"Delete Settings\",\r\n                Text: `Are you sure you want to delete the '${this.name}' settings?`,\r\n                OKText: \"YES\",\r\n                CancelText: \"NO\",\r\n                OK: () => {\r\n                    this.showMessage = false;\r\n\r\n                    this.settingsList.splice(this.activeIndex, 1);\r\n\r\n                    this.activeIndex = 0;\r\n\r\n                    this.saveEvent.emit(this.settingsList);\r\n\r\n                    this.msg = \"Settings have been deleted.\";\r\n                },\r\n                Cancel: () => {\r\n                    this.showMessage = false;\r\n                }\r\n            };\r\n\r\n            this.showMessage = true;\r\n        }\r\n    }\r\n\r\n    protected load(event: any) {\r\n        this.activeIndex = this.settingsList.findIndex((setting: SDKDataGridSettings) => setting.Name === event[0].Name);\r\n        this.activeSetting = this.settingsList[this.activeIndex];\r\n        this.name = this.activeSetting.Name;\r\n\r\n        this.validateSettings();\r\n        this.setViewerText();\r\n    }\r\n\r\n    protected apply() {\r\n        this.resetProperties();\r\n\r\n        // Set selected settings as active.\r\n        if (this.activeSetting.Name !== \"[Current Settings]\") {\r\n            this.activeSetting.Active = true;\r\n        }\r\n\r\n        this.saveEvent.emit(this.settingsList);\r\n        this.applyEvent.emit({ columns: this.activeSetting.Columns, customFilters: this.activeSetting.CustomFilters });\r\n    }\r\n\r\n    protected close() {\r\n        this.closeEvent.emit();\r\n    }\r\n}\r\n","<div class=\"sdk-datagrid-window\">\r\n    <sdk-message [(message)]=\"msg\"></sdk-message>\r\n    <div class=\"header\">\r\n        <span class=\"title\">Settings</span>\r\n        <span title=\"Close\" class=\"sdk-icon close\" (click)=\"close()\">close</span>\r\n    </div>\r\n    <div class=\"actions\">\r\n        <sdk-select\r\n            [options]=\"settingsList\"\r\n            optionStyle=\"border-radius: 4px;\"\r\n            [optionValuesStyle]=\"'max-height: 150px; overflow: hidden; overflow-y: auto;'\"\r\n            displayValue=\"Name\"\r\n            [selectedOptions]=\"[activeSetting]\"\r\n            (selectChangeEvent)=\"load($event)\">\r\n        </sdk-select>\r\n    </div>\r\n    <div class=\"content\">\r\n        <div class=\"settings\">\r\n            <div class=\"name\">\r\n                <label *ngIf=\"error !== ''\" class=\"error\">{{ error }}</label>\r\n                <sdk-textbox *ngIf=\"error === ''\" hint=\"Enter Settings Name...\" [value]=\"name === '[Current Settings]' ? '' : name\" (changeCallBackEvent)=\"setName($event)\"></sdk-textbox>\r\n            </div>\r\n            <div class=\"values\" [ngClass]=\"{ adjusted: activeSetting.Active }\">\r\n                <div [innerHTML]=\"viewerText\"></div>\r\n            </div>\r\n            <div *ngIf=\"activeSetting.Active\" class=\"notes\">\r\n                * Indicates active settings.\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"footer\">\r\n        <button class=\"sdk-button delete\" [disabled]=\"activeSetting.Name === '[Current Settings]' ? 'disabled' : ''\" [ngClass]=\"{ 'disabled': activeSetting.Name === '[Current Settings]' }\" (click)=\"remove()\">Delete</button>\r\n        <button *ngIf=\"error === ''\" class=\"sdk-button\" (click)=\"save()\">Save</button>\r\n        <button *ngIf=\"error === ''\" class=\"sdk-button\" (click)=\"apply()\">Apply</button>\r\n    </div>\r\n</div>\r\n\r\n<!-- Lock -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-windows-lock\"></div>\r\n\r\n<!-- Message -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-message\">\r\n    <div class=\"title\">{{ message.Title }}</div>\r\n    <div class=\"text\" [innerHtml]=\"message.Text\"></div>\r\n    <div class=\"action\">\r\n        <button class=\"sdk-button\" (click)=\"message.OK()\">{{ message.OKText }}</button>\r\n        <button class=\"sdk-button cancel\" (click)=\"message.Cancel()\">{{ message.CancelText }}</button>\r\n    </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\nimport { SDKDataGridColumn } from '../../models/datagrid-column';\r\nimport { SDKDataGridMessage } from '../../models/datagrid-message';\r\n\r\nimport { Clone } from '../../utils/clone';\r\n\r\n@Component({\r\n    selector: 'sdk-datagrid-columns-option',\r\n    templateUrl: './columns-option.component.html',\r\n    styleUrls: ['./columns-option.component.scss']\r\n})\r\n\r\nexport class SDKDataGridColumnsOptionComponent {\r\n    /**************************************************************************\r\n    * Input/Output Parameters\r\n    **************************************************************************/\r\n    @Input() columns: SDKDataGridColumn[] = [];\r\n    @Output() closeEvent = new EventEmitter();\r\n    @Output() applyEvent = new EventEmitter();\r\n\r\n    /**************************************************************************\r\n    * Component Variables\r\n    **************************************************************************/\r\n    protected columnList: SDKDataGridColumn[] = [];\r\n    protected allVisible: boolean = true;\r\n\r\n    private _columns: SDKDataGridColumn[] = [];\r\n\r\n    /**************************************************************************\r\n    * Message Variables\r\n    **************************************************************************/\r\n    protected showMessage: boolean = false;\r\n    protected message: SDKDataGridMessage = new SDKDataGridMessage();\r\n\r\n    /**************************************************************************\r\n    * Component Lifecycle Methods\r\n    **************************************************************************/\r\n    protected ngOnChanges(_args: any) {\r\n        if (_args.columns?.currentValue !== undefined) {\r\n            this._columns = Clone.deepCopy(this.columns);\r\n\r\n            this.initialize();\r\n        }\r\n    }\r\n\r\n    /**************************************************************************\r\n    * Setup Methods\r\n    **************************************************************************/\r\n    private initialize() {\r\n        // Remove any \"Action\" columns. They are NOT available for user updates.\r\n        this.columnList = this._columns.filter((column: SDKDataGridColumn) => !column.isAction);\r\n        this.allVisible = this.columnList.filter((column: SDKDataGridColumn) => !column.isVisible).length > 0 ? false : true;\r\n    }\r\n\r\n    protected getColumnName(column: SDKDataGridColumn) {\r\n        let name: string = column.Name;\r\n\r\n        name = (column.DisplayName && column.DisplayName !== \"\") ? column.DisplayName : name;\r\n        name = (column.FriendlyName && column.FriendlyName !== \"\") ? column.FriendlyName : name;\r\n\r\n        return name;\r\n    }\r\n\r\n    protected setFriendlyName(event: any, column: SDKDataGridColumn) {\r\n        column.FriendlyName = event.target.value;\r\n    }\r\n\r\n    /**************************************************************************\r\n    * User Action Methods\r\n    **************************************************************************/\r\n    protected groupVisibleColumns() {\r\n        let visible: SDKDataGridColumn[] = this.columnList.filter((column: SDKDataGridColumn) => column.isVisible);\r\n        let hidden: SDKDataGridColumn[] = this.columnList.filter((column: SDKDataGridColumn) => !column.isVisible);\r\n\r\n        this.columnList = visible.concat(hidden);\r\n    }\r\n\r\n    protected toggleAllColumns(event: any) {\r\n        this.allVisible = event.target.checked;\r\n\r\n        this.columnList.forEach((column: SDKDataGridColumn) => {\r\n            column.isVisible = this.allVisible;\r\n        });\r\n    }\r\n\r\n    protected toggleColumn(event: any, column: SDKDataGridColumn) {\r\n        column.isVisible = event.target.checked;\r\n    }\r\n\r\n    protected drop(event: any) {\r\n        moveItemInArray(this.columnList, event.previousIndex, event.currentIndex);\r\n    }\r\n\r\n    protected reset() {\r\n        this.message = {\r\n            Title: \"Reset Columns\",\r\n            Text: \"Are you sure?\",\r\n            OKText: \"YES\",\r\n            CancelText: \"NO\",\r\n            OK: () => {\r\n                this.showMessage = false;\r\n\r\n                this.columnList.sort((a: SDKDataGridColumn, b: SDKDataGridColumn) => (a._original.index > b._original.index) ? 1 : -1);\r\n\r\n                this.columnList.forEach((column: SDKDataGridColumn) => {\r\n                    column.FriendlyName = column._original.FriendlyName;\r\n                    column.isVisible = column._original.isVisible;\r\n                });\r\n\r\n                this.initialize();\r\n            },\r\n            Cancel: () => {\r\n                this.showMessage = false;\r\n            }\r\n        };\r\n\r\n        this.showMessage = true;\r\n    }\r\n\r\n    protected apply() {\r\n        // Add 'left' action columns back into list.\r\n        this._columns.filter((column: SDKDataGridColumn) => column.isAction && column.actionSide === \"left\").forEach((column: SDKDataGridColumn) => {\r\n            this.columnList.unshift({ ...column });\r\n        });\r\n\r\n        // Add 'right' action columns back into list.\r\n        this._columns.filter((column: SDKDataGridColumn) => column.isAction && column.actionSide === \"right\").forEach((column: SDKDataGridColumn) => {\r\n            this.columnList.push({ ...column });\r\n        });\r\n\r\n        // Remove any sorting/filtering for columns that are no longer visible.\r\n        this.columnList.forEach((column: SDKDataGridColumn) => {\r\n            if (!column.isVisible) {\r\n                column.Filter = column._original.Filter;\r\n                column.Sort = column._original.Sort;\r\n            }\r\n        });\r\n\r\n        this.applyEvent.emit({ option: \"Columns\", columns: this.columnList });\r\n    }\r\n\r\n    protected close() {\r\n        this.closeEvent.emit();\r\n    }\r\n}\r\n","<div class=\"sdk-datagrid-window\">\r\n    <div class=\"header\">\r\n        <span class=\"title\">Columns</span>\r\n        <span title=\"Close\" class=\"sdk-icon close\" (click)=\"close()\">close</span>\r\n    </div>\r\n    <div class=\"actions\">\r\n        <div class=\"all-select\">\r\n            <input type=\"checkbox\" class=\"select\" [checked]=\"allVisible\" (change)=\"toggleAllColumns($event)\" />\r\n            <span>All</span>\r\n        </div>\r\n        <button class=\"sdk-button button-right\" (click)=\"groupVisibleColumns()\">Group Visible</button>\r\n    </div>\r\n    <div cdkDropList class=\"content\" (cdkDropListDropped)=\"drop($event)\">\r\n        <div class=\"box\" *ngFor=\"let column of columnList\" cdkDragBoundary=\".list\" cdkDrag>\r\n            <div class=\"select\">\r\n                <input type=\"checkbox\" [checked]=\"column.isVisible\" (change)=\"toggleColumn($event, column)\" />\r\n            </div>\r\n            <div class=\"name\">\r\n                <input (input)=\"setFriendlyName($event, column);\" [value]=\"getColumnName(column)\" />\r\n            </div>\r\n            <div class=\"move\" cdkDragHandle>\r\n                <span class=\"sdk-icon\">drag_handle</span>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"footer\">\r\n        <button class=\"sdk-button delete\" (click)=\"reset()\">Reset</button>\r\n        <button class=\"sdk-button\" (click)=\"apply()\">Apply</button>\r\n    </div>\r\n</div>\r\n\r\n<!-- Lock -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-windows-lock\"></div>\r\n\r\n<!-- Message -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-message\">\r\n    <div class=\"title\">{{ message.Title }}</div>\r\n    <div class=\"text\" [innerHtml]=\"message.Text\"></div>\r\n    <div class=\"action\">\r\n        <button class=\"sdk-button\" (click)=\"message.OK()\">{{ message.OKText }}</button>\r\n        <button class=\"sdk-button cancel\" (click)=\"message.Cancel()\">{{ message.CancelText }}</button>\r\n    </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\nimport { SDKDataGridColumn } from '../../models/datagrid-column';\r\nimport { SDKDataGridMessage } from '../../models/datagrid-message';\r\nimport { SDKDataGridSort } from '../../models/datagrid-sort';\r\n\r\nimport { Clone } from '../../utils/clone';\r\nimport { Sorts } from '../../enums/sorts';\r\n\r\n@Component({\r\n    selector: 'sdk-datagrid-sort-option',\r\n    templateUrl: './sort-option.component.html',\r\n    styleUrls: ['./sort-option.component.scss']\r\n})\r\n\r\nexport class SDKDataGridSortOptionComponent {\r\n    /**************************************************************************\r\n    * Input/Output Parameters\r\n    **************************************************************************/\r\n    @Input() columns: SDKDataGridColumn[] = [];\r\n    @Output() closeEvent = new EventEmitter();\r\n    @Output() applyEvent = new EventEmitter();\r\n\r\n    /**************************************************************************\r\n    * Component Variables\r\n    **************************************************************************/\r\n    protected sortList: any[] = [];\r\n    protected columnList: any[] = [];\r\n    protected selectedValue: any = [];\r\n\r\n    private _columns: SDKDataGridColumn[] = [];\r\n\r\n    /**************************************************************************\r\n    * Message Variables\r\n    **************************************************************************/\r\n    protected showMessage: boolean = false;\r\n    protected message: SDKDataGridMessage = new SDKDataGridMessage();\r\n\r\n    /**************************************************************************\r\n    * Component Lifecycle Methods\r\n    **************************************************************************/\r\n    protected ngOnChanges(_args: any) {\r\n        if (_args.columns?.currentValue !== undefined) {\r\n            this._columns = Clone.deepCopy(this.columns);\r\n\r\n            this.initialize();\r\n        }\r\n    }\r\n\r\n    /**************************************************************************\r\n    * Setup Methods\r\n    **************************************************************************/\r\n    private initialize() {\r\n        this.sortList = [];\r\n\r\n        this._columns\r\n            .filter((column: SDKDataGridColumn) => column.showSort && column.isVisible && !column.isAction && column.Sort)\r\n            .sort((a: any, b: any) => (a.Sort.position > b.Sort.position) ? 1 : -1)\r\n            .forEach((column: SDKDataGridColumn) => {\r\n                this.sortList.push({ Name: column.Name, DisplayName: column.DisplayName, FriendlyName: column.FriendlyName, Sort: { position: column.Sort?.position, direction: column.Sort?.direction } });\r\n            });\r\n\r\n        this.setColumnList();\r\n    }\r\n\r\n    private setColumnList() {\r\n        this.columnList = [];\r\n\r\n        this._columns\r\n            .filter((column: SDKDataGridColumn) => column.showSort && column.isVisible && !column.isAction)\r\n            .forEach((column: any) => {\r\n                if (this.sortList.filter((s: any) => s.Name === column.Name).length === 0) {\r\n                    this.columnList.push({ Name: column.Name, DisplayName: column.DisplayName, FriendlyName: column.FriendlyName, Value: this.getColumnName(column) });\r\n                }\r\n            });\r\n    }\r\n\r\n    protected getColumnName(column: SDKDataGridColumn) {\r\n        let name: string = column.Name;\r\n\r\n        name = (column.DisplayName && column.DisplayName !== \"\") ? column.DisplayName : name;\r\n        name = (column.FriendlyName && column.FriendlyName !== \"\") ? column.FriendlyName : name;\r\n\r\n        return name;\r\n    }\r\n\r\n    /**************************************************************************\r\n    * User Action Methods\r\n    **************************************************************************/\r\n    protected addSort(event: any) {\r\n        let ndx: number = this._columns.findIndex((column: SDKDataGridColumn) => column.Name === event[0].Name);\r\n\r\n        if (ndx > -1) {\r\n            let column: SDKDataGridColumn = this._columns[ndx];\r\n\r\n            this.sortList.push({ Name: column.Name, DisplayName: column.DisplayName, FriendlyName: column.FriendlyName, Sort: { position: 0, direction: Sorts.ASC } });\r\n        }\r\n\r\n        this.selectedValue = [];\r\n        this.setColumnList();\r\n    }\r\n\r\n    protected deleteSort(sort: any) {\r\n        this.sortList = this.sortList.filter((f: any) => f.Name !== sort.Name);\r\n\r\n        this.setColumnList();\r\n    }\r\n\r\n    protected drop(event: any) {\r\n        moveItemInArray(this.sortList, event.previousIndex, event.currentIndex);\r\n    }\r\n\r\n    protected reset() {\r\n        this.message = {\r\n            Title: \"Reset Sorts\",\r\n            Text: \"Are you sure?\",\r\n            OKText: \"YES\",\r\n            CancelText: \"NO\",\r\n            OK: () => {\r\n                this.showMessage = false;\r\n\r\n                this._columns.forEach((column: SDKDataGridColumn) => {\r\n                    column.Sort = column._original.Sort;\r\n                });\r\n\r\n                this.initialize();\r\n            },\r\n            Cancel: () => {\r\n                this.showMessage = false;\r\n            }\r\n        };\r\n\r\n        this.showMessage = true;\r\n    }\r\n\r\n    protected apply() {\r\n        this._columns.forEach((column: SDKDataGridColumn) => {\r\n            column.Sort = column._original.Sort;\r\n        });\r\n\r\n        this.sortList.forEach((sort: any, index: number) => {\r\n            let ndx = this._columns.findIndex((column: SDKDataGridColumn) => column.Name === sort.Name);\r\n\r\n            if (ndx > -1) {\r\n                this._columns[ndx].Sort = { position: index, direction: sort.Sort.direction };\r\n            }\r\n        })\r\n\r\n        this.applyEvent.emit({ option: \"Sorts\", columns: this._columns });\r\n    }\r\n\r\n    protected close() {\r\n        this.closeEvent.emit();\r\n    }\r\n}\r\n","<div class=\"sdk-datagrid-window\">\r\n    <div class=\"header\">\r\n        <span class=\"title\">Sorts</span>\r\n        <span title=\"Close\" class=\"sdk-icon close\" (click)=\"close()\">close</span>\r\n    </div>\r\n    <div class=\"actions\">\r\n        <sdk-select\r\n            [options]=\"columnList\"\r\n            optionStyle=\"border-radius: 4px;\"\r\n            [optionValuesStyle]=\"'max-height: 150px; overflow: hidden; overflow-y: auto;'\"\r\n            [forceOptionBottom]=\"true\"\r\n            noValueLabel=\"ADD SORT...\"\r\n            displayValue=\"Value\"\r\n            [selectedOptions]=\"selectedValue\"\r\n            (selectChangeEvent)=\"addSort($event)\">\r\n        </sdk-select>\r\n    </div>\r\n    <div cdkDropList class=\"content\" (cdkDropListDropped)=\"drop($event)\">\r\n        <div *ngIf=\"sortList.length === 0\" class=\"no-records\">\r\n            <span>Add a sort.</span>\r\n        </div>\r\n        <div class=\"box\" *ngFor=\"let sort of sortList\" cdkDragBoundary=\".list\" cdkDrag>\r\n            <div class=\"delete\">\r\n                <span class=\"sdk-icon\" (click)=\"deleteSort(sort)\">delete</span>\r\n            </div>\r\n            <div class=\"name\" [title]=\"getColumnName(sort)\">{{ getColumnName(sort) }}</div>\r\n            <div class=\"select\">\r\n                <div style=\"display: inline-flex;\" (click)=\"sort.Sort.direction = 'asc'\">\r\n                    <input type=\"radio\" class=\"data-option\" (click)=\"sort.Sort.direction = 'asc'\" [id]=\"sort.Name + '_asc'\" [name]=\"sort.Name\" [checked]=\"(sort.Sort.direction === 'asc') ? 'checked' : ''\" value=\"asc\">\r\n                    <span class=\"data-label\" [for]=\"sort.Name + '_asc'\">ASC</span>\r\n                </div>\r\n                <div style=\"display: inline-flex;\" (click)=\"sort.Sort.direction = 'desc'\">\r\n                    <input type=\"radio\" class=\"data-option\" (click)=\"sort.Sort.direction = 'desc'\" [id]=\"sort.Name + '_desc'\" [name]=\"sort.Name\" [checked]=\"(sort.Sort.direction === 'desc') ? 'checked' : ''\" value=\"desc\">\r\n                    <span class=\"data-label\" [for]=\"sort.Name + '_desc'\">DESC</span>\r\n                </div>\r\n            </div>\r\n            <div class=\"move\" cdkDragHandle>\r\n                <span class=\"sdk-icon\">drag_handle</span>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"footer\">\r\n        <button class=\"sdk-button delete\" (click)=\"reset()\">Reset</button>\r\n        <button class=\"sdk-button\" (click)=\"apply()\">Apply</button>\r\n    </div>\r\n</div>\r\n\r\n<!-- Lock -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-windows-lock\"></div>\r\n\r\n<!-- Message -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-message\">\r\n    <div class=\"title\">{{ message.Title }}</div>\r\n    <div class=\"text\" [innerHtml]=\"message.Text\"></div>\r\n    <div class=\"action\">\r\n        <button class=\"sdk-button\" (click)=\"message.OK()\">{{ message.OKText }}</button>\r\n        <button class=\"sdk-button cancel\" (click)=\"message.Cancel()\">{{ message.CancelText }}</button>\r\n    </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { SDKDataGridColumn } from '../../models/datagrid-column';\r\nimport { SDKDataGridCustomFilter } from '../../models/datagrid-custom-filter';\r\nimport { SDKDataGridMessage } from '../../models/datagrid-message';\r\n\r\nimport { Filters, FilterType } from '../../enums/filters';\r\nimport { Clone } from '../../utils/clone';\r\n\r\n@Component({\r\n    selector: 'sdk-datagrid-filter-option',\r\n    templateUrl: './filter-option.component.html',\r\n    styleUrls: ['./filter-option.component.scss']\r\n})\r\n\r\nexport class SDKDataGridFilterOptionComponent {\r\n    /**************************************************************************\r\n    * Input/Output Parameters\r\n    **************************************************************************/\r\n    @Input() columns: SDKDataGridColumn[] = [];\r\n    @Input() customFilters: SDKDataGridCustomFilter[] = [];\r\n    @Output() closeEvent = new EventEmitter();\r\n    @Output() applyEvent = new EventEmitter();\r\n\r\n    /**************************************************************************\r\n    * Component Variables\r\n    **************************************************************************/\r\n    protected columnList: SDKDataGridColumn[] = [];\r\n    protected filterList: any[] = [];\r\n\r\n    private _columns: SDKDataGridColumn[] = [];\r\n    private _customFilters: SDKDataGridColumn[] = [];\r\n\r\n    /**************************************************************************\r\n    * Message Variables\r\n    **************************************************************************/\r\n    protected showMessage: boolean = false;\r\n    protected message: SDKDataGridMessage = new SDKDataGridMessage();\r\n\r\n    /**************************************************************************\r\n    * Component Lifecycle Methods\r\n    **************************************************************************/\r\n    protected ngOnChanges(_args: any) {\r\n        this._columns = Clone.deepCopy(this.columns);\r\n        this._customFilters = Clone.deepCopy(this.customFilters);\r\n\r\n        Promise.all([\r\n            this._columns.filter((column: SDKDataGridColumn) => column.setFilterValues !== undefined).forEach(async (fv: any) => {\r\n                await fv.setFilterValues().then((results: any) => {\r\n                    fv.FilterValues = results;\r\n                });\r\n            }),\r\n\r\n            this._customFilters.filter((custom: SDKDataGridColumn) => custom.setFilterValues !== undefined).forEach(async (fv: any) => {\r\n                await fv.setFilterValues().then((results: any) => {\r\n                    fv.FilterValues = results;\r\n                });\r\n            })\r\n        ]).then(() => {\r\n            this.initialize();\r\n        });\r\n    }\r\n\r\n    /**************************************************************************\r\n    * Setup Methods\r\n    **************************************************************************/\r\n    protected initialize() {\r\n        this.filterList = [];\r\n        this.columnList = [];\r\n\r\n        this._customFilters.forEach((filter: any) => {\r\n            if (filter.Type === FilterType.Dropdown && (!filter.FilterTypes || filter.FilterTypes.length === 0)) {\r\n                filter.FilterTypes = [Filters.Contains, Filters.Empty, Filters.Equals, Filters.GreaterThan, Filters.GreaterThanOrEqual, Filters.InList, Filters.LessThan, Filters.LessThanOrEqual, Filters.NotContains, Filters.NotEmpty, Filters.NotEquals];\r\n            }\r\n            if (filter.FilterMultiSelect && filter.FilterValues && filter.FilterValues.length > 0) {\r\n                filter.FilterTypes = [Filters.Equals, Filters.NotEquals];\r\n            }\r\n\r\n            let operation = filter.Filter?.operation;\r\n\r\n            if (!operation) {\r\n                if (filter.FilterTypes.length === 1) {\r\n                    operation = [filter.FilterTypes[0]];\r\n                } else if (filter.FilterValueDefault) {\r\n                    operation = [filter.FilterValueDefault];\r\n                }\r\n            }\r\n\r\n            this.filterList.push({\r\n                Type: \"Custom\",\r\n                Name: filter.Name,\r\n                DisplayName: filter.DisplayName,\r\n                Operation: operation,\r\n                ValueType: filter.Type,\r\n                ValueList: filter.FilterValues,\r\n                MultiSelect: filter.FilterMultiSelect,\r\n                Value: filter.Filter?.value ?? \"\"\r\n            });\r\n        });\r\n\r\n        this._columns.filter((column: SDKDataGridColumn) => column.showFilter && column.isVisible && !column.isAction).forEach((column: SDKDataGridColumn) => {\r\n            if (!column.FilterTypes || column.FilterTypes.length === 0) {\r\n                column.FilterTypes = [Filters.Contains, Filters.Empty, Filters.Equals, Filters.GreaterThan, Filters.GreaterThanOrEqual, Filters.InList, Filters.LessThan, Filters.LessThanOrEqual, Filters.NotContains, Filters.NotEmpty, Filters.NotEquals];\r\n            }\r\n            if (column.FilterMultiSelect && column.FilterValues && column.FilterValues.length > 0) {\r\n                column.FilterTypes = [Filters.Equals, Filters.NotEquals];\r\n            }\r\n\r\n            let operation = column.Filter?.operation;\r\n\r\n            if (!operation) {\r\n                if (column.FilterTypes.length === 1) {\r\n                    operation = [column.FilterTypes[0]];\r\n                } else if (column.FilterValueDefault) {\r\n                    operation = [column.FilterValueDefault];\r\n                }\r\n            }\r\n\r\n            this.filterList.push({\r\n                Type: \"System\",\r\n                Name: column.Name,\r\n                DisplayName: this.getColumnName(column),\r\n                Operation: operation,\r\n                ValueType: column.FilterType,\r\n                ValueList: column.FilterValues,\r\n                MultiSelect: column.FilterMultiSelect,\r\n                Value: column.Filter?.value ?? \"\"\r\n            });\r\n\r\n            this.columnList.push(column);\r\n        });\r\n    }\r\n\r\n    protected getFilters(filter: any) {\r\n        let obj: any;\r\n        let options: any = [];\r\n\r\n        if (filter.Type === \"Custom\") {\r\n            obj = this._customFilters.find((o: SDKDataGridCustomFilter) => o.Name === filter.Name);\r\n        } else {\r\n            obj = this._columns.find((o: SDKDataGridColumn) => o.Name === filter.Name);\r\n        }\r\n\r\n        obj.FilterTypes.forEach((type: any) => {\r\n            options.push(type);\r\n        })\r\n\r\n        return options;\r\n    }\r\n\r\n    protected filterExists(value: any, filter: any) {\r\n        let obj: any;\r\n\r\n        if (filter.Type === \"Custom\") {\r\n            obj = this._customFilters.find((o: SDKDataGridCustomFilter) => o.Name === filter.Name);\r\n        } else {\r\n            obj = this._columns.find((o: SDKDataGridColumn) => o.Name === filter.Name);\r\n        }\r\n\r\n        if (obj?.FilterTypes && obj.FilterTypes.length > 0) {\r\n            if (Object.values(obj.FilterTypes).includes(value)) {\r\n                return true;\r\n            }\r\n        } else {\r\n            if (!obj.FilterTypes || obj.FilterTypes.length === 0 || Object.values(obj.FilterTypes).includes(value)) {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    protected getColumnName(column: SDKDataGridColumn) {\r\n        let originalName = column.Name;\r\n\r\n        if (column.FriendlyName && column.FriendlyName !== \"\") {\r\n            originalName = column.FriendlyName;\r\n        } else if (column.DisplayName && column.DisplayName !== \"\") {\r\n            originalName = column.DisplayName;\r\n        }\r\n\r\n        return originalName;\r\n    }\r\n\r\n    private validate() {\r\n        let valid: boolean = true;\r\n\r\n        this.filterList.forEach((filter: any) => {\r\n            if (![FilterType.Checkbox, FilterType.TextboxOnly].includes(filter.ValueType) && filter.Value.length > 0 && !filter.Operation) valid = false;\r\n        })\r\n\r\n        return valid;\r\n    }\r\n\r\n    /**************************************************************************\r\n    * User Action Methods\r\n    **************************************************************************/\r\n    protected addOperation(event: any, filter: any) {\r\n        let item: any = this.filterList.find(f => f.Name === filter.Name);\r\n\r\n        if (item) {\r\n            item.Operation = event;\r\n        }\r\n    }\r\n\r\n    protected addValue(event: any, filter: any) {\r\n        let item: any = this.filterList.find(f => f.Name === filter.Name);\r\n\r\n        if (item) {\r\n            item.Value = event.target.value;\r\n        }\r\n    }\r\n\r\n    protected selectedValue(event: any, filter: any) {\r\n        let item: any = this.filterList.find(f => f.Name === filter.Name);\r\n\r\n        if (item) {\r\n            item.Value = event;\r\n        }\r\n\r\n        filter.Value = event;\r\n    }\r\n\r\n    protected toggleAny(filter: any) {\r\n        let item: any = this.filterList.find((f: any) => f.Type === \"Custom\" && f.ValueType === \"checkbox\" && f.Name === filter.Name);\r\n\r\n        if (item) {\r\n            if (item.Value === \"true\") {\r\n                item.Value = \"\";\r\n            } else {\r\n                item.Value = \"true\";\r\n            }\r\n        }\r\n    }\r\n\r\n    protected reset() {\r\n        this.message = {\r\n            Title: \"Reset Filters\",\r\n            Text: \"Are you sure?\",\r\n            OKText: \"YES\",\r\n            CancelText: \"NO\",\r\n            OK: () => {\r\n                this.showMessage = false;\r\n\r\n                this._columns.forEach((column: SDKDataGridColumn) => {\r\n                    column.Filter = column._original.Filter;\r\n                });\r\n\r\n                this._customFilters.forEach((filter: SDKDataGridCustomFilter) => {\r\n                    filter.Filter = filter._original.Filter;\r\n                });\r\n\r\n                this.initialize();\r\n            },\r\n            Cancel: () => {\r\n                this.showMessage = false;\r\n            }\r\n        };\r\n\r\n        this.showMessage = true;\r\n    }\r\n\r\n    protected apply() {\r\n        let cont: boolean = true;\r\n\r\n        if (!this.validate()) {\r\n            cont = confirm(\"Some filters are missing data. Contniue anyway?\");\r\n        }\r\n\r\n        if (cont) {\r\n            this.filterList.forEach((filter: any) => {\r\n                let ndx = this._columns.findIndex((column: SDKDataGridColumn) => column.Name === filter.Name);\r\n\r\n                if (ndx > -1) {\r\n                    if (filter.Value && (filter.Value !== undefined || filter.Value !== null || filter.Value !== \"\" || filter.Value.length > 0)) {\r\n                        this._columns[ndx].Filter = { operation: filter.Operation, value: filter.Value };\r\n                    } else if (filter.Operation && [\"Empty\", \"NotEmpty\"].includes(filter.Operation[0])) {\r\n                        this._columns[ndx].Filter = { operation: filter.Operation, value: null };\r\n                    } else {\r\n                        this._columns[ndx].Filter = null;\r\n                    }\r\n                }\r\n\r\n                ndx = this._customFilters.findIndex((custom: SDKDataGridCustomFilter) => custom.Name === filter.Name);\r\n\r\n                if (ndx > -1) {\r\n                    if (filter.Value && (filter.Value !== undefined || filter.Value !== null || filter.Value !== \"\" || filter.Value.length > 0)) {\r\n                        this._customFilters[ndx].Filter = { operation: filter.Operation, value: filter.Value };\r\n                    } else if (filter.Operation && [\"Empty\", \"NotEmpty\"].includes(filter.Operation[0])) {\r\n                        this._customFilters[ndx].Filter = { operation: filter.Operation, value: null };\r\n                    } else {\r\n                        this._customFilters[ndx].Filter = null;\r\n                    }\r\n                }\r\n            });\r\n\r\n            this.applyEvent.emit({ option: \"Filters\", columns: this._columns, customFilters: this._customFilters });\r\n        }\r\n    }\r\n\r\n    protected close() {\r\n        this.closeEvent.emit();\r\n    }\r\n}\r\n","<div class=\"sdk-datagrid-window\">\r\n    <div class=\"header\">\r\n        <span class=\"title\">Filters</span>\r\n        <span title=\"Close\" class=\"sdk-icon close\" (click)=\"close()\">close</span>\r\n    </div>\r\n    <div class=\"content no-actions\">\r\n        <div class=\"box\" [ngClass]=\"{ 'checkbox': filter.Type === 'Any' }\" *ngFor=\"let filter of filterList\">\r\n            <div>\r\n                <div *ngIf=\"['text', 'text-only', 'list'].includes(filter.ValueType)\" class=\"column\">\r\n                    <div class=\"name\">{{ filter.DisplayName }}</div>\r\n                </div>\r\n                <div *ngIf=\"filter.ValueType === 'text-only'\" class=\"operation-value no-operation\">\r\n                    <div class=\"value no-operation\">\r\n                        <input [value]=\"filter.Value\" (input)=\"addValue($event, filter)\" />\r\n                    </div>\r\n                </div>\r\n                <div *ngIf=\"filter.ValueType === 'checkbox'\" class=\"column-checkbox\">\r\n                    <div class=\"all-select\" (click)=\"toggleAny(filter)\">\r\n                        <input type=\"checkbox\" class=\"select\" [checked]=\"filter.Value === 'true' ? 'checked' : ''\" />\r\n                        <span>{{ filter.DisplayName }}</span>\r\n                    </div>\r\n                </div>\r\n                <div *ngIf=\"['text', 'list'].includes(filter.ValueType)\" class=\"operation-value\">\r\n                    <div class=\"operation\">\r\n                        <sdk-select\r\n                            [options]=\"getFilters(filter)\"\r\n                            optionStyle=\"border-radius: 4px;\"\r\n                            [optionValuesStyle]=\"'max-height: 150px; overflow: hidden; overflow-y: auto;'\"\r\n                            noValueLabel=\"Select operator...\"\r\n                            [selectedOptions]=\"filter.Operation\"\r\n                            (selectChangeEvent)=\"addOperation($event, filter)\">\r\n                        </sdk-select>\r\n                    </div>\r\n                    <div class=\"value\">\r\n                        <input *ngIf=\"filter.ValueType === 'text'\" [value]=\"filter.Value\" (input)=\"addValue($event, filter)\" />\r\n\r\n                        <sdk-select *ngIf=\"filter.ValueType === 'list' && !filter.MultiSelect\"\r\n                            [options]=\"filter.ValueList\"\r\n                            optionStyle=\"border-radius: 4px;\"\r\n                            [optionValuesStyle]=\"'max-height: 150px; overflow: hidden; overflow-y: auto;'\"\r\n                            noValueLabel=\"[All values]\"\r\n                            [noValueDisabled]=false\r\n                            [selectedOptions]=\"filter.Value\"\r\n                            (selectChangeEvent)=\"selectedValue($event, filter)\">\r\n                        </sdk-select>\r\n\r\n                        <sdk-select *ngIf=\"filter.ValueType === 'list' && filter.MultiSelect\"\r\n                            [options]=\"filter.ValueList\"\r\n                            optionStyle=\"border-radius: 4px;\"\r\n                            [optionValuesStyle]=\"'max-height: 150px; overflow: hidden; overflow: auto;'\"\r\n                            noValueLabel=\"[All values]\"\r\n                            [noValueDisabled]=false\r\n                            [multiSelect]=filter.MultiSelect\r\n                            [multiValues]=false\r\n                            [selectedOptions]=\"filter.Value\"\r\n                            (selectChangeEvent)=\"selectedValue($event, filter)\">\r\n                        </sdk-select>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"footer\">\r\n        <button class=\"sdk-button delete\" (click)=\"reset()\">Reset</button>\r\n        <button class=\"sdk-button\" (click)=\"apply()\">Apply</button>\r\n    </div>\r\n</div>\r\n\r\n<!-- Lock -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-windows-lock\"></div>\r\n\r\n<!-- Message -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-message\">\r\n    <div class=\"title\">{{ message.Title }}</div>\r\n    <div class=\"text\" [innerHtml]=\"message.Text\"></div>\r\n    <div class=\"action\">\r\n        <button class=\"sdk-button\" (click)=\"message.OK()\">{{ message.OKText }}</button>\r\n        <button class=\"sdk-button cancel\" (click)=\"message.Cancel()\">{{ message.CancelText }}</button>\r\n    </div>\r\n</div>\r\n","export enum FormulaOperation {\r\n    None = \"\",\r\n    Avg = \"Avg\",\r\n    Rng = \"Rng\",\r\n    Sum = \"Sum\"\r\n}\r\n\r\nexport class SDKDataGridFormula {\r\n    public Name: string = \"\";\r\n    public Format: number = 0;\r\n    public Operation: FormulaOperation = FormulaOperation.None; // Options [\"Avg\", \"Rng\", \"Sum\"].\r\n    public Value?: number = 0;\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\nimport { SDKDataGridColumn } from '../../models/datagrid-column';\r\nimport { FormulaOperation, SDKDataGridFormula } from '../../models/datagrid-formula';\r\nimport { SDKDataGridMessage } from '../../models/datagrid-message';\r\n\r\nimport { Clone } from '../../utils/clone';\r\n\r\n@Component({\r\n    selector: 'sdk-datagrid-formula-option',\r\n    templateUrl: './formula-option.component.html',\r\n    styleUrls: ['./formula-option.component.scss']\r\n})\r\n\r\nexport class SDKDataGridFormulaOptionComponent {\r\n    /**************************************************************************\r\n    * Input/Output Parameters\r\n    **************************************************************************/\r\n    @Input() columns: SDKDataGridColumn[] = [];\r\n    @Output() closeEvent = new EventEmitter();\r\n    @Output() applyEvent = new EventEmitter();\r\n\r\n    /**************************************************************************\r\n    * Component Variables\r\n    **************************************************************************/\r\n    protected columnList: SDKDataGridColumn[] = [];\r\n    protected formulaList: SDKDataGridFormula[] = [];\r\n    protected operationList: any = [\r\n        { Operation: \"Avg\", DisplayName: \"Average\" },\r\n        { Operation: \"Rng\", DisplayName: \"Range (High/Low)\" },\r\n        { Operation: \"Sum\", DisplayName: \"Summarize\" }\r\n    ];\r\n\r\n    private _columns: SDKDataGridColumn[] = [];\r\n\r\n    /**************************************************************************\r\n    * Message Variables\r\n    **************************************************************************/\r\n    protected showMessage: boolean = false;\r\n    protected message: SDKDataGridMessage = new SDKDataGridMessage();\r\n\r\n    /**************************************************************************\r\n    * Component Lifecycle Methods\r\n    **************************************************************************/\r\n    protected ngOnChanges(_args: any) {\r\n        if (_args.columns?.currentValue !== undefined) {\r\n            this._columns = Clone.deepCopy(this.columns);\r\n\r\n            this.initialize();\r\n        }\r\n    }\r\n\r\n    /**************************************************************************\r\n    * Setup Methods\r\n    **************************************************************************/\r\n    protected initialize() {\r\n        this.formulaList = [];\r\n        this.columnList = [];\r\n\r\n        this._columns\r\n            .filter((column: SDKDataGridColumn) => column.isVisible && !column.isAction && column.Formulas)\r\n            .forEach((column: SDKDataGridColumn) => {\r\n                column.Formulas.forEach((formula: any) => {\r\n                    this.formulaList.push({\r\n                        Name: column.Name,\r\n                        Operation: formula.operation,\r\n                        Format: formula.format,\r\n                        Value: formula.value\r\n                    });\r\n                });\r\n            });\r\n\r\n        this._columns.filter((column: SDKDataGridColumn) => column.isVisible && !column.isAction).forEach((column: SDKDataGridColumn) => {\r\n            this.columnList.push({ Name: column.Name, DisplayName: this.getColumnName(column)});\r\n        });\r\n    }\r\n\r\n    protected getColumnName(column: SDKDataGridColumn) {\r\n        let originalName = column.Name;\r\n\r\n        if (column.FriendlyName && column.FriendlyName !== \"\") {\r\n            originalName = column.FriendlyName;\r\n        } else if (column.DisplayName && column.DisplayName !== \"\") {\r\n            originalName = column.DisplayName;\r\n        }\r\n\r\n        return originalName;\r\n    }\r\n\r\n    protected getSelectedColumn(formula: any) {\r\n        let ndx: number = this._columns.findIndex((column: SDKDataGridColumn) => column.Name === formula.Name);\r\n\r\n        if (ndx > -1) {\r\n            return [{ \"DisplayName\": this._columns[ndx].DisplayName }];\r\n        } else {\r\n            return [];\r\n        }\r\n    }\r\n\r\n    protected getSelectedOperation(formula: any) {\r\n        let ndx: number = this.operationList.findIndex((operation: any) => operation.Operation === formula.Operation);\r\n\r\n        if (ndx > -1) {\r\n            return [{ \"DisplayName\": this.operationList[ndx].DisplayName }];\r\n        } else {\r\n            return [];\r\n        }\r\n    }\r\n\r\n    private validate() {\r\n        let valid: boolean = true;\r\n\r\n        this.formulaList.forEach((formula: SDKDataGridFormula) => {\r\n            if (formula.Name === \"\") valid = false;\r\n            if (formula.Operation === FormulaOperation.None) valid = false;\r\n        })\r\n\r\n        return valid;\r\n    }\r\n\r\n    /**************************************************************************\r\n    * User Action Methods\r\n    **************************************************************************/\r\n    protected addFormula() {\r\n        this.formulaList.push({\r\n            Name: \"\",\r\n            Operation: FormulaOperation.None,\r\n            Format: 0,\r\n            Value: 0\r\n        });\r\n    }\r\n\r\n    protected deleteFormula(index: number) {\r\n        this.formulaList.splice(index, 1);\r\n    }\r\n\r\n    protected addColumn(event: any, index: number) {\r\n        this.formulaList[index].Name = event[0].Name;\r\n    }\r\n\r\n    protected addOperation(event: any, index: number) {\r\n        this.formulaList[index].Operation = event[0].Operation;\r\n    }\r\n\r\n    protected addFormat(event: any, index: number) {\r\n        this.formulaList[index].Format = (event.target.value === \"\" ? 0 : event.target.value);\r\n    }\r\n\r\n    protected drop(event: any) {\r\n        moveItemInArray(this.formulaList, event.previousIndex, event.currentIndex);\r\n    }\r\n\r\n    protected reset() {\r\n        this.message = {\r\n            Title: \"Reset Formulas\",\r\n            Text: \"Are you sure?\",\r\n            OKText: \"YES\",\r\n            CancelText: \"NO\",\r\n            OK: () => {\r\n                this.showMessage = false;\r\n\r\n                this._columns.forEach((column: SDKDataGridColumn) => {\r\n                    column.Formulas = column._original.Formulas;\r\n                });\r\n\r\n                this.initialize();\r\n            },\r\n            Cancel: () => {\r\n                this.showMessage = false;\r\n            }\r\n        };\r\n\r\n        this.showMessage = true;\r\n    }\r\n\r\n    protected apply() {\r\n        let cont: boolean = true;\r\n\r\n        if (!this.validate()) {\r\n            cont = confirm(\"Some formulas are missing data. Contniue anyway?\");\r\n        }\r\n\r\n        if (cont) {\r\n            this._columns.forEach((column: SDKDataGridColumn) => {\r\n                column.Formulas = column._original.Formulas;\r\n            });\r\n\r\n            this.formulaList.forEach((formula: SDKDataGridFormula) => {\r\n                let ndx = this._columns.findIndex((column: SDKDataGridColumn) => column.Name === formula.Name);\r\n\r\n                if (ndx > -1) {\r\n                    if (!this._columns[ndx].Formulas) {\r\n                        this._columns[ndx].Formulas = [];\r\n                    }\r\n\r\n                    this._columns[ndx].Formulas.push({\r\n                        operation: formula.Operation,\r\n                        format: formula.Format,\r\n                        value: formula.Value\r\n                    });\r\n                }\r\n            })\r\n\r\n            this.applyEvent.emit({ option: \"Formulas\", columns: this._columns });\r\n        }\r\n    }\r\n\r\n    protected close() {\r\n        this.closeEvent.emit();\r\n    }\r\n}\r\n","<div class=\"sdk-datagrid-window\">\r\n    <div class=\"header\">\r\n        <span class=\"title\">Formulas</span>\r\n        <span title=\"Close\" class=\"sdk-icon close\" (click)=\"close()\">close</span>\r\n    </div>\r\n    <div class=\"actions\">\r\n        <button class=\"sdk-button button-left\" (click)=\"addFormula()\">Add formula</button>\r\n    </div>\r\n    <div cdkDropList class=\"content\" (cdkDropListDropped)=\"drop($event)\">\r\n        <div *ngIf=\"formulaList.length === 0\" class=\"no-records\">\r\n            <span>Add a formula.</span>\r\n        </div>\r\n        <div class=\"box\" *ngFor=\"let formula of formulaList; let i = index\" cdkDragBoundary=\".list\" cdkDrag>\r\n            <div class=\"delete\">\r\n                <span class=\"sdk-icon\" (click)=\"deleteFormula(i)\">delete</span>\r\n            </div>\r\n            <div>\r\n                <div class=\"column\">\r\n                    <sdk-select\r\n                        [options]=\"columnList\"\r\n                        optionStyle=\"border-radius: 4px;\"\r\n                        [optionValuesStyle]=\"'max-height: 150px; overflow: hidden; overflow-y: auto;'\"\r\n                        noValueLabel=\"Select column...\"\r\n                        displayValue=\"DisplayName\"\r\n                        [selectedOptions]=\"getSelectedColumn(formula)\"\r\n                        (selectChangeEvent)=\"addColumn($event, i)\">\r\n                    </sdk-select>\r\n                </div>\r\n                <div class=\"operation-precision\">\r\n                    <div class=\"operation\">\r\n                        <sdk-select\r\n                            [options]=\"operationList\"\r\n                            optionStyle=\"border-radius: 4px;\"\r\n                            [optionValuesStyle]=\"'max-height: 150px; overflow: hidden; overflow-y: auto;'\"\r\n                            noValueLabel=\"Select operator...\"\r\n                            displayValue=\"DisplayName\"\r\n                            [selectedOptions]=\"getSelectedOperation(formula)\"\r\n                            (selectChangeEvent)=\"addOperation($event, i)\">\r\n                        </sdk-select>\r\n                    </div>\r\n                    <div class=\"precision\">\r\n                        <span>#.</span>\r\n                        <input [value]=\"formula.Format\" (keypress)=\"($event.charCode >= 48 && $event.charCode < 58) || $event.charCode === 8\" (blur)=\"addFormat($event, i)\" />\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div class=\"move\" cdkDragHandle>\r\n                <span class=\"sdk-icon\">drag_handle</span>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"footer\">\r\n        <button class=\"sdk-button delete\" (click)=\"reset()\">Reset</button>\r\n        <button class=\"sdk-button\" (click)=\"apply()\">Apply</button>\r\n    </div>\r\n</div>\r\n\r\n<!-- Lock -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-windows-lock\"></div>\r\n\r\n<!-- Message -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-message\">\r\n    <div class=\"title\">{{ message.Title }}</div>\r\n    <div class=\"text\" [innerHtml]=\"message.Text\"></div>\r\n    <div class=\"action\">\r\n        <button class=\"sdk-button\" (click)=\"message.OK()\">{{ message.OKText }}</button>\r\n        <button class=\"sdk-button cancel\" (click)=\"message.Cancel()\">{{ message.CancelText }}</button>\r\n    </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'sdk-datagrid-export-option',\r\n    templateUrl: './export-option.component.html',\r\n    styleUrls: ['./export-option.component.scss']\r\n})\r\n\r\nexport class SDKDataGridExportOptionComponent {\r\n    /**************************************************************************\r\n    * Input/Output Parameters\r\n    **************************************************************************/\r\n    @Input() isExporting: boolean = false;\r\n    @Output() closeEvent = new EventEmitter();\r\n    @Output() applyEvent = new EventEmitter();\r\n\r\n    /**************************************************************************\r\n    * Component Variables\r\n    **************************************************************************/\r\n    protected includeAllData: boolean = false;\r\n\r\n    /**************************************************************************\r\n    * User Action Methods\r\n    **************************************************************************/\r\n    protected apply() {\r\n        this.applyEvent.emit(this.includeAllData);\r\n    }\r\n\r\n    protected close() {\r\n        this.closeEvent.emit();\r\n    }\r\n}\r\n","<div class=\"sdk-datagrid-window\">\r\n    <div class=\"header\">\r\n        <span class=\"title\">Export</span>\r\n        <span title=\"Close\" class=\"sdk-icon close\" (click)=\"close()\">close</span>\r\n    </div>\r\n    <div class=\"content no-actions\">\r\n        <div class=\"no-box\">\r\n            <div class=\"section\">\r\n                <div style=\"display: inline-block;\">\r\n                    <input class=\"data-option\" type=\"checkbox\" [checked]=\"includeAllData\" (change)=\"includeAllData = !includeAllData\">\r\n                    <span class=\"data-label\" (click)=\"includeAllData = !includeAllData\">Include All Data</span>\r\n                </div>\r\n            </div>\r\n            <div class=\"section\">\r\n                <div style=\"display: inline-block; font-size: 0.8em;\">\r\n                    <span>NOTE: Exporting all data may take a while based on the total records in the dataset.</span>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"footer\">\r\n        <span *ngIf=\"isExporting\" class=\"progress\">Export in progress... please wait.</span>\r\n        <button *ngIf=\"!isExporting\" class=\"sdk-button\" (click)=\"apply()\">Export</button>\r\n    </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\nimport { SDKDataGridColumn } from '../../models/datagrid-column';\r\nimport { SDKDataGridMessage } from '../../models/datagrid-message';\r\n\r\nimport { Clone } from '../../utils/clone';\r\n\r\n@Component({\r\n    selector: 'sdk-datagrid-chart-option',\r\n    templateUrl: './chart-option.component.html',\r\n    styleUrls: ['./chart-option.component.scss']\r\n})\r\n\r\nexport class SDKDataGridChartOptionComponent {\r\n    @Input() columns: SDKDataGridColumn[] = [];\r\n    @Input() chart: any = \"\";\r\n    @Output() closeEvent = new EventEmitter();\r\n    @Output() applyEvent = new EventEmitter();\r\n\r\n    public chartType = \"bar\";\r\n    public columnLabel = \"\";\r\n    public columnDataX = \"\";\r\n    public columnDataY = \"\";\r\n    public dataOption = false;\r\n\r\n    protected _columns: SDKDataGridColumn[] = [];\r\n\r\n    /**************************************************************************\r\n    * Message Variable\r\n    **************************************************************************/\r\n    protected showMessage: boolean = false;\r\n    protected message: SDKDataGridMessage = new SDKDataGridMessage();\r\n\r\n    public ngOnChanges(_args: any) {\r\n        this._columns = Clone.deepCopy(this.columns);\r\n\r\n        this.initialize();\r\n    }\r\n\r\n    private initialize() {\r\n        this._columns = this._columns.filter((column: SDKDataGridColumn) => column.isVisible && !column.isAction);\r\n        \r\n        if (this.chart === \"\") {\r\n            this.chart = {\r\n                Type: \"bar\",\r\n                Show: false,\r\n                Label: \"\",\r\n                DataX: \"\",\r\n                DataY: \"\",\r\n                Option: false\r\n            };\r\n        }\r\n\r\n        this.chartType = this.chart.Type;\r\n        this.columnLabel = this.chart.Label;\r\n        this.columnDataX = this.chart.DataX;\r\n        this.columnDataY = this.chart.DataY;\r\n        this.dataOption = this.chart.Option;\r\n    }\r\n\r\n    public getColumnOriginalName(column: SDKDataGridColumn) {\r\n        let originalName = column.Name;\r\n\r\n        if (column.FriendlyName && column.FriendlyName !== \"\") {\r\n            originalName = column.FriendlyName;\r\n        } else if (column.DisplayName && column.DisplayName !== \"\") {\r\n            originalName = column.DisplayName;\r\n        }\r\n\r\n        return originalName;\r\n    }\r\n\r\n    public getValue(event: any) {\r\n        return event.target.value;\r\n    }\r\n\r\n    public reset() {\r\n        this.message = {\r\n            Title: \"Reset Chart\",\r\n            Text: \"Are you sure?\",\r\n            OKText: \"YES\",\r\n            CancelText: \"NO\",\r\n            OK: () => {\r\n                this.chart = \"\";\r\n\r\n                this.initialize();\r\n            },\r\n            Cancel: () => {\r\n                this.showMessage = false;\r\n            }\r\n        };\r\n\r\n        this.showMessage = true;\r\n    }\r\n\r\n    public apply() {\r\n        let show = true;\r\n\r\n        if (['bar', 'line', 'radar'].indexOf(this.chartType) > -1 && (this.columnLabel === \"\" || this.columnDataX === \"\" || this.columnDataY === \"\")) show = false;\r\n        if (['doughnut', 'pie', 'polarArea'].indexOf(this.chartType) > -1 && (this.columnLabel === \"\" || this.columnDataY === \"\")) show = false;\r\n\r\n        this.chart = {\r\n            Type: this.chartType,\r\n            Show: show,\r\n            Label: this.columnLabel,\r\n            DataX: this.columnDataX,\r\n            DataY: this.columnDataY,\r\n            Option: this.dataOption\r\n        };\r\n\r\n        this.applyEvent.emit(this.chart);\r\n    }\r\n\r\n    public close() {\r\n        this.closeEvent.emit();\r\n    }\r\n}\r\n","<div class=\"sdk-datagrid-window\">\r\n    <div class=\"header\">\r\n        <span class=\"title\">Chart</span>\r\n        <span title=\"Close\" class=\"sdk-icon close\" (click)=\"close()\">close</span>\r\n    </div>\r\n    <div class=\"content no-actions\">\r\n        <div class=\"no-box\">\r\n            <div class=\"section\">\r\n                <span>Chart Type</span>\r\n                <select class=\"column\" (change)=\"chartType = getValue($event)\">\r\n                    <option value=\"bar\" [selected]=\"(chartType === 'bar') ? 'selected' : ''\">Bar</option>\r\n                    <option value=\"doughnut\" [selected]=\"(chartType === 'doughnut') ? 'selected' : ''\">Doughnut</option>\r\n                    <option value=\"line\" [selected]=\"(chartType === 'line') ? 'selected' : ''\">Line</option>\r\n                    <option value=\"pie\" [selected]=\"(chartType === 'pie') ? 'selected' : ''\">Pie</option>\r\n                    <option value=\"polarArea\" [selected]=\"(chartType === 'polarArea') ? 'selected' : ''\">Polar Area</option>\r\n                    <option value=\"radar\" [selected]=\"(chartType === 'radar') ? 'selected' : ''\">Radar</option>\r\n                </select>\r\n            </div>\r\n            <div class=\"section\">\r\n                <span *ngIf=\"['bar', 'line', 'radar'].indexOf(chartType) > -1\">Column for Grouping</span>\r\n                <span *ngIf=\"['doughnut', 'pie', 'polarArea'].indexOf(chartType) > -1\">Column for Sections</span>\r\n                <select class=\"column\" (change)=\"columnLabel = getValue($event)\">\r\n                    <option selected value=\"\"></option>\r\n                    <ng-container *ngFor=\"let column of _columns\">\r\n                        <option [value]=\"column.Name\" [selected]=\"(columnLabel === column.Name) ? 'selected' : ''\">{{ getColumnOriginalName(column)  }}</option>\r\n                    </ng-container>\r\n                </select>\r\n            </div>\r\n            <div *ngIf=\"['bar', 'line', 'radar'].indexOf(chartType) > -1\" class=\"section\">\r\n                <span>Column for X-Axis (Bottom)</span>\r\n                <span class=\"note\">(typically a timespan)</span>\r\n                <select class=\"column\" (change)=\"columnDataX = getValue($event)\">\r\n                    <option selected value=\"\"></option>\r\n                    <ng-container *ngFor=\"let column of _columns\">\r\n                        <option [value]=\"column.Name\" [selected]=\"(columnDataX === column.Name) ? 'selected' : ''\">{{ getColumnOriginalName(column) }}</option>\r\n                    </ng-container>\r\n                </select>\r\n            </div>\r\n            <div class=\"section\">\r\n                <div *ngIf=\"['bar', 'line', 'radar'].indexOf(chartType) > -1\">\r\n                    <span>Column for Y-Axis (Left Side)</span>\r\n                    <span class=\"note\">(typically a number)</span>\r\n                </div>\r\n                <div *ngIf=\"['doughnut', 'pie', 'polarArea'].indexOf(chartType) > -1\">\r\n                    <span>Column to Summarize</span>\r\n                    <span class=\"note\">(must be a number)</span>\r\n                </div>\r\n                <select class=\"column\" (change)=\"columnDataY = getValue($event)\">\r\n                    <option selected value=\"\"></option>\r\n                    <ng-container *ngFor=\"let column of _columns\">\r\n                        <option [value]=\"column.Name\" [selected]=\"(columnDataY === column.Name) ? 'selected' : ''\">{{ getColumnOriginalName(column) }}</option>\r\n                    </ng-container>\r\n                </select>\r\n            </div>\r\n            <div *ngIf=\"['bar'].indexOf(chartType) > -1\" class=\"section\">\r\n                <div style=\"display: inline-block;\">\r\n                    <span class=\"data-label\" (click)=\"dataOption = !dataOption\">Stack Data?</span>\r\n                    <input class=\"data-option\" type=\"checkbox\" [checked]=\"dataOption\" (change)=\"dataOption = !dataOption\">\r\n                </div>\r\n            </div>\r\n            <div *ngIf=\"['line'].indexOf(chartType) > -1\" class=\"section\">\r\n                <div style=\"display: inline-block;\">\r\n                    <span class=\"data-label\" (click)=\"dataOption = !dataOption\">Fill Data?</span>\r\n                    <input class=\"data-option\" type=\"checkbox\" [checked]=\"dataOption\" (change)=\"dataOption = !dataOption\">\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"footer\">\r\n        <button class=\"sdk-button delete\" (click)=\"reset()\">Reset</button>\r\n        <button class=\"sdk-button\" (click)=\"apply()\">Apply</button>\r\n    </div>\r\n</div>\r\n\r\n<!-- Lock -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-windows-lock\"></div>\r\n\r\n<!-- Message -->\r\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-message\">\r\n    <div class=\"title\">{{ message.Title }}</div>\r\n    <div class=\"text\" [innerHtml]=\"message.Text\"></div>\r\n    <div class=\"action\">\r\n        <button class=\"sdk-button\" (click)=\"message.OK()\">{{ message.OKText }}</button>\r\n        <button class=\"sdk-button cancel\" (click)=\"message.Cancel()\">{{ message.CancelText }}</button>\r\n    </div>\r\n</div>\r\n","import { Component, ElementRef, EventEmitter, Input, Output, TemplateRef, Type, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Sorts } from './enums/sorts';\n\nimport { Clone } from './utils/clone';\n\nimport { SDKDataGridColumn } from './models/datagrid-column';\nimport { SDKDataGridOptions, StorageType } from './models/datagrid-options';\nimport { SDKDataGridCustomFilter } from './models/datagrid-custom-filter';\nimport { SDKDataGridSettings } from './models/datagrid-settings';\nimport { SDKDataGridMessage } from './models/datagrid-message';\n\n@Component({\n\tselector: 'sdk-datagrid',\n\ttemplateUrl: './sdk-datagrid.component.html',\n\tstyleUrls: ['./sdk-datagrid.component.scss']\n})\nexport class SDKDatagridComponent {\n\t/**************************************************************************\n\t* Input/Output Parameters for updating the Grid\n\t**************************************************************************/\n\t@Input() updateGrid: boolean = false; // Applies changes/data to the grid.\n\t@Output() updateGridChange = new EventEmitter<boolean>(); // Callback to set updateGrid variable.\n\n\t/**************************************************************************\n\t* Input/Output Parameters for editing a record\n\t**************************************************************************/\n\t@Input() editRecordIndex: number | null | undefined; // The record that is currently being edited.\n\t@Output() editRecordIndexChange = new EventEmitter<number | null | undefined>(); // Callback to set editRecordIndex variable.\n\n\t/**************************************************************************\n\t* Input/Output Parameters for dataset change\n\t**************************************************************************/\n\t@Input() datasets: string[] = []; // List of datasets.\n\t@Input() activeDataset: string = \"\"; // The current selected dataset.\n\t@Output() activeDatasetChange = new EventEmitter<string>(); // Callback to set activeDataset variable.\n\n\t/**************************************************************************\n\t* Input/Output Parameters for updating columns\n\t**************************************************************************/\n\t@Input() columns: SDKDataGridColumn[] = []; // The columns to be used for the grid.\n\t@Input() columnHeaderStyle: string = \"\"; // Style used for column headers.\n\t@Output() columnsChange = new EventEmitter<SDKDataGridColumn[]>(); // Callback to set columns variable.\n\n\t/**************************************************************************\n\t* Input Parameters for rows\n\t**************************************************************************/\n\t@Input() detailTemplate!: TemplateRef<any>; // Embedded component for row detail.\n\t@Input() tooltipTemplate!: TemplateRef<any>; // Tooltip for row.\n\n\t/**************************************************************************\n\t* Input/Output Parameters for updating custom filters\n\t**************************************************************************/\n\t@Input() customFilters: SDKDataGridCustomFilter[] = []; // Custom filters added to standard filter provided in loaddata callback (filters).\n\t@Output() customFiltersChange = new EventEmitter<SDKDataGridCustomFilter[]>(); // Callback to set custom filters variable.\n\n\t/**************************************************************************\n\t* Input/Output Parameters for exporting data\n\t**************************************************************************/\n\t@Input() dataExport: any = \"\"; // The data to export.\n\t@Output() dataExportChange = new EventEmitter<any>(); // Callback to set dataExport variable.\n\n\t/**************************************************************************\n\t* Input/Output Parameters for settings data\n\t**************************************************************************/\n\t@Input() settings: SDKDataGridSettings[] = []; // Options that are saved outside the grid. This value should be set to the value retieved from the datagrid @Output method \"settingsSavedEvent\". Consider it a passthrough value.\n\t@Input() clearSettingsCache: boolean = false; // Clears any grid storage of settings.\n\t@Output() savedSettingsEvent: EventEmitter<SDKDataGridSettings[]> = new EventEmitter(); // Used as a callback to save settings.\n\t@Output() clearSettingsCacheChange = new EventEmitter<boolean>(); // Callback to set clearSettingsCache variable.\n\n\t/**************************************************************************\n\t* Required Output Parameters\n\t**************************************************************************/\n\t@Output() loadDataEvent = new EventEmitter<any>(); // Callback with grid changes.\n\n\t/**************************************************************************\n\t* Optional Input/Output Parameters\n\t**************************************************************************/\n\t@Input() name: string = \"\"; // Unique name of the grid (per page).\n\t@Input() title: string = \"\"; // Title of the grid.\n\t@Input() titleStyle: string = \"\"; // Style used for title.\n\t@Input() options: SDKDataGridOptions | undefined; // Grid options.\n\t@Input() fontFamily: string = \"\"; // font-family used for grid.\n\t@Input() data: any = \"\"; // The data to display in the grid.\n\t@Input() rowValues: number[] = [10, 25, 50, 100, 500, 1000]; // Sets the values used for records per page.\n\t@Input() defaultRows: number = 100; // Default value for records per page.\n\t@Input() rows: number | undefined; // Current rows in dataset.\n\t@Input() page: number | undefined; // Current page of dataset.\n\t@Input() total: number | undefined; // Total records in dataset.\n\n\t@Output() saveGridDataEvent: EventEmitter<any> = new EventEmitter(); // Callback for saving changes to data.\n\t@Output() deleteGridDataEvent: EventEmitter<any> = new EventEmitter(); // Callback for deleting data.\n\t@Output() selectedRowsChangedEvent: EventEmitter<any[]> = new EventEmitter(); // Callback for row changes.\n\t@Output() selectedRowActionEvent: EventEmitter<any> = new EventEmitter(); // // Callback for row actions. NOTE: The return object is { record: [the record], index: [the record index] }\n\n\t/**************************************************************************\n\t* Addon Parameters (Option Icon/Modal Window)\n\t**************************************************************************/\n\t@Input() optionAddons: Type<any>[] = [];\n\t@Input() windowAddons: Type<any>[] = [];\n\n\t/**************************************************************************\n\t* Processing Parameters\n\t**************************************************************************/\n\t@Input() error: string = \"\"; // Any errors that occur during processing.\n\t@Input() isDebug: boolean = false; // Turns on debugging.\n\n\t/**************************************************************************\n\t* Component Variables\n\t**************************************************************************/\n\t@ViewChild('sdkdatagrid') sdkdatagrid!: ElementRef<any>;\n\t@ViewChild('sdkdatagridcontent') sdkdatagridcontent!: ElementRef<any>;\n\t@ViewChild('sdktooltip') sdktooltip!: ElementRef<any>;\n\n\tprotected showGrid: boolean = false;\n\tprotected editGrid: boolean = false;\n\tprotected totalPages: Array<string> = new Array(0);\n\tprotected deleteRecords: Array<number> = new Array(0);\n\tprotected editRecords: boolean = false;\n\n\t/**************************************************************************\n\t* Component Variables based on Input parameters\n\t**************************************************************************/\n\tprotected _editRecordIndex: number | null | undefined = undefined;\n\tprotected _datasets: string[] = [];\n\tprotected _activeDataset: string = \"\";\n\tprotected _selectedDataset: string = \"\";\n\tprotected _name: string = \"\";\n\tprotected _options: SDKDataGridOptions = new SDKDataGridOptions();\n\tprotected _menuOptions: boolean = false;\n\tprotected _data: any = \"\";\n\tprotected _columns: SDKDataGridColumn[] = [];\n\tprotected _customFilters: SDKDataGridCustomFilter[] = [];\n\tprotected _settings: SDKDataGridSettings[] = [];\n\tprotected _rows: number = 100;\n\tprotected _page: number = 1;\n\tprotected _selectedPage: string = \"\";\n\tprotected _total: number = 0;\n\tprotected _isExporting: boolean = false;\n\n\t/**************************************************************************\n\t* Options Variables\n\t**************************************************************************/\n\tprotected optionTitle: string = \"\";\n\tprotected dataMode: string = \"data\";\n\tprotected dataClass: string = \"\";\n\tprotected columnBadge: string = \"0\";\n\tprotected filterBadge: string = \"0\";\n\tprotected sortBadge: string = \"0\";\n\tprotected formulaBadge: string = \"0\";\n\tprotected chartBadge: string = \"0\";\n\tprotected showReset: boolean = false;\n\tprotected showNote: boolean = false;\n\tprotected lockGrid: boolean = false;\n\tprotected datasetTabs: any;\n\n\t/**************************************************************************\n\t* Tooltip Variables\n\t**************************************************************************/\n\tprotected tooltipTimer: any = null;\n\tprotected tooltipAutoCloseTimer: any = null;\n\tprotected tooltipVisible = false;\n\tprotected tooltipStyles: { [key: string]: string } = {};\n\tprotected recordIndex: any = null;\n\tprotected recordData: any = null;\n\n\t/**************************************************************************\n\t* Addon Variables\n\t*   - option(Inputs/Outputs): Used with the Addon icons.\n\t*   - window(Inputs/Outputs): Used with the Addon modal.\n\t**************************************************************************/\n\tpublic optionInputs = {};\n\tpublic windowInputs = {};\n\n\tpublic optionOutputs = {\n\t\tshowDataOptionsEvent: (event: any) => this.showDataOptions(event),\n\t};\n\n\tpublic windowOutputs = {\n\t\tcloseEvent: () => this.closeDataOptions(),\n\t\tapplyEvent: (event: any) => this.applyDataOptions(event),\n\t};\n\n\t/**************************************************************************\n\t* Message Variable\n\t**************************************************************************/\n\tprotected showMessage: boolean = false;\n\tprotected message: SDKDataGridMessage = new SDKDataGridMessage();\n\n\t/**************************************************************************\n\t* Private Variables\n\t**************************************************************************/\n\n\t/**************************************************************************\n\t* Component Lifecycle Methods\n\t**************************************************************************/\n\tconstructor(\n\t\tprivate route: ActivatedRoute\n\t) { }\n\n\tprotected ngOnChanges(_args: any) {\n\t\tthis.showLog(\"START Method: ngOnChanges >>>\");\n\t\t// this.showLog([\"[Input]\", Clone.deepCopy(_args)]);\n\n\t\t// Handles update grid event\n\t\tif (_args.updateGrid !== undefined) {\n\t\t\tthis.showLog([\"updateGrid\", _args.updateGrid.currentValue]);\n\n\t\t\tif (_args.updateGrid.currentValue) {\n\t\t\t\tif (_args.updateGrid.previousValue === undefined) {\n\t\t\t\t\tthis.setDatasets();\n\t\t\t\t\tthis.setActiveDataset(); // MUST be called before setName() - active dataset is used in setting the name.\n\t\t\t\t\tthis.setName();\n\t\t\t\t\tthis.setOptions();\n\t\t\t\t\tthis.setColumns();\n\t\t\t\t\tthis.setCustomFilters();\n\t\t\t\t\tthis.setSettings(); // MUST be called after setColumns() and setCustomFilters() in case a setting is set to active.\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.loadData(\"Initial Load\", this._rows, 1);\n\t\t\t\t\t}, 10);\n\t\t\t\t} else {\n\t\t\t\t\tthis.showLog(\"!!! Updating Grid !!!\");\n\n\t\t\t\t\tthis.showInputValues();\n\t\t\t\t\tthis.setGrid();\n\t\t\t\t\tthis.setDatasets();\n\t\t\t\t\tthis.setActiveDataset(); // MUST be called before setName() - active dataset is used in setting the name.\n\t\t\t\t\tthis.setName();\n\t\t\t\t\tthis.setOptions();\n\t\t\t\t\tthis.setColumns();\n\t\t\t\t\tthis.setCustomFilters();\n\t\t\t\t\tthis.setSettings(); // MUST be called after setColumns() and setCustomFilters() in case a setting is set to active.\n\t\t\t\t\tthis.setBadges();\n\t\t\t\t\tthis.setData();\n\t\t\t\t\tthis.setRows();\n\t\t\t\t\tthis.setPage();\n\t\t\t\t\tthis.setTotal();\n\t\t\t\t\tthis.setSelectedPage();\n\n\t\t\t\t\tthis.showLog(\"!!! Grid Updated !!!\");\n\n\t\t\t\t\tthis.showGrid = true;\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.editRecordIndexChange.emit(undefined);\n\t\t\t\t\t}, 10);\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.updateGridChange.emit(false);\n\t\t\t\t}, 10);\n\t\t\t}\n\t\t}\n\n\t\t// Handles edit mode event\n\t\tif (_args.editRecordIndex) {\n\t\t\tthis.setEditRecordIndex();\n\t\t}\n\n\t\t// Handles \"all data\" export\n\t\tif (_args.dataExport !== undefined && _args.dataExport.currentValue !== undefined && _args.dataExport.currentValue !== \"\") {\n\t\t\tthis.exportData(true, _args.dataExport.currentValue);\n\t\t}\n\n\t\tthis.showLog(\">>> END Method: ngOnChanges\");\n\t}\n\n\t/**************************************************************************\n\t* Change Methods\n\t**************************************************************************/\n\tprivate showInputValues() {\n\t\tthis.showLog(\"*** START: Input Values ***\");\n\t\tthis.showLog([\"editRecordIndex:\", this.editRecordIndex]);\n\t\tthis.showLog([\"datasets:\", this.datasets]);\n\t\tthis.showLog([\"activeDataset:\", this.activeDataset]);\n\t\tthis.showLog([\"name:\", this.name]);\n\t\tthis.showLog([\"title:\", this.title]);\n\t\tthis.showLog([\"titleStyle:\", this.titleStyle]);\n\t\tthis.showLog([\"settings:\", Clone.deepCopy(this.settings)]);\n\t\tthis.showLog([\"options:\", Clone.deepCopy(this.options)]);\n\t\tthis.showLog([\"data:\", Clone.deepCopy(this.data)]);\n\t\tthis.showLog([\"columns:\", Clone.deepCopy(this.columns)]);\n\t\tthis.showLog([\"customFilters:\", Clone.deepCopy(this.customFilters)]);\n\t\tthis.showLog([\"rowValues:\", this.rowValues]);\n\t\tthis.showLog([\"defaultRows:\", this.defaultRows]);\n\t\tthis.showLog([\"rows:\", this.rows]);\n\t\tthis.showLog([\"page:\", this.page]);\n\t\tthis.showLog([\"total:\", this.total]);\n\t\tthis.showLog(\"*** END: Input Values ***\");\n\t}\n\n\tprivate setGrid() {\n\t\tthis.showLog(\"START Method: setGrid >>>\");\n\t\tthis.showLog([\"Set Styles\", this.fontFamily]);\n\n\t\tif (this.sdkdatagrid) {\n\t\t\tif (this.fontFamily !== \"\") {\n\t\t\t\tthis.sdkdatagrid.nativeElement.style.setProperty(\"--font-family\", this.fontFamily);\n\t\t\t}\n\t\t}\n\n\t\tif (this.sdkdatagridcontent) {\n\t\t\tthis.sdkdatagridcontent.nativeElement.scrollTop = 0;\n\t\t}\n\t\tthis.showLog(\">>> END Method: setGrid\");\n\t}\n\n\tprivate setDatasets() {\n\t\tthis.showLog(\"START Method: setDatasets >>>\");\n\t\tthis.showLog([\"[Input]\", this.datasets]);\n\n\t\tthis._datasets = this.datasets ?? [];\n\n\t\tthis.datasetTabs = [];\n\n\t\tthis._datasets.forEach((dataset: string) => {\n\t\t\tthis.datasetTabs.push({\n\t\t\t\ttitle: dataset,\n\t\t\t\ttype: <any>null,\n\t\t\t\tinputs: {},\n\t\t\t\toutputs: {}\n\t\t\t});\n\t\t});\n\n\t\tthis.showLog([\"[Output]\", this._datasets]);\n\t\tthis.showLog(\">>> END Method: setDatasets\");\n\t}\n\n\tprivate setActiveDataset() {\n\t\tthis.showLog(\"START Method: setActiveDataset >>>\");\n\t\tthis.showLog([\"[Input]\", this.activeDataset]);\n\n\t\tthis._activeDataset = this.activeDataset !== \"\" ? this.activeDataset : this._datasets.length > 0 ? this._datasets[0] : \"\";\n\n\t\t// Initialize then let sdk-select handle value moving forward.\n\t\tif (this._selectedDataset === \"\") {\n\t\t\tthis._selectedDataset = this._activeDataset;\n\t\t}\n\n\t\tthis.showLog([\"[Output]\", this._activeDataset]);\n\t\tthis.showLog(\">>> END Method: setActiveDataset\");\n\t}\n\n\tprivate setName() {\n\t\tthis.showLog(\"START Method: setName >>>\");\n\t\tthis.showLog([\"[Input]\", this.name]);\n\n\t\tif (this.route.url) {\n\t\t\tthis.route.url.subscribe(([url]) => {\n\t\t\t\tif (url) {\n\t\t\t\t\tconst { path } = url;\n\n\t\t\t\t\tif (url.path) this._name = `${url.path}_${this.route.component?.name}_${this.name}_${this._activeDataset}`;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this._name === \"\") {\n\t\t\tthis._name = `${this.route.component?.name}_${this.name}_${this._activeDataset}`;\n\t\t}\n\n\t\tthis._name = this._name.replaceAll(/[^a-zA-Z0-9]/g, \"_\");\n\n\t\tthis.showLog([\"[Output]\", this._name]);\n\t\tthis.showLog(\">>> END Method: setName\");\n\t}\n\n\tprivate setOptions() {\n\t\tthis.showLog(\"START Method: setOptions >>>\");\n\t\tthis.showLog([\"[Input]\", Clone.deepCopy(this.options)]);\n\n\t\tthis._options = new SDKDataGridOptions();\n\n\t\tif (this.options) {\n\t\t\tObject.getOwnPropertyNames(this._options).forEach((prop: any) => {\n\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(this.options, prop);\n\n\t\t\t\tif (descriptor) {\n\t\t\t\t\t(this._options as { [key: string]: any })[prop] = (this.options as { [key: string]: any })[prop];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this._options.minimizeOptions !== undefined) {\n\t\t\tthis._menuOptions = false;\n\t\t}\n\n\t\tthis.showLog([\"[Output]\", Clone.deepCopy(this._options)]);\n\t\tthis.showLog(\">>> END Method: setOptions\");\n\t}\n\n\tprivate setColumns() {\n\t\tthis.showLog(\"START Method: setColumns >>>\");\n\t\tthis.showLog([\"[Input]\", Clone.deepCopy(this.columns)]);\n\n\t\tthis._columns = [];\n\n\t\tlet _tmp = Clone.deepCopy(this.columns);\n\n\t\tif (!_tmp || _tmp.length === 0) {\n\t\t\t_tmp = [];\n\n\t\t\tif (this.data && this.data.length > 0) {\n\t\t\t\tlet data: any = Clone.deepCopy(this.data[0]);\n\n\t\t\t\tfor (let key in data) {\n\t\t\t\t\t_tmp.push({ Name: key.toString() });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t_tmp.forEach((column: SDKDataGridColumn, index: number) => {\n\t\t\tthis.initializeColumn(new SDKDataGridColumn(), column, index);\n\t\t});\n\n\t\t// Load all left-side action columns.\n\t\t_tmp.filter((column: SDKDataGridColumn) => column.isAction && column.actionSide === \"left\").forEach((column: SDKDataGridColumn) => {\n\t\t\tthis._columns.push({ ...column });\n\t\t});\n\n\t\t// Load all non-action columns.\n\t\t_tmp.filter((column: SDKDataGridColumn) => !column.isAction).forEach((column: SDKDataGridColumn) => {\n\t\t\tthis._columns.push({ ...column });\n\t\t});\n\n\t\t// Load all right-side action columns.\n\t\t_tmp.filter((column: SDKDataGridColumn) => column.isAction && column.actionSide === \"right\").forEach((column: SDKDataGridColumn) => {\n\t\t\tthis._columns.push({ ...column });\n\t\t});\n\n\t\tthis.showLog([\"[Output]\", Clone.deepCopy(this._columns)]);\n\t\tthis.showLog(\">>> END Method: setColumns\");\n\t}\n\n\tprivate setCustomFilters() {\n\t\tthis.showLog(\"START Method: setCustomFilters >>>\");\n\t\tthis.showLog([\"[Input]\", Clone.deepCopy(this.customFilters)]);\n\n\t\tthis._customFilters = [];\n\n\t\tlet _tmp = Clone.deepCopy(this.customFilters);\n\n\t\tif (_tmp && _tmp.length > 0) {\n\t\t\t_tmp.forEach((filter: SDKDataGridCustomFilter, index: number) => {\n\t\t\t\tthis.initializeCustomFilter(new SDKDataGridCustomFilter(), filter, index);\n\n\t\t\t\tthis._customFilters.push({ ...filter });\n\t\t\t});\n\t\t}\n\n\t\tthis.showLog([\"[Output]\", Clone.deepCopy(this._customFilters)]);\n\t\tthis.showLog(\">>> END Method: setCustomFilters\");\n\t}\n\n\tprivate setSettings() {\n\t\tthis.showLog(\"START Method: setSettings >>>\");\n\n\t\tif (!this._options.settings) {\n\t\t\tthis.settings = [];\n\n\t\t\t// REMOVES SETTINGS FROM \"GRID\" STORAGE IF FORCED\n\t\t\tif (this.clearSettingsCache) {\n\t\t\t\tthis.showLog(\"!!! Clear Settings Cache !!!\");\n\n\t\t\t\tlet storageItemName = `SDK-DATAGRID_${this._name}`;\n\n\t\t\t\tlocalStorage.removeItem(storageItemName);\n\t\t\t\tsessionStorage.removeItem(storageItemName);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.clearSettingsCacheChange.emit(false);\n\t\t\t\t}, 10);\n\t\t\t} else {\n\t\t\t\t// LOAD SETTINGS FROM \"GRID\" STORAGE\n\t\t\t\tlet storageItemName = `SDK-DATAGRID_${this._name}`;\n\t\t\t\tlet storage = this._options.settingsStorage === StorageType.Local ? localStorage.getItem(storageItemName) : sessionStorage.getItem(storageItemName);\n\n\t\t\t\tif (storage) {\n\t\t\t\t\tthis.settings = JSON.parse(storage);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tlet storageItemName = `SDK-DATAGRID_${this._name}`;\n\n\t\t\tlocalStorage.removeItem(storageItemName);\n\t\t\tsessionStorage.removeItem(storageItemName);\n\t\t}\n\n\t\tthis.showLog([\"[Input]\", Clone.deepCopy(this.settings)]);\n\n\t\tthis._settings = [];\n\n\t\tlet _tmp = Clone.deepCopy(this.settings);\n\n\t\t_tmp.forEach((setting: SDKDataGridSettings) => {\n\t\t\tlet _setting: SDKDataGridSettings = new SDKDataGridSettings();\n\n\t\t\tObject.getOwnPropertyNames(_setting).forEach((prop: any) => {\n\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(setting, prop);\n\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\t(setting as { [key: string]: any })[prop] = (_setting as { [key: string]: any })[prop];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._settings.push({ ...setting });\n\t\t});\n\n\t\tlet ndx = this._settings.findIndex((setting: SDKDataGridSettings) => setting.Active);\n\n\t\tif (ndx > -1) {\n\t\t\tthis._columns = Clone.deepCopy(this._settings[ndx].Columns);\n\n\t\t\tthis._columns.forEach((column: SDKDataGridColumn, index: number) => {\n\t\t\t\tlet columnNdx = this.columns.findIndex((c: SDKDataGridColumn) => c.Name === column.Name);\n\n\t\t\t\tif (columnNdx > -1) {\n\t\t\t\t\tthis.initializeColumn(this.columns[columnNdx], column, index);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._customFilters = Clone.deepCopy(this._settings[ndx].CustomFilters);\n\n\t\t\tthis._customFilters.forEach((filter: SDKDataGridCustomFilter, index: number) => {\n\t\t\t\tlet filternNdx = this.customFilters.findIndex((f: SDKDataGridCustomFilter) => f.Name === filter.Name);\n\n\t\t\t\tif (filternNdx > -1) {\n\t\t\t\t\tthis.initializeCustomFilter(this.customFilters[filternNdx], filter, index);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.showLog([\"[Output]\", Clone.deepCopy(this._settings)]);\n\t\tthis.showLog(\">>> END Method: setSettings\");\n\t}\n\n\tprivate setBadges() {\n\t\tthis.showLog(\"START Method: setBadges >>>\");\n\n\t\tthis.showNote = this._columns.filter((column: SDKDataGridColumn) => column.FriendlyName !== \"\").length > 0 ? true : false;\n\n\t\tlet columnCount: number = this._columns.filter((column: SDKDataGridColumn, index: number) => index !== column._original.index).length > 0 ? 1 : 0;\n\t\tcolumnCount += this._columns.filter((column: SDKDataGridColumn) => column.isVisible !== column._original.isVisible || column.FriendlyName !== column._original.FriendlyName).length;\n\t\tthis.columnBadge = columnCount.toString();\n\n\t\tlet filterCount: number = this._columns.filter((column: SDKDataGridColumn) => column.Filter).length;\n\t\tfilterCount += this._customFilters.filter((filter: SDKDataGridCustomFilter) => filter.Filter).length;\n\t\tthis.filterBadge = filterCount.toString();\n\n\t\tthis.sortBadge = this._columns.filter((column: SDKDataGridColumn) => column.Sort).length.toString();\n\n\t\tlet formulaCount = 0;\n\t\tthis._columns.filter((column: SDKDataGridColumn) => column.Formulas).forEach((column: SDKDataGridColumn) => {\n\t\t\tformulaCount += column.Formulas.length;\n\t\t})\n\t\tthis.formulaBadge = formulaCount.toString();\n\n\t\tif (this.columnBadge !== \"0\" || this.filterBadge !== \"0\" || this.sortBadge !== \"0\" || this.formulaBadge !== \"0\") {\n\t\t\tthis.showReset = true;\n\t\t} else {\n\t\t\tthis.showReset = false;\n\t\t}\n\n\t\tthis.showLog(\">>> END Method: setBadges\");\n\t}\n\n\tprivate setData() {\n\t\tthis.showLog(\"START Method: setData >>>\");\n\t\tthis.showLog([\"[Input]\", Clone.deepCopy(this.data)]);\n\n\t\tthis._data = Clone.deepCopy(this.data);\n\n\t\tthis.showLog([\"[Output]\", Clone.deepCopy(this._data)]);\n\t\tthis.showLog(\">>> END Method: setData\");\n\t}\n\n\tprivate setRows() {\n\t\tthis.showLog(\"START Method: setRows >>>\");\n\t\tthis.showLog([\"[Input]\", this.rows, \"(Default)\", this.defaultRows]);\n\n\t\tthis._rows = this.rows ?? this.defaultRows;\n\n\t\tthis.showLog([\"[Output]\", this._rows]);\n\t\tthis.showLog(\">>> END Method: setRows\");\n\t}\n\n\tprivate setPage() {\n\t\tthis.showLog(\"START Method: setPage >>>\");\n\t\tthis.showLog([\"[Input]\", this.page]);\n\n\t\tthis._page = this.page ?? 1;\n\n\t\tthis.showLog([\"[Output]\", this._page]);\n\t\tthis.showLog(\">>> END Method: setPage\");\n\t}\n\n\tprivate setTotal() {\n\t\tthis.showLog(\"START Method: setTotal >>>\");\n\t\tthis.showLog([\"[Input]\", this.total]);\n\n\t\tif (this.total === undefined) {\n\t\t\tthis._total = this._data.length;\n\t\t} else {\n\t\t\tthis._total = this.total;\n\t\t}\n\n\t\tthis.showLog([\"[Output]\", this._total]);\n\t\tthis.showLog(\">>> END Method: setTotal\");\n\t}\n\n\tprivate setSelectedPage() {\n\t\tthis.showLog(\"START Method: setSelectedPage >>>\");\n\n\t\tif (this.totalPages.length === 0 || this.totalPages.length !== Math.ceil(this._total / this._rows)) {\n\t\t\tthis.showLog(\"Updating pages...\");\n\n\t\t\tthis.totalPages = new Array(0);\n\n\t\t\tfor (let p = 0; p < Math.ceil(this._total / this._rows); p++) {\n\t\t\t\tlet start: number = (p * this._rows) + 1;\n\t\t\t\tlet end: number = (start + this._rows) - 1;\n\n\t\t\t\tif (end > this._total) end = this._total;\n\n\t\t\t\tthis.totalPages.push(start.toString() + \" - \" + end.toString());\n\t\t\t}\n\t\t}\n\n\t\tlet rowStart: number = ((this._page - 1) * this._rows) + 1;\n\t\tlet rowEnd: number = (rowStart + this._rows) - 1;\n\n\t\tif (rowEnd > this._total) rowEnd = this._total;\n\n\t\tthis._selectedPage = rowStart.toString() + \" - \" + rowEnd.toString();\n\n\t\tthis.showLog([\"[Output]\", this._selectedPage]);\n\t\tthis.showLog(\">>> END Method: setSelectedPage\");\n\t}\n\n\tprivate setEditRecordIndex() {\n\t\tthis.showLog(\"START Method: setEditRecordIndex >>>\");\n\t\tthis.showLog([\"[Input]\", this.editRecordIndex]);\n\n\t\tthis._editRecordIndex = this.editRecordIndex;\n\n\t\tthis.showLog([\"[Output]\", this._editRecordIndex]);\n\t\tthis.showLog(\">>> END Method: setEditRecordIndex\");\n\t}\n\n\t/**************************************************************************\n\t* Data Methods\n\t**************************************************************************/\n\tprotected loadData(action: string, rows: number, page: number) {\n\t\tthis.showLog(\"START Method: loadData >>>\");\n\t\tthis.showLog([\"action\", action, \"rows\", rows, \"page\", page]);\n\n\t\tthis.editRecordIndexChange.emit(undefined);\n\t\tthis.columnsChange.emit(this._columns);\n\t\tthis.customFiltersChange.emit(this._customFilters);\n\n\t\tthis.setAddonInputs();\n\n\t\tthis.loadDataEvent.emit({ action: action, rows: rows, page: page });\n\n\t\tthis.showLog(\">>> END Method: loadData\");\n\t}\n\n\tprotected selectDataset(event: any) {\n\t\tthis.showLog(\"START Method: selectDataset (Dropdown) >>>\");\n\t\tthis.showLog([\"[Input]\", event[0]]);\n\n\t\tthis.activeDatasetChange.emit(event[0]);\n\n\t\tsetTimeout(() => {\n\t\t\tthis.setActiveDataset(); // MUST be called before setName() - active dataset is used in setting the name.\n\t\t\tthis.setName();\n\t\t\tthis.setSettings(); // MUST be called in case columns are saved.\n\n\t\t\tthis.loadData(`Dataset Change`, this._rows, 1);\n\t\t}, 10);\n\n\t\tthis.showLog(\">>> END Method: selectDataset (Dropdown)\");\n\t}\n\n\tprotected datasetChanged(event: any) {\n\t\tthis.showLog(\"START Method: datasetChanged (Tab) >>>\");\n\t\tthis.showLog([\"[Input]\", event]);\n\n\t\tif (event.from) {\n\t\t\tthis.activeDatasetChange.emit(event.to.title);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.setActiveDataset(); // MUST be called before setName() - active dataset is used in setting the name.\n\t\t\t\tthis.setName();\n\t\t\t\tthis.setSettings(); // MUST be called in case columns are saved.\n\n\t\t\t\tthis.loadData(`Dataset Change`, this._rows, 1);\n\t\t\t}, 10);\n\t\t}\n\n\t\tthis.showLog(\">>> END Method: datasetChanged (Tab)\");\n\t}\n\n\tprotected saveData() {\n\t\tthis.showLog(\"START Method: saveData >>>\");\n\n\t\tif (this.missingData()) {\n\t\t\tthis.message = {\n\t\t\t\tTitle: \"Missing Data\",\n\t\t\t\tText: \"You are missing some required data.\",\n\t\t\t\tOKText: \"OK\",\n\t\t\t\tOK: () => {\n\t\t\t\t\tthis.showMessage = false;\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\tthis.message = {\n\t\t\t\tTitle: \"Save Changes\",\n\t\t\t\tText: \"Are you sure?\",\n\t\t\t\tOKText: \"YES\",\n\t\t\t\tCancelText: \"NO\",\n\t\t\t\tOK: () => {\n\t\t\t\t\tthis.showMessage = false;\n\t\t\t\t\tthis.editGrid = false;\n\t\t\t\t\tthis.editRecords = false;\n\n\t\t\t\t\tif (this.saveGridDataEvent.observed) {\n\t\t\t\t\t\tthis.saveGridDataEvent.emit(this._data);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.editRecordIndexChange.emit(undefined);\n\t\t\t\t\tthis.updateGridChange.emit(false);\n\t\t\t\t},\n\t\t\t\tCancel: () => {\n\t\t\t\t\tthis.showMessage = false;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tthis.showMessage = true;\n\n\t\tthis.showLog(\">>> END Method: saveData\");\n\t}\n\n\tprotected deleteData() {\n\t\tthis.showLog(\"START Method: deleteData >>>\");\n\t\tthis.showLog([\"records\", this.deleteRecords]);\n\n\t\tif (this.deleteRecords.length > 0) {\n\t\t\tthis.editRecords = this.hasDataChanged();\n\n\t\t\tif (this.editRecords) {\n\t\t\t\tthis.message = {\n\t\t\t\t\tTitle: \"Save Changes\",\n\t\t\t\t\tText: \"You've made changes to the data.<br /><br />Would you like to save them before continuing?\",\n\t\t\t\t\tOKText: \"YES\",\n\t\t\t\t\tCancelText: \"NO\",\n\t\t\t\t\tOK: () => {\n\t\t\t\t\t\tthis.editRecords = false;\n\n\t\t\t\t\t\tif (this.saveGridDataEvent.observed) {\n\t\t\t\t\t\t\tthis.saveGridDataEvent.emit(this._data);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.editRecordIndexChange.emit(undefined);\n\t\t\t\t\t\tthis.updateGridChange.emit(false);\n\n\t\t\t\t\t\tthis.deleteData();\n\t\t\t\t\t},\n\t\t\t\t\tCancel: () => {\n\t\t\t\t\t\tthis.editRecords = false;\n\n\t\t\t\t\t\tthis._data = Clone.deepCopy(this.data);\n\n\t\t\t\t\t\tthis.deleteData();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tthis.message = {\n\t\t\t\t\tTitle: \"Delete record(s)\",\n\t\t\t\t\tText: \"Are you sure?\",\n\t\t\t\t\tOKText: \"YES\",\n\t\t\t\t\tCancelText: \"NO\",\n\t\t\t\t\tOK: () => {\n\t\t\t\t\t\tthis.showMessage = false;\n\n\t\t\t\t\t\tif (this.deleteGridDataEvent.observed) {\n\t\t\t\t\t\t\tthis.deleteGridDataEvent.emit(this.deleteRecords);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.deleteRecords = [];\n\t\t\t\t\t},\n\t\t\t\t\tCancel: () => {\n\t\t\t\t\t\tthis.showMessage = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.showMessage = true;\n\t\t}\n\n\t\tthis.showLog(\">>> END Method: deleteData\");\n\t}\n\n\tprotected selectRecord(index: number) {\n\t\tlet ndx = this.deleteRecords.findIndex((record: number) => record === index);\n\n\t\tif (ndx > -1) {\n\t\t\tthis.deleteRecords.splice(ndx, 1);\n\t\t} else {\n\t\t\tthis.deleteRecords.push(index);\n\t\t}\n\t}\n\n\tprotected isRecordSelected(index: number) {\n\t\tlet ndx = this.deleteRecords.findIndex((record: number) => record === index);\n\n\t\tif (ndx > -1) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tprotected cancelEdit() {\n\t\tthis.showLog(\"START Method: cancelEdit >>>\");\n\n\t\tthis.editRecords = this.hasDataChanged();\n\n\t\tif (this.editRecords) {\n\t\t\tthis.message = {\n\t\t\t\tTitle: \"Cancel Changes\",\n\t\t\t\tText: \"You've made changes to the data.<br /><br />Are you sure you want to cancel without saving them?\",\n\t\t\t\tOKText: \"YES\",\n\t\t\t\tCancelText: \"NO\",\n\t\t\t\tOK: () => {\n\t\t\t\t\tthis.showMessage = false;\n\t\t\t\t\tthis.editGrid = false;\n\t\t\t\t\tthis.editRecords = false;\n\t\t\t\t\tthis.deleteRecords = [];\n\n\t\t\t\t\tthis.loadData(\"Cancel Changes\", this._rows, this._page);\n\t\t\t\t},\n\t\t\t\tCancel: () => {\n\t\t\t\t\tthis.showMessage = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.showMessage = true;\n\t\t} else {\n\t\t\tthis.editGrid = false;\n\t\t\tthis.editRecords = false;\n\t\t\tthis.deleteRecords = [];\n\t\t}\n\n\t\tthis.showLog(\">>> END Method: cancelEdit\");\n\t}\n\n\tprivate hasDataChanged() {\n\t\treturn !(\n\t\t\tthis.data.length === this._data.length &&\n\t\t\tthis.data.every((element_1: any) =>\n\t\t\t\tthis._data.some((element_2: any) =>\n\t\t\t\t\tObject.keys(element_1).every((key) => element_1[key] === element_2[key])\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tprivate missingData() {\n\t\treturn this._data.some((record: any) => {\n\t\t\treturn this._columns.filter((column: SDKDataGridColumn) => column.required)\n\t\t\t\t.some((column: SDKDataGridColumn) => record[column.Name] === \"\");\n\t\t});\n\t}\n\n\t/**************************************************************************\n\t* Options Methods\n\t**************************************************************************/\n\tprotected showDataOptions(type: string) {\n\t\tthis.showLog(\"START Method: showDataOptions >>>\");\n\t\tthis.showLog([\"type\", type]);\n\n\t\tthis.lockGrid = true;\n\n\t\tthis.dataClass = this._options.panelOverlay ? \"overlay\" : \"expand\";\n\t\tthis.dataMode = \"data\";\n\n\t\tthis.optionTitle = type;\n\n\t\tif (type === \"export\") {\n\t\t\tthis.dataExportChange.emit(\"\"); // Clears out value\n\t\t}\n\n\t\tthis.setAddonInputs();\n\n\t\tthis.showLog(\">>> END Method: showDataOptions\");\n\t}\n\n\tprotected toggleDataMode(type: string, autoClose: boolean = false) {\n\t\t// this.dataMode = type;\n\n\t\t// if (this.dataMode === \"data\" && this.optionTitle === \"Chart\") {\n\t\t//     this.dataClass = \"\";\n\t\t//     this.optionTitle = \"\";\n\t\t// }\n\t\t// if (this.dataMode === \"chart\") {\n\t\t//     if (this.chart && this.chart !== \"\") {\n\t\t//         this.applyChartOptions(this.chart, autoClose);\n\t\t//     }\n\t\t// }\n\t}\n\n\tprotected closeDataOptions() {\n\t\tthis.showLog(\"START Method: closeDataOptions >>>\");\n\n\t\tthis.optionTitle = \"\";\n\t\tthis.dataClass = \"\";\n\t\tthis.lockGrid = false;\n\n\t\tthis.setAddonInputs();\n\n\t\tthis.showLog(\">>> END Method: closeDataOptions\");\n\t}\n\n\tprotected resetAllOptions() {\n\t\tthis.showLog(\"START Method: resetAllOptions >>>\");\n\n\t\tthis.message = {\n\t\t\tTitle: \"Reset ALL Options\",\n\t\t\tText: \"Are you sure?\",\n\t\t\tOKText: \"YES\",\n\t\t\tCancelText: \"NO\",\n\t\t\tOK: () => {\n\t\t\t\tthis.showMessage = false;\n\n\t\t\t\tthis.dataMode = \"data\";\n\t\t\t\tthis.optionTitle = \"\";\n\t\t\t\tthis.dataClass = \"\";\n\n\t\t\t\tthis._columns.sort((a: SDKDataGridColumn, b: SDKDataGridColumn) => (a._original.index > b._original.index) ? 1 : -1);\n\n\t\t\t\tthis._columns.forEach((column: SDKDataGridColumn) => {\n\t\t\t\t\tcolumn.FriendlyName = column._original.FriendlyName;\n\t\t\t\t\tcolumn.isVisible = column._original.isVisible;\n\t\t\t\t\tcolumn.Sort = column._original.Sort;\n\t\t\t\t\tcolumn.Filter = column._original.Filter;\n\t\t\t\t\tcolumn.Formulas = column._original.Formulas;\n\t\t\t\t});\n\n\t\t\t\tthis._customFilters.forEach((filter: SDKDataGridCustomFilter) => {\n\t\t\t\t\tfilter.Filter = filter._original.Filter;\n\t\t\t\t});\n\n\t\t\t\tif (this._options.settings) {\n\t\t\t\t\tthis.saveSettings(this._settings, true);\n\t\t\t\t} else {\n\t\t\t\t\t// REMOVE SETTINGS FROM \"GRID\" STORAGE\n\t\t\t\t\tlet storageItemName = `SDK-DATAGRID_${this._name}`;\n\n\t\t\t\t\tif (this._options.settingsStorage === StorageType.Local) {\n\t\t\t\t\t\tlocalStorage.removeItem(storageItemName);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsessionStorage.removeItem(storageItemName);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.settings = [];\n\t\t\t\t}\n\n\t\t\t\tthis.showReset = false;\n\n\t\t\t\tthis.loadData(\"Reset ALL Options\", this._rows, 1);\n\t\t\t},\n\t\t\tCancel: () => {\n\t\t\t\tthis.showMessage = false;\n\t\t\t}\n\t\t};\n\n\t\tthis.showMessage = true;\n\n\t\tthis.showLog([\"columns\", this._columns, \"customFilters\", this._customFilters]);\n\t\tthis.showLog(\">>> END Method: resetAllOptions\");\n\t}\n\n\tprotected applyOptions(event: any) {\n\t\tthis.showLog(\"START Method: applyOptions >>>\");\n\t\tthis.showLog([\"[Input]\", event]);\n\n\t\tlet action: string = \"Options\";\n\n\t\tif (event?.option) action = event.option;\n\t\tif (event?.columns) this._columns = event.columns;\n\t\tif (event?.customFilters) this._customFilters = event.customFilters;\n\n\t\tif (this._options.settings) {\n\t\t\tthis.saveSettings(this._settings, true);\n\t\t} else {\n\t\t\t// ADD SETTINGS TO \"GRID\" STORAGE\n\t\t\tlet storageItemName = `SDK-DATAGRID_${this._name}`;\n\t\t\tlet settings = [{\n\t\t\t\tName: \"[sdk-datagrid Settings]\",\n\t\t\t\tColumns: this._columns,\n\t\t\t\tCustomFilters: this._customFilters,\n\t\t\t\tActive: true\n\t\t\t}]\n\n\t\t\tif (this._options.settingsStorage === StorageType.Local) {\n\t\t\t\tlocalStorage.setItem(storageItemName, JSON.stringify(settings));\n\t\t\t} else {\n\t\t\t\tsessionStorage.setItem(storageItemName, JSON.stringify(settings));\n\t\t\t}\n\t\t}\n\n\t\tlet rows = this._rows;\n\t\tlet page = this._page;\n\n\t\tif (this.optionTitle !== \"columns\") {\n\t\t\tpage = 1;\n\t\t}\n\n\t\tif (this._options.autoClosePanel) {\n\t\t\tthis.closeDataOptions();\n\t\t}\n\n\t\tthis.loadData(`Apply ${action}`, rows, page);\n\n\t\tthis.showLog(\">>> END Method: applyOptions\");\n\t}\n\n\t/**************************************************************************\n\t* Addon Methods\n\t**************************************************************************/\n\tpublic applyDataOptions(event: any) {\n\t\tthis.showLog(\"START Method: applyDataOptions >>>\");\n\t\tthis.showLog([\"option\", this.optionTitle]);\n\n\t\tif (event?.columns) this._columns = event.columns;\n\t\tif (event?.customFilters) this._customFilters = event.customFilters;\n\n\t\tthis.editRecordIndexChange.emit(undefined);\n\t\tthis.columnsChange.emit(this._columns);\n\t\tthis.customFiltersChange.emit(this._customFilters);\n\n\t\tthis.loadDataEvent.emit({ action: this.optionTitle, rows: this._rows, page: 1, addon: event });\n\n\t\tthis.setAddonInputs();\n\n\t\tthis.showLog(\">>> END Method: applyDataOptions\");\n\t}\n\n\tprivate setAddonInputs() {\n\t\tthis.optionInputs = {\n\t\t\toptionTitle: this.optionTitle,\n\t\t};\n\n\t\tthis.windowInputs = {\n\t\t\tdataClass: this.dataClass,\n\t\t\toptionTitle: this.optionTitle,\n\t\t\tcolumns: this._columns ?? [],\n\t\t\tcustomFilters: this._customFilters ?? []\n\t\t};\n\t}\n\n\t/**************************************************************************\n\t* Settings Methods\n\t**************************************************************************/\n\tprotected applySettingsOptions(event: any) {\n\t\tthis.showLog(\"START Method: applySettingsOptions >>>\");\n\t\tthis.showLog([\"[Input]\", event]);\n\n\t\tif (event?.columns) {\n\t\t\tthis._columns = Clone.deepCopy(event.columns);\n\n\t\t\tthis._columns.forEach((column: SDKDataGridColumn, index: number) => {\n\t\t\t\tlet columnNdx = this.columns.findIndex((c: SDKDataGridColumn) => c.Name === column.Name);\n\n\t\t\t\tif (columnNdx > -1) {\n\t\t\t\t\tthis.initializeColumn(this.columns[columnNdx], column, index);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (event?.customFilters) {\n\t\t\tthis._customFilters = Clone.deepCopy(event.customFilters);\n\n\t\t\tthis._customFilters.forEach((filter: SDKDataGridCustomFilter, index: number) => {\n\t\t\t\tlet filternNdx = this.customFilters.findIndex((f: SDKDataGridCustomFilter) => f.Name === filter.Name);\n\n\t\t\t\tif (filternNdx > -1) {\n\t\t\t\t\tthis.initializeCustomFilter(this.customFilters[filternNdx], filter, index);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet rows = this._rows;\n\t\tlet page = 1;\n\n\t\tif (this._options.autoClosePanel) {\n\t\t\tthis.closeDataOptions();\n\t\t}\n\n\t\tthis.loadData(\"Apply Settings\", rows, page);\n\n\t\tthis.showLog(\">>> END Method: applySettingsOptions\");\n\t}\n\n\tprotected saveSettings(event: any, resetActive: boolean = false) {\n\t\tthis.showLog(\"START Method: saveSettings >>>\");\n\t\tthis.showLog([\"[Input]\", event]);\n\n\t\tlet settings = event.filter((setting: SDKDataGridSettings) => setting.Name !== \"[Current Settings]\");\n\n\t\tif (resetActive) {\n\t\t\tsettings.forEach((setting: SDKDataGridSettings) => {\n\t\t\t\tsetting.Active = false;\n\t\t\t});\n\t\t}\n\n\t\tthis._settings = settings;\n\n\t\tthis.savedSettingsEvent.emit(this._settings);\n\n\t\tthis.showLog(\">>> END Method: saveSettings\");\n\t}\n\n\t/**************************************************************************\n\t* Export Methods\n\t**************************************************************************/\n\tprotected applyExportOptions(event: any) {\n\t\tthis.showLog(\"START Method: applyExportOptions >>>\");\n\t\tthis.showLog([\"[Input]\", event]);\n\n\t\tthis._isExporting = true;\n\n\t\tsetTimeout(() => {\n\t\t\tlet includeAllData = event;\n\n\t\t\tif (includeAllData) {\n\t\t\t\tthis.loadDataEvent.emit({ action: \"Export Data\" });\n\t\t\t} else {\n\t\t\t\tthis.exportData(false, Clone.deepCopy(this._data));\n\t\t\t}\n\t\t}, 100);\n\n\t\tthis.showLog(\">>> END Method: applyExportOptions\");\n\t}\n\n\tprivate exportData(includeAllData: boolean, data: any) {\n\t\tthis.showLog(\"START Method: exportData >>>\");\n\t\tthis.showLog([\"includeAllData\", includeAllData]);\n\n\t\tif (!includeAllData) {\n\t\t\tdata = this.adjustExportColumns(data);\n\t\t}\n\n\t\tlet dataArray: any[] = JSON.parse(JSON.stringify(data));\n\n\t\tlet link = document.createElement(\"a\");\n\n\t\tlink.href = 'data:text/csv;charset=utf-8,' + this.convertToCSV(dataArray);\n\t\tlink.download = \"export.csv\";\n\t\tlink.click();\n\n\t\tthis._isExporting = false;\n\n\t\tif (this._options.autoClosePanel) {\n\t\t\tthis.closeDataOptions();\n\t\t}\n\n\t\tthis.showLog(\">>> END Method: exportData\");\n\t}\n\n\tprivate adjustExportColumns(tmp: any) {\n\t\tlet rows: any = [];\n\n\t\ttmp.forEach((row: any) => {\n\t\t\tlet columns: any = {};\n\n\t\t\tthis._columns.forEach((column: any) => {\n\t\t\t\tif (column.isVisible && !column.isAction) {\n\t\t\t\t\tif (column.FriendlyName !== \"\") {\n\t\t\t\t\t\tcolumns[column.FriendlyName] = row[column.Name];\n\t\t\t\t\t} else if (column.DisplayName !== \"\") {\n\t\t\t\t\t\tcolumns[column.DisplayName] = row[column.Name];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolumns[column.Name] = row[column.Name];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trows.push(columns);\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\tprivate convertToCSV(objArray: any) {\n\t\tlet csv: any = \"\";\n\n\t\tfor (let row = 0; row < objArray.length; row++) {\n\t\t\tlet output: any = \"\";\n\n\t\t\t// Add column names as first row.\n\t\t\tif (csv === \"\") {\n\t\t\t\tfor (let column in objArray[row]) {\n\t\t\t\t\tif (output !== \"\") {\n\t\t\t\t\t\toutput += \",\";\n\t\t\t\t\t}\n\n\t\t\t\t\toutput += column;\n\t\t\t\t}\n\n\t\t\t\tcsv += `${output}\\r\\n`;\n\t\t\t\toutput = \"\";\n\t\t\t}\n\n\t\t\tfor (let column in objArray[row]) {\n\t\t\t\tif (output !== \"\") {\n\t\t\t\t\toutput += \",\";\n\t\t\t\t}\n\n\t\t\t\tif (objArray[row][column]) {\n\t\t\t\t\tlet data = `\"${objArray[row][column].toString().replace(/\"/g, '\"\"')}\"`;\n\t\t\t\t\toutput += data;\n\t\t\t\t} else {\n\t\t\t\t\toutput += \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcsv += `${encodeURIComponent(output)}\\r\\n`;\n\t\t}\n\n\t\treturn csv;\n\t}\n\n\t/**************************************************************************\n\t* Row Methods\n\t**************************************************************************/\n\tprotected takeAction(args: any) {\n\t\tthis.showLog(\"START Method: takeAction >>>\");\n\t\tthis.showLog([\"[Input]\", args]);\n\n\t\tif (this.selectedRowActionEvent.observed) {\n\t\t\tthis.selectedRowActionEvent.emit(args);\n\t\t}\n\n\t\tthis.showLog(\">>> END Method: takeAction\");\n\t}\n\n\tprotected setTooltip(event: MouseEvent, index: any, record: any) {\n\t\tif (!this.tooltipTemplate) return;\n\n\t\tif (index !== this.recordIndex) {\n\t\t\tthis.tooltipVisible = false;\n\n\t\t\tthis.tooltipStyles = {\n\t\t\t\tposition: 'fixed',\n\t\t\t\tzIndex: '9999',\n\t\t\t\ttop: `0px`,\n\t\t\t\tleft: `0px`,\n\t\t\t\tvisibility: 'hidden'\n\t\t\t};\n\n\t\t\tthis.recordIndex = index;\n\t\t\tthis.recordData = record;\n\t\t}\n\t}\n\n\tprotected showTooltip(event: MouseEvent, index: any, record: any) {\n\t\tif (!this.tooltipTemplate) return;\n\t\t\n\t\tclearTimeout(this.tooltipTimer);\n\t\tclearTimeout(this.tooltipAutoCloseTimer);\n\n\t\tif (!this.tooltipVisible) {\n\t\t\tthis.tooltipTimer = setTimeout(() => {\n\t\t\t\tthis.tooltipVisible = true;\n\n\t\t\t\tthis.setTooltipPosition(event);\n\t\t\t}, 1000);\n\t\t}\n\n\t\tthis.tooltipAutoCloseTimer = setTimeout(() => {\n\t\t\tthis.hideTooltip(event, -1, -1);\n\t\t}, 5000);\n\t}\n\n\tprotected keepTooltipAlive() {\n\t\tif (!this.tooltipTemplate) return;\n\t\t\n\t\tclearTimeout(this.tooltipTimer);\n\t\tclearTimeout(this.tooltipAutoCloseTimer);\n\n\t\tthis.tooltipVisible = true;\n\t}\n\n\tprotected hideTooltip(event: MouseEvent, index: any, record: any) {\n\t\tif (!this.tooltipTemplate) return;\n\t\t\n\t\tclearTimeout(this.tooltipTimer);\n\t\tclearTimeout(this.tooltipAutoCloseTimer);\n\n\t\tif (this.tooltipVisible && index !== this.recordIndex) {\n\t\t\tthis.tooltipVisible = false;\n\n\t\t\tthis.recordIndex = null;\n\t\t\tthis.recordData = null;\n\n\t\t\tthis.tooltipStyles = {\n\t\t\t\tposition: 'fixed',\n\t\t\t\tzIndex: '9999',\n\t\t\t\ttop: `0px`,\n\t\t\t\tleft: `0px`,\n\t\t\t\tvisibility: 'hidden'\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate setTooltipPosition(event: MouseEvent) {\n\t\tif (!this.tooltipTemplate) return;\n\t\t\n\t\tlet offsetY = 5;\n\t\tlet offsetX = 5;\n\n\t\tsetTimeout(() => {\n\t\t\tlet tooltip = this.sdktooltip.nativeElement;\n\n\t\t\tif (tooltip && (event.clientY + tooltip.offsetHeight) > (window.innerHeight - 50)) {\n\t\t\t\toffsetY = (tooltip.offsetHeight * -1) - 5;\n\t\t\t}\n\t\t\tif (tooltip && (event.clientX + tooltip.offsetWidth) > (window.innerWidth - 100)) {\n\t\t\t\toffsetX = (tooltip.offsetWidth * -1) - 5;\n\t\t\t}\n\n\t\t\tthis.tooltipStyles = {\n\t\t\t\tposition: 'fixed',\n\t\t\t\tzIndex: '9999',\n\t\t\t\ttop: `${event.clientY + offsetY}px`,\n\t\t\t\tleft: `${event.clientX + offsetX}px`,\n\t\t\t\tvisibility: 'visible'\n\t\t\t};\n\t\t}, 1);\n\t}\n\n\t// Used to remember where the scrollbar was on click-throughs (drill-downs).\n\t// protected onScroll(args: any) {\n\t// \t// if (this.selectedRowActionEvent.observed) {\n\t// \t//     this._scrollTop = args.target.scrollTop;\n\t// \t// }\n\t// }\n\n\t/**************************************************************************\n\t* Expand/Collapse Rows\n\t**************************************************************************/\n\tpublic expandAll() {\n\t\tthis.setExpandedForAll(true);\n\t}\n\n\tpublic collapseAll() {\n\t\tthis.setExpandedForAll(false);\n\t}\n\n\tpublic toggleExpanded(rowItem: any) {\n\t\trowItem[\"Expanded\"] = !rowItem[\"Expanded\"];\n\t}\n\n\tpublic isFirstColumn(column: SDKDataGridColumn): boolean {\n\t\tlet visibleColumns = this._columns.filter(c => c.isVisible);\n\n\t\treturn visibleColumns.length > 0 && column.Name === visibleColumns[0].Name;\n\t}\n\n\tprivate setExpandedForAll(isExpanded: boolean) {\n\t\tlet dataItems = this._data as unknown as any[];\n\n\t\tdataItems.forEach((item) => {\n\t\t\titem[\"Expanded\"] = isExpanded;\n\t\t});\n\t}\n\n\t/**************************************************************************\n\t* Column Methods\n\t**************************************************************************/\n\tprotected getColumnName(column: SDKDataGridColumn) {\n\t\tlet originalName: string | undefined = column.Name;\n\n\t\tif (column.FriendlyName !== \"\") {\n\t\t\toriginalName = `${column.FriendlyName} *`;\n\t\t} else if (column.DisplayName !== \"\") {\n\t\t\toriginalName = column.DisplayName;\n\t\t}\n\n\t\treturn originalName;\n\t}\n\n\tprotected getOriginalColumnName(column: SDKDataGridColumn) {\n\t\tlet originalName = column.Name;\n\n\t\tif (column.DisplayName && column.DisplayName !== \"\") {\n\t\t\toriginalName = column.DisplayName;\n\t\t}\n\n\t\treturn `Orig. Name:\\n${originalName}`;\n\t}\n\n\tprotected hasVisibleColumns() {\n\t\treturn this._columns.filter((column: SDKDataGridColumn) => column.isVisible);\n\t}\n\n\tprotected hasFormulas() {\n\t\treturn this._columns.filter((column: SDKDataGridColumn) => column.Formulas);\n\t}\n\n\tprotected isColumnObject(value: any) {\n\t\tif (typeof (value) === \"object\") {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tprotected sortColumn(column: SDKDataGridColumn) {\n\t\tlet ndx = this._columns.findIndex((c: any) => c.Name === column.Name);\n\t\tlet sort: any = null;\n\n\t\tif (ndx > -1 && !this._columns[ndx].isAction && this._columns[ndx].showSort) {\n\t\t\tsort = this._columns[ndx].Sort;\n\n\t\t\tif (sort) {\n\t\t\t\tthis._columns[ndx].Sort!.direction = (this._columns[ndx].Sort?.direction === Sorts.ASC) ? Sorts.DESC : Sorts.ASC;\n\t\t\t} else {\n\t\t\t\tthis._columns[ndx].Sort = { direction: Sorts.ASC, position: 0 };\n\t\t\t}\n\n\t\t\tthis.applyOptions({ columns: this._columns });\n\t\t}\n\t}\n\n\t/**************************************************************************\n\t* Page Methods\n\t**************************************************************************/\n\tprotected getRows(event: any) {\n\t\tthis.showLog(\"START Method: getRows >>>\");\n\t\tthis.showLog([\"rows\", event[0]]);\n\n\t\tthis.loadData(\"Rows/Page Change\", parseInt(event[0]), 1);\n\n\t\tthis.showLog(\">>> END Method: getRows\");\n\t}\n\n\tprotected getPage(event: any) {\n\t\tthis.showLog(\"START Method: getPage >>>\");\n\t\tthis.showLog([\"page\", Array.isArray(event) ? Math.ceil(parseInt(event[0].split(\" - \")[1]) / this._rows) : event]);\n\n\t\tif (Array.isArray(event)) event = Math.ceil(parseInt(event[0].split(\" - \")[1]) / this._rows);\n\n\t\tthis.loadData(\"Page Change\", this._rows, parseInt(event));\n\n\t\tthis.showLog(\">>> END Method: getPage\");\n\t}\n\n\t/**************************************************************************\n\t* Util Methods\n\t**************************************************************************/\n\tprivate initializeColumn(baseColumn: SDKDataGridColumn, column: SDKDataGridColumn, index: number) {\n\t\tObject.getOwnPropertyNames(baseColumn).forEach((prop: any) => {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(column, prop);\n\n\t\t\tif (!descriptor) {\n\t\t\t\t(column as { [key: string]: any })[prop] = (baseColumn as { [key: string]: any })[prop];\n\t\t\t}\n\t\t});\n\n\t\t// Set original values\n\t\tif (!column._original || column._original.index === null) {\n\t\t\tcolumn._original.index = index;\n\t\t\tcolumn._original.FriendlyName = column.FriendlyName;\n\t\t\tcolumn._original.isVisible = column.isVisible;\n\t\t\tcolumn._original.Sort = column.Sort;\n\t\t\tcolumn._original.Filter = column.Filter;\n\t\t\tcolumn._original.Formulas = column.Formulas;\n\t\t}\n\t}\n\n\tprivate initializeCustomFilter(baseFilter: SDKDataGridCustomFilter, filter: SDKDataGridCustomFilter, index: number) {\n\t\tObject.getOwnPropertyNames(baseFilter).forEach((prop: any) => {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(filter, prop);\n\n\t\t\tif (!descriptor) {\n\t\t\t\t(filter as { [key: string]: any })[prop] = (baseFilter as { [key: string]: any })[prop];\n\t\t\t}\n\t\t});\n\n\t\t// Set original values\n\t\tif (filter._original.index === null) {\n\t\t\tfilter._original.index = index;\n\t\t\tfilter._original.Filter = filter.Filter;\n\t\t}\n\t}\n\n\tprivate showLog(args: any) {\n\t\tif (this.isDebug) {\n\t\t\tif (Array.isArray(args)) {\n\t\t\t\tconsole.log(...args);\n\t\t\t} else {\n\t\t\t\tconsole.log(args);\n\t\t\t}\n\t\t}\n\t}\n}\n","<div #sdkdatagrid title=\"\" class=\"sdk-datagrid-content\">\n    <!-- Header (Title) -->\n    <div *ngIf=\"_options.header\" class=\"sdk-datagrid-header\" [ngClass]=\"{ 'tabs': _options.datasetTabs }\">\n        <div *ngIf=\"showGrid && _datasets.length === 0 && title !== ''\" class=\"title\" [ngClass]=\"{ 'centered': !titleStyle || titleStyle === '' }\" [style]=\"titleStyle\">{{ title }}</div>\n        <div class=\"data\" *ngIf=\"showGrid && _datasets.length > 1\">\n            <div *ngIf=\"!_options.datasetTabs\" class=\"notabs\" [ngClass]=\"{ 'notitle': title === ''}\">\n                <sdk-select\n                    [label]=\"title\"\n                    [labelStyle]=\"'white-space: nowrap;' + titleStyle\"\n                    [options]=\"_datasets\"\n                    [optionValuesStyle]=\"'max-height: 150px; overflow: hidden; overflow-y: auto;'\"\n                    [selectedOptions]=\"[_selectedDataset]\"\n                    (selectChangeEvent)=\"selectDataset($event)\">\n                </sdk-select>\n            </div>\n            <div class=\"tabs\" *ngIf=\"_options.datasetTabs\">\n                <sdk-tabs\n                    [tabs]=\"datasetTabs\"\n                    [height]=\"'30px'\"\n                    (tabChangedEvent)=\"datasetChanged($event)\">\n                </sdk-tabs>\n            </div>\n        </div>\n    </div>\n\n    <!-- Minimized Options Button -->\n    <div *ngIf=\"showGrid && _options.options\" class=\"sdk-datagrid-options-menu\" [ngClass]=\"{ 'tabs': _options.datasetTabs }\">\n        <div *ngIf=\"!_options.minimizeOptions\" class=\"sizable\">\n            <div *ngIf=\"!_menuOptions\" title=\"Show Options\" (click)=\"_menuOptions = true;\" class=\"sdk-icon\">menu_open</div>\n            <div *ngIf=\"_menuOptions\" title=\"Hide Options\" (click)=\"_menuOptions = false;\" class=\"sdk-icon\">close</div>\n        </div>\n        <div *ngIf=\"_options.minimizeOptions\" class=\"always-on\">\n            <div *ngIf=\"!_menuOptions\" title=\"Show Options\" (click)=\"_menuOptions = true;\" class=\"sdk-icon\">menu_open</div>\n            <div *ngIf=\"_menuOptions\" title=\"Hide Options\" (click)=\"_menuOptions = false;\" class=\"sdk-icon\">close</div>\n        </div>\n    </div>\n\n    <!-- Options -->\n    <div *ngIf=\"showGrid && _options.options\" class=\"sdk-datagrid-options\" [ngClass]=\"{ 'no-header': !_options.header, 'no-footer': !_options.footer, 'hide': _options.minimizeOptions && !_menuOptions, 'hide-x': (_options.header || _options.minimizeOptions) && !_menuOptions, 'expand-top': !_options.header && _options.minimizeOptions, 'tabs': _options.datasetTabs }\">\n        <div *ngIf=\"showGrid && !editGrid\" class=\"icons\">\n            <div class=\"label-title\" title=\"Data Options\">Options</div>\n            <div *ngIf=\"_options.settings\" class=\"option\" (click)=\"showDataOptions('settings')\">\n                <div title=\"Settings\" class=\"sdk-icon\" [ngClass]=\"{ 'active': optionTitle === 'settings' }\">settings</div>\n            </div>\n            <div *ngIf=\"_options.expandableRows && detailTemplate\" class=\"option\">\n                <div title=\"Expand All\" (click)=\"expandAll()\" class=\"sdk-icon\">unfold_more</div>\n            </div>\n            <div *ngIf=\"_options.expandableRows && detailTemplate\" class=\"option\">\n                <div title=\"Collapse All\" (click)=\"collapseAll()\" class=\"sdk-icon\">unfold_less</div>\n            </div>\n            <div *ngIf=\"_options.columns\" class=\"option\" (click)=\"showDataOptions('columns')\">\n                <div title=\"Columns\" class=\"sdk-icon\" [ngClass]=\"{ 'active': optionTitle === 'columns' }\">list_alt</div>\n                <div *ngIf=\"columnBadge !== '0'\" class=\"badge\">\n                    <div class=\"label\">{{ columnBadge }}</div>\n                </div>\n                <div *ngIf=\"showNote\" class=\"note\">\n                    <div title=\"Column * indicates custom name is used.\" class=\"label\">i</div>\n                </div>\n            </div>\n            <div *ngIf=\"_options.sorts\" class=\"option\" (click)=\"showDataOptions('sorts')\">\n                <div title=\"Sorts\" class=\"sdk-icon\" [ngClass]=\"{ 'active': optionTitle === 'sorts' }\">sort_by_alpha</div>\n                <div *ngIf=\"sortBadge !== '0'\" class=\"badge\">\n                    <div class=\"label\">{{ sortBadge }}</div>\n                </div>\n            </div>\n            <div *ngIf=\"_options.filters\" class=\"option\" (click)=\"showDataOptions('filters')\">\n                <div title=\"Filters\" class=\"sdk-icon\" [ngClass]=\"{ 'active': optionTitle === 'filters' }\">filter_alt</div>\n                <div *ngIf=\"filterBadge !== '0'\" class=\"badge\">\n                    <div class=\"label\">{{ filterBadge }}</div>\n                </div>\n            </div>\n            <div *ngIf=\"_options.formulas\" class=\"option\" (click)=\"showDataOptions('formulas')\">\n                <div title=\"Formulas\" class=\"sdk-icon\" [ngClass]=\"{ 'active': optionTitle === 'formulas' }\">functions</div>\n                <div *ngIf=\"formulaBadge !== '0'\" class=\"badge\">\n                    <div class=\"label\">{{ formulaBadge }}</div>\n                </div>\n            </div>\n            <div *ngFor=\"let option of optionAddons\">\n                <ng-container [ngComponentOutlet]=\"option\" [ndcDynamicInputs]=\"optionInputs\" [ndcDynamicOutputs]=\"optionOutputs\"></ng-container>\n            </div>\n            <div *ngIf=\"_options.export\" class=\"option\" (click)=\"showDataOptions('export')\">\n                <div title=\"Export\" class=\"sdk-icon\" [ngClass]=\"{ 'active': optionTitle === 'export' }\">file_download</div>\n            </div>\n            <div *ngIf=\"showReset\" (click)=\"resetAllOptions()\">\n                <div title=\"Reset All Options\" class=\"reset\">RESET</div>\n            </div>\n            <!-- <div *ngIf=\"_options.charts\" class=\"divider\"></div>\n            <div *ngIf=\"_options.charts\" class=\"option\" (click)=\"toggleDataMode('data')\">\n                <div title=\"Grid\" class=\"sdk-icon\" [ngClass]=\"{ 'active': dataMode === 'data' }\">storage</div>\n            </div>\n            <div *ngIf=\"_options.charts\" class=\"option\" (click)=\"showDataOptions('charts')\">\n                <div title=\"Charts\" class=\"sdk-icon\" [ngClass]=\"{ 'active': dataMode === 'charts' }\">poll</div>\n                <div *ngIf=\"chartBadge !== '0'\" class=\"badge\">\n                    <div class=\"label\">{{ chartBadge }}</div>\n                </div>\n            </div> -->\n            <div *ngIf=\"_options.edit\" class=\"divider\"></div>\n            <div *ngIf=\"_options.edit\" (click)=\"editGrid = true\">\n                <div title=\"Edit Data\" class=\"sdk-icon\">edit_note</div>\n            </div>\n            <div class=\"divider\"></div>\n            <div (click)=\"loadData('Refresh Data', _rows, _page)\">\n                <div title=\"Refresh Data\" class=\"sdk-icon\">refresh</div>\n            </div>\n        </div>\n        <div *ngIf=\"editGrid\" class=\"icons\">\n            <div class=\"label-title\" title=\"Edit Options\">Edit Mode</div>\n            <div (click)=\"saveData()\">\n                <div title=\"Save Data\" class=\"sdk-icon\">save</div>\n            </div>\n            <div (click)=\"cancelEdit()\">\n                <div title=\"Cancel Edit\" class=\"sdk-icon cancel\">close</div>\n            </div>\n        </div>\n    </div>\n\n    <!-- Content (Data) -->\n    <div class=\"sdk-datagrid-data\" #sdkdatagridcontent [ngClass]=\"{ 'no-header': !_options.header, 'no-options': !showGrid || !_options.options || (_options.minimizeOptions && !_menuOptions), 'show-options': _menuOptions || (!_options.header && !_options.minimizeOptions && _options.options), 'no-footer': !_options.footer, 'expand-top': _options.options && !_options.header && _options.minimizeOptions, 'tabs': _options.datasetTabs }\" (mouseleave)=\"hideTooltip($event, -1, -1)\">\n        <!-- Grid -->\n        <table *ngIf=\"!error && showGrid\" class=\"sdk-table\">\n            <caption style=\"display: none;\">sdk-datagrid</caption>\n\n            <!-- Columns (Headers) -->\n            <thead *ngIf=\"_columns.length > 0\" (mouseenter)=\"hideTooltip($event, -1, -1)\">\n                <tr>\n                    <ng-container *ngFor=\"let _column of _columns; let i = index\">\n                        <th *ngIf=\"_column.isVisible\" [title]=\"(_column.FriendlyName !== '') ? getOriginalColumnName(_column) : ''\" [ngClass]=\"{ 'action-left': _column.isAction && _column.actionSide === 'left', 'action-right': _column.isAction && _column.actionSide === 'right' }\">\n                            <div *ngIf=\"!_column.headerTemplate\" [style]=\"(!_column.isAction && _column.showSort ? 'cursor: pointer;': '') + 'display: inline-flex; ' + columnHeaderStyle\" (click)=\"sortColumn(_column)\">{{ getColumnName(_column) }} <div *ngIf=\"_column.Sort\" class=\"sdk-icon\" style=\"font-size: 15px; padding-left: 5px;\">{{ (_column.Sort && _column.Sort.direction === \"desc\") ? \"arrow_upward\" : \"arrow_downward\"}}</div></div>\n                            <div *ngIf=\"!_column.headerTemplate && ((_editRecordIndex !== null && _editRecordIndex !== undefined) || editGrid) && _column.notes !== ''\" [title]=\"_column.notes\" class=\"sdk-icon header-info\">info</div>\n                            <ng-container *ngIf=\"_column.headerTemplate\" [ngTemplateOutlet]=\"_column.headerTemplate()\" [ngTemplateOutletContext]=\"{ index: i, column: _column, value: getColumnName(_column) }\"></ng-container>\n                        </th>\n                    </ng-container>\n                    <th *ngIf=\"editGrid && _options.delete\" class=\"action-right\" style=\"text-align: center;\">\n                        <div title=\"Delete Selected Records\" class=\"sdk-icon delete\" (click)=\"deleteData()\">delete</div>\n                    </th>\n                </tr>\n            </thead>\n\n            <!-- No Data -->\n            <tbody class=\"no-records\">\n                <tr>\n                    <td *ngIf=\"_data.length === 0 && (_columns.length === 0 || hasVisibleColumns().length > 0)\" colspan=\"1000\" class=\"text-left\">No records found.</td>\n                    <td *ngIf=\"_columns.length > 0 && hasVisibleColumns().length === 0\" colspan=\"1000\">No columns selected.</td>\n                </tr>\n            </tbody>\n\n            <!-- Data -->\n            <tbody class=\"alternate\">\n                <ng-container *ngFor=\"let _record of _data; let i = index\">\n                    <tr [ngClass]=\"{ 'row-action': selectedRowActionEvent.observed && (_editRecordIndex === null || _editRecordIndex === undefined) && !editGrid }\" (click)=\"((_editRecordIndex === null || _editRecordIndex === undefined) && !editGrid) ? takeAction({ record: _record, index: i }) : $event.stopPropagation();\" (mouseenter)=\"setTooltip($event, i, _record)\" (mousemove)=\"showTooltip($event, i, _record)\" (mouseleave)=\"hideTooltip($event, i, _record)\">\n                        <ng-container *ngFor=\"let _column of _columns\">\n                            <!-- No Edit -->\n                            <td *ngIf=\"_column.isVisible && (!_column.allowEdit || _column.isAction || (i !== _editRecordIndex && !editGrid))\" [class]=\"_column.isAction ? 'no-hover' : ''\" [ngClass]=\"{ 'action-left': _column.isAction && _column.actionSide === 'left', 'action-right': _column.isAction && _column.actionSide === 'right', 'nowrap': _options.nowrap}\" (click)=\"(_column.isAction) ? $event.stopPropagation() : ''\">\n                                <div *ngIf=\"_options.expandableRows && detailTemplate && isFirstColumn(_column)\" class=\"expander\" (click)=\"toggleExpanded(_record)\">\n                                    <span class=\"sdk-icon\">{{_record.Expanded? 'expand_more' : 'chevron_right'}}</span>\n                                </div>\n                                <div *ngIf=\"!_column.dataTemplate\" class=\"expander\">\n                                    <ng-container *ngIf=\"!_column.formatData && isColumnObject(_record[_column.Name])\">\n                                        {{ _record[_column.Name] | json }}\n                                    </ng-container>\n                                    <ng-container *ngIf=\"_column.formatData || !isColumnObject(_record[_column.Name])\">\n                                        {{ _column.formatData? _column.formatData(_record[_column.Name]) : _record[_column.Name]}}\n                                    </ng-container>\n                                </div>\n                                <ng-container *ngIf=\"_column.dataTemplate\" [ngTemplateOutlet]=\"_column.dataTemplate()\" [ngTemplateOutletContext]=\"{ index: i, record: _record, column: _column, value: _record[_column.Name] }\"></ng-container>\n                            </td>\n                            <!-- Edit -->\n                            <td *ngIf=\"_column.isVisible && _column.allowEdit && !_column.isAction && (i === _editRecordIndex || editGrid)\">\n                                <div *ngIf=\"!_column.editTemplate\">\n                                    <sdk-textbox \n                                        [title]=\"_record[_column.Name]\"\n                                        [class]=\"_column.required ? 'sdk-textbox-required' : 'sdk-textbox'\"\n                                        padding=\"5px\"\n                                        [validCharacters]=\"_column.validCharacters ?? ''\"\n                                        [pattern]=\"_column.pattern ?? ''\"\n                                        [height]=\"_column.height === '' ? 'unset' : _column.height\"\n                                        [width]=\"_column.width === '' ? 'unset' : _column.width\"\n                                        [border]=\"_column.border\"\n                                        [style]=\"_column.style\"\n                                        [value]=\"_record[_column.Name]\"\n                                        (changeCallBackEvent)=\"_record[_column.Name] = $event\">\n                                    </sdk-textbox>\n                                </div>\n                                <ng-container *ngIf=\"_column.editTemplate\" [ngTemplateOutlet]=\"_column.editTemplate()\" [ngTemplateOutletContext]=\"{ index: i, record: _record, column: _column, value: _record[_column.Name] }\"></ng-container>\n                            </td>\n                        </ng-container>\n                        <td *ngIf=\"editGrid && _options.delete\" class=\"action-right\" style=\"text-align: center;\">\n                            <div (click)=\"selectRecord(i)\">\n                                <div class=\"sdk-icon left\">{{ isRecordSelected(i) ? 'check_box' : 'check_box_outline_blank' }}</div>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr *ngIf=\"_options.expandableRows && detailTemplate && _record.Expanded\">\n                        <td [attr.colspan]=\"_columns.length\" class=\"row-detail\">\n                            <ng-container [ngTemplateOutlet]=\"detailTemplate\" [ngTemplateOutletContext]=\"{ index: i, record: _record }\"></ng-container>\n                        </td>\n                    </tr>\n                </ng-container>\n            </tbody>\n\n            <!-- Formulas (Footer) -->\n            <tfoot *ngIf=\"hasFormulas().length > 0\" (mouseenter)=\"hideTooltip($event, -1, -1)\">\n                <tr>\n                    <ng-container *ngFor=\"let _column of _columns\">\n                        <th *ngIf=\"_column.isVisible\" [ngClass]=\"{ 'action-left': _column.isAction && _column.actionSide === 'left', 'action-right': _column.isAction && _column.actionSide === 'right' }\">\n                            <div *ngIf=\"_column.Formulas\">\n                                <div *ngFor=\"let formula of _column.Formulas\" class=\"formula\">\n                                    <span>{{ formula.operation }}</span>: <span style=\"font-weight: normal;\">{{ formula.value }}</span>\n                                </div>\n                            </div>\n                        </th>\n                    </ng-container>\n                </tr>\n            </tfoot>\n        </table>\n        <div #sdktooltip *ngIf=\"tooltipTemplate && tooltipVisible\" class=\"sdk-tooltip\" [ngStyle]=\"tooltipStyles\" (mousemove)=\"keepTooltipAlive()\" (mouseleave)=\"hideTooltip($event, recordIndex, recordData)\">\n            <ng-container [ngTemplateOutlet]=\"tooltipTemplate\" [ngTemplateOutletContext]=\"{ index: recordIndex, record: recordData }\"></ng-container>\n        </div>\n\n        <!-- System Errors -->\n        <div *ngIf=\"error\" class=\"system-error\" [ngClass]=\"{ 'no-header': !_options.header, 'no-options': !_options.options, 'no-footer': !_options.footer }\">\n            <div class=\"bold\">ERROR:</div>\n            <div [innerHTML]=\"error\"></div>\n            <br />\n            <button class=\"sdk-button\" (click)=\"loadData('reloadData', _rows, _page)\">Try Again?</button>\n        </div>\n    </div>\n\n    <!-- Footer (Paging) -->\n    <div *ngIf=\"_options.footer\" class=\"sdk-datagrid-footer\">\n        <div *ngIf=\"showGrid && !editGrid && _options.paging && _total > 0\" class=\"left\">\n            <sdk-select\n                [label]=\"'Rows'\"\n                [labelStyle]=\"'white-space: nowrap'\"\n                [options]=\"rowValues\"\n                [optionStyle]=\"'width: 100px;'\"\n                [optionValuesStyle]=\"'bottom: 0; max-height: 150px; overflow: hidden; overflow: auto;'\"\n                [selectedOptions]=\"[_rows]\"\n                (selectChangeEvent)=\"getRows($event)\">\n            </sdk-select>\n        </div>\n        <div *ngIf=\"showGrid && !editGrid && _options.paging && _total > 0\" class=\"center\">\n            <div class=\"paging\">\n                <table>\n                    <caption style=\"display: none;\">sdk-datagrid-paging</caption>\n                    <tbody>\n                        <tr>\n                            <td><div class=\"sdk-icon\" [disabled]=\"_page < 2\" [ngClass]=\" { 'disabled': (_page - 1) === 0 }\" (click)=\"((_page - 1) === 0) ? false : getPage(1)\">keyboard_double_arrow_left</div></td>\n                            <td><div class=\"sdk-icon\" [disabled]=\"_page < 2\" [ngClass]=\"{ 'disabled': (_page - 1) === 0 }\" (click)=\"((_page - 1) === 0) ? false : getPage(_page - 1)\">navigate_before</div></td>\n                            <td>\n                                <sdk-select\n                                    [options]=\"totalPages\"\n                                    [optionStyle]=\"'width: 175px;'\"\n                                    [optionValuesStyle]=\"'bottom: 0; max-height: 200px; overflow: hidden; overflow: auto;'\"\n                                    [selectedOptions]=\"[_selectedPage]\"\n                                    (selectChangeEvent)=\"getPage($event)\">\n                                </sdk-select>\n                            </td>\n                            <td><div class=\"sdk-icon\" [disabled]=\"_page >= totalPages.length\" [ngClass]=\"{ 'disabled': _page >= totalPages.length }\" (click)=\"_page >= totalPages.length ? false : getPage(_page + 1)\">navigate_next</div></td>\n                            <td><div class=\"sdk-icon\" [disabled]=\"_page >= totalPages.length\" [ngClass]=\"{ 'disabled': _page >= totalPages.length }\" (click)=\"_page >= totalPages.length ? false : getPage(totalPages.length)\">keyboard_double_arrow_right</div></td>\n                        </tr>\n                    </tbody>\n                </table>\n            </div>\n        </div>\n        <div *ngIf=\"showGrid\" class=\"right\">\n            <span style=\"font-weight: 600; padding-right: 5px;\">Total:</span>{{ _total | number:'1.0-0': 'en-US' }}\n        </div>\n    </div>\n</div>\n\n<!-- Option Windows -->\n<div *ngIf=\"_options.options\" title=\"\" class=\"sdk-datagrid-windows\" [ngClass]=\"dataClass\">\n    <sdk-datagrid-settings-option *ngIf=\"optionTitle === 'settings'\"\n        [settings]=\"_settings\"\n        [columns]=\"_columns\"\n        [customFilters]=\"_customFilters\"\n        (closeEvent)=\"closeDataOptions()\"\n        (saveEvent)=\"saveSettings($event)\"\n        (applyEvent)=\"applySettingsOptions($event)\"></sdk-datagrid-settings-option>\n\n    <sdk-datagrid-columns-option *ngIf=\"optionTitle === 'columns'\"\n        [columns]=\"_columns\"\n        (closeEvent)=\"closeDataOptions()\"\n        (applyEvent)=\"applyOptions($event)\"></sdk-datagrid-columns-option>\n\n    <sdk-datagrid-sort-option *ngIf=\"optionTitle === 'sorts'\"\n        [columns]=\"_columns\"\n        (closeEvent)=\"closeDataOptions()\"\n        (applyEvent)=\"applyOptions($event)\"></sdk-datagrid-sort-option>\n\n    <sdk-datagrid-filter-option *ngIf=\"optionTitle === 'filters'\"\n        [columns]=\"_columns\"\n        [customFilters]=\"_customFilters\"\n        (closeEvent)=\"closeDataOptions()\"\n        (applyEvent)=\"applyOptions($event)\"></sdk-datagrid-filter-option>\n\n    <sdk-datagrid-formula-option *ngIf=\"optionTitle === 'formulas'\"\n        [columns]=\"_columns\"\n        (closeEvent)=\"closeDataOptions()\"\n        (applyEvent)=\"applyOptions($event)\"></sdk-datagrid-formula-option>\n\n    <sdk-datagrid-export-option *ngIf=\"optionTitle === 'export'\"\n        [isExporting]=\"_isExporting\"\n        (closeEvent)=\"closeDataOptions()\"\n        (applyEvent)=\"applyExportOptions($event)\"></sdk-datagrid-export-option>\n\n    <sdk-datagrid-chart-option *ngIf=\"optionTitle === 'charts'\"\n        [columns]=\"_columns\"\n        [chart]=\"null\"\n        (closeEvent)=\"closeDataOptions()\"\n        (applyEvent)=\"applyOptions($event)\"></sdk-datagrid-chart-option>\n\n    <div *ngFor=\"let window of windowAddons\">\n        <ng-container [ngComponentOutlet]=\"window\" [ndcDynamicInputs]=\"windowInputs\" [ndcDynamicOutputs]=\"windowOutputs\"></ng-container>\n    </div>\n</div>\n\n<!-- Lock -->\n<div *ngIf=\"lockGrid || showMessage\" title=\"\" class=\"sdk-datagrid-windows-lock\"></div>\n\n<!-- Message -->\n<div *ngIf=\"showMessage\" title=\"\" class=\"sdk-datagrid-message\">\n    <div class=\"title\">{{ message.Title }}</div>\n    <div class=\"text\" [innerHtml]=\"message.Text\"></div>\n    <div class=\"action\">\n        <button class=\"sdk-button\" (click)=\"message.OK()\">{{ message.OKText }}</button>\n        <button *ngIf=\"message.CancelText\" class=\"sdk-button cancel\" (click)=\"message.Cancel()\">{{ message.CancelText }}</button>\n    </div>\n</div>\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\nimport { DynamicModule } from 'ng-dynamic-component';\n\nimport { SDKDatagridComponent } from './sdk-datagrid.component';\n\nimport { SDKDataGridSettingsOptionComponent } from './options/settings/settings-option.component';\nimport { SDKDataGridColumnsOptionComponent } from './options/columns/columns-option.component';\nimport { SDKDataGridSortOptionComponent } from './options/sort/sort-option.component';\nimport { SDKDataGridFilterOptionComponent } from './options/filter/filter-option.component';\nimport { SDKDataGridFormulaOptionComponent } from './options/formula/formula-option.component';\nimport { SDKDataGridExportOptionComponent } from './options/export/export-option.component';\nimport { SDKDataGridChartOptionComponent } from './options/chart/chart-option.component';\n\nimport { SDKLoadingModule } from 'sdk-loading';\nimport { SDKMessageModule } from 'sdk-message';\nimport { SDKSelectModule } from 'sdk-select';\nimport { SDKTabsModule } from 'sdk-tabs';\nimport { SDKTextboxModule } from 'sdk-textbox';\n\n@NgModule({\n  declarations: [\n    SDKDatagridComponent,\n    SDKDataGridSettingsOptionComponent,\n    SDKDataGridColumnsOptionComponent,\n    SDKDataGridSortOptionComponent,\n    SDKDataGridFilterOptionComponent,\n    SDKDataGridFormulaOptionComponent,\n    SDKDataGridExportOptionComponent,\n    SDKDataGridChartOptionComponent,\n  ],\n  imports: [\n    CommonModule,\n    DragDropModule,\n    DynamicModule,\n    SDKLoadingModule,\n    SDKMessageModule,\n    SDKSelectModule,\n    SDKTabsModule,\n    SDKTextboxModule,\n  ],\n  exports: [\n    SDKDatagridComponent\n  ],\n  schemas: [\n    NO_ERRORS_SCHEMA\n  ]\n})\nexport class SDKDatagridModule { }\n","import { Filters } from \"../enums/filters\";\n\nexport class SDKDataGridFilter {\n    public operation?: Filters[];\n    public value?: any;\n}","import { Sorts } from \"../enums/sorts\";\n\nexport class SDKDataGridSort {\n    public position?: number;\n    public direction?: Sorts;\n}","export class Colors {\r\n    public static defaultColors: any[] = [\r\n        \"#02d8e3\",\r\n        \"#349ceb\",\r\n        \"#B2CC34\",\r\n        \"#00858c\",\r\n        \"#004d87\",\r\n        \"#829c03\"\r\n    ];\r\n\r\n    public static getRandomColors(count: number = 1): any {\r\n        let colors: any[] = [];\r\n        let letters = '0123456789ABCDEF'.split('');\r\n\r\n        if (count <= Colors.defaultColors.length) {\r\n            for (let c = 0; c < count; c++) {\r\n                colors.push(Colors.defaultColors[c]);\r\n            }\r\n        }\r\n\r\n        while (colors.length < count) {\r\n            let color: any = '#';\r\n\r\n            for (let i = 0; i < 6; i++) {\r\n                color += letters[Colors.random(0, 15)];\r\n            }\r\n\r\n            if (colors.find((c: any) => c === color) === undefined) {\r\n                colors.push(color);\r\n            }\r\n        }\r\n\r\n        return colors;\r\n    }\r\n\r\n    private static random(min: number, max: number) {\r\n        const crypto = window.crypto;\r\n        const range = max - min + 1;\r\n        const bytes_needed = Math.ceil(Math.log2(range) / 8);\r\n        const cutoff = Math.floor((256 ** bytes_needed) / range) * range;\r\n        const bytes = new Uint8Array(bytes_needed);\r\n\r\n        let value;\r\n\r\n        do {\r\n            crypto.getRandomValues(bytes)\r\n            value = bytes.reduce((acc, x, n) => acc + x * 256 ** n, 0)\r\n        } while (value >= cutoff);\r\n\r\n        return min + value % range;\r\n    }\r\n}","/*\n * Public API Surface of sdk-datagrid\n */\n\nexport { SDKDatagridModule } from './lib/sdk-datagrid.module';\nexport { SDKDatagridComponent } from './lib/sdk-datagrid.component';\n\nexport { SDKDataGridColumn } from './lib/models/datagrid-column';\nexport { SDKDataGridCustomFilter } from './lib/models/datagrid-custom-filter';\nexport { SDKDataGridFilter } from './lib/models/datagrid-filter';\nexport { SDKDataGridOptions, StorageType } from './lib/models/datagrid-options';\nexport { SDKDataGridFormula, FormulaOperation } from './lib/models/datagrid-formula';\nexport { SDKDataGridSettings } from './lib/models/datagrid-settings';\nexport { SDKDataGridSort } from './lib/models/datagrid-sort';\n\nexport { Colors } from './lib/classes/colors';\nexport { Filters, FilterType } from './lib/enums/filters';\nexport { Sorts } from './lib/enums/sorts';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i3","i4","i6","i7.SDKDataGridSettingsOptionComponent","i8.SDKDataGridColumnsOptionComponent","i9.SDKDataGridSortOptionComponent","i10.SDKDataGridFilterOptionComponent","i11.SDKDataGridFormulaOptionComponent","i12.SDKDataGridExportOptionComponent","i13.SDKDataGridChartOptionComponent"],"mappings":"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"}