UNPKG

sdk-datagrid

Version:

Customizable (Angular) datagrid with data options for manipulation, and charts for visualization.

302 lines 65.3 kB
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { Clone } from '../../utils/clone'; import { SDKDataGridSettings } from '../../models/datagrid-settings'; import { SDKDataGridMessage } from '../../models/datagrid-message'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "sdk-message"; import * as i3 from "sdk-select"; import * as i4 from "sdk-textbox"; export class SDKDataGridSettingsOptionComponent { constructor() { /************************************************************************** * Input/Output Parameters **************************************************************************/ this.settings = []; this.columns = []; this.customFilters = []; this.closeEvent = new EventEmitter(); this.saveEvent = new EventEmitter(); this.applyEvent = new EventEmitter(); /************************************************************************** * Component Variables **************************************************************************/ this.activeSetting = new SDKDataGridSettings(); this.settingsList = []; this.name = ""; this.viewerText = ""; this.msg = ""; this.error = ""; this.activeIndex = 0; this._settings = []; this._columns = []; this._customFilters = []; /************************************************************************** * Message Variables **************************************************************************/ this.showMessage = false; this.message = new SDKDataGridMessage(); } ngOnChanges(_args) { this._settings = Clone.deepCopy(this.settings); this._columns = Clone.deepCopy(this.columns); this._customFilters = Clone.deepCopy(this.customFilters); this.initialze(); } /************************************************************************** * Setup Methods **************************************************************************/ initialze() { this.settingsList = this._settings; // Reset current settings based on columns and custom filters. let currentSetting = { Name: "[Current Settings]", Columns: this._columns, CustomFilters: this._customFilters, Active: false }; let ndx = this.settingsList.findIndex((settings) => settings.Name === "[Current Settings]"); if (ndx === -1) { this.settingsList.unshift(currentSetting); } else { this.settingsList[ndx] = currentSetting; } // Pre-load any settings that are flagged as 'active'. let activeNdx = this.settingsList.findIndex((setting) => setting.Active === true); if (activeNdx > -1) { this.activeIndex = activeNdx; } this.activeSetting = this.settingsList[this.activeIndex]; this.name = this.activeSetting.Name; this.validateSettings(); this.setViewerText(); } saveSetting() { this.settingsList[this.activeIndex].Name = this.name; if (this.activeIndex === 0) { let currentSetting = Clone.deepCopy(this.settingsList[this.activeIndex]); currentSetting.Name = "[Current Settings]"; this.settingsList.unshift(currentSetting); } this.resetProperties(); this.activeIndex = this.settingsList.findIndex((setting) => setting.Name === this.name) + 1; this.saveEvent.emit(this.settingsList); this.msg = "Settings have been saved."; } sortSettings() { this.settingsList.sort((a, b) => { const aName = a.Name.toUpperCase(); const bName = b.Name.toUpperCase(); if (aName > bName) { return 1; } if (aName < bName) { return -1; } return 0; }); } resetProperties() { this.sortSettings(); this.settingsList.forEach((setting) => { setting.Active = false; }); } setViewerText() { setTimeout(() => { this.viewerText = `Columns:<br />`; this.viewerText += "<ul>"; this.activeSetting.Columns.filter((column) => !column.isAction).forEach((column) => { this.viewerText += `<li>${(column.FriendlyName !== "") ? column.FriendlyName : (column.DisplayName !== "") ? column.DisplayName : column.Name} (${column.isVisible ? "visible" : "hidden"})</li>`; }); this.viewerText += "</ul>"; this.viewerText += `<br />Sorts:<br />`; this.viewerText += "<ul>"; this.activeSetting.Columns.forEach((column) => { if (column.Sort) { this.viewerText += `<li>${(column.DisplayName !== "") ? column.DisplayName : column.Name} (${column.Sort.direction})</li>`; } }); this.viewerText += "</ul>"; this.viewerText += `<br />Filters:<br />`; this.viewerText += "<ul>"; this.activeSetting.CustomFilters.forEach((filter) => { if (filter.Filter) { if (filter.Filter.operation) { this.viewerText += `<li>${(filter.DisplayName !== "") ? filter.DisplayName : filter.Name} (${filter.Filter.operation}: ${filter.Filter.value})</li>`; } else { this.viewerText += `<li>${(filter.DisplayName !== "") ? filter.DisplayName : filter.Name} (${filter.Filter.value})</li>`; } } }); this.activeSetting.Columns.forEach((column) => { if (column.Filter) { if (column.Filter.operation) { this.viewerText += `<li>${(column.DisplayName !== "") ? column.DisplayName : column.Name} (${column.Filter.operation}: ${column.Filter.value})</li>`; } else { this.viewerText += `<li>${(column.DisplayName !== "") ? column.DisplayName : column.Name} (${column.Filter.value})</li>`; } } }); this.viewerText += "</ul>"; this.viewerText += `<br />Formulas:<br />`; this.viewerText += "<ul>"; this.activeSetting.Columns.forEach((column) => { if (column.Formulas) { column.Formulas.forEach((formula) => { this.viewerText += `<li>${(column.DisplayName !== "") ? column.DisplayName : column.Name} (${formula.Operation}: #.${formula.Format})</li>`; }); } }); this.viewerText += "</ul>"; }, 10); } validateSettings() { let issue = false; this.error = ""; if (this._columns.length !== this.activeSetting.Columns.length) { issue = true; } this.activeSetting.Columns.forEach((column) => { let ndx = this._columns.findIndex((c) => c.Name === column.Name); if (ndx === -1) { issue = true; column.FriendlyName = column.Name + '<span> <-- Does NOT exist!</span>'; } }); this._columns.forEach((column) => { let ndx = this.activeSetting.Columns.findIndex((c) => c.Name === column.Name); if (ndx === -1) { issue = true; this.activeSetting.Columns.push({ Name: column.Name, DisplayName: "", FriendlyName: column.Name + '<span> <-- Missing!</span>', isVisible: column.isVisible }); } }); if (this._customFilters.length !== this.activeSetting.CustomFilters.length) { issue = true; } this.activeSetting.CustomFilters.forEach((filter) => { let ndx = this._customFilters.findIndex((f) => f.Name === filter.Name); if (ndx === -1) { issue = true; filter.DisplayName = filter.Name + '<span> <-- Does NOT exist!</span>'; } }); this._customFilters.forEach((filter) => { let ndx = this.activeSetting.CustomFilters.findIndex((f) => f.Name === filter.Name); if (ndx === -1) { issue = true; this.activeSetting.CustomFilters.push({ Name: filter.Name, DisplayName: filter.Name = '<span> <-- Missing!</span>', Type: filter.Type, Filter: { operation: [], value: "" } }); } }); if (issue) { this.error = "There are issues with these settings!"; } } /************************************************************************** * User Action Methods **************************************************************************/ setName(event) { this.name = event.trim(); } save() { if (this.name !== "") { let dup = this.settingsList.findIndex((setting) => setting.Name === this.name); if (dup > -1) { this.message = { Title: "Duplicate Settings", Text: `'${this.name}' already exists. Would you like to override it?`, OKText: "YES", CancelText: "NO", OK: () => { this.showMessage = false; this.settingsList.splice(dup, 1); this.saveSetting(); }, Cancel: () => { this.showMessage = false; } }; this.showMessage = true; } else { this.saveSetting(); } } } remove() { if (this.activeSetting.Name !== "[Current Settings]") { this.message = { Title: "Delete Settings", Text: `Are you sure you want to delete the '${this.name}' settings?`, OKText: "YES", CancelText: "NO", OK: () => { this.showMessage = false; this.settingsList.splice(this.activeIndex, 1); this.activeIndex = 0; this.saveEvent.emit(this.settingsList); this.msg = "Settings have been deleted."; }, Cancel: () => { this.showMessage = false; } }; this.showMessage = true; } } load(event) { this.activeIndex = this.settingsList.findIndex((setting) => setting.Name === event[0].Name); this.activeSetting = this.settingsList[this.activeIndex]; this.name = this.activeSetting.Name; this.validateSettings(); this.setViewerText(); } apply() { this.resetProperties(); // Set selected settings as active. if (this.activeSetting.Name !== "[Current Settings]") { this.activeSetting.Active = true; } this.saveEvent.emit(this.settingsList); this.applyEvent.emit({ columns: this.activeSetting.Columns, customFilters: this.activeSetting.CustomFilters }); } close() { this.closeEvent.emit(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SDKDataGridSettingsOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SDKDataGridSettingsOptionComponent, selector: "sdk-datagrid-settings-option", inputs: { settings: "settings", columns: "columns", customFilters: "customFilters" }, outputs: { closeEvent: "closeEvent", saveEvent: "saveEvent", applyEvent: "applyEvent" }, usesOnChanges: true, ngImport: i0, template: "<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", styles: [".sdk-datagrid-window{position:absolute;inset:10px;overflow:hidden}.sdk-datagrid-window .header{position:absolute;top:0;right:0;left:0;height:50px}.sdk-datagrid-window .header .title{position:absolute;top:0;left:0;font-size:large;font-weight:600}.sdk-datagrid-window .header .sdk-icon.close{position:absolute;top:0;right:0}.sdk-datagrid-window .actions{position:absolute;top:50px;right:0;left:0;margin-top:5px;height:50px;width:100%}.sdk-datagrid-window .actions .button-left{float:left;margin:0}.sdk-datagrid-window .actions .button-right{float:right;margin:0 5px 0 0}.sdk-datagrid-window .content{position:absolute;inset:100px 0 50px;border:1px solid var(--sdk-border-dark);display:block;background:var(--sdk-white);border-radius:4px;margin-top:0;overflow:auto;text-align:left}.sdk-datagrid-window .content.no-actions{top:50px}.sdk-datagrid-window .content .keyword{position:relative;padding:5px 10px}.sdk-datagrid-window .content .no-box{position:relative;background-color:var(--sdk-white);text-align:left;margin:4px;box-sizing:border-box;cursor:default}.sdk-datagrid-window .content .no-box input{border-radius:unset;border-width:unset;margin:unset;padding:unset;width:unset}.sdk-datagrid-window .content .no-box input.data-option{padding:0;margin:0 5px 0 0;vertical-align:middle;cursor:pointer}.sdk-datagrid-window .content .no-box .data-label{padding:0;margin:0 10px 0 0;display:inline;vertical-align:middle;text-transform:uppercase;font-weight:600;font-size:small;cursor:pointer}.sdk-datagrid-window .content .box{position:relative;border:1px solid var(--sdk-border);background-color:var(--sdk-white);text-align:left;margin:4px;box-sizing:border-box;cursor:default}.sdk-datagrid-window .content .cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.sdk-datagrid-window .content .cdk-drag-placeholder{opacity:0}.sdk-datagrid-window .content .cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.sdk-datagrid-window .content .list.cdk-drop-list-dragging .box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.sdk-datagrid-window .content .section{margin:10px 10px 20px}.sdk-datagrid-window .content .section span{margin-bottom:5px;display:block;font-weight:600}.sdk-datagrid-window .content .section .column{display:block;padding:5px;width:100%}.sdk-datagrid-window .content .section .note{margin:-10px 0 5px;font-size:small;font-style:italic;font-weight:400}.sdk-datagrid-window .content .no-records{height:100%;width:100%;display:table;text-align:center;align-items:center}.sdk-datagrid-window .content .no-records span{display:table-cell;vertical-align:middle;font-size:large;font-weight:600;color:var(--sdk-red)}.sdk-datagrid-window .content .error{display:table;text-align:left;vertical-align:top;padding:20px;color:var(--sdk-red)}.sdk-datagrid-window .footer{position:absolute;right:0;left:0;bottom:0;height:40px;width:100%;text-align:center}.sdk-datagrid-window input,.sdk-datagrid-window select{border-radius:5px;border-width:.5px;margin:0;padding:5px;width:100%}.sdk-datagrid-window input:hover,.sdk-datagrid-window select:hover{border-width:1px}.sdk-datagrid-windows-lock{position:absolute;inset:0;z-index:8;overflow:hidden;background-color:var(--sdk-black);opacity:.33}.sdk-datagrid-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:200px;width:300px;background-color:var(--sdk-white);border-top:.5px solid var(--sdk-gray);border-left:.5px solid var(--sdk-gray);border-bottom:.5px solid var(--sdk-gray);box-shadow:5px 5px 10px #606060;z-index:10}.sdk-datagrid-message .title{position:absolute;top:0;left:0;right:0;height:50px;padding-top:10px;color:var(--sdk-blue);font-size:1.5em;font-weight:600;text-align:center}.sdk-datagrid-message .text{position:absolute;inset:50px 0;padding:0 10px;text-align:center}.sdk-datagrid-message .action{position:absolute;left:0;right:0;bottom:0;height:50px;text-align:center}.settings{margin:0;padding:0}.settings .name{position:absolute;top:10px;left:10px;right:10px;height:50px}.settings .name .error{color:var(--sdk-red);margin:auto;padding:0}.settings .values{position:absolute;inset:50px 10px 10px;overflow:auto;border:.5px solid var(--sdk-border);padding:10px}.settings .values.adjusted{bottom:40px}.settings .values * ul{margin:0}.settings .values * span{font-size:.8em;color:var(--sdk-red)}.settings .notes{position:absolute;left:10px;right:10px;bottom:10px;font-size:.9em;padding:0 10px;color:var(--sdk-red)}.footer .reset.disabled{opacity:.5!important;cursor:default!important}.footer .reset.disabled:hover{border:.5px solid transparent!important;border-radius:unset!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SDKMessageComponent, selector: "sdk-message", inputs: ["message", "height", "style", "timer"], outputs: ["messageChange"] }, { kind: "component", type: i3.SDKSelectComponent, selector: "sdk-select", inputs: ["label", "labelPosition", "labelStyle", "options", "optionStyle", "optionValuesStyle", "forceOptionBottom", "noValueLabel", "noValueDisabled", "displayValue", "displayGroup", "multiSelect", "multiValues", "selectedOptions", "resetLabel", "hoverColor", "selectedColor", "selectedBackground"], outputs: ["selectChangeEvent"] }, { kind: "component", type: i4.SDKTextboxComponent, selector: "sdk-textbox", inputs: ["validCharacters", "value", "hint", "pattern", "locale", "multiLine", "border", "padding", "margin", "height", "width", "style", "class", "showCalendarIcon", "calHeight", "calWidth", "calFontSize"], outputs: ["blurCallBackEvent", "changeCallBackEvent", "enterCallBackEvent"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SDKDataGridSettingsOptionComponent, decorators: [{ type: Component, args: [{ selector: 'sdk-datagrid-settings-option', encapsulation: ViewEncapsulation.None // Used for innerHtml formatting on 'viewerText' property. , template: "<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", styles: [".sdk-datagrid-window{position:absolute;inset:10px;overflow:hidden}.sdk-datagrid-window .header{position:absolute;top:0;right:0;left:0;height:50px}.sdk-datagrid-window .header .title{position:absolute;top:0;left:0;font-size:large;font-weight:600}.sdk-datagrid-window .header .sdk-icon.close{position:absolute;top:0;right:0}.sdk-datagrid-window .actions{position:absolute;top:50px;right:0;left:0;margin-top:5px;height:50px;width:100%}.sdk-datagrid-window .actions .button-left{float:left;margin:0}.sdk-datagrid-window .actions .button-right{float:right;margin:0 5px 0 0}.sdk-datagrid-window .content{position:absolute;inset:100px 0 50px;border:1px solid var(--sdk-border-dark);display:block;background:var(--sdk-white);border-radius:4px;margin-top:0;overflow:auto;text-align:left}.sdk-datagrid-window .content.no-actions{top:50px}.sdk-datagrid-window .content .keyword{position:relative;padding:5px 10px}.sdk-datagrid-window .content .no-box{position:relative;background-color:var(--sdk-white);text-align:left;margin:4px;box-sizing:border-box;cursor:default}.sdk-datagrid-window .content .no-box input{border-radius:unset;border-width:unset;margin:unset;padding:unset;width:unset}.sdk-datagrid-window .content .no-box input.data-option{padding:0;margin:0 5px 0 0;vertical-align:middle;cursor:pointer}.sdk-datagrid-window .content .no-box .data-label{padding:0;margin:0 10px 0 0;display:inline;vertical-align:middle;text-transform:uppercase;font-weight:600;font-size:small;cursor:pointer}.sdk-datagrid-window .content .box{position:relative;border:1px solid var(--sdk-border);background-color:var(--sdk-white);text-align:left;margin:4px;box-sizing:border-box;cursor:default}.sdk-datagrid-window .content .cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.sdk-datagrid-window .content .cdk-drag-placeholder{opacity:0}.sdk-datagrid-window .content .cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.sdk-datagrid-window .content .list.cdk-drop-list-dragging .box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.sdk-datagrid-window .content .section{margin:10px 10px 20px}.sdk-datagrid-window .content .section span{margin-bottom:5px;display:block;font-weight:600}.sdk-datagrid-window .content .section .column{display:block;padding:5px;width:100%}.sdk-datagrid-window .content .section .note{margin:-10px 0 5px;font-size:small;font-style:italic;font-weight:400}.sdk-datagrid-window .content .no-records{height:100%;width:100%;display:table;text-align:center;align-items:center}.sdk-datagrid-window .content .no-records span{display:table-cell;vertical-align:middle;font-size:large;font-weight:600;color:var(--sdk-red)}.sdk-datagrid-window .content .error{display:table;text-align:left;vertical-align:top;padding:20px;color:var(--sdk-red)}.sdk-datagrid-window .footer{position:absolute;right:0;left:0;bottom:0;height:40px;width:100%;text-align:center}.sdk-datagrid-window input,.sdk-datagrid-window select{border-radius:5px;border-width:.5px;margin:0;padding:5px;width:100%}.sdk-datagrid-window input:hover,.sdk-datagrid-window select:hover{border-width:1px}.sdk-datagrid-windows-lock{position:absolute;inset:0;z-index:8;overflow:hidden;background-color:var(--sdk-black);opacity:.33}.sdk-datagrid-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:200px;width:300px;background-color:var(--sdk-white);border-top:.5px solid var(--sdk-gray);border-left:.5px solid var(--sdk-gray);border-bottom:.5px solid var(--sdk-gray);box-shadow:5px 5px 10px #606060;z-index:10}.sdk-datagrid-message .title{position:absolute;top:0;left:0;right:0;height:50px;padding-top:10px;color:var(--sdk-blue);font-size:1.5em;font-weight:600;text-align:center}.sdk-datagrid-message .text{position:absolute;inset:50px 0;padding:0 10px;text-align:center}.sdk-datagrid-message .action{position:absolute;left:0;right:0;bottom:0;height:50px;text-align:center}.settings{margin:0;padding:0}.settings .name{position:absolute;top:10px;left:10px;right:10px;height:50px}.settings .name .error{color:var(--sdk-red);margin:auto;padding:0}.settings .values{position:absolute;inset:50px 10px 10px;overflow:auto;border:.5px solid var(--sdk-border);padding:10px}.settings .values.adjusted{bottom:40px}.settings .values * ul{margin:0}.settings .values * span{font-size:.8em;color:var(--sdk-red)}.settings .notes{position:absolute;left:10px;right:10px;bottom:10px;font-size:.9em;padding:0 10px;color:var(--sdk-red)}.footer .reset.disabled{opacity:.5!important;cursor:default!important}.footer .reset.disabled:hover{border:.5px solid transparent!important;border-radius:unset!important}\n"] }] }], propDecorators: { settings: [{ type: Input }], columns: [{ type: Input }], customFilters: [{ type: Input }], closeEvent: [{ type: Output }], saveEvent: [{ type: Output }], applyEvent: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Mtb3B0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay1kYXRhZ3JpZC9zcmMvbGliL29wdGlvbnMvc2V0dGluZ3Mvc2V0dGluZ3Mtb3B0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay1kYXRhZ3JpZC9zcmMvbGliL29wdGlvbnMvc2V0dGluZ3Mvc2V0dGluZ3Mtb3B0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7QUFTbkUsTUFBTSxPQUFPLGtDQUFrQztJQVAvQztRQVFJOzttRkFFMkU7UUFDbEUsYUFBUSxHQUEwQixFQUFFLENBQUM7UUFDckMsWUFBTyxHQUF3QixFQUFFLENBQUM7UUFDbEMsa0JBQWEsR0FBOEIsRUFBRSxDQUFDO1FBQzdDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9CLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTFDOzttRkFFMkU7UUFDakUsa0JBQWEsR0FBd0IsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQy9ELGlCQUFZLEdBQTBCLEVBQUUsQ0FBQztRQUN6QyxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsUUFBRyxHQUFXLEVB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QkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ2xvbmUgfSBmcm9tICcuLi8uLi91dGlscy9jbG9uZSc7XHJcblxyXG5pbXBvcnQgeyBTREtEYXRhR3JpZFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RhdGFncmlkLXNldHRpbmdzJztcclxuaW1wb3J0IHsgU0RLRGF0YUdyaWRDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0YWdyaWQtY29sdW1uJztcclxuaW1wb3J0IHsgU0RLRGF0YUdyaWRDdXN0b21GaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0YWdyaWQtY3VzdG9tLWZpbHRlcic7XHJcbmltcG9ydCB7IFNES0RhdGFHcmlkTWVzc2FnZSB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRhZ3JpZC1tZXNzYWdlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzZGstZGF0YWdyaWQtc2V0dGluZ3Mtb3B0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZXR0aW5ncy1vcHRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vc2V0dGluZ3Mtb3B0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lIC8vIFVzZWQgZm9yIGlubmVySHRtbCBmb3JtYXR0aW5nIG9uICd2aWV3ZXJUZXh0JyBwcm9wZXJ0eS5cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBTREtEYXRhR3JpZFNldHRpbmdzT3B0aW9uQ29tcG9uZW50IHtcclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgKiBJbnB1dC9PdXRwdXQgUGFyYW1ldGVyc1xyXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICBASW5wdXQoKSBzZXR0aW5nczogU0RLRGF0YUdyaWRTZXR0aW5nc1tdID0gW107XHJcbiAgICBASW5wdXQoKSBjb2x1bW5zOiBTREtEYXRhR3JpZENvbHVtbltdID0gW107XHJcbiAgICBASW5wdXQoKSBjdXN0b21GaWx0ZXJzOiBTREtEYXRhR3JpZEN1c3RvbUZpbHRlcltdID0gW107XHJcbiAgICBAT3V0cHV0KCkgY2xvc2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBzYXZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgYXBwbHlFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICogQ29tcG9uZW50IFZhcmlhYmxlc1xyXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICBwcm90ZWN0ZWQgYWN0aXZlU2V0dGluZzogU0RLRGF0YUdyaWRTZXR0aW5ncyA9IG5ldyBTREtEYXRhR3JpZFNldHRpbmdzKCk7XHJcbiAgICBwcm90ZWN0ZWQgc2V0dGluZ3NMaXN0OiBTREtEYXRhR3JpZFNldHRpbmdzW10gPSBbXTtcclxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJvdGVjdGVkIHZpZXdlclRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcm90ZWN0ZWQgbXNnOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJvdGVjdGVkIGVycm9yOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIHByaXZhdGUgYWN0aXZlSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3M6IFNES0RhdGFHcmlkU2V0dGluZ3NbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfY29sdW1uczogU0RLRGF0YUdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfY3VzdG9tRmlsdGVyczogU0RLRGF0YUdyaWRDdXN0b21GaWx0ZXJbXSA9IFtdO1xyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgKiBNZXNzYWdlIFZhcmlhYmxlc1xyXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICBwcm90ZWN0ZWQgc2hvd01lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBtZXNzYWdlOiBTREtEYXRhR3JpZE1lc3NhZ2UgPSBuZXcgU0RLRGF0YUdyaWRNZXNzYWdlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIG5nT25DaGFuZ2VzKF9hcmdzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IENsb25lLmRlZXBDb3B5KHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2NvbHVtbnMgPSBDbG9uZS5kZWVwQ29weSh0aGlzLmNvbHVtbnMpO1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbUZpbHRlcnMgPSBDbG9uZS5kZWVwQ29weSh0aGlzLmN1c3RvbUZpbHRlcnMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRpYWx6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgKiBTZXR1cCBNZXRob2RzXHJcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgIHByaXZhdGUgaW5pdGlhbHplKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NMaXN0ID0gdGhpcy5fc2V0dGluZ3M7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGN1cnJlbnQgc2V0dGluZ3MgYmFzZWQgb24gY29sdW1ucyBhbmQgY3VzdG9tIGZpbHRlcnMuXHJcbiAgICAgICAgbGV0IGN1cnJlbnRTZXR0aW5nOiBTREtEYXRhR3JpZFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICBOYW1lOiBcIltDdXJyZW50IFNldHRpbmdzXVwiLFxyXG4gICAgICAgICAgICBDb2x1bW5zOiB0aGlzLl9jb2x1bW5zLFxyXG4gICAgICAgICAgICBDdXN0b21GaWx0ZXJzOiB0aGlzLl9jdXN0b21GaWx0ZXJzLFxyXG4gICAgICAgICAgICBBY3RpdmU6IGZhbHNlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmR4ID0gdGhpcy5zZXR0aW5nc0xpc3QuZmluZEluZGV4KChzZXR0aW5nczogU0RLRGF0YUdyaWRTZXR0aW5ncykgPT4gc2V0dGluZ3MuTmFtZSA9PT0gXCJbQ3VycmVudCBTZXR0aW5nc11cIik7XHJcblxyXG4gICAgICAgIGlmIChuZHggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NMaXN0LnVuc2hpZnQoY3VycmVudFNldHRpbmcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NMaXN0W25keF0gPSBjdXJyZW50U2V0dGluZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFByZS1sb2FkIGFueSBzZXR0aW5ncyB0aGF0IGFyZSBmbGFnZ2VkIGFzICdhY3RpdmUnLlxyXG4gICAgICAgIGxldCBhY3RpdmVOZHggPSB0aGlzLnNldHRpbmdzTGlzdC5maW5kSW5kZXgoKHNldHRpbmc6IFNES0RhdGFHcmlkU2V0dGluZ3MpID0+IHNldHRpbmcuQWN0aXZlID09PSB0cnVlKTtcclxuXHJcbiAgICAgICAgaWYgKGFjdGl2ZU5keCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBhY3RpdmVOZHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFjdGl2ZVNldHRpbmcgPSB0aGlzLnNldHRpbmdzTGlzdFt0aGlzLmFjdGl2ZUluZGV4XTtcclxuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmFjdGl2ZVNldHRpbmcuTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRWaWV3ZXJUZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlU2V0dGluZygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzTGlzdFt0aGlzLmFjdGl2ZUluZGV4XS5OYW1lID0gdGhpcy5uYW1lO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFNldHRpbmc6IFNES0RhdGFHcmlkU2V0dGluZ3MgPSBDbG9uZS5kZWVwQ29weSh0aGlzLnNldHRpbmdzTGlzdFt0aGlzLmFjdGl2ZUluZGV4XSk7XHJcblxyXG4gICAgICAgICAgICBjdXJyZW50U2V0dGluZy5OYW1lID0gXCJbQ3VycmVudCBTZXR0aW5nc11cIjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NMaXN0LnVuc2hpZnQoY3VycmVudFNldHRpbmcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldFByb3BlcnRpZXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuc2V0dGluZ3NMaXN0LmZpbmRJbmRleCgoc2V0dGluZzogYW55KSA9PiBzZXR0aW5nLk5hbWUgPT09IHRoaXMubmFtZSkgKyAxO1xyXG5cclxuICAgICAgICB0aGlzLnNhdmVFdmVudC5lbWl0KHRoaXMuc2V0dGluZ3NMaXN0KTtcclxuXHJcbiAgICAgICAgdGhpcy5tc2cgPSBcIlNldHRpbmdzIGhhdmUgYmVlbiBzYXZlZC5cIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNvcnRTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzTGlzdC5zb3J0KChhOiBTREtEYXRhR3JpZFNldHRpbmdzLCBiOiBTREtEYXRhR3JpZFNldHRpbmdzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFOYW1lID0gYS5OYW1lLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJOYW1lID0gYi5OYW1lLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYU5hbWUgPiBiTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChhTmFtZSA8IGJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZ