{ "version": 3, "sources": ["../../src/slick.core.ts"], "sourcesContent": ["/**\n * Contains core SlickGrid classes.\n * @module Core\n * @namespace Slick\n */\n\nimport type {\n CSSStyleDeclarationWritable,\n EditController,\n ElementEventListener,\n Handler,\n InferDOMType,\n MergeTypes\n} from './models/index';\n\nexport interface BasePubSub {\n publish(_eventName: string | any, _data?: ArgType): any;\n subscribe(_eventName: string | Function, _callback: (data: ArgType) => void): any;\n}\n\n/**\n * An event object for passing data to event handlers and letting them control propagation.\n *

This is pretty much identical to how W3C and jQuery implement events.

\n * @class EventData\n * @constructor\n */\nexport class SlickEventData {\n protected _isPropagationStopped = false;\n protected _isImmediatePropagationStopped = false;\n protected _isDefaultPrevented = false;\n protected returnValues: string[] = [];\n protected returnValue: any = undefined;\n protected target?: EventTarget | null;\n protected nativeEvent?: Event | null;\n protected arguments_?: ArgType;\n\n constructor(protected event?: Event | null, protected args?: ArgType) {\n this.nativeEvent = event;\n this.arguments_ = args;\n\n // when we already have an event, we want to keep some of the event properties\n // looping through some props is the only way to keep and sync these properties to the returned EventData\n if (event) {\n [\n 'altKey', 'ctrlKey', 'metaKey', 'shiftKey', 'key', 'keyCode',\n 'clientX', 'clientY', 'offsetX', 'offsetY', 'pageX', 'pageY',\n 'bubbles', 'type', 'which', 'x', 'y'\n ].forEach(key => (this as any)[key] = event[key as keyof Event]);\n }\n this.target = this.nativeEvent ? this.nativeEvent.target : undefined;\n }\n\n /**\n * Stops event from propagating up the DOM tree.\n * @method stopPropagation\n */\n stopPropagation() {\n this._isPropagationStopped = true;\n this.nativeEvent?.stopPropagation();\n }\n\n /**\n * Returns whether stopPropagation was called on this event object.\n * @method isPropagationStopped\n * @return {Boolean}\n */\n isPropagationStopped() {\n return this._isPropagationStopped;\n }\n\n /**\n * Prevents the rest of the handlers from being executed.\n * @method stopImmediatePropagation\n */\n stopImmediatePropagation() {\n this._isImmediatePropagationStopped = true;\n if (this.nativeEvent) {\n this.nativeEvent.stopImmediatePropagation();\n }\n };\n\n /**\n * Returns whether stopImmediatePropagation was called on this event object.\\\n * @method isImmediatePropagationStopped\n * @return {Boolean}\n */\n isImmediatePropagationStopped() {\n return this._isImmediatePropagationStopped;\n };\n\n getNativeEvent() {\n return this.nativeEvent as E;\n }\n\n preventDefault() {\n if (this.nativeEvent) {\n this.nativeEvent.preventDefault();\n }\n this._isDefaultPrevented = true;\n }\n\n isDefaultPrevented() {\n if (this.nativeEvent) {\n return this.nativeEvent.defaultPrevented;\n }\n return this._isDefaultPrevented;\n }\n\n addReturnValue(value: any) {\n this.returnValues.push(value);\n if (this.returnValue === undefined && value !== undefined) {\n this.returnValue = value;\n }\n }\n\n getReturnValue() {\n return this.returnValue;\n }\n\n getArguments() {\n return this.arguments_;\n }\n}\n\n/**\n * A simple publisher-subscriber implementation.\n * @class Event\n * @constructor\n */\nexport class SlickEvent {\n protected _handlers: Handler[] = [];\n protected _pubSubService?: BasePubSub;\n\n get subscriberCount() {\n return this._handlers.length;\n }\n\n /**\n * Constructor\n * @param {String} [eventName] - event name that could be used for dispatching CustomEvent (when enabled)\n * @param {BasePubSub} [pubSubService] - event name that could be used for dispatching CustomEvent (when enabled)\n */\n constructor(protected readonly eventName?: string, protected readonly pubSub?: BasePubSub) {\n this._pubSubService = pubSub;\n }\n\n /**\n * Adds an event handler to be called when the event is fired.\n *

Event handler will receive two arguments - an EventData and the data\n * object the event was fired with.

\n * @method subscribe\n * @param {Function} fn - Event handler.\n */\n subscribe(fn: Handler) {\n this._handlers.push(fn);\n }\n\n /**\n * Removes an event handler added with subscribe(fn).\n * @method unsubscribe\n * @param {Function} [fn] - Event handler to be removed.\n */\n unsubscribe(fn?: Handler) {\n for (let i = this._handlers.length - 1; i >= 0; i--) {\n if (this._handlers[i] === fn) {\n this._handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Fires an event notifying all subscribers.\n * @method notify\n * @param {Object} args Additional data object to be passed to all handlers.\n * @param {EventData} [event] - An EventData object to be passed to all handlers.\n * For DOM events, an existing W3C event object can be passed in.\n * @param {Object} [scope] - The scope (\"this\") within which the handler will be executed.\n * If not specified, the scope will be set to the Event instance.\n */\n notify(args: ArgType, evt?: SlickEventData | Event | MergeTypes | null, scope?: any) {\n const sed: SlickEventData = evt instanceof SlickEventData\n ? evt\n : new SlickEventData(evt, args);\n scope = scope || this;\n\n for (let i = 0; i < this._handlers.length && !(sed.isPropagationStopped() || sed.isImmediatePropagationStopped()); i++) {\n const returnValue = this._handlers[i].call(scope, sed as SlickEvent | SlickEventData, args);\n sed.addReturnValue(returnValue);\n }\n\n // user can optionally add a global PubSub Service which makes it easy to publish/subscribe to events\n if (typeof this._pubSubService?.publish === 'function' && this.eventName) {\n const ret = this._pubSubService.publish<{ args: ArgType; eventData?: Event | SlickEventData; nativeEvent?: Event; }>(this.eventName, { args, eventData: sed });\n sed.addReturnValue(ret);\n }\n return sed;\n }\n\n setPubSubService(pubSub: BasePubSub) {\n this._pubSubService = pubSub;\n }\n}\n\nexport class SlickEventHandler {\n protected handlers: Array<{ event: SlickEvent; handler: Handler; }> = [];\n\n subscribe(event: SlickEvent, handler: Handler) {\n this.handlers.push({ event, handler });\n event.subscribe(handler);\n\n return this as SlickEventHandler; // allow chaining\n }\n\n unsubscribe(event: SlickEvent, handler: Handler) {\n let i = this.handlers.length;\n while (i--) {\n if (this.handlers[i].event === event &&\n this.handlers[i].handler === handler) {\n this.handlers.splice(i, 1);\n event.unsubscribe(handler);\n return;\n }\n }\n\n return this as SlickEventHandler; // allow chaining\n }\n\n unsubscribeAll() {\n let i = this.handlers.length;\n while (i--) {\n this.handlers[i].event.unsubscribe(this.handlers[i].handler);\n }\n this.handlers = [];\n\n return this as SlickEventHandler; // allow chaining\n }\n}\n\n/**\n * A structure containing a range of cells.\n * @class Range\n * @constructor\n * @param fromRow {Integer} Starting row.\n * @param fromCell {Integer} Starting cell.\n * @param toRow {Integer} Optional. Ending row. Defaults to fromRow.\n * @param toCell {Integer} Optional. Ending cell. Defaults to fromCell.\n */\nexport class SlickRange {\n fromRow: number;\n fromCell: number;\n toCell: number;\n toRow: number;\n\n constructor(fromRow: number, fromCell: number, toRow?: number, toCell?: number) {\n if (toRow === undefined && toCell === undefined) {\n toRow = fromRow;\n toCell = fromCell;\n }\n\n /**\n * @property fromRow\n * @type {Integer}\n */\n this.fromRow = Math.min(fromRow, toRow as number);\n\n /**\n * @property fromCell\n * @type {Integer}\n */\n this.fromCell = Math.min(fromCell, toCell as number);\n\n /**\n * @property toCell\n * @type {Integer}\n */\n this.toCell = Math.max(fromCell, toCell as number);\n\n /**\n * @property toRow\n * @type {Integer}\n */\n this.toRow = Math.max(fromRow, toRow as number);\n }\n\n\n /**\n * Returns whether a range represents a single row.\n * @method isSingleRow\n * @return {Boolean}\n */\n isSingleRow() {\n return this.fromRow === this.toRow;\n }\n\n /**\n * Returns whether a range represents a single cell.\n * @method isSingleCell\n * @return {Boolean}\n */\n isSingleCell() {\n return this.fromRow === this.toRow && this.fromCell === this.toCell;\n }\n\n /**\n * Returns whether a range contains a given cell.\n * @method contains\n * @param row {Integer}\n * @param cell {Integer}\n * @return {Boolean}\n */\n contains(row: number, cell: number) {\n return row >= this.fromRow && row <= this.toRow &&\n cell >= this.fromCell && cell <= this.toCell;\n }\n\n /**\n * Returns a readable representation of a range.\n * @method toString\n * @return {String}\n */\n toString() {\n if (this.isSingleCell()) {\n return `(${this.fromRow}:${this.fromCell})`;\n }\n else {\n return `(${this.fromRow}:${this.fromCell} - ${this.toRow}:${this.toCell})`;\n }\n };\n}\n\n\n/**\n * A base class that all special / non-data rows (like Group and GroupTotals) derive from.\n * @class NonDataItem\n * @constructor\n */\nexport class SlickNonDataItem {\n __nonDataRow = true;\n}\n\n\n/**\n * Information about a group of rows.\n * @class Group\n * @extends Slick.NonDataItem\n * @constructor\n */\nexport class SlickGroup extends SlickNonDataItem {\n __group = true;\n\n /**\n * Grouping level, starting with 0.\n * @property level\n * @type {Number}\n */\n level = 0;\n\n /**\n * Number of rows in the group.\n * @property count\n * @type {Integer}\n */\n count = 0;\n\n /**\n * Grouping value.\n * @property value\n * @type {Object}\n */\n value = null;\n\n /**\n * Formatted display value of the group.\n * @property title\n * @type {String}\n */\n title: string | null = null;\n\n /**\n * Whether a group is collapsed.\n * @property collapsed\n * @type {Boolean}\n */\n collapsed: boolean | number = false;\n\n /**\n * Whether a group selection checkbox is checked.\n * @property selectChecked\n * @type {Boolean}\n */\n selectChecked = false;\n\n /**\n * GroupTotals, if any.\n * @property totals\n * @type {GroupTotals}\n */\n totals: SlickGroupTotals = null as any;\n\n /**\n * Rows that are part of the group.\n * @property rows\n * @type {Array}\n */\n rows: number[] = [];\n\n /**\n * Sub-groups that are part of the group.\n * @property groups\n * @type {Array}\n */\n groups: any[] = null as any;\n\n /**\n * A unique key used to identify the group. This key can be used in calls to DataView\n * collapseGroup() or expandGroup().\n * @property groupingKey\n * @type {Object}\n */\n groupingKey: any = null;\n\n constructor() {\n super();\n }\n /**\n * Compares two Group instances.\n * @method equals\n * @return {Boolean}\n * @param group {Group} Group instance to compare to.\n */\n equals(group: SlickGroup): boolean {\n return this.value === group.value &&\n this.count === group.count &&\n this.collapsed === group.collapsed &&\n this.title === group.title;\n };\n}\n\n/**\n * Information about group totals.\n * An instance of GroupTotals will be created for each totals row and passed to the aggregators\n * so that they can store arbitrary data in it. That data can later be accessed by group totals\n * formatters during the display.\n * @class GroupTotals\n * @extends Slick.NonDataItem\n * @constructor\n */\nexport class SlickGroupTotals extends SlickNonDataItem {\n __groupTotals = true;\n\n /**\n * Parent Group.\n * @param group\n * @type {Group}\n */\n group: SlickGroup = null as any;\n\n /**\n * Whether the totals have been fully initialized / calculated.\n * Will be set to false for lazy-calculated group totals.\n * @param initialized\n * @type {Boolean}\n */\n initialized = false;\n\n constructor() {\n super();\n }\n}\n\n/**\n * A locking helper to track the active edit controller and ensure that only a single controller\n * can be active at a time. This prevents a whole class of state and validation synchronization\n * issues. An edit controller (such as SlickGrid) can query if an active edit is in progress\n * and attempt a commit or cancel before proceeding.\n * @class EditorLock\n * @constructor\n */\nexport class SlickEditorLock {\n activeEditController: any = null;\n\n /**\n * Returns true if a specified edit controller is active (has the edit lock).\n * If the parameter is not specified, returns true if any edit controller is active.\n * @method isActive\n * @param editController {EditController}\n * @return {Boolean}\n */\n isActive(editController?: EditController): boolean {\n return (editController ? this.activeEditController === editController : this.activeEditController !== null);\n };\n\n /**\n * Sets the specified edit controller as the active edit controller (acquire edit lock).\n * If another edit controller is already active, and exception will be throw new Error(.\n * @method activate\n * @param editController {EditController} edit controller acquiring the lock\n */\n activate(editController: EditController) {\n if (editController === this.activeEditController) { // already activated?\n return;\n }\n if (this.activeEditController !== null) {\n throw new Error(`Slick.EditorLock.activate: an editController is still active, can't activate another editController`);\n }\n if (!editController.commitCurrentEdit) {\n throw new Error('Slick.EditorLock.activate: editController must implement .commitCurrentEdit()');\n }\n if (!editController.cancelCurrentEdit) {\n throw new Error('Slick.EditorLock.activate: editController must implement .cancelCurrentEdit()');\n }\n this.activeEditController = editController;\n };\n\n /**\n * Unsets the specified edit controller as the active edit controller (release edit lock).\n * If the specified edit controller is not the active one, an exception will be throw new Error(.\n * @method deactivate\n * @param editController {EditController} edit controller releasing the lock\n */\n deactivate(editController: EditController) {\n if (!this.activeEditController) {\n return;\n }\n if (this.activeEditController !== editController) {\n throw new Error('Slick.EditorLock.deactivate: specified editController is not the currently active one');\n }\n this.activeEditController = null;\n };\n\n /**\n * Attempts to commit the current edit by calling \"commitCurrentEdit\" method on the active edit\n * controller and returns whether the commit attempt was successful (commit may fail due to validation\n * errors, etc.). Edit controller's \"commitCurrentEdit\" must return true if the commit has succeeded\n * and false otherwise. If no edit controller is active, returns true.\n * @method commitCurrentEdit\n * @return {Boolean}\n */\n commitCurrentEdit(): boolean {\n return (this.activeEditController ? this.activeEditController.commitCurrentEdit() : true);\n };\n\n /**\n * Attempts to cancel the current edit by calling \"cancelCurrentEdit\" method on the active edit\n * controller and returns whether the edit was successfully cancelled. If no edit controller is\n * active, returns true.\n * @method cancelCurrentEdit\n * @return {Boolean}\n */\n cancelCurrentEdit(): boolean {\n return (this.activeEditController ? this.activeEditController.cancelCurrentEdit() : true);\n };\n}\n\nfunction regexSanitizer(dirtyHtml: string) {\n return dirtyHtml.replace(/(\\b)(on[a-z]+)(\\s*)=|javascript:([^>]*)[^>]*|(<\\s*)(\\/*)script([<>]*).*(<\\s*)(\\/*)script(>*)|(<)(\\/*)(script|script defer)(.*)(>|>\">)/gi, '');\n}\n\n/**\n * A simple binding event service to keep track of all JavaScript events with callback listeners,\n * it allows us to unbind event(s) and their listener(s) by calling a simple unbind method call.\n * Unbinding is a necessary step to make sure that all event listeners are removed to avoid memory leaks when destroing the grid\n */\nexport class BindingEventService {\n protected _boundedEvents: ElementEventListener[] = [];\n\n getBoundedEvents() {\n return this._boundedEvents;\n }\n\n destroy() {\n this.unbindAll();\n }\n\n /** Bind an event listener to any element */\n bind(element: Element | Window, eventName: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions, groupName = '') {\n element.addEventListener(eventName, listener, options);\n this._boundedEvents.push({ element, eventName, listener, groupName });\n }\n\n /** Unbind all will remove every every event handlers that were bounded earlier */\n unbind(element: Element | Window, eventName: string, listener: EventListenerOrEventListenerObject) {\n if (element?.removeEventListener) {\n element.removeEventListener(eventName, listener);\n }\n }\n\n unbindByEventName(element: Element | Window, eventName: string) {\n const boundedEvent = this._boundedEvents.find(e => e.element === element && e.eventName === eventName);\n if (boundedEvent) {\n this.unbind(boundedEvent.element, boundedEvent.eventName, boundedEvent.listener);\n }\n }\n\n /**\n * Unbind all event listeners that were bounded, optionally provide a group name to unbind all listeners assigned to that specific group only.\n */\n unbindAll(groupName?: string | string[]) {\n if (groupName) {\n const groupNames = Array.isArray(groupName) ? groupName : [groupName];\n\n // unbind only the bounded event with a specific group\n // Note: we need to loop in reverse order to avoid array reindexing (causing index offset) after a splice is called\n for (let i = this._boundedEvents.length - 1; i >= 0; --i) {\n const boundedEvent = this._boundedEvents[i];\n if (groupNames.some(g => g === boundedEvent.groupName)) {\n const { element, eventName, listener } = boundedEvent;\n this.unbind(element, eventName, listener);\n this._boundedEvents.splice(i, 1);\n }\n }\n } else {\n // unbind everything\n while (this._boundedEvents.length > 0) {\n const boundedEvent = this._boundedEvents.pop() as ElementEventListener;\n const { element, eventName, listener } = boundedEvent;\n this.unbind(element, eventName, listener);\n }\n }\n }\n}\n\nexport class Utils {\n // jQuery's extend\n private static getProto = Object.getPrototypeOf;\n private static class2type: any = {};\n private static toString = Utils.class2type.toString;\n private static hasOwn = Utils.class2type.hasOwnProperty;\n private static fnToString = Utils.hasOwn.toString;\n private static ObjectFunctionString = Utils.fnToString.call(Object);\n public static storage = {\n // https://stackoverflow.com/questions/29222027/vanilla-alternative-to-jquery-data-function-any-native-javascript-alternati\n _storage: new WeakMap(),\n // eslint-disable-next-line object-shorthand\n put: function (element: any, key: string, obj: any) {\n if (!this._storage.has(element)) {\n this._storage.set(element, new Map());\n }\n this._storage.get(element).set(key, obj);\n },\n // eslint-disable-next-line object-shorthand\n get: function (element: any, key: string) {\n const el = this._storage.get(element);\n if (el) {\n return el.get(key);\n }\n return null;\n },\n // eslint-disable-next-line object-shorthand\n remove: function (element: any, key: string) {\n const ret = this._storage.get(element).delete(key);\n if (!(this._storage.get(element).size === 0)) {\n this._storage.delete(element);\n }\n return ret;\n }\n };\n\n public static isFunction(obj: any) {\n return typeof obj === 'function' && typeof obj.nodeType !== 'number' && typeof obj.item !== 'function';\n }\n\n public static isPlainObject(obj: any) {\n if (!obj || Utils.toString.call(obj) !== '[object Object]') {\n return false;\n }\n\n const proto = Utils.getProto(obj);\n if (!proto) {\n return true;\n }\n const Ctor = Utils.hasOwn.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor === 'function' && Utils.fnToString.call(Ctor) === Utils.ObjectFunctionString;\n }\n\n public static calculateAvailableSpace(element: HTMLElement) {\n let bottom = 0, top = 0, left = 0, right = 0;\n\n const windowHeight = window.innerHeight || 0;\n const windowWidth = window.innerWidth || 0;\n const scrollPosition = Utils.windowScrollPosition();\n const pageScrollTop = scrollPosition.top;\n const pageScrollLeft = scrollPosition.left;\n const elmOffset = Utils.offset(element);\n\n if (elmOffset) {\n const elementOffsetTop = elmOffset.top || 0;\n const elementOffsetLeft = elmOffset.left || 0;\n top = elementOffsetTop - pageScrollTop;\n bottom = windowHeight - (elementOffsetTop - pageScrollTop);\n left = elementOffsetLeft - pageScrollLeft;\n right = windowWidth - (elementOffsetLeft - pageScrollLeft);\n }\n\n return { top, bottom, left, right };\n }\n\n public static extend(...args: any[]): T {\n let options, name, src, copy, copyIsArray, clone,\n target = args[0],\n i = 1,\n deep = false;\n const length = args.length;\n\n if (typeof target === 'boolean') {\n deep = target;\n target = args[i] || {};\n i++;\n } else {\n target = target || {};\n }\n if (typeof target !== 'object' && !Utils.isFunction(target)) {\n target = {};\n }\n if (i === length) {\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n target = this;\n i--;\n }\n for (; i < length; i++) {\n if (Utils.isDefined(options = args[i])) {\n for (name in options) {\n copy = options[name];\n if (name === '__proto__' || target === copy) {\n continue;\n }\n if (deep && copy && (Utils.isPlainObject(copy) ||\n (copyIsArray = Array.isArray(copy)))) {\n src = target[name];\n if (copyIsArray && !Array.isArray(src)) {\n clone = [];\n } else if (!copyIsArray && !Utils.isPlainObject(src)) {\n clone = {};\n } else {\n clone = src;\n }\n copyIsArray = false;\n target[name] = Utils.extend(deep, clone, copy);\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target as T;\n }\n\n /**\n * Create a DOM Element with any optional attributes or properties.\n * It will only accept valid DOM element properties that `createElement` would accept.\n * For example: `createDomElement('div', { className: 'my-css-class' })`,\n * for style or dataset you need to use nested object `{ style: { display: 'none' }}\n * The last argument is to optionally append the created element to a parent container element.\n * @param {String} tagName - html tag\n * @param {Object} options - element properties\n * @param {[HTMLElement]} appendToParent - parent element to append to\n */\n public static createDomElement(\n tagName: T,\n elementOptions?: null | { [P in K]: InferDOMType },\n appendToParent?: Element\n ): HTMLElementTagNameMap[T] {\n const elm = document.createElement(tagName);\n\n if (elementOptions) {\n Object.keys(elementOptions).forEach((elmOptionKey) => {\n if (elmOptionKey === 'innerHTML') {\n console.warn(`[SlickGrid] For better CSP (Content Security Policy) support, do not use \"innerHTML\" directly in \"createDomElement('${tagName}', { innerHTML: 'some html'})\"` +\n `, it is better as separate assignment: \"const elm = createDomElement('span'); elm.innerHTML = 'some html';\"`);\n }\n\n const elmValue = elementOptions[elmOptionKey as keyof typeof elementOptions];\n if (typeof elmValue === 'object') {\n Object.assign(elm[elmOptionKey as K] as object, elmValue);\n } else {\n elm[elmOptionKey as K] = (elementOptions as any)[elmOptionKey as keyof typeof elementOptions];\n }\n });\n }\n if (appendToParent?.appendChild) {\n appendToParent.appendChild(elm);\n }\n return elm;\n }\n\n public static emptyElement(element?: T | null): T | undefined | null {\n while (element?.firstChild) {\n element.removeChild(element.firstChild);\n }\n return element;\n }\n\n public static innerSize(elm: HTMLElement, type: 'height' | 'width') {\n let size = 0;\n\n if (elm) {\n const clientSize = type === 'height' ? 'clientHeight' : 'clientWidth';\n const sides = type === 'height' ? ['top', 'bottom'] : ['left', 'right'];\n size = elm[clientSize];\n for (const side of sides) {\n const sideSize = (parseFloat(Utils.getElementProp(elm, `padding-${side}`) || '') || 0);\n size -= sideSize;\n }\n }\n return size;\n }\n\n public static isDefined(value: T | undefined | null): value is T {\n return value !== undefined && value !== null && value !== '';\n }\n\n public static getElementProp(elm: HTMLElement & { getComputedStyle?: () => CSSStyleDeclaration }, property: string) {\n if (elm?.getComputedStyle) {\n return window.getComputedStyle(elm, null).getPropertyValue(property);\n }\n return null;\n }\n\n public static insertAfterElement(referenceNode: HTMLElement, newNode: HTMLElement) {\n referenceNode.parentNode?.insertBefore(newNode, referenceNode.nextSibling);\n }\n\n public static isEmptyObject(obj: any) {\n if (obj === null || obj === undefined) {\n return true;\n }\n return Object.entries(obj).length === 0;\n }\n\n public static noop() { }\n\n public static offset(el: HTMLElement | null) {\n if (!el || !el.getBoundingClientRect) {\n return undefined;\n }\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n\n return {\n top: box.top + window.pageYOffset - docElem.clientTop,\n left: box.left + window.pageXOffset - docElem.clientLeft\n };\n }\n\n public static windowScrollPosition() {\n return {\n left: window.pageXOffset || document.documentElement.scrollLeft || 0,\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n };\n }\n\n public static width(el: HTMLElement, value?: number | string): number | void {\n if (!el || !el.getBoundingClientRect) { return; }\n if (value === undefined) {\n return el.getBoundingClientRect().width;\n }\n Utils.setStyleSize(el, 'width', value);\n }\n\n public static height(el: HTMLElement, value?: number | string): number | void {\n if (!el) { return; }\n if (value === undefined) {\n return el.getBoundingClientRect().height;\n }\n Utils.setStyleSize(el, 'height', value);\n }\n\n public static setStyleSize(el: HTMLElement, style: string, val?: number | string | Function) {\n if (typeof val === 'function') {\n val = val();\n } else if (typeof val === 'string') {\n el.style[style as CSSStyleDeclarationWritable] = val;\n } else {\n el.style[style as CSSStyleDeclarationWritable] = val + 'px';\n }\n }\n\n public static contains(parent: HTMLElement, child: HTMLElement) {\n if (!parent || !child) {\n return false;\n }\n\n const parentList = Utils.parents(child);\n return !parentList.every((p) => {\n if (parent === p) {\n return false;\n }\n return true;\n });\n }\n\n public static isHidden(el: HTMLElement) {\n return el.offsetWidth === 0 && el.offsetHeight === 0;\n }\n\n public static parents(el: HTMLElement | ParentNode, selector?: string) {\n const parents: Array = [];\n const visible = selector === ':visible';\n const hidden = selector === ':hidden';\n\n while ((el = el.parentNode as ParentNode) && el !== document) {\n if (!el || !el.parentNode) {\n break;\n }\n if (hidden) {\n if (Utils.isHidden(el as HTMLElement)) {\n parents.push(el);\n }\n } else if (visible) {\n if (!Utils.isHidden(el as HTMLElement)) {\n parents.push(el);\n }\n } else if (!selector || (el as any).matches(selector)) {\n parents.push(el);\n }\n }\n return parents;\n }\n\n public static toFloat(value: string | number) {\n const x = parseFloat(value as string);\n if (isNaN(x)) {\n return 0;\n }\n return x;\n }\n\n public static show(el: HTMLElement | HTMLElement[], type = '') {\n if (Array.isArray(el)) {\n el.forEach((e) => e.style.display = type);\n } else {\n el.style.display = type;\n }\n }\n\n public static hide(el: HTMLElement | HTMLElement[]) {\n if (Array.isArray(el)) {\n el.forEach((e) => e.style.display = 'none');\n } else {\n el.style.display = 'none';\n }\n }\n\n public static slideUp(el: HTMLElement | HTMLElement[], callback: Function) {\n return Utils.slideAnimation(el, 'slideUp', callback);\n }\n\n public static slideDown(el: HTMLElement | HTMLElement[], callback: Function) {\n return Utils.slideAnimation(el, 'slideDown', callback);\n }\n\n public static slideAnimation(el: HTMLElement | HTMLElement[], slideDirection: 'slideDown' | 'slideUp', callback: Function) {\n if ((window as any).jQuery !== undefined) {\n (window as any).jQuery(el)[slideDirection]('fast', callback);\n return;\n }\n (slideDirection === 'slideUp') ? Utils.hide(el) : Utils.show(el);\n callback();\n }\n\n public static applyDefaults(targetObj: any, srcObj: any) {\n if (typeof srcObj === 'object') {\n Object.keys(srcObj).forEach(key => {\n if (srcObj.hasOwnProperty(key) && !targetObj.hasOwnProperty(key)) {\n targetObj[key] = srcObj[key];\n }\n });\n }\n }\n\n /**\n * User could optionally add PubSub Service to SlickEvent\n * When it is defined then a SlickEvent `notify()` call will also dispatch it by using the PubSub publish() method\n * @param {BasePubSub} [pubSubService]\n * @param {*} scope\n */\n public static addSlickEventPubSubWhenDefined(pubSub?: BasePubSub, scope?: T) {\n if (pubSub) {\n for (const prop in scope) {\n if (scope[prop] instanceof SlickEvent && typeof (scope[prop] as SlickEvent).setPubSubService === 'function') {\n (scope[prop] as SlickEvent).setPubSubService(pubSub);\n }\n }\n }\n }\n}\n\nexport const SlickGlobalEditorLock = new SlickEditorLock();\n\n// export Slick namespace on both global & window objects\nconst SlickCore = {\n Event: SlickEvent,\n EventData: SlickEventData,\n EventHandler: SlickEventHandler,\n Range: SlickRange,\n NonDataRow: SlickNonDataItem,\n Group: SlickGroup,\n GroupTotals: SlickGroupTotals,\n EditorLock: SlickEditorLock,\n RegexSanitizer: regexSanitizer,\n\n /**\n * A global singleton editor lock.\n * @class GlobalEditorLock\n * @static\n * @constructor\n */\n GlobalEditorLock: SlickGlobalEditorLock,\n\n keyCode: {\n SPACE: 8,\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n INSERT: 45,\n LEFT: 37,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n RIGHT: 39,\n TAB: 9,\n UP: 38,\n A: 65\n },\n preClickClassName: 'slick-edit-preclick',\n\n GridAutosizeColsMode: {\n None: 'NOA',\n LegacyOff: 'LOF',\n LegacyForceFit: 'LFF',\n IgnoreViewport: 'IGV',\n FitColsToViewport: 'FCV',\n FitViewportToCols: 'FVC'\n },\n\n 'ColAutosizeMode': {\n Locked: 'LCK',\n Guide: 'GUI',\n Content: 'CON',\n ContentExpandOnly: 'CXO',\n ContentIntelligent: 'CTI'\n },\n\n 'RowSelectionMode': {\n FirstRow: 'FS1',\n FirstNRows: 'FSN',\n AllRows: 'ALL',\n LastRow: 'LS1'\n },\n\n 'ValueFilterMode': {\n None: 'NONE',\n DeDuplicate: 'DEDP',\n GetGreatestAndSub: 'GR8T',\n GetLongestTextAndSub: 'LNSB',\n GetLongestText: 'LNSC'\n },\n\n WidthEvalMode: {\n Auto: 'AUTO',\n TextOnly: 'CANV',\n HTML: 'HTML'\n }\n};\n\nexport const {\n EditorLock, Event, EventData, EventHandler, Group, GroupTotals, NonDataRow, Range,\n RegexSanitizer, GlobalEditorLock, keyCode, preClickClassName, GridAutosizeColsMode, ColAutosizeMode,\n RowSelectionMode, ValueFilterMode, WidthEvalMode\n} = SlickCore;\n\n/* eslint-disable no-undef */\n// also add to global object when exist\nif (IIFE_ONLY && typeof global !== 'undefined' && window.Slick) {\n global.Slick = window.Slick;\n}\n/* eslint-enable no-undef */\n"], "mappings": "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", "names": [] }