{"version":3,"file":"gridjs.umd.js","sources":["../node_modules/preact/dist/preact.module.js","../src/util/id.ts","../src/base.ts","../src/i18n/en_US.ts","../src/i18n/language.ts","../src/view/base.tsx","../src/util/getConfig.ts","../src/view/htmlElement.tsx","../src/util/html.ts","../src/pipeline/processor.ts","../src/cell.ts","../src/row.ts","../src/tabular.ts","../src/util/array.ts","../src/util/eventEmitter.ts","../src/pipeline/filter/globalSearch.ts","../src/operator/search.ts","../src/util/className.ts","../src/plugin.ts","../src/view/base/store.ts","../src/view/plugin/search/store.ts","../src/view/base/actions.ts","../src/view/plugin/search/actions.ts","../src/pipeline/filter/serverGlobalSearch.ts","../src/util/log.ts","../src/view/plugin/search/search.tsx","../src/util/debounce.ts","../src/pipeline/limit/pagination.ts","../src/pipeline/limit/serverPagination.ts","../src/view/plugin/pagination.tsx","../src/util/width.ts","../src/view/table/shadow.tsx","../src/util/string.ts","../src/header.ts","../src/util/dispatcher.ts","../src/storage/storage.ts","../src/storage/memory.ts","../src/storage/server.ts","../src/storage/storageUtils.ts","../src/pipeline/pipeline.ts","../src/types.ts","../src/pipeline/extractor/storage.ts","../src/pipeline/transformer/arrayToTabular.ts","../src/pipeline/initiator/server.ts","../src/pipeline/transformer/storageResponseToArray.ts","../src/pipeline/pipelineUtils.ts","../src/config.ts","../node_modules/preact/hooks/dist/hooks.module.js","../src/view/table/td.tsx","../src/view/table/tr.tsx","../src/view/table/messageRow.tsx","../src/view/table/tbody.tsx","../src/pipeline/sort/native.ts","../src/view/plugin/sort/store.ts","../src/view/plugin/sort/actions.ts","../src/pipeline/sort/server.ts","../src/view/plugin/sort/sort.tsx","../src/view/plugin/resize/resize.tsx","../src/util/throttle.ts","../src/view/table/th.tsx","../src/view/table/thead.tsx","../src/util/table.ts","../src/view/table/table.tsx","../src/view/headerContainer.tsx","../src/view/footerContainer.tsx","../src/view/container.tsx","../src/grid.ts"],"sourcesContent":["var n,l,u,i,t,o,r,f={},e=[],c=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function s(n,l){for(var u in l)n[u]=l[u];return n}function a(n){var l=n.parentNode;l&&l.removeChild(n)}function h(l,u,i){var t,o,r,f={};for(r in u)\"key\"==r?t=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return v(l,f,t,o,null)}function v(n,i,t,o,r){var f={type:n,props:i,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u:r};return null==r&&null!=l.vnode&&l.vnode(f),f}function y(){return{current:null}}function p(n){return n.children}function d(n,l){this.props=n,this.context=l}function _(n,l){if(null==l)return n.__?_(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l0?v(k.type,k.props,k.key,null,k.__v):k)){if(k.__=u,k.__b=u.__b+1,null===(d=x[h])||d&&k.key==d.key&&k.type===d.type)x[h]=void 0;else for(y=0;y2&&(f.children=arguments.length>3?n.call(arguments,2):i),v(l.type,f,t||l.key,o||l.ref,null)}function B(n,l){var u={__c:l=\"__cC\"+r++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(b)},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=e.slice,l={__e:function(n,l,u,i){for(var t,o,r;l=l.__;)if((t=l.__c)&&!t.__)try{if((o=t.constructor)&&null!=o.getDerivedStateFromError&&(t.setState(o.getDerivedStateFromError(n)),r=t.__d),null!=t.componentDidCatch&&(t.componentDidCatch(n,i||{}),r=t.__d),r)return t.__E=t}catch(l){n=l}throw n}},u=0,i=function(n){return null!=n&&void 0===n.constructor},d.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=s({},this.state),\"function\"==typeof n&&(n=n(s({},u),this.props)),n&&s(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),b(this))},d.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),b(this))},d.prototype.render=p,t=[],g.__r=0,r=0;export{P as render,S as hydrate,h as createElement,h,p as Fragment,y as createRef,i as isValidElement,d as Component,q as cloneElement,B as createContext,x as toChildArray,l as options};\n//# sourceMappingURL=preact.module.js.map\n","export type ID = string;\n\nexport function generateUUID(): ID {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","import { generateUUID, ID } from './util/id';\n\nclass Base {\n private readonly _id: ID;\n\n constructor(id?: ID) {\n this._id = id || generateUUID();\n }\n\n get id(): ID {\n return this._id;\n }\n}\n\nexport default Base;\n","export default {\n search: {\n placeholder: 'Type a keyword...',\n },\n sort: {\n sortAsc: 'Sort column ascending',\n sortDesc: 'Sort column descending',\n },\n pagination: {\n previous: 'Previous',\n next: 'Next',\n navigate: (page, pages) => `Page ${page} of ${pages}`,\n page: (page) => `Page ${page}`,\n showing: 'Showing',\n of: 'of',\n to: 'to',\n results: 'results',\n },\n loading: 'Loading...',\n noRecordsFound: 'No matching records found',\n error: 'An error happened while fetching the data',\n};\n","import enUS from './en_US';\ntype MessageFormat = (...args) => string;\ntype Message = string | MessageFormat;\nexport type Language = { [key: string]: Message | Language };\n\nexport class Translator {\n private readonly _language: Language;\n private readonly _defaultLanguage: Language;\n\n constructor(language?: Language) {\n this._language = language;\n this._defaultLanguage = enUS;\n }\n\n /**\n * Tries to split the message with \".\" and find\n * the key in the given language\n *\n * @param message\n * @param lang\n */\n getString(message: string, lang: Language): MessageFormat {\n if (!lang || !message) return null;\n\n const splitted = message.split('.');\n const key = splitted[0];\n\n if (lang[key]) {\n const val = lang[key];\n\n if (typeof val === 'string') {\n return (): string => val;\n } else if (typeof val === 'function') {\n return val;\n } else {\n return this.getString(splitted.slice(1).join('.'), val);\n }\n }\n\n return null;\n }\n\n translate(message: string, ...args): string {\n const translated = this.getString(message, this._language);\n let messageFormat;\n\n if (translated) {\n messageFormat = translated;\n } else {\n messageFormat = this.getString(message, this._defaultLanguage);\n }\n\n if (messageFormat) {\n return messageFormat(...args);\n }\n\n return message;\n }\n}\n\nexport function useTranslator(translator: Translator) {\n return function (message: string, ...args): string {\n return translator.translate(message, ...args);\n };\n}\n","import { Component } from 'preact';\nimport { Config } from '../config';\nimport getConfig from '../util/getConfig';\nimport { useTranslator } from '../i18n/language';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface BaseProps {}\n\nexport abstract class BaseComponent<\n P extends BaseProps = unknown,\n S = unknown,\n> extends Component {\n protected config: Config;\n protected _: (message: string, ...args) => string;\n\n constructor(props: P, context: any) {\n super(props, context);\n this.config = getConfig(context);\n\n if (this.config) {\n this._ = useTranslator(this.config.translator);\n }\n }\n}\n\nexport interface BaseComponent

{\n new (props: P, context?: any): Component

;\n}\n","import { Context } from 'preact';\nimport { Config } from '../config';\n\n/**\n * This is a hack to get the current global config from Preact context.\n * My assumption is that we only need one global context which is the ConfigContext\n *\n * @param context\n */\nexport default function getConfig(context: {\n [key: string]: Context;\n}): Config {\n if (!context) return null;\n\n const keys = Object.keys(context);\n\n if (keys.length) {\n // TODO: can we use a better way to capture and return the Config context?\n const ctx: any = context[keys[0]];\n return ctx.props.value;\n }\n\n return null;\n}\n","import { h } from 'preact';\n\nimport { BaseComponent, BaseProps } from './base';\n\nexport interface HTMLContentProps extends BaseProps {\n content: string;\n parentElement?: string;\n}\n\nexport class HTMLElement extends BaseComponent {\n static defaultProps = {\n parentElement: 'span',\n };\n\n render() {\n return h(this.props.parentElement, {\n dangerouslySetInnerHTML: { __html: this.props.content },\n });\n }\n}\n","import { h, VNode } from 'preact';\nimport { HTMLElement } from '../view/htmlElement';\n\nexport function decode(content: string): string {\n const value = new DOMParser().parseFromString(content, 'text/html');\n return value.documentElement.textContent;\n}\n\nexport function html(content: string, parentElement?: string): VNode {\n return h(HTMLElement, { content: content, parentElement: parentElement });\n}\n","// The order of enum items define the processing order of the processor type\n// e.g. Extractor = 0 will be processed before Transformer = 1\nimport { generateUUID, ID } from '../util/id';\nimport { EventEmitter } from '../util/eventEmitter';\n\nexport enum ProcessorType {\n Initiator,\n ServerFilter,\n ServerSort,\n ServerLimit,\n Extractor,\n Transformer,\n Filter,\n Sort,\n Limit,\n}\n\ninterface PipelineProcessorEvents {\n propsUpdated: (processor: PipelineProcessor) => void;\n beforeProcess: (...args) => void;\n afterProcess: (...args) => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface PipelineProcessorProps {}\n\nexport abstract class PipelineProcessor<\n T,\n P extends Partial,\n> extends EventEmitter> {\n public readonly id: ID;\n private readonly _props: P;\n\n abstract get type(): ProcessorType;\n protected abstract _process(...args): T | Promise;\n protected validateProps?(...args): void;\n\n constructor(props?: Partial

) {\n super();\n\n this._props = {} as P;\n this.id = generateUUID();\n\n if (props) this.setProps(props);\n }\n\n /**\n * process is used to call beforeProcess and afterProcess callbacks\n * This function is just a wrapper that calls _process()\n *\n * @param args\n */\n process(...args): T | Promise {\n if (this.validateProps instanceof Function) {\n this.validateProps(...args);\n }\n\n this.emit('beforeProcess', ...args);\n const result = this._process(...args);\n this.emit('afterProcess', ...args);\n return result;\n }\n\n setProps(props: Partial

): this {\n Object.assign(this._props, props);\n this.emit('propsUpdated', this);\n return this;\n }\n\n get props(): P {\n return this._props;\n }\n}\n","import Base from './base';\nimport { TCell } from './types';\nimport { html } from './util/html';\nimport { ComponentChild } from 'preact';\n\nclass Cell extends Base {\n // because a Cell is a subset of TCell type\n public data: number | string | boolean | ComponentChild;\n\n constructor(data: TCell) {\n super();\n\n this.update(data);\n }\n\n private cast(data: TCell): number | string | boolean | ComponentChild {\n if (data instanceof HTMLElement) {\n return html(data.outerHTML);\n }\n\n return data;\n }\n\n /**\n * Updates the Cell's data\n *\n * @param data\n */\n public update(data: TCell): Cell {\n this.data = this.cast(data);\n return this;\n }\n}\n\nexport default Cell;\n","import Cell from './cell';\nimport Base from './base';\nimport { TCell } from './types';\n\nclass Row extends Base {\n private _cells: Cell[];\n\n constructor(cells?: Cell[]) {\n super();\n\n this.cells = cells || [];\n }\n\n public cell(index: number): Cell {\n return this._cells[index];\n }\n\n public get cells(): Cell[] {\n return this._cells;\n }\n\n public set cells(cells: Cell[]) {\n this._cells = cells;\n }\n\n public toArray(): TCell[] {\n return this.cells.map((cell) => cell.data);\n }\n\n /**\n * Creates a new Row from an array of Cell(s)\n * This method generates a new ID for the Row and all nested elements\n *\n * @param cells\n * @returns Row\n */\n static fromCells(cells: Cell[]): Row {\n return new Row(cells.map((cell) => new Cell(cell.data)));\n }\n\n get length(): number {\n return this.cells.length;\n }\n}\n\nexport default Row;\n","import Base from './base';\nimport Row from './row';\nimport Cell from './cell';\nimport { OneDArray, TCell, TwoDArray } from './types';\nimport { oneDtoTwoD } from './util/array';\n\nclass Tabular extends Base {\n private _rows: Row[];\n private _length: number;\n\n constructor(rows?: Row[] | Row) {\n super();\n\n if (rows instanceof Array) {\n this.rows = rows;\n } else if (rows instanceof Row) {\n this.rows = [rows];\n } else {\n this.rows = [];\n }\n }\n\n get rows(): Row[] {\n return this._rows;\n }\n\n set rows(rows: Row[]) {\n this._rows = rows;\n }\n\n get length(): number {\n return this._length || this.rows.length;\n }\n\n // we want to sent the length when storage is ServerStorage\n set length(len: number) {\n this._length = len;\n }\n\n public toArray(): TCell[][] {\n return this.rows.map((row) => row.toArray());\n }\n\n /**\n * Creates a new Tabular from an array of Row(s)\n * This method generates a new ID for the Tabular and all nested elements\n *\n * @param rows\n * @returns Tabular\n */\n static fromRows(rows: Row[]): Tabular {\n return new Tabular(rows.map((row) => Row.fromCells(row.cells)));\n }\n\n /**\n * Creates a new Tabular from a 2D array\n * This method generates a new ID for the Tabular and all nested elements\n *\n * @param data\n * @returns Tabular\n */\n static fromArray(\n data: OneDArray | TwoDArray,\n ): Tabular {\n data = oneDtoTwoD(data);\n\n return new Tabular(\n data.map((row) => new Row(row.map((cell) => new Cell(cell)))),\n );\n }\n}\n\nexport default Tabular;\n","import { OneDArray, TwoDArray } from '../types';\n\nexport function oneDtoTwoD(data: OneDArray | TwoDArray): TwoDArray {\n if (data[0] && !(data[0] instanceof Array)) {\n return [data] as TwoDArray;\n }\n\n return data as TwoDArray;\n}\n\nexport function flatten(arrays: TwoDArray): OneDArray {\n return arrays.reduce((prev, x) => prev.concat(x), []);\n}\n","type EventArgs = [T] extends [(...args: infer U) => any]\n ? U\n : [T] extends [void]\n ? []\n : [T];\n\n/**\n * Example:\n *\n * export interface BaseEvents {\n * SET_STATE: (component: BaseComponent, state: S) => void;\n * }\n */\n\nexport interface EventEmitter {\n addListener(\n event: EventName,\n listener: (...args: EventArgs) => void,\n ): EventEmitter;\n\n on(\n event: EventName,\n listener: (...args: EventArgs) => void,\n ): EventEmitter;\n\n off(\n event: EventName,\n listener: (...args: EventArgs) => void,\n ): EventEmitter;\n\n emit(\n event: EventName,\n ...args: EventArgs\n ): boolean;\n}\n\nexport class EventEmitter {\n private callbacks: { [event: string]: ((...args) => void)[] };\n\n // because we are using EventEmitter as a mixin and the\n // constructor won't be called by the applyMixins function\n // see src/base.ts and src/util/applyMixin.ts\n private init(event?: string): void {\n if (!this.callbacks) {\n this.callbacks = {};\n }\n\n if (event && !this.callbacks[event]) {\n this.callbacks[event] = [];\n }\n }\n\n on(\n event: EventName,\n listener: (...args: EventArgs) => void,\n ): EventEmitter {\n this.init(event as string);\n this.callbacks[event as string].push(listener);\n return this;\n }\n\n off(\n event: EventName,\n listener: (...args: EventArgs) => void,\n ): EventEmitter {\n const eventName = event as string;\n\n this.init();\n\n if (!this.callbacks[eventName] || this.callbacks[eventName].length === 0) {\n // there is no callbacks with this key\n return this;\n }\n\n this.callbacks[eventName] = this.callbacks[eventName].filter(\n (value) => value != listener,\n );\n\n return this;\n }\n\n emit(\n event: EventName,\n ...args: EventArgs\n ): boolean {\n const eventName = event as string;\n\n this.init(eventName);\n\n if (this.callbacks[eventName].length > 0) {\n this.callbacks[eventName].forEach((value) => value(...args));\n return true;\n }\n\n return false;\n }\n}\n","import search from '../../operator/search';\nimport Tabular from '../../tabular';\nimport {\n PipelineProcessor,\n PipelineProcessorProps,\n ProcessorType,\n} from '../processor';\nimport { OneDArray, TCell, TColumn } from '../../types';\n\ninterface GlobalSearchFilterProps extends PipelineProcessorProps {\n keyword: string;\n columns: OneDArray;\n ignoreHiddenColumns: boolean;\n selector?: (cell: TCell, rowIndex: number, cellIndex: number) => string;\n}\n\nclass GlobalSearchFilter extends PipelineProcessor<\n Tabular,\n GlobalSearchFilterProps\n> {\n get type(): ProcessorType {\n return ProcessorType.Filter;\n }\n\n _process(data: Tabular): Tabular {\n if (this.props.keyword) {\n return search(\n String(this.props.keyword).trim(),\n this.props.columns,\n this.props.ignoreHiddenColumns,\n data,\n this.props.selector,\n );\n }\n\n return data;\n }\n}\n\nexport default GlobalSearchFilter;\n","import Tabular from '../tabular';\nimport { VNode } from 'preact';\nimport { HTMLContentProps } from '../view/htmlElement';\nimport { OneDArray, TCell, TColumn } from '../types';\n\nexport default function (\n keyword: string,\n columns: OneDArray,\n ignoreHiddenColumns: boolean,\n tabular: Tabular,\n selector?: (cell: TCell, rowIndex: number, cellIndex: number) => string,\n): Tabular {\n // escape special regex chars\n keyword = keyword.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n\n return new Tabular(\n tabular.rows.filter((row, rowIndex) =>\n row.cells.some((cell, cellIndex) => {\n if (!cell) {\n return false;\n }\n\n if (ignoreHiddenColumns) {\n if (\n columns &&\n columns[cellIndex] &&\n typeof columns[cellIndex] === 'object'\n ) {\n const typedColumn = columns[cellIndex] as TColumn;\n if (typedColumn.hidden) {\n return false;\n }\n }\n }\n\n let data = '';\n\n if (typeof selector === 'function') {\n data = selector(cell.data, rowIndex, cellIndex);\n } else if (typeof cell.data === 'object') {\n // HTMLContent element\n const element = cell.data as VNode;\n if (element && element.props && element.props.content) {\n // TODO: we should only search in the content of the element. props.content is the entire HTML element\n data = element.props.content;\n }\n } else {\n // primitive types\n data = String(cell.data);\n }\n\n return new RegExp(keyword, 'gi').test(data);\n }),\n ),\n );\n}\n","export function className(...args: string[]): string {\n const prefix = 'gridjs';\n\n return `${prefix}${args.reduce(\n (prev: string, cur: string) => `${prev}-${cur}`,\n '',\n )}`;\n}\n\nexport function classJoin(...classNames: string[]): string {\n return (\n classNames\n .filter((x) => x)\n .reduce((className, prev) => `${className || ''} ${prev}`, '')\n .trim() || null\n );\n}\n","import { BaseComponent, BaseProps } from './view/base';\nimport { Component, ComponentProps, Fragment, h } from 'preact';\nimport log from './util/log';\n\n/**\n * BaseProps for all plugins\n */\nexport interface PluginBaseProps {\n plugin: Plugin;\n}\n\n/**\n * BaseComponent for all plugins\n */\nexport abstract class PluginBaseComponent<\n P extends PluginBaseProps = any,\n S = unknown,\n> extends BaseComponent {}\n\nexport interface PluginBaseComponentCtor<\n P extends PluginBaseProps = any,\n S = unknown,\n> {\n new (props: P, context?: any): Component;\n}\n\nexport enum PluginPosition {\n Header,\n Footer,\n Cell,\n}\n\nexport interface Plugin {\n id: string;\n position: PluginPosition;\n component: T;\n props?: Partial>;\n order?: number;\n}\n\nexport class PluginManager {\n private readonly plugins: Plugin[];\n\n constructor() {\n this.plugins = [];\n }\n\n get(id: string): Plugin | null {\n const plugins = this.plugins.filter((p) => p.id === id);\n\n if (plugins.length > 0) {\n return plugins[0];\n }\n\n return null;\n }\n\n add(plugin: Plugin): this {\n if (!plugin.id) {\n log.error('Plugin ID cannot be empty');\n return this;\n }\n\n if (this.get(plugin.id) !== null) {\n log.error(`Duplicate plugin ID: ${plugin.id}`);\n return this;\n }\n\n this.plugins.push(plugin);\n return this;\n }\n\n remove(id: string): this {\n this.plugins.splice(this.plugins.indexOf(this.get(id)), 1);\n return this;\n }\n\n list(\n position?: PluginPosition,\n ): Plugin[] {\n let plugins: Plugin[];\n\n if (position != null || position != undefined) {\n plugins = this.plugins.filter((p) => p.position === position);\n } else {\n plugins = this.plugins;\n }\n\n return plugins.sort((a, b) => a.order - b.order);\n }\n}\n\nexport interface PluginRendererProps extends BaseProps {\n props?: any;\n // to render a single plugin\n pluginId?: string;\n // to render all plugins in this PluginPosition\n position?: PluginPosition;\n}\n\nexport class PluginRenderer extends BaseComponent {\n render() {\n if (this.props.pluginId) {\n // render a single plugin\n const plugin = this.config.plugin.get(this.props.pluginId);\n\n if (!plugin) return null;\n\n return h(\n Fragment,\n {},\n h(plugin.component, {\n plugin: plugin,\n ...plugin.props,\n ...this.props.props,\n }),\n );\n } else if (this.props.position !== undefined) {\n // render using a specific plugin position\n return h(\n Fragment,\n {},\n this.config.plugin\n .list(this.props.position)\n .map((p) =>\n h(p.component, { plugin: p, ...p.props, ...this.props.props }),\n ),\n );\n }\n\n return null;\n }\n}\n","import { EventEmitter } from '../../util/eventEmitter';\nimport Dispatcher from '../../util/dispatcher';\n\ninterface BaseStoreEvents {\n updated: (newState: STATE, prevState?: STATE) => void;\n}\n\nexport default abstract class BaseStore extends EventEmitter<\n BaseStoreEvents\n> {\n private _state: STATE;\n protected readonly dispatcher: Dispatcher;\n\n constructor(dispatcher: Dispatcher) {\n super();\n this.dispatcher = dispatcher;\n this._state = this.getInitialState();\n dispatcher.register(this._handle.bind(this));\n }\n\n abstract handle(type: K, payload: ACTIONS[K]): void;\n abstract getInitialState(): STATE;\n\n private _handle(action): void {\n this.handle(action.type, action.payload);\n }\n\n setState(newState: STATE): void {\n const prevState = this._state;\n this._state = newState;\n this.emit('updated', newState, prevState);\n }\n\n get state(): STATE {\n return this._state;\n }\n}\n","import BaseStore from '../../base/store';\nimport { SearchActionsType } from './actions';\n\nexport type SearchStoreState = { keyword: string | null };\n\nexport class SearchStore extends BaseStore<\n SearchStoreState,\n SearchActionsType\n> {\n getInitialState(): SearchStoreState {\n return { keyword: null };\n }\n\n handle(type, payload): void {\n if (type === 'SEARCH_KEYWORD') {\n const { keyword } = payload;\n this.search(keyword);\n }\n }\n\n private search(keyword: string): void {\n this.setState({ keyword: keyword });\n }\n}\n","import Dispatcher from '../../util/dispatcher';\n\nexport abstract class BaseActions {\n private readonly dispatcher: Dispatcher;\n\n constructor(dispatcher: Dispatcher) {\n this.dispatcher = dispatcher;\n }\n\n protected dispatch(\n type: K,\n payload: ACTIONS[K],\n ): void {\n this.dispatcher.dispatch({\n type: type,\n payload: payload,\n });\n }\n}\n","import { BaseActions } from '../../base/actions';\n\nexport interface SearchActionsType {\n SEARCH_KEYWORD: {\n keyword: string;\n };\n}\n\nexport class SearchActions extends BaseActions {\n search(keyword: string): void {\n this.dispatch('SEARCH_KEYWORD', {\n keyword: keyword,\n });\n }\n}\n","import {\n PipelineProcessor,\n PipelineProcessorProps,\n ProcessorType,\n} from '../processor';\nimport { ServerStorageOptions } from '../../storage/server';\n\ninterface ServerGlobalSearchFilterProps extends PipelineProcessorProps {\n keyword?: string;\n url?: (prevUrl: string, keyword: string) => string;\n body?: (prevBody: BodyInit, keyword: string) => BodyInit;\n}\n\nclass ServerGlobalSearchFilter extends PipelineProcessor<\n ServerStorageOptions,\n ServerGlobalSearchFilterProps\n> {\n get type(): ProcessorType {\n return ProcessorType.ServerFilter;\n }\n\n _process(options?: ServerStorageOptions): ServerStorageOptions {\n if (!this.props.keyword) return options;\n\n const updates = {};\n\n if (this.props.url) {\n updates['url'] = this.props.url(options.url, this.props.keyword);\n }\n\n if (this.props.body) {\n updates['body'] = this.props.body(options.body, this.props.keyword);\n }\n\n return {\n ...options,\n ...updates,\n };\n }\n}\n\nexport default ServerGlobalSearchFilter;\n","/**\n * Centralized logging lib\n *\n * This class needs some improvements but so far it has been used to have a coherent way to log\n */\nclass Logger {\n private format(message: string, type: string): string {\n return `[Grid.js] [${type.toUpperCase()}]: ${message}`;\n }\n\n error(message: string, throwException = false): void {\n const msg = this.format(message, 'error');\n\n if (throwException) {\n throw Error(msg);\n } else {\n console.error(msg);\n }\n }\n\n warn(message: string): void {\n console.warn(this.format(message, 'warn'));\n }\n\n info(message: string): void {\n console.info(this.format(message, 'info'));\n }\n}\n\nexport default new Logger();\n","import { h } from 'preact';\nimport GlobalSearchFilter from '../../../pipeline/filter/globalSearch';\nimport { classJoin, className } from '../../../util/className';\nimport { SearchStore, SearchStoreState } from './store';\nimport { SearchActions } from './actions';\nimport ServerGlobalSearchFilter from '../../../pipeline/filter/serverGlobalSearch';\nimport { debounce } from '../../../util/debounce';\nimport { TCell } from '../../../types';\nimport { PluginBaseComponent, PluginBaseProps } from '../../../plugin';\n\nexport interface SearchConfig {\n keyword?: string;\n enabled?: boolean;\n ignoreHiddenColumns?: boolean;\n debounceTimeout?: number;\n selector?: (cell: TCell, rowIndex: number, cellIndex: number) => string;\n server?: {\n url?: (prevUrl: string, keyword: string) => string;\n body?: (prevBody: BodyInit, keyword: string) => BodyInit;\n };\n}\n\nexport class Search extends PluginBaseComponent<\n SearchConfig & PluginBaseProps\n> {\n private readonly searchProcessor:\n | GlobalSearchFilter\n | ServerGlobalSearchFilter;\n private readonly actions: SearchActions;\n private readonly store: SearchStore;\n private readonly storeUpdatedFn: (...args) => void;\n\n static defaultProps = {\n debounceTimeout: 250,\n };\n\n constructor(props, context) {\n super(props, context);\n\n this.actions = new SearchActions(this.config.dispatcher);\n this.store = new SearchStore(this.config.dispatcher);\n const { enabled, keyword } = props;\n\n if (enabled) {\n // initial search\n if (keyword) this.actions.search(keyword);\n\n this.storeUpdatedFn = this.storeUpdated.bind(this);\n this.store.on('updated', this.storeUpdatedFn);\n\n let searchProcessor;\n if (props.server) {\n searchProcessor = new ServerGlobalSearchFilter({\n keyword: props.keyword,\n url: props.server.url,\n body: props.server.body,\n });\n } else {\n searchProcessor = new GlobalSearchFilter({\n keyword: props.keyword,\n columns: this.config.header && this.config.header.columns,\n ignoreHiddenColumns:\n props.ignoreHiddenColumns ||\n props.ignoreHiddenColumns === undefined,\n selector: props.selector,\n });\n }\n\n this.searchProcessor = searchProcessor;\n\n // adds a new processor to the pipeline\n this.config.pipeline.register(searchProcessor);\n }\n }\n\n componentWillUnmount(): void {\n this.config.pipeline.unregister(this.searchProcessor);\n this.store.off('updated', this.storeUpdatedFn);\n }\n\n private storeUpdated(state: SearchStoreState): void {\n // updates the processor state\n this.searchProcessor.setProps({\n keyword: state.keyword,\n });\n }\n\n private onChange(event): void {\n const keyword = event.target.value;\n this.actions.search(keyword);\n }\n\n render() {\n if (!this.props.enabled) return null;\n\n let onInput = this.onChange.bind(this);\n\n // add debounce to input only if it's a server-side search\n if (this.searchProcessor instanceof ServerGlobalSearchFilter) {\n onInput = debounce(onInput, this.props.debounceTimeout);\n }\n\n return (\n \n \n \n );\n }\n}\n","export const debounce = any>(\n func: F,\n waitFor: number,\n) => {\n let timeout;\n\n return (...args: Parameters): Promise> =>\n new Promise((resolve) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(() => resolve(func(...args)), waitFor);\n });\n};\n","import Tabular from '../../tabular';\nimport {\n PipelineProcessor,\n PipelineProcessorProps,\n ProcessorType,\n} from '../processor';\n\ninterface PaginationLimitProps extends PipelineProcessorProps {\n page: number;\n limit: number;\n}\n\nclass PaginationLimit extends PipelineProcessor {\n protected validateProps(): void {\n if (isNaN(Number(this.props.limit)) || isNaN(Number(this.props.page))) {\n throw Error('Invalid parameters passed');\n }\n }\n\n get type(): ProcessorType {\n return ProcessorType.Limit;\n }\n\n protected _process(data: Tabular): Tabular {\n const page = this.props.page;\n const start = page * this.props.limit;\n const end = (page + 1) * this.props.limit;\n\n return new Tabular(data.rows.slice(start, end));\n }\n}\n\nexport default PaginationLimit;\n","import {\n PipelineProcessor,\n PipelineProcessorProps,\n ProcessorType,\n} from '../processor';\nimport { ServerStorageOptions } from '../../storage/server';\n\ninterface ServerPaginationLimitProps extends PipelineProcessorProps {\n page: number;\n limit: number;\n url?: (prevUrl: string, page: number, limit: number) => string;\n body?: (prevBody: BodyInit, page: number, limit: number) => BodyInit;\n}\n\nclass ServerPaginationLimit extends PipelineProcessor<\n ServerStorageOptions,\n ServerPaginationLimitProps\n> {\n get type(): ProcessorType {\n return ProcessorType.ServerLimit;\n }\n\n _process(options?: ServerStorageOptions): ServerStorageOptions {\n const updates = {};\n\n if (this.props.url) {\n updates['url'] = this.props.url(\n options.url,\n this.props.page,\n this.props.limit,\n );\n }\n\n if (this.props.body) {\n updates['body'] = this.props.body(\n options.body,\n this.props.page,\n this.props.limit,\n );\n }\n\n return {\n ...options,\n ...updates,\n };\n }\n}\n\nexport default ServerPaginationLimit;\n","import { h, Fragment } from 'preact';\nimport PaginationLimit from '../../pipeline/limit/pagination';\nimport { classJoin, className } from '../../util/className';\nimport ServerPaginationLimit from '../../pipeline/limit/serverPagination';\nimport Tabular from '../../tabular';\nimport { PipelineProcessor } from '../../pipeline/processor';\nimport { PluginBaseComponent, PluginBaseProps } from '../../plugin';\n\ninterface PaginationState {\n page: number;\n limit?: number;\n total: number;\n}\n\nexport interface PaginationConfig {\n enabled: boolean;\n limit?: number;\n page?: number;\n summary?: boolean;\n nextButton?: boolean;\n prevButton?: boolean;\n buttonsCount?: number;\n resetPageOnUpdate?: boolean;\n server?: {\n url?: (prevUrl: string, page: number, limit: number) => string;\n body?: (prevBody: BodyInit, page: number, limit: number) => BodyInit;\n };\n}\n\nexport class Pagination extends PluginBaseComponent<\n PluginBaseProps & PaginationConfig,\n PaginationState\n> {\n private processor: PaginationLimit | ServerPaginationLimit;\n private onUpdateFn: (processor: PipelineProcessor) => void;\n private setTotalFromTabularFn: (tabular: Tabular) => void;\n\n static defaultProps = {\n summary: true,\n nextButton: true,\n prevButton: true,\n buttonsCount: 3,\n limit: 10,\n resetPageOnUpdate: true,\n };\n\n constructor(props, context) {\n super(props, context);\n\n this.state = {\n limit: props.limit,\n page: props.page || 0,\n total: 0,\n };\n }\n\n componentWillMount(): void {\n if (this.props.enabled) {\n let processor;\n\n this.setTotalFromTabularFn = this.setTotalFromTabular.bind(this);\n\n if (this.props.server) {\n processor = new ServerPaginationLimit({\n limit: this.state.limit,\n page: this.state.page,\n url: this.props.server.url,\n body: this.props.server.body,\n });\n\n this.config.pipeline.on('afterProcess', this.setTotalFromTabularFn);\n } else {\n processor = new PaginationLimit({\n limit: this.state.limit,\n page: this.state.page,\n });\n\n // Pagination (all Limit processors) is the last step in the pipeline\n // and we assume that at this stage, we have the rows that we care about.\n // Let's grab the rows before processing Pagination and set total number of rows\n processor.on('beforeProcess', this.setTotalFromTabularFn);\n }\n\n this.processor = processor;\n this.config.pipeline.register(processor);\n\n // we need to make sure that the state is set\n // to the default props when an error happens\n this.config.pipeline.on('error', () => {\n this.setState({\n total: 0,\n page: 0,\n });\n });\n }\n }\n\n private setTotalFromTabular(tabular: Tabular): void {\n this.setTotal(tabular.length);\n }\n\n private onUpdate(processor): void {\n // this is to ensure that the current page is set to 0\n // when a processor is updated for some reason\n if (this.props.resetPageOnUpdate && processor !== this.processor) {\n this.setPage(0);\n }\n }\n\n componentDidMount(): void {\n this.onUpdateFn = this.onUpdate.bind(this);\n this.config.pipeline.on('updated', this.onUpdateFn);\n }\n\n componentWillUnmount() {\n this.config.pipeline.unregister(this.processor);\n this.config.pipeline.off('updated', this.onUpdateFn);\n }\n\n private get pages(): number {\n return Math.ceil(this.state.total / this.state.limit);\n }\n\n private setPage(page: number): void {\n if (page >= this.pages || page < 0 || page === this.state.page) {\n return null;\n }\n\n this.setState({\n page: page,\n });\n\n this.processor.setProps({\n page: page,\n });\n }\n\n private setTotal(totalRows: number): void {\n // to set the correct total number of rows\n // when running in-memory operations\n this.setState({\n total: totalRows,\n });\n }\n\n renderPages() {\n if (this.props.buttonsCount <= 0) {\n return null;\n }\n\n // how many pagination buttons to render?\n const maxCount: number = Math.min(this.pages, this.props.buttonsCount);\n\n let pagePivot = Math.min(this.state.page, Math.floor(maxCount / 2));\n if (this.state.page + Math.floor(maxCount / 2) >= this.pages) {\n pagePivot = maxCount - (this.pages - this.state.page);\n }\n\n return (\n \n {this.pages > maxCount && this.state.page - pagePivot > 0 && (\n \n \n {this._('1')}\n \n \n ...\n \n \n )}\n\n {Array.from(Array(maxCount).keys())\n .map((i) => this.state.page + (i - pagePivot))\n .map((i) => (\n \n {this._(`${i + 1}`)}\n \n ))}\n\n {this.pages > maxCount && this.pages > this.state.page + pagePivot + 1 && (\n \n \n ...\n \n \n {this._(`${this.pages}`)}\n \n \n )}\n \n );\n }\n\n renderSummary() {\n return (\n \n {this.props.summary && this.state.total > 0 && (\n \n {this._('pagination.showing')}{' '}\n {this._(`${this.state.page * this.state.limit + 1}`)}{' '}\n {this._('pagination.to')}{' '}\n \n {this._(\n `${Math.min(\n (this.state.page + 1) * this.state.limit,\n this.state.total,\n )}`,\n )}\n {' '}\n {this._('pagination.of')} {this._(`${this.state.total}`)}{' '}\n {this._('pagination.results')}\n \n )}\n \n );\n }\n\n render() {\n if (!this.props.enabled) return null;\n\n return (\n \n {this.renderSummary()}\n\n

\n {this.props.prevButton && (\n \n {this._('pagination.previous')}\n \n )}\n\n {this.renderPages()}\n\n {this.props.nextButton && (\n \n {this._('pagination.next')}\n \n )}\n
\n \n );\n }\n}\n","export function width(width: string | number, containerWidth?: number): number {\n if (typeof width == 'string') {\n if (width.indexOf('%') > -1) {\n return (containerWidth / 100) * parseInt(width, 10);\n } else {\n return parseInt(width, 10);\n }\n }\n\n return width;\n}\n\nexport function px(width: number): string {\n if (!width) return '';\n return `${Math.floor(width)}px`;\n}\n","import { Component, h, RefObject } from 'preact';\nimport { BaseComponent, BaseProps } from '../base';\nimport { className } from '../../util/className';\n\ninterface ShadowTableProps extends BaseProps {\n tableRef?: RefObject;\n}\n\n/**\n * ShadowTable renders a hidden table and is used to calculate the column's width\n * when autoWidth option is enabled\n */\nexport class ShadowTable extends BaseComponent {\n private tableElement: HTMLTableElement;\n private tableClassName: string;\n private tableStyle: string;\n\n constructor(props, context) {\n super(props, context);\n\n const tableRef = this.props.tableRef;\n this.tableElement = tableRef.current.base.cloneNode(\n true,\n ) as HTMLTableElement;\n\n this.tableElement.style.position = 'absolute';\n this.tableElement.style.width = '100%';\n this.tableElement.style.zIndex = '-2147483640';\n this.tableElement.style.visibility = 'hidden';\n\n this.tableClassName = this.tableElement.className;\n this.tableStyle = this.tableElement.style.cssText;\n }\n\n public widths(): { [columnId: string]: { minWidth: number; width: number } } {\n this.tableElement.className = `${this.tableClassName} ${className(\n 'shadowTable',\n )}`;\n\n this.tableElement.style.tableLayout = 'auto';\n this.tableElement.style.width = 'auto';\n this.tableElement.style.padding = '0';\n this.tableElement.style.margin = '0';\n this.tableElement.style.border = 'none';\n this.tableElement.style.outline = 'none';\n\n let obj = Array.from(\n this.base.parentNode.querySelectorAll('thead th'),\n ).reduce((prev, current) => {\n current.style.width = `${current.clientWidth}px`;\n\n return {\n [current.getAttribute('data-column-id')]: {\n minWidth: current.clientWidth,\n },\n ...prev,\n };\n }, {});\n\n this.tableElement.className = this.tableClassName;\n this.tableElement.style.cssText = this.tableStyle;\n this.tableElement.style.tableLayout = 'auto';\n\n obj = Array.from(\n this.base.parentNode.querySelectorAll('thead th'),\n ).reduce((prev, current) => {\n prev[current.getAttribute('data-column-id')]['width'] =\n current.clientWidth;\n\n return prev;\n }, obj);\n\n return obj;\n }\n\n render() {\n if (this.props.tableRef.current) {\n return (\n {\n nodeElement && nodeElement.appendChild(this.tableElement);\n }}\n />\n );\n }\n\n return null;\n }\n}\n","export function camelCase(str: string): string {\n if (!str) return '';\n\n const words = str.split(' ');\n\n // do not convert strings that are already in camelCase format\n if (words.length === 1 && /([a-z][A-Z])+/g.test(str)) {\n return str;\n }\n\n return words\n .map(function (word, index) {\n // if it is the first word, lowercase all the chars\n if (index == 0) {\n return word.toLowerCase();\n }\n\n // if it is not the first word only upper case the first char and lowercase the rest\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n })\n .join('');\n}\n","import { OneDArray, TColumn, TwoDArray } from './types';\nimport Base from './base';\nimport { Config, UserConfig } from './config';\nimport { px, width } from './util/width';\nimport { ShadowTable } from './view/table/shadow';\nimport {\n Component,\n ComponentChild,\n createRef,\n h,\n isValidElement,\n RefObject,\n render,\n} from 'preact';\nimport { camelCase } from './util/string';\nimport { flatten } from './util/array';\nimport logger from './util/log';\nimport { PluginPosition } from './plugin';\n\nclass Header extends Base {\n private _columns: OneDArray;\n\n constructor() {\n super();\n\n this._columns = [];\n }\n\n get columns(): OneDArray {\n return this._columns;\n }\n\n set columns(columns) {\n this._columns = columns;\n }\n\n get visibleColumns(): OneDArray {\n return this._columns.filter((c) => !c.hidden);\n }\n\n /**\n * Tries to automatically adjust the width of columns based on:\n * - Header cell content\n * - Cell content of the first row\n * - Cell content of the last row\n *\n * @param config\n */\n adjustWidth(config: Config): this {\n const container: Element = config.container;\n const tableRef: RefObject = config.tableRef;\n const tempRef: RefObject = config.tempRef;\n const autoWidth = config.tempRef || true;\n\n if (!container) {\n // we can't calculate the width because the container\n // is unknown at this stage\n return this;\n }\n\n // pixels\n const containerWidth = container.clientWidth;\n\n // let's create a shadow table with the first 10 rows of the data\n // and let the browser to render the table with table-layout: auto\n // no padding, margin or border to get the minimum space required\n // to render columns. One the table is rendered and widths are known,\n // we unmount the shadow table from the DOM and set the correct width\n const shadowTable = createRef();\n let widths = {};\n\n if (tableRef.current && autoWidth) {\n // render a ShadowTable with the first 10 rows\n const el = h(ShadowTable, {\n tableRef: tableRef,\n });\n el.ref = shadowTable;\n\n render(el, tempRef.current);\n\n widths = shadowTable.current.widths();\n }\n\n for (const column of flatten(Header.tabularFormat(this.columns))) {\n // because we don't want to set the width of parent THs\n if (column.columns && column.columns.length > 0) {\n continue;\n }\n\n if (!column.width && autoWidth) {\n // tries to find the corresponding cell\n // from the ShadowTable and set the correct width\n\n if (column.id in widths) {\n // because a column can be hidden, too\n column.width = px(widths[column.id]['width']);\n column.minWidth = px(widths[column.id]['minWidth']);\n }\n } else {\n // column width is already defined\n // sets the column with based on the width of its container\n column.width = px(width(column.width, containerWidth));\n }\n }\n\n if (tableRef.current && autoWidth) {\n // unmount the shadow table from temp\n render(null, tempRef.current);\n }\n\n return this;\n }\n\n private setSort(userConfig: UserConfig, columns?: OneDArray): void {\n const cols = columns || this.columns || [];\n\n for (const column of cols) {\n // sorting can only be enabled for columns without any children\n if (column.columns && column.columns.length > 0) {\n column.sort = {\n enabled: false,\n };\n }\n\n // implicit userConfig.sort flag\n if (column.sort === undefined && userConfig.sort) {\n column.sort = {\n enabled: true,\n };\n }\n\n // false, null, etc.\n if (!column.sort) {\n column.sort = {\n enabled: false,\n };\n } else if (typeof column.sort === 'object') {\n column.sort = {\n enabled: true,\n ...column.sort,\n };\n }\n\n if (column.columns) {\n this.setSort(userConfig, column.columns);\n }\n }\n }\n\n private setFixedHeader(\n userConfig: UserConfig,\n columns?: OneDArray,\n ): void {\n const cols = columns || this.columns || [];\n\n for (const column of cols) {\n if (column.fixedHeader === undefined) {\n column.fixedHeader = userConfig.fixedHeader;\n }\n\n if (column.columns) {\n this.setFixedHeader(userConfig, column.columns);\n }\n }\n }\n\n private setResizable(\n userConfig: UserConfig,\n columns?: OneDArray,\n ): void {\n const cols = columns || this.columns || [];\n\n for (const column of cols) {\n if (column.resizable === undefined) {\n column.resizable = userConfig.resizable;\n }\n\n if (column.columns) {\n this.setResizable(userConfig, column.columns);\n }\n }\n }\n\n private setID(columns?: OneDArray): void {\n const cols = columns || this.columns || [];\n\n for (const column of cols) {\n if (!column.id && typeof column.name === 'string') {\n // let's guess the column ID if it's undefined\n column.id = camelCase(column.name);\n }\n\n if (!column.id) {\n logger.error(\n `Could not find a valid ID for one of the columns. Make sure a valid \"id\" is set for all columns.`,\n );\n }\n\n // nested columns\n if (column.columns) {\n this.setID(column.columns);\n }\n }\n }\n\n private populatePlugins(\n userConfig: UserConfig,\n columns: OneDArray,\n ): void {\n // populate the cell columns\n for (const column of columns) {\n if (column.plugin !== undefined) {\n userConfig.plugin.add({\n id: column.id,\n props: {},\n ...column.plugin,\n position: PluginPosition.Cell,\n });\n }\n }\n }\n\n static fromColumns(\n columns: OneDArray,\n ): Header {\n const header = new Header();\n\n for (const column of columns) {\n if (typeof column === 'string' || isValidElement(column)) {\n header.columns.push({\n name: column,\n });\n } else if (typeof column === 'object') {\n const typedColumn = column as TColumn;\n\n if (typedColumn.columns) {\n typedColumn.columns = Header.fromColumns(typedColumn.columns).columns;\n }\n\n // because the data for that cell is null\n // if we are trying to render a plugin\n if (typeof typedColumn.plugin === 'object') {\n if (typedColumn.data === undefined) {\n typedColumn.data = null;\n }\n }\n\n // TColumn type\n header.columns.push(column as TColumn);\n }\n }\n\n return header;\n }\n\n static fromUserConfig(userConfig: UserConfig): Header | null {\n const header = new Header();\n\n // TODO: this part needs some refactoring\n if (userConfig.from) {\n header.columns = Header.fromHTMLTable(userConfig.from).columns;\n } else if (userConfig.columns) {\n header.columns = Header.fromColumns(userConfig.columns).columns;\n } else if (\n userConfig.data &&\n typeof userConfig.data[0] === 'object' &&\n !(userConfig.data[0] instanceof Array)\n ) {\n // if data[0] is an object but not an Array\n // used for when a JSON payload is provided\n header.columns = Object.keys(userConfig.data[0]).map((name) => {\n return { name: name };\n });\n }\n\n if (header.columns.length) {\n header.setID();\n header.setSort(userConfig);\n header.setFixedHeader(userConfig);\n header.setResizable(userConfig);\n header.populatePlugins(userConfig, header.columns);\n return header;\n }\n\n return null;\n }\n\n static fromHTMLTable(element: HTMLElement): Header {\n const header = new Header();\n const thead = element.querySelector('thead');\n const ths = thead.querySelectorAll('th');\n\n for (const th of ths as any) {\n header.columns.push({\n name: th.innerHTML,\n width: th.width,\n });\n }\n\n return header;\n }\n\n /**\n * Converts the tree-like format of Header to a tabular format\n *\n * Example:\n *\n * H1\n * H1-H1\n * H1-H2\n * H2\n * H2-H1\n *\n * becomes:\n * [\n * [H1, H2],\n * [H1-H1, H1-H2, H2-H1]\n * ]\n *\n * @param columns\n */\n static tabularFormat(columns: OneDArray): TwoDArray {\n let result: TwoDArray = [];\n const cols = columns || [];\n let nextRow = [];\n\n if (cols && cols.length) {\n result.push(cols);\n\n for (const col of cols) {\n if (col.columns && col.columns.length) {\n nextRow = nextRow.concat(col.columns);\n }\n }\n\n if (nextRow.length) {\n result = result.concat(this.tabularFormat(nextRow));\n }\n }\n\n return result;\n }\n\n /**\n * Returns an array of leaf columns (last columns in the tree)\n *\n * @param columns\n */\n static leafColumns(columns: OneDArray): OneDArray {\n let result: OneDArray = [];\n const cols = columns || [];\n\n if (cols && cols.length) {\n for (const col of cols) {\n if (!col.columns || col.columns.length === 0) {\n result.push(col);\n }\n\n if (col.columns) {\n result = result.concat(this.leafColumns(col.columns));\n }\n }\n }\n\n return result;\n }\n\n /**\n * Returns the maximum depth of a column tree\n * @param column\n */\n static maximumDepth(column: TColumn): number {\n return this.tabularFormat([column]).length - 1;\n }\n}\n\nexport default Header;\n","const _prefix = 'ID_';\n\n/**\n * This class is mostly based on Flux's Dispatcher by Facebook\n * https://github.com/facebook/flux/blob/master/src/Dispatcher.js\n */\nexport default class Dispatcher {\n _callbacks: { [key: string]: (payload: TPayload) => void };\n _isDispatching: boolean;\n _isHandled: { [key: string]: boolean };\n _isPending: { [key: string]: boolean };\n _lastID: number;\n _pendingPayload: TPayload;\n\n constructor() {\n this._callbacks = {};\n this._isDispatching = false;\n this._isHandled = {};\n this._isPending = {};\n this._lastID = 1;\n }\n /**\n * Registers a callback to be invoked with every dispatched payload. Returns\n * a token that can be used with `waitFor()`.\n */\n register(callback: (payload: TPayload) => void): string {\n const id = _prefix + this._lastID++;\n this._callbacks[id] = callback;\n return id;\n }\n /**\n * Removes a callback based on its token.\n */\n unregister(id: string): void {\n if (!this._callbacks[id]) {\n throw Error(\n `Dispatcher.unregister(...): ${id} does not map to a registered callback.`,\n );\n }\n\n delete this._callbacks[id];\n }\n /**\n * Waits for the callbacks specified to be invoked before continuing execution\n * of the current callback. This method should only be used by a callback in\n * response to a dispatched payload.\n */\n waitFor(ids: Array): void {\n if (!this._isDispatching) {\n throw Error(\n 'Dispatcher.waitFor(...): Must be invoked while dispatching.',\n );\n }\n\n for (let ii = 0; ii < ids.length; ii++) {\n const id = ids[ii];\n if (this._isPending[id]) {\n if (!this._isHandled[id]) {\n throw Error(`Dispatcher.waitFor(...): Circular dependency detected while ' +\n 'waiting for ${id}.`);\n }\n continue;\n }\n if (!this._callbacks[id]) {\n throw Error(\n `Dispatcher.waitFor(...): ${id} does not map to a registered callback.`,\n );\n }\n\n this._invokeCallback(id);\n }\n }\n /**\n * Dispatches a payload to all registered callbacks.\n */\n dispatch(payload: TPayload): void {\n if (this._isDispatching) {\n throw Error(\n 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.',\n );\n }\n\n this._startDispatching(payload);\n try {\n for (const id in this._callbacks) {\n if (this._isPending[id]) {\n continue;\n }\n this._invokeCallback(id);\n }\n } finally {\n this._stopDispatching();\n }\n }\n /**\n * Is this Dispatcher currently dispatching.\n */\n isDispatching(): boolean {\n return this._isDispatching;\n }\n /**\n * Call the callback stored with the given id. Also do some internal\n * bookkeeping.\n *\n * @internal\n */\n private _invokeCallback(id: string): void {\n this._isPending[id] = true;\n this._callbacks[id](this._pendingPayload);\n this._isHandled[id] = true;\n }\n /**\n * Set up bookkeeping needed when dispatching.\n *\n * @internal\n */\n private _startDispatching(payload: TPayload): void {\n for (const id in this._callbacks) {\n this._isPending[id] = false;\n this._isHandled[id] = false;\n }\n this._pendingPayload = payload;\n this._isDispatching = true;\n }\n /**\n * Clear bookkeeping used for dispatching.\n *\n * @internal\n */\n private _stopDispatching(): void {\n delete this._pendingPayload;\n this._isDispatching = false;\n }\n}\n","/**\n * Base Storage class. All storage implementation must inherit this class\n */\nimport { TData } from '../types';\n\nabstract class Storage {\n /**\n * Returns all rows based on ...args\n * @param args\n */\n abstract get(...args): Promise;\n\n /**\n * To set all rows\n *\n * @param data\n */\n set?(data: I | ((...args) => void)): this;\n}\n\nexport interface StorageResponse {\n data: TData;\n total: number;\n}\n\nexport default Storage;\n","import Storage, { StorageResponse } from './storage';\nimport { TData } from '../types';\n\nclass MemoryStorage extends Storage {\n private data: (() => TData) | (() => Promise);\n\n constructor(data: TData | (() => TData) | (() => Promise)) {\n super();\n this.set(data);\n }\n\n public async get(): Promise {\n const data = await this.data();\n\n return {\n data: data,\n total: data.length,\n };\n }\n\n public set(data: TData | (() => TData) | (() => Promise)): this {\n if (data instanceof Array) {\n this.data = (): TData => data;\n } else if (data instanceof Function) {\n this.data = data;\n }\n\n return this;\n }\n}\n\nexport default MemoryStorage;\n","import Storage, { StorageResponse } from './storage';\nimport log from '../util/log';\n\nexport interface ServerStorageOptions extends RequestInit {\n url: string;\n // to format the data and columns\n then?: (data: any) => any[][];\n // to handle the response from the server. `handle` will\n // be called first and then `then` callback will be invoked\n // The purpose of this function is to handle the behaviour\n // of server and either reject and resolve the initial response\n // before calling the `then` function\n handle?: (response: Response) => Promise;\n total?: (data: any) => number;\n // to bypass the current implementation of ServerStorage and process the\n // request manually (e.g. when user wants to connect their own SDK/HTTP Client)\n data?: (opts: ServerStorageOptions) => Promise;\n}\n\nclass ServerStorage extends Storage {\n private readonly options: ServerStorageOptions;\n\n constructor(options: ServerStorageOptions) {\n super();\n this.options = options;\n }\n\n private handler(response: Response): Promise {\n if (typeof this.options.handle === 'function') {\n return this.options.handle(response);\n }\n\n if (response.ok) {\n return response.json();\n } else {\n log.error(\n `Could not fetch data: ${response.status} - ${response.statusText}`,\n true,\n );\n return null;\n }\n }\n\n public get(options?: ServerStorageOptions): Promise {\n // this.options is the initial config object\n // options is the runtime config passed by the pipeline (e.g. search component)\n const opts = {\n ...this.options,\n ...options,\n };\n\n // if `options.data` is provided, the current ServerStorage\n // implementation will be ignored and we let options.data to\n // handle the request. Useful when HTTP client needs to be\n // replaced with something else\n if (typeof opts.data === 'function') {\n return opts.data(opts);\n }\n\n return fetch(opts.url, opts)\n .then(this.handler.bind(this))\n .then((res) => {\n return {\n data: opts.then(res),\n total: typeof opts.total === 'function' ? opts.total(res) : undefined,\n };\n });\n }\n}\n\nexport default ServerStorage;\n","import { UserConfig } from '../config';\nimport MemoryStorage from './memory';\nimport Storage from './storage';\nimport ServerStorage from './server';\nimport log from '../util/log';\nimport { decode, html } from '../util/html';\n\nclass StorageUtils {\n /**\n * Accepts the userConfig dict and tries to guess and return a Storage type\n *\n * @param userConfig\n */\n public static createFromUserConfig(userConfig: UserConfig): Storage {\n let storage = null;\n // `data` array is provided\n if (userConfig.data) {\n storage = new MemoryStorage(userConfig.data);\n }\n\n if (userConfig.from) {\n storage = new MemoryStorage(this.tableElementToArray(userConfig.from));\n // remove the source table element from the DOM\n userConfig.from.style.display = 'none';\n }\n\n if (userConfig.server) {\n storage = new ServerStorage(userConfig.server);\n }\n\n if (!storage) {\n log.error('Could not determine the storage type', true);\n }\n\n return storage;\n }\n\n /**\n * Accepts a HTML table element and converts it into a 2D array of data\n *\n * TODO: This function can be a step in the pipeline: Convert Table -> Load into a memory storage -> ...\n *\n * @param element\n */\n static tableElementToArray(element: HTMLElement): any[][] {\n const arr = [];\n const tbody = element.querySelector('tbody');\n const rows = tbody.querySelectorAll('tr');\n\n for (const row of rows as any) {\n const cells: HTMLElement[] = row.querySelectorAll('td');\n const parsedRow = [];\n\n for (const cell of cells) {\n // try to capture a TD with single text element first\n if (\n cell.childNodes.length === 1 &&\n cell.childNodes[0].nodeType === Node.TEXT_NODE\n ) {\n parsedRow.push(decode(cell.innerHTML));\n } else {\n parsedRow.push(html(cell.innerHTML));\n }\n }\n\n arr.push(parsedRow);\n }\n\n return arr;\n }\n}\n\nexport default StorageUtils;\n","import { PipelineProcessor, ProcessorType } from './processor';\nimport { ID } from '../util/id';\nimport log from '../util/log';\nimport { EventEmitter } from '../util/eventEmitter';\n\ninterface PipelineEvents {\n /**\n * Generic updated event. Triggers the callback function when the pipeline\n * is updated, including when a new processor is registered, a processor's props\n * get updated, etc.\n */\n updated: (processor: PipelineProcessor) => void;\n /**\n * Triggers the callback function when a new\n * processor is registered successfully\n */\n afterRegister: () => void;\n /**\n * Triggers the callback when a registered\n * processor's property is updated\n */\n propsUpdated: () => void;\n /**\n * Triggers the callback function when the pipeline\n * is fully processed, before returning the results\n *\n * afterProcess will not be called if there is an\n * error in the pipeline (i.e a step throw an Error)\n */\n afterProcess: (prev: T) => void;\n /**\n * Triggers the callback function when the pipeline\n * fails to process all steps or at least one step\n * throws an Error\n */\n error: (prev: T) => void;\n}\n\nclass Pipeline extends EventEmitter> {\n // available steps for this pipeline\n private readonly _steps: Map[]> =\n new Map[]>();\n // used to cache the results of processors using their id field\n private cache: Map = new Map();\n // keeps the index of the last updated processor in the registered\n // processors list and will be used to invalidate the cache\n // -1 means all new processors should be processed\n private lastProcessorIndexUpdated = -1;\n\n constructor(steps?: PipelineProcessor[]) {\n super();\n\n if (steps) {\n steps.forEach((step) => this.register(step));\n }\n }\n\n /**\n * Clears the `cache` array\n */\n clearCache(): void {\n this.cache = new Map();\n this.lastProcessorIndexUpdated = -1;\n }\n\n /**\n * Registers a new processor\n *\n * @param processor\n * @param priority\n */\n register(\n processor: PipelineProcessor,\n priority: number = null,\n ): void {\n if (processor.type === null) {\n throw Error('Processor type is not defined');\n }\n\n // binding the propsUpdated callback to the Pipeline\n processor.on('propsUpdated', this.processorPropsUpdated.bind(this));\n\n this.addProcessorByPriority(processor, priority);\n this.afterRegistered(processor);\n }\n\n /**\n * Removes a processor from the list\n *\n * @param processor\n */\n unregister(processor: PipelineProcessor): void {\n if (!processor) return;\n\n const subSteps = this._steps.get(processor.type);\n\n if (subSteps && subSteps.length) {\n this._steps.set(\n processor.type,\n subSteps.filter((proc) => proc != processor),\n );\n this.emit('updated', processor);\n }\n }\n\n /**\n * Registers a new processor\n *\n * @param processor\n * @param priority\n */\n private addProcessorByPriority(\n processor: PipelineProcessor,\n priority: number,\n ): void {\n let subSteps = this._steps.get(processor.type);\n\n if (!subSteps) {\n const newSubStep = [];\n this._steps.set(processor.type, newSubStep);\n subSteps = newSubStep;\n }\n\n if (priority === null || priority < 0) {\n subSteps.push(processor);\n } else {\n if (!subSteps[priority]) {\n // slot is empty\n subSteps[priority] = processor;\n } else {\n // slot is NOT empty\n const first = subSteps.slice(0, priority - 1);\n const second = subSteps.slice(priority + 1);\n\n this._steps.set(processor.type, first.concat(processor).concat(second));\n }\n }\n }\n\n /**\n * Flattens the _steps Map and returns a list of steps with their correct priorities\n */\n get steps(): PipelineProcessor[] {\n let steps: PipelineProcessor[] = [];\n\n for (const type of this.getSortedProcessorTypes()) {\n const subSteps = this._steps.get(type);\n\n if (subSteps && subSteps.length) {\n steps = steps.concat(subSteps);\n }\n }\n\n // to remove any undefined elements\n return steps.filter((s) => s);\n }\n\n /**\n * Accepts ProcessType and returns an array of the registered processes\n * with the give type\n *\n * @param type\n */\n getStepsByType(type: ProcessorType): PipelineProcessor[] {\n return this.steps.filter((process) => process.type === type);\n }\n\n /**\n * Returns a list of ProcessorType according to their priority\n */\n private getSortedProcessorTypes(): ProcessorType[] {\n return Object.keys(ProcessorType)\n .filter((key) => !isNaN(Number(key)))\n .map((key) => Number(key));\n }\n\n /**\n * Runs all registered processors based on their correct priority\n * and returns the final output after running all steps\n *\n * @param data\n */\n async process(data?: T): Promise {\n const lastProcessorIndexUpdated = this.lastProcessorIndexUpdated;\n const steps = this.steps;\n\n let prev = data;\n\n try {\n for (const processor of steps) {\n const processorIndex = this.findProcessorIndexByID(processor.id);\n\n if (processorIndex >= lastProcessorIndexUpdated) {\n // we should execute process() here since the last\n // updated processor was before \"processor\".\n // This is to ensure that we always have correct and up to date\n // data from processors and also to skip them when necessary\n prev = await processor.process(prev);\n this.cache.set(processor.id, prev);\n } else {\n // cached results already exist\n prev = this.cache.get(processor.id);\n }\n }\n } catch (e) {\n log.error(e);\n // trigger the onError callback\n this.emit('error', prev);\n\n // rethrow\n throw e;\n }\n\n // means the pipeline is up to date\n this.lastProcessorIndexUpdated = steps.length;\n\n // triggers the afterProcess callbacks with the results\n this.emit('afterProcess', prev);\n\n return prev;\n }\n\n /**\n * Returns the registered processor's index in _steps array\n *\n * @param processorID\n */\n private findProcessorIndexByID(processorID: ID): number {\n return this.steps.findIndex((p) => p.id == processorID);\n }\n\n /**\n * Sets the last updates processors index locally\n * This is used to invalid or skip a processor in\n * the process() method\n */\n private setLastProcessorIndex(processor: PipelineProcessor): void {\n const processorIndex = this.findProcessorIndexByID(processor.id);\n\n if (this.lastProcessorIndexUpdated > processorIndex) {\n this.lastProcessorIndexUpdated = processorIndex;\n }\n }\n\n private processorPropsUpdated(processor): void {\n this.setLastProcessorIndex(processor);\n this.emit('propsUpdated');\n this.emit('updated', processor);\n }\n\n private afterRegistered(processor): void {\n this.setLastProcessorIndex(processor);\n this.emit('afterRegister');\n this.emit('updated', processor);\n }\n}\n\nexport default Pipeline;\n","import { ComponentChild } from 'preact';\nimport Row from './row';\nimport { SortConfig } from './view/plugin/sort/sort';\nimport { JSXInternal } from 'preact/src/jsx';\nimport { Plugin } from './plugin';\n\nexport type ProtoExtends = U & Omit;\n\nexport type OneDArray = T[];\nexport type TwoDArray = T[][];\n\n/**\n * Table cell types\n */\nexport type TCell = number | string | boolean | ComponentChild | HTMLElement;\n// Array of Arrays\nexport type TDataArrayRow = OneDArray;\nexport type TDataArray = OneDArray;\n// Array of Objects\nexport type TDataObjectRow = { [key: string]: TCell };\nexport type TDataObject = OneDArray;\n// (Array of Arrays) and (Array of Objects)\nexport type TData = TDataArray | TDataObject;\n\n// Table header cell type\nexport interface TColumn {\n id?: string;\n // default data for all columns\n data?: ((row: TDataArrayRow | TDataObjectRow) => TCell) | TCell;\n // column label\n name?: string | ComponentChild;\n plugin?: Plugin;\n // column width\n width?: string;\n minWidth?: string;\n sort?: SortConfig;\n columns?: OneDArray;\n fixedHeader?: boolean;\n resizable?: boolean;\n hidden?: boolean;\n formatter?: (cell: TCell, row: Row, column: TColumn) => ComponentChild;\n // HTML attributes to be added to all cells and header of this column\n attributes?:\n | ((\n // this is null when `attributes` is called for a th\n cell: TCell | null,\n row: Row | null,\n column: TColumn,\n ) => JSXInternal.HTMLAttributes)\n | JSXInternal.HTMLAttributes;\n}\n\n// Comparator function for the sorting plugin\nexport type Comparator = (a: T, b: T) => number;\n\nexport interface TColumnSort {\n index: number;\n // 1 ascending, -1 descending\n direction?: 1 | -1;\n}\n\n// container status\nexport enum Status {\n Init,\n Loading,\n Loaded,\n Rendered,\n Error,\n}\n\nexport type CSSDeclaration = {\n [key: string]: string | number;\n};\n","import Storage, { StorageResponse } from '../../storage/storage';\nimport {\n PipelineProcessor,\n PipelineProcessorProps,\n ProcessorType,\n} from '../processor';\n\ninterface StorageExtractorProps extends PipelineProcessorProps {\n storage: Storage;\n}\n\nclass StorageExtractor extends PipelineProcessor<\n Promise,\n StorageExtractorProps\n> {\n get type(): ProcessorType {\n return ProcessorType.Extractor;\n }\n\n async _process(opts: any): Promise {\n return await this.props.storage.get(opts);\n }\n}\n\nexport default StorageExtractor;\n","import { PipelineProcessor, ProcessorType } from '../processor';\nimport Tabular from '../../tabular';\nimport { ArrayResponse } from './storageResponseToArray';\n\nclass ArrayToTabularTransformer extends PipelineProcessor<\n Tabular,\n Record\n> {\n get type(): ProcessorType {\n return ProcessorType.Transformer;\n }\n\n _process(arrayResponse: ArrayResponse): Tabular {\n const tabular = Tabular.fromArray(arrayResponse.data);\n\n // for server-side storage\n tabular.length = arrayResponse.total;\n\n return tabular;\n }\n}\n\nexport default ArrayToTabularTransformer;\n","import {\n PipelineProcessor,\n PipelineProcessorProps,\n ProcessorType,\n} from '../processor';\nimport { ServerStorageOptions } from '../../storage/server';\n\ninterface ServerInitiatorProps extends PipelineProcessorProps {\n serverStorageOptions: ServerStorageOptions;\n}\n\nclass ServerInitiator extends PipelineProcessor<\n ServerStorageOptions,\n ServerInitiatorProps\n> {\n get type(): ProcessorType {\n return ProcessorType.Initiator;\n }\n\n _process(): ServerStorageOptions {\n return Object.entries(this.props.serverStorageOptions)\n .filter(([_, val]) => typeof val !== 'function')\n .reduce(\n (acc, [k, v]) => ({ ...acc, [k]: v }),\n {},\n ) as ServerStorageOptions;\n }\n}\n\nexport default ServerInitiator;\n","import {\n PipelineProcessor,\n PipelineProcessorProps,\n ProcessorType,\n} from '../processor';\nimport { StorageResponse } from '../../storage/storage';\nimport { TCell, TData, TDataArray, TDataObject, TwoDArray } from '../../types';\nimport Header from '../../header';\nimport logger from '../../util/log';\n\nexport interface ArrayResponse {\n data: TwoDArray;\n total: number;\n}\n\ninterface StorageResponseToArrayTransformerProps\n extends PipelineProcessorProps {\n header: Header;\n}\n\nclass StorageResponseToArrayTransformer extends PipelineProcessor<\n ArrayResponse,\n StorageResponseToArrayTransformerProps\n> {\n get type(): ProcessorType {\n return ProcessorType.Transformer;\n }\n\n private castData(data: TData): TwoDArray {\n if (!data || !data.length) {\n return [];\n }\n\n if (!this.props.header || !this.props.header.columns) {\n return data as TwoDArray;\n }\n\n const columns = Header.leafColumns(this.props.header.columns);\n\n // if it's a 2d array already\n if (data[0] instanceof Array) {\n return (data as TDataArray).map((row) => {\n let pad = 0;\n\n return columns.map((column, i) => {\n // default `data` is provided for this column\n if (column.data !== undefined) {\n pad++;\n\n if (typeof column.data === 'function') {\n return column.data(row);\n } else {\n return column.data;\n }\n }\n\n return row[i - pad];\n });\n });\n }\n\n // if it's an array of objects (but not array of arrays, i.e JSON payload)\n if (typeof data[0] === 'object' && !(data[0] instanceof Array)) {\n return (data as TDataObject).map((row) =>\n columns.map((column, i) => {\n if (column.data !== undefined) {\n if (typeof column.data === 'function') {\n return column.data(row);\n } else {\n return column.data;\n }\n } else if (column.id) {\n return row[column.id];\n } else {\n logger.error(`Could not find the correct cell for column at position ${i}.\n Make sure either 'id' or 'selector' is defined for all columns.`);\n return null;\n }\n }),\n );\n }\n\n return [];\n }\n\n _process(storageResponse: StorageResponse): ArrayResponse {\n return {\n data: this.castData(storageResponse.data),\n total: storageResponse.total,\n };\n }\n}\n\nexport default StorageResponseToArrayTransformer;\n","import { Config } from '../config';\nimport Pipeline from './pipeline';\nimport Tabular from '../tabular';\nimport StorageExtractor from './extractor/storage';\nimport ArrayToTabularTransformer from './transformer/arrayToTabular';\nimport ServerStorage from '../storage/server';\nimport ServerInitiator from './initiator/server';\nimport StorageResponseToArrayTransformer from './transformer/storageResponseToArray';\n\nclass PipelineUtils {\n static createFromConfig(config: Config): Pipeline {\n const pipeline = new Pipeline();\n\n if (config.storage instanceof ServerStorage) {\n pipeline.register(\n new ServerInitiator({\n serverStorageOptions: config.server,\n }),\n );\n }\n\n pipeline.register(new StorageExtractor({ storage: config.storage }));\n pipeline.register(\n new StorageResponseToArrayTransformer({ header: config.header }),\n );\n pipeline.register(new ArrayToTabularTransformer());\n\n return pipeline;\n }\n}\n\nexport default PipelineUtils;\n","import {\n CSSDeclaration,\n OneDArray,\n ProtoExtends,\n TColumn,\n TData,\n} from './types';\nimport Storage from './storage/storage';\nimport Pipeline from './pipeline/pipeline';\nimport Tabular from './tabular';\nimport { Search, SearchConfig } from './view/plugin/search/search';\nimport { Pagination, PaginationConfig } from './view/plugin/pagination';\nimport Header from './header';\nimport { ServerStorageOptions } from './storage/server';\nimport Dispatcher from './util/dispatcher';\nimport { GenericSortConfig } from './view/plugin/sort/sort';\nimport { Language, Translator } from './i18n/language';\nimport { Component, ComponentChild, createRef, RefObject } from 'preact';\nimport StorageUtils from './storage/storageUtils';\nimport PipelineUtils from './pipeline/pipelineUtils';\nimport { EventEmitter } from './util/eventEmitter';\nimport { GridEvents } from './events';\nimport { PluginManager, PluginPosition, Plugin } from './plugin';\nimport Grid from './grid';\n\n// Config type used internally\nexport interface Config {\n // a reference to the current Grid.js instance\n instance: Grid;\n eventEmitter: EventEmitter;\n dispatcher: Dispatcher;\n plugin: PluginManager;\n /** container element that is used to mount the Grid.js to */\n // TODO: change this to an element reference\n container?: Element;\n /** pointer to the main table element */\n tableRef?: RefObject;\n /** gridjs-temp div which is used internally */\n tempRef?: RefObject;\n data?: TData | (() => TData) | (() => Promise);\n server?: ServerStorageOptions;\n header?: Header;\n /** to parse a HTML table and load the data */\n from: HTMLElement;\n storage: Storage;\n pipeline: Pipeline;\n /** to automatically calculate the columns width */\n autoWidth: boolean;\n /** sets the width of the container and table */\n width: string;\n /** sets the height of the table */\n height: string;\n pagination: PaginationConfig;\n sort: GenericSortConfig;\n translator: Translator;\n style?: Partial<{\n table: CSSDeclaration;\n td: CSSDeclaration;\n th: CSSDeclaration;\n container: CSSDeclaration;\n header: CSSDeclaration;\n footer: CSSDeclaration;\n }>;\n className?: Partial<{\n table: string;\n th: string;\n thead: string;\n tbody: string;\n tr: string;\n td: string;\n container: string;\n footer: string;\n header: string;\n search: string;\n sort: string;\n pagination: string;\n paginationSummary: string;\n paginationButton: string;\n paginationButtonNext: string;\n paginationButtonCurrent: string;\n paginationButtonPrev: string;\n loading: string;\n notfound: string;\n error: string;\n }>;\n}\n\n// Config type used by the consumers\ninterface UserConfigExtend {\n /** fixes the table header to the top of the table */\n fixedHeader: boolean;\n /** Resizable columns? */\n resizable: boolean;\n columns: OneDArray;\n search: SearchConfig | boolean;\n pagination: PaginationConfig | boolean;\n // implicit option to enable the sort plugin globally\n sort: GenericSortConfig | boolean;\n language: Language;\n plugins?: Plugin[];\n}\n\nexport type UserConfig = ProtoExtends<\n Partial,\n Partial\n>;\n\nexport class Config {\n // this is the config file passed by the user\n // we need this for Config.update()\n private _userConfig: UserConfig;\n\n constructor(config?: Partial) {\n Object.assign(this, {\n ...Config.defaultConfig(),\n ...config,\n });\n\n this._userConfig = {};\n }\n\n /**\n * Assigns `updatedConfig` keys to the current config file\n *\n * @param updatedConfig\n */\n assign(updatedConfig: Partial): Config {\n for (const key of Object.keys(updatedConfig)) {\n // because we don't want to update the _userConfig cache\n if (key === '_userConfig') continue;\n\n this[key] = updatedConfig[key];\n }\n\n return this;\n }\n\n /**\n * Updates the config from a UserConfig\n *\n * @param userConfig\n */\n update(userConfig: Partial): Config {\n if (!userConfig) return this;\n\n this._userConfig = {\n ...this._userConfig,\n ...userConfig,\n };\n\n this.assign(Config.fromUserConfig(this._userConfig));\n\n return this;\n }\n\n static defaultConfig(): Config {\n return {\n plugin: new PluginManager(),\n dispatcher: new Dispatcher(),\n tableRef: createRef(),\n tempRef: createRef(),\n width: '100%',\n height: 'auto',\n autoWidth: true,\n style: {},\n className: {},\n } as Config;\n }\n\n static fromUserConfig(userConfig: UserConfig): Config {\n const config = new Config(userConfig as Config);\n\n // to set the initial _userConfig object\n config._userConfig = userConfig;\n\n // Sort\n if (typeof userConfig.sort === 'boolean' && userConfig.sort) {\n config.assign({\n sort: {\n multiColumn: true,\n },\n });\n }\n\n // Header\n config.assign({\n header: Header.fromUserConfig(config),\n });\n\n config.assign({\n storage: StorageUtils.createFromUserConfig(userConfig),\n });\n\n config.assign({\n pipeline: PipelineUtils.createFromConfig(config),\n });\n\n // Translator\n config.assign({\n translator: new Translator(userConfig.language),\n });\n\n // Search\n config.plugin.add({\n id: 'search',\n position: PluginPosition.Header,\n component: Search,\n props: {\n enabled:\n userConfig.search === true || userConfig.search instanceof Object,\n ...(userConfig.search as SearchConfig),\n },\n });\n\n // Pagination\n config.plugin.add({\n id: 'pagination',\n position: PluginPosition.Footer,\n component: Pagination,\n props: {\n enabled:\n userConfig.pagination === true ||\n userConfig.pagination instanceof Object,\n ...(userConfig.pagination as PaginationConfig),\n },\n });\n\n // Additional plugins\n if (userConfig.plugins) {\n userConfig.plugins.forEach((p) => config.plugin.add(p));\n }\n\n return config;\n }\n}\n","import{options as n}from\"preact\";var t,r,u,i,o=0,c=[],f=[],e=n.__b,a=n.__r,v=n.diffed,l=n.__c,m=n.unmount;function d(t,u){n.__h&&n.__h(r,t,o||u),o=0;var i=r.__H||(r.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({__V:f}),i.__[t]}function p(n){return o=1,y(z,n)}function y(n,u,i){var o=d(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):z(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){r.u=!0;var c=r.shouldComponentUpdate;r.shouldComponentUpdate=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!!i&&(!c||c.call(this,n,t,r))}}return o.__N||o.__}function h(u,i){var o=d(t++,3);!n.__s&&w(o.__H,i)&&(o.__=u,o.i=i,r.__H.__h.push(o))}function s(u,i){var o=d(t++,4);!n.__s&&w(o.__H,i)&&(o.__=u,o.i=i,r.__h.push(o))}function _(n){return o=5,F(function(){return{current:n}},[])}function A(n,t,r){o=6,s(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function F(n,r){var u=d(t++,7);return w(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function T(n,t){return o=8,F(function(){return n},t)}function q(n){var u=r.context[n.__c],i=d(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function x(t,r){n.useDebugValue&&n.useDebugValue(r?r(t):t)}function V(n){var u=d(t++,10),i=p();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n){u.__&&u.__(n),i[1](n)}),[i[0],function(){i[1](void 0)}]}function b(){for(var t;t=c.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(j),t.__H.__h.forEach(k),t.__H.__h=[]}catch(r){t.__H.__h=[],n.__e(r,t.__v)}}n.__b=function(n){r=null,e&&e(n)},n.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=f,n.__N=n.i=void 0})):(i.__h.forEach(j),i.__h.forEach(k),i.__h=[])),u=r},n.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==c.push(o)&&i===n.requestAnimationFrame||((i=n.requestAnimationFrame)||function(n){var t,r=function(){clearTimeout(u),g&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);g&&(t=requestAnimationFrame(r))})(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==f&&(n.__=n.__V),n.i=void 0,n.__V=f})),u=r=null},n.__c=function(t,r){r.some(function(t){try{t.__h.forEach(j),t.__h=t.__h.filter(function(n){return!n.__||k(n)})}catch(u){r.some(function(n){n.__h&&(n.__h=[])}),r=[],n.__e(u,t.__v)}}),l&&l(t,r)},n.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{j(n)}catch(n){r=n}}),r&&n.__e(r,u.__v))};var g=\"function\"==typeof requestAnimationFrame;function j(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function k(n){var t=r;n.__c=n.__(),r=t}function w(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function z(n,t){return\"function\"==typeof t?t(n):t}export{p as useState,y as useReducer,h as useEffect,s as useLayoutEffect,_ as useRef,A as useImperativeHandle,F as useMemo,T as useCallback,q as useContext,x as useDebugValue,V as useErrorBoundary};\n//# sourceMappingURL=hooks.module.js.map\n","import { ComponentChild, h, JSX } from 'preact';\n\nimport Cell from '../../cell';\nimport { BaseComponent, BaseProps } from '../base';\nimport { classJoin, className } from '../../util/className';\nimport { CSSDeclaration, TColumn } from '../../types';\nimport Row from '../../row';\nimport { JSXInternal } from 'preact/src/jsx';\nimport { PluginRenderer } from '../../plugin';\n\nexport interface TDProps\n extends BaseProps,\n JSX.HTMLAttributes {\n cell: Cell;\n row?: Row;\n column?: TColumn;\n style?: CSSDeclaration;\n messageCell?: boolean;\n}\n\nexport class TD extends BaseComponent {\n private content(): ComponentChild {\n if (\n this.props.column &&\n typeof this.props.column.formatter === 'function'\n ) {\n return this.props.column.formatter(\n this.props.cell.data,\n this.props.row,\n this.props.column,\n );\n }\n\n if (this.props.column && this.props.column.plugin) {\n return (\n \n );\n }\n\n return this.props.cell.data;\n }\n\n private handleClick(e: JSX.TargetedMouseEvent): void {\n if (this.props.messageCell) return;\n this.config.eventEmitter.emit(\n 'cellClick',\n e,\n this.props.cell,\n this.props.column,\n this.props.row,\n );\n }\n\n private getCustomAttributes(\n column: TColumn | null,\n ): JSXInternal.HTMLAttributes {\n if (!column) return {};\n\n if (typeof column.attributes === 'function') {\n return column.attributes(\n this.props.cell.data,\n this.props.row,\n this.props.column,\n );\n } else {\n return column.attributes;\n }\n }\n\n render() {\n return (\n \n {this.content()}\n \n );\n }\n}\n","import { h, JSX, Fragment, ComponentChildren } from 'preact';\n\nimport Row from '../../row';\nimport Cell from '../../cell';\nimport { BaseComponent, BaseProps } from '../base';\nimport { classJoin, className } from '../../util/className';\nimport { TColumn } from '../../types';\nimport { TD } from './td';\nimport Header from '../../header';\n\nexport interface TRProps extends BaseProps {\n row?: Row;\n header?: Header;\n messageRow?: boolean;\n}\n\nexport class TR extends BaseComponent {\n private getColumn(cellIndex: number): TColumn {\n if (this.props.header) {\n const cols = Header.leafColumns(this.props.header.columns);\n\n if (cols) {\n return cols[cellIndex];\n }\n }\n\n return null;\n }\n\n private handleClick(e: JSX.TargetedMouseEvent): void {\n if (this.props.messageRow) return;\n this.config.eventEmitter.emit('rowClick', e, this.props.row);\n }\n\n private getChildren(): ComponentChildren {\n if (this.props.children) {\n return this.props.children;\n } else {\n return (\n \n {this.props.row.cells.map((cell: Cell, i) => {\n const column = this.getColumn(i);\n\n if (column && column.hidden) return null;\n\n return (\n \n );\n })}\n \n );\n }\n }\n\n render() {\n return (\n \n {this.getChildren()}\n \n );\n }\n}\n","import { h } from 'preact';\n\nimport Cell from '../../cell';\nimport { BaseComponent, BaseProps } from '../base';\nimport { classJoin, className } from '../../util/className';\nimport { TR } from './tr';\nimport { TD } from './td';\n\nexport interface MessageRowProps extends BaseProps {\n message: string;\n colSpan?: number;\n className?: string;\n}\n\nexport class MessageRow extends BaseComponent {\n render() {\n return (\n \n \n \n );\n }\n}\n","import { h } from 'preact';\n\nimport Row from '../../row';\nimport { TR } from './tr';\nimport Tabular from '../../tabular';\nimport { BaseComponent, BaseProps } from '../base';\nimport { classJoin, className } from '../../util/className';\nimport { Status } from '../../types';\nimport Header from '../../header';\nimport { MessageRow } from './messageRow';\n\ninterface TBodyProps extends BaseProps {\n data: Tabular;\n status: Status;\n header?: Header;\n}\n\nexport class TBody extends BaseComponent {\n private headerLength(): number {\n if (this.props.header) {\n return this.props.header.visibleColumns.length;\n }\n return 0;\n }\n\n render() {\n return (\n \n {this.props.data &&\n this.props.data.rows.map((row: Row) => {\n return ;\n })}\n\n {this.props.status === Status.Loading &&\n (!this.props.data || this.props.data.length === 0) && (\n \n )}\n\n {this.props.status === Status.Rendered &&\n this.props.data &&\n this.props.data.length === 0 && (\n \n )}\n\n {this.props.status === Status.Error && (\n \n )}\n \n );\n }\n}\n","import { Comparator, TCell } from '../../types';\nimport Tabular from '../../tabular';\nimport {\n PipelineProcessor,\n PipelineProcessorProps,\n ProcessorType,\n} from '../processor';\nimport Row from '../../row';\nimport log from '../../util/log';\n\ninterface NativeSortProps extends PipelineProcessorProps {\n columns: {\n index: number;\n // 1 ascending, -1 descending\n direction?: 1 | -1;\n compare?: Comparator;\n }[];\n}\n\nclass NativeSort extends PipelineProcessor {\n protected validateProps(): void {\n for (const condition of this.props.columns) {\n if (condition.direction === undefined) {\n condition.direction = 1;\n }\n\n if (condition.direction !== 1 && condition.direction !== -1) {\n log.error(`Invalid sort direction ${condition.direction}`);\n }\n }\n }\n\n get type(): ProcessorType {\n return ProcessorType.Sort;\n }\n\n private compare(cellA: TCell, cellB: TCell): number {\n if (cellA > cellB) {\n return 1;\n } else if (cellA < cellB) {\n return -1;\n }\n\n return 0;\n }\n\n private compareWrapper(a: Row, b: Row): number {\n let cmp = 0;\n\n for (const column of this.props.columns) {\n if (cmp === 0) {\n const cellA = a.cells[column.index].data;\n const cellB = b.cells[column.index].data;\n\n if (typeof column.compare === 'function') {\n cmp |= column.compare(cellA, cellB) * column.direction;\n } else {\n cmp |= this.compare(cellA, cellB) * column.direction;\n }\n } else {\n break;\n }\n }\n\n return cmp;\n }\n\n protected _process(data: Tabular): Tabular {\n const sortedRows = [...data.rows];\n sortedRows.sort(this.compareWrapper.bind(this));\n\n const sorted = new Tabular(sortedRows);\n // we have to set the tabular length manually\n // because of the server-side storage\n sorted.length = data.length;\n\n return sorted;\n }\n}\n\nexport default NativeSort;\n","import BaseStore from '../../base/store';\nimport { SortActionsType } from './actions';\nimport { Comparator, TCell } from '../../../types';\n\nexport type SortStoreState = {\n index: number;\n direction: 1 | -1;\n compare?: Comparator;\n}[];\n\nexport class SortStore extends BaseStore {\n getInitialState(): SortStoreState {\n return [];\n }\n\n handle(type, payload): void {\n if (type === 'SORT_COLUMN') {\n const { index, direction, multi, compare } = payload;\n this.sortColumn(index, direction, multi, compare);\n } else if (type === 'SORT_COLUMN_TOGGLE') {\n const { index, multi, compare } = payload;\n this.sortToggle(index, multi, compare);\n }\n }\n\n private sortToggle(\n index: number,\n multi: boolean,\n compare: Comparator,\n ): void {\n const columns = [...this.state];\n const column = columns.find((x) => x.index === index);\n\n if (!column) {\n this.sortColumn(index, 1, multi, compare);\n } else {\n this.sortColumn(index, column.direction === 1 ? -1 : 1, multi, compare);\n }\n }\n\n private sortColumn(\n index: number,\n direction: 1 | -1,\n multi: boolean,\n compare: Comparator,\n ): void {\n let columns = [...this.state];\n const count = columns.length;\n const column = columns.find((x) => x.index === index);\n const exists = column !== undefined;\n\n let add = false;\n let reset = false;\n let remove = false;\n let update = false;\n\n if (!exists) {\n // the column has not been sorted\n if (count === 0) {\n // the first column to be sorted\n add = true;\n } else if (count > 0 && !multi) {\n // remove the previously sorted column\n // and sort the current column\n add = true;\n reset = true;\n } else if (count > 0 && multi) {\n // multi-sorting\n // sort this column as well\n add = true;\n }\n } else {\n // the column has been sorted before\n if (!multi) {\n // single column sorting\n if (count === 1) {\n update = true;\n } else if (count > 1) {\n // this situation happens when we have already entered\n // multi-sorting mode but then user tries to sort a single column\n reset = true;\n add = true;\n }\n } else {\n // multi sorting\n if (column.direction === -1) {\n // remove the current column from the\n // sorted columns array\n remove = true;\n } else {\n update = true;\n }\n }\n }\n\n if (reset) {\n // resetting the sorted columns\n columns = [];\n }\n\n if (add) {\n columns.push({\n index: index,\n direction: direction,\n compare: compare,\n });\n } else if (update) {\n const index = columns.indexOf(column);\n columns[index].direction = direction;\n } else if (remove) {\n const index = columns.indexOf(column);\n columns.splice(index, 1);\n }\n\n this.setState(columns);\n }\n}\n","import { BaseActions } from '../../base/actions';\nimport { Comparator, TCell } from '../../../types';\n\nexport interface SortActionsType {\n SORT_COLUMN: {\n index: number;\n direction: 1 | -1;\n multi?: boolean;\n compare?: Comparator;\n };\n\n SORT_COLUMN_TOGGLE: {\n index: number;\n multi?: boolean;\n compare?: Comparator;\n };\n}\n\nexport class SortActions extends BaseActions {\n sortColumn(\n index: number,\n direction: 1 | -1,\n multi?: boolean,\n compare?: Comparator,\n ): void {\n this.dispatch('SORT_COLUMN', {\n index: index,\n direction: direction,\n multi: multi,\n compare: compare,\n });\n }\n\n sortToggle(\n index: number,\n multi?: boolean,\n compare?: Comparator,\n ): void {\n this.dispatch('SORT_COLUMN_TOGGLE', {\n index: index,\n multi: multi,\n compare: compare,\n });\n }\n}\n","import {\n PipelineProcessor,\n PipelineProcessorProps,\n ProcessorType,\n} from '../processor';\nimport { ServerStorageOptions } from '../../storage/server';\nimport { TColumnSort } from '../../types';\n\ninterface ServerSortProps extends PipelineProcessorProps {\n columns: TColumnSort[];\n url?: (prevUrl: string, columns: TColumnSort[]) => string;\n body?: (prevBody: BodyInit, columns: TColumnSort[]) => BodyInit;\n}\n\nclass ServerSort extends PipelineProcessor<\n ServerStorageOptions,\n ServerSortProps\n> {\n get type(): ProcessorType {\n return ProcessorType.ServerSort;\n }\n\n _process(options?: ServerStorageOptions): ServerStorageOptions {\n const updates = {};\n\n if (this.props.url) {\n updates['url'] = this.props.url(options.url, this.props.columns);\n }\n\n if (this.props.body) {\n updates['body'] = this.props.body(options.body, this.props.columns);\n }\n\n return {\n ...options,\n ...updates,\n };\n }\n}\n\nexport default ServerSort;\n","import { h, JSX } from 'preact';\n\nimport { BaseComponent, BaseProps } from '../../base';\nimport { classJoin, className } from '../../../util/className';\nimport { ProcessorType } from '../../../pipeline/processor';\nimport NativeSort from '../../../pipeline/sort/native';\nimport { SortStore, SortStoreState } from './store';\nimport { Comparator, TCell, TColumnSort } from '../../../types';\nimport { SortActions } from './actions';\nimport ServerSort from '../../../pipeline/sort/server';\n\n// column specific config\nexport interface SortConfig {\n enabled?: boolean;\n compare?: Comparator;\n}\n\n// generic sort config:\n//\n// Config {\n// sort: GenericSortConfig\n// }\n//\nexport interface GenericSortConfig {\n multiColumn?: boolean;\n server?: {\n url?: (prevUrl: string, columns: TColumnSort[]) => string;\n body?: (prevBody: BodyInit, columns: TColumnSort[]) => BodyInit;\n };\n}\n\nexport interface SortProps extends BaseProps {\n // column index\n index: number;\n}\n\ninterface SortState {\n direction: 1 | -1 | 0;\n}\n\nexport class Sort extends BaseComponent {\n private readonly sortProcessor: NativeSort | ServerSort;\n private readonly actions: SortActions;\n private readonly store: SortStore;\n private readonly updateStateFn: (...args) => void;\n private updateSortProcessorFn: (sortedColumns: SortStoreState) => void;\n\n constructor(props: SortProps & SortConfig, context) {\n super(props, context);\n\n this.actions = new SortActions(this.config.dispatcher);\n this.store = new SortStore(this.config.dispatcher);\n\n if (props.enabled) {\n this.sortProcessor = this.getOrCreateSortProcessor();\n this.updateStateFn = this.updateState.bind(this);\n this.store.on('updated', this.updateStateFn);\n this.state = { direction: 0 };\n }\n }\n\n componentWillUnmount(): void {\n this.config.pipeline.unregister(this.sortProcessor);\n\n this.store.off('updated', this.updateStateFn);\n if (this.updateSortProcessorFn)\n this.store.off('updated', this.updateSortProcessorFn);\n }\n\n /**\n * Sets the internal state of component\n */\n private updateState(): void {\n const currentColumn = this.store.state.find(\n (x) => x.index === this.props.index,\n );\n\n if (!currentColumn) {\n this.setState({\n direction: 0,\n });\n } else {\n this.setState({\n direction: currentColumn.direction,\n });\n }\n }\n\n private updateSortProcessor(sortedColumns: SortStoreState) {\n // updates the Sorting processor\n this.sortProcessor.setProps({\n columns: sortedColumns,\n });\n }\n\n private getOrCreateSortProcessor(): NativeSort {\n let processorType = ProcessorType.Sort;\n\n if (this.config.sort && typeof this.config.sort.server === 'object') {\n processorType = ProcessorType.ServerSort;\n }\n\n const processors = this.config.pipeline.getStepsByType(processorType);\n\n // my assumption is that we only have ONE sorting processor in the\n // entire pipeline and that's why I'm displaying a warning here\n let processor;\n\n // A sort process is already registered\n if (processors.length > 0) {\n processor = processors[0];\n } else {\n // let's create a new sort processor\n\n // this event listener is here because\n // we want to subscribe to the sort store only once\n this.updateSortProcessorFn = this.updateSortProcessor.bind(this);\n this.store.on('updated', this.updateSortProcessorFn);\n\n if (processorType === ProcessorType.ServerSort) {\n processor = new ServerSort({\n columns: this.store.state,\n ...this.config.sort.server,\n });\n } else {\n processor = new NativeSort({\n columns: this.store.state,\n });\n }\n\n this.config.pipeline.register(processor);\n }\n\n return processor;\n }\n\n changeDirection(e: JSX.TargetedMouseEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n // to sort two or more columns at the same time\n this.actions.sortToggle(\n this.props.index,\n e.shiftKey === true && this.config.sort.multiColumn,\n this.props.compare,\n );\n }\n\n render() {\n if (!this.props.enabled) {\n return null;\n }\n\n const direction = this.state.direction;\n let sortClassName = 'neutral';\n\n if (direction === 1) {\n sortClassName = 'asc';\n } else if (direction === -1) {\n sortClassName = 'desc';\n }\n\n return (\n has tabIndex=0\n tabIndex={-1}\n aria-label={this._(`sort.sort${direction === 1 ? 'Desc' : 'Asc'}`)}\n title={this._(`sort.sort${direction === 1 ? 'Desc' : 'Asc'}`)}\n className={classJoin(\n className('sort'),\n className('sort', sortClassName),\n this.config.className.sort,\n )}\n onClick={this.changeDirection.bind(this)}\n />\n );\n }\n}\n","import { h, RefObject } from 'preact';\nimport { classJoin, className } from '../../../util/className';\nimport { BaseComponent } from '../../base';\nimport { TColumn } from '../../../types';\nimport { TH } from '../../table/th';\nimport { throttle } from '../../../util/throttle';\n\ntype ResizeProps = {\n column: TColumn;\n thRef: RefObject;\n};\n\ntype ResizeState = {\n width: string;\n offsetStart: number;\n};\n\nexport class Resize extends BaseComponent {\n private moveFn: (e) => void;\n private upFn: (e) => void;\n\n private getPageX(e: MouseEvent | TouchEvent): number {\n if (e instanceof MouseEvent) {\n return Math.floor(e.pageX);\n } else {\n return Math.floor(e.changedTouches[0].pageX);\n }\n }\n\n private start(e: MouseEvent | TouchEvent): void {\n e.stopPropagation();\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const thElement: HTMLElement = this.props.thRef.current;\n\n this.setState({\n offsetStart: parseInt(thElement.style.width, 10) - this.getPageX(e),\n });\n\n this.upFn = this.end.bind(this);\n this.moveFn = throttle(this.move.bind(this), 10);\n\n document.addEventListener('mouseup', this.upFn);\n document.addEventListener('touchend', this.upFn);\n document.addEventListener('mousemove', this.moveFn);\n document.addEventListener('touchmove', this.moveFn);\n }\n\n private move(e: MouseEvent | TouchEvent): void {\n e.stopPropagation();\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const thElement: HTMLElement = this.props.thRef.current;\n\n if (\n this.state.offsetStart + this.getPageX(e) >=\n parseInt(thElement.style.minWidth, 10)\n ) {\n thElement.style.width = `${this.state.offsetStart + this.getPageX(e)}px`;\n }\n }\n\n private end(e: MouseEvent | TouchEvent): void {\n e.stopPropagation();\n\n document.removeEventListener('mouseup', this.upFn);\n document.removeEventListener('mousemove', this.moveFn);\n document.removeEventListener('touchmove', this.moveFn);\n document.removeEventListener('touchend', this.upFn);\n }\n\n render() {\n return (\n e.stopPropagation()}\n />\n );\n }\n}\n","export const throttle = (fn: (...args) => void, wait = 100) => {\n let inThrottle: boolean;\n let lastFn: ReturnType;\n let lastTime: number;\n\n return (...args) => {\n if (!inThrottle) {\n fn(...args);\n lastTime = Date.now();\n inThrottle = true;\n } else {\n clearTimeout(lastFn);\n lastFn = setTimeout(() => {\n if (Date.now() - lastTime >= wait) {\n fn(...args);\n lastTime = Date.now();\n }\n }, Math.max(wait - (Date.now() - lastTime), 0));\n }\n };\n};\n","import { ComponentChild, createRef, h, JSX } from 'preact';\n\nimport { BaseComponent, BaseProps } from '../base';\nimport { classJoin, className } from '../../util/className';\nimport { CSSDeclaration, TColumn } from '../../types';\nimport { Sort } from '../plugin/sort/sort';\nimport { PluginRenderer } from '../../plugin';\nimport { JSXInternal } from 'preact/src/jsx';\nimport { Resize } from '../plugin/resize/resize';\n\nexport interface THProps\n extends BaseProps,\n JSX.HTMLAttributes {\n index: number;\n column: TColumn;\n style?: CSSDeclaration;\n}\n\nexport interface THState {\n style: CSSDeclaration;\n}\n\nexport class TH extends BaseComponent {\n private sortRef = createRef();\n private thRef = createRef();\n\n constructor(props, context) {\n super(props, context);\n\n this.state = {\n style: {},\n };\n }\n\n private isSortable(): boolean {\n return this.props.column.sort.enabled;\n }\n\n private isResizable(): boolean {\n return this.props.column.resizable;\n }\n\n private onClick(e: JSX.TargetedMouseEvent): void {\n e.stopPropagation();\n\n if (this.isSortable()) {\n this.sortRef.current.changeDirection(e);\n }\n }\n\n private keyDown(e: JSX.TargetedMouseEvent): void {\n if (this.isSortable() && e.which === 13) {\n this.onClick(e);\n }\n }\n\n componentDidMount(): void {\n setTimeout(() => {\n // sets the `top` style if the current TH is fixed\n if (this.props.column.fixedHeader && this.thRef.current) {\n const offsetTop = this.thRef.current.offsetTop;\n\n if (typeof offsetTop === 'number') {\n this.setState({\n style: {\n top: offsetTop,\n },\n });\n }\n }\n }, 0);\n }\n\n private content(): ComponentChild {\n if (this.props.column.name !== undefined) {\n return this.props.column.name;\n }\n\n if (this.props.column.plugin !== undefined) {\n return (\n \n );\n }\n\n return null;\n }\n\n private getCustomAttributes(): JSXInternal.HTMLAttributes {\n const column = this.props.column;\n\n if (!column) return {};\n\n if (typeof column.attributes === 'function') {\n return column.attributes(null, null, this.props.column);\n } else {\n return column.attributes;\n }\n }\n\n render() {\n const props = {};\n\n if (this.isSortable()) {\n props['tabIndex'] = 0;\n }\n\n return (\n 1 ? this.props.rowSpan : undefined}\n colSpan={this.props.colSpan > 1 ? this.props.colSpan : undefined}\n {...this.getCustomAttributes()}\n {...props}\n >\n
{this.content()}
\n {this.isSortable() && (\n \n )}\n {this.isResizable() &&\n this.props.index < this.config.header.visibleColumns.length - 1 && (\n \n )}\n \n );\n }\n}\n","import { ComponentChild, h } from 'preact';\n\nimport { TR } from './tr';\nimport { BaseComponent, BaseProps } from '../base';\nimport { TH } from './th';\nimport { classJoin, className } from '../../util/className';\nimport Header from '../../header';\nimport { TColumn } from '../../types';\nimport { calculateRowColSpans } from '../../util/table';\n\ninterface THeadProps extends BaseProps {\n header: Header;\n}\n\nexport class THead extends BaseComponent {\n private renderColumn(\n column: TColumn,\n rowIndex: number,\n columnIndex: number,\n totalRows: number,\n ): ComponentChild {\n const { rowSpan, colSpan } = calculateRowColSpans(\n column,\n rowIndex,\n totalRows,\n );\n\n return (\n \n );\n }\n\n private renderRow(\n row: TColumn[],\n rowIndex: number,\n totalRows: number,\n ): ComponentChild {\n // because the only sortable columns are leaf columns (not parents)\n const leafColumns = Header.leafColumns(this.props.header.columns);\n\n return (\n \n {row.map((col) => {\n if (col.hidden) return null;\n\n return this.renderColumn(\n col,\n rowIndex,\n leafColumns.indexOf(col),\n totalRows,\n );\n })}\n \n );\n }\n\n private renderRows(): ComponentChild {\n const rows = Header.tabularFormat(this.props.header.columns);\n\n return rows.map((row, rowIndex) =>\n this.renderRow(row, rowIndex, rows.length),\n );\n }\n\n render() {\n if (this.props.header) {\n return (\n \n {this.renderRows()}\n \n );\n }\n\n return null;\n }\n}\n","import { TColumn } from '../types';\nimport Header from '../header';\n\nexport function calculateRowColSpans(\n column: TColumn,\n rowIndex: number,\n totalRows: number,\n): { rowSpan: number; colSpan: number } {\n const depth = Header.maximumDepth(column);\n const remainingRows = totalRows - rowIndex;\n const rowSpan = Math.floor(remainingRows - depth - depth / remainingRows);\n const colSpan = (column.columns && column.columns.length) || 1;\n\n return {\n rowSpan: rowSpan,\n colSpan: colSpan,\n };\n}\n","import { h } from 'preact';\n\nimport Tabular from '../../tabular';\nimport { TBody } from './tbody';\nimport { THead } from './thead';\nimport { BaseComponent, BaseProps } from '../base';\nimport Header from '../../header';\nimport { classJoin, className } from '../../util/className';\nimport { Status } from '../../types';\n\ninterface TableProps extends BaseProps {\n data: Tabular;\n status: Status;\n header?: Header;\n width: string;\n height: string;\n}\n\nexport class Table extends BaseComponent {\n render() {\n return (\n \n \n \n \n );\n }\n}\n","import { createRef, h } from 'preact';\n\nimport { BaseComponent } from './base';\nimport { classJoin, className } from '../util/className';\nimport { PluginPosition, PluginRenderer } from '../plugin';\n\ninterface HeaderContainerState {\n isActive: boolean;\n}\n\nexport class HeaderContainer extends BaseComponent<\n Record,\n HeaderContainerState\n> {\n private headerRef = createRef();\n\n constructor(props, context) {\n super(props, context);\n\n this.state = {\n isActive: true,\n };\n }\n\n componentDidMount() {\n if (this.headerRef.current.children.length === 0) {\n this.setState({\n isActive: false,\n });\n }\n }\n\n render() {\n if (this.state.isActive) {\n return (\n \n \n \n );\n }\n\n return null;\n }\n}\n","import { createRef, h } from 'preact';\n\nimport { BaseComponent } from './base';\nimport { classJoin, className } from '../util/className';\nimport { PluginPosition, PluginRenderer } from '../plugin';\n\ninterface FooterContainerState {\n isActive: boolean;\n}\n\nexport class FooterContainer extends BaseComponent<\n Record,\n FooterContainerState\n> {\n private footerRef = createRef();\n\n constructor(props, context) {\n super(props, context);\n\n this.state = {\n isActive: true,\n };\n }\n\n componentDidMount() {\n if (this.footerRef.current.children.length === 0) {\n this.setState({\n isActive: false,\n });\n }\n }\n\n render() {\n if (this.state.isActive) {\n return (\n \n \n \n );\n }\n\n return null;\n }\n}\n","import { h, createContext, Context } from 'preact';\n\nimport Tabular from '../tabular';\nimport { BaseComponent, BaseProps } from './base';\nimport { classJoin, className } from '../util/className';\nimport { Status } from '../types';\nimport { Table } from './table/table';\nimport { HeaderContainer } from './headerContainer';\nimport { FooterContainer } from './footerContainer';\nimport Pipeline from '../pipeline/pipeline';\nimport Header from '../header';\nimport { Config } from '../config';\nimport log from '../util/log';\nimport { PipelineProcessor } from '../pipeline/processor';\n\ninterface ContainerProps extends BaseProps {\n config: Config;\n pipeline: Pipeline;\n header?: Header;\n width: string;\n height: string;\n}\n\ninterface ContainerState {\n status: Status;\n header?: Header;\n data?: Tabular;\n}\n\nexport class Container extends BaseComponent {\n private readonly configContext: Context;\n private processPipelineFn: (processor: PipelineProcessor) => void;\n\n constructor(props, context) {\n super(props, context);\n\n // global Config context which is passed to all components\n this.configContext = createContext(null);\n\n this.state = {\n status: Status.Loading,\n header: props.header,\n data: null,\n };\n }\n\n private async processPipeline() {\n this.props.config.eventEmitter.emit('beforeLoad');\n\n this.setState({\n status: Status.Loading,\n });\n\n try {\n const data = await this.props.pipeline.process();\n this.setState({\n data: data,\n status: Status.Loaded,\n });\n\n this.props.config.eventEmitter.emit('load', data);\n } catch (e) {\n log.error(e);\n\n this.setState({\n status: Status.Error,\n data: null,\n });\n }\n }\n\n async componentDidMount() {\n const config = this.props.config;\n\n // for the initial load\n await this.processPipeline();\n\n if (config.header && this.state.data && this.state.data.length) {\n // now that we have the data, let's adjust columns width\n // NOTE: that we only calculate the columns width once\n this.setState({\n header: config.header.adjustWidth(config),\n });\n }\n\n this.processPipelineFn = this.processPipeline.bind(this);\n this.props.pipeline.on('updated', this.processPipelineFn);\n }\n\n componentWillUnmount(): void {\n this.props.pipeline.off('updated', this.processPipelineFn);\n }\n\n componentDidUpdate(\n _: Readonly,\n previousState: Readonly,\n ): void {\n // we can't jump to the Status.Rendered if previous status is not Status.Loaded\n if (\n previousState.status != Status.Rendered &&\n this.state.status == Status.Loaded\n ) {\n this.setState({\n status: Status.Rendered,\n });\n\n this.props.config.eventEmitter.emit('ready');\n }\n }\n\n render() {\n const configContext = this.configContext;\n\n return (\n \n \n {this.state.status === Status.Loading && (\n
\n )}\n\n \n\n \n \n
\n\n \n\n \n \n
\n );\n }\n}\n","import { Config, UserConfig } from './config';\nimport { h, render, VNode } from 'preact';\nimport { Container } from './view/container';\nimport log from './util/log';\nimport { EventEmitter } from './util/eventEmitter';\nimport { GridEvents } from './events';\nimport { PluginManager } from './plugin';\n\nclass Grid extends EventEmitter {\n public config: Config;\n public plugin: PluginManager;\n\n constructor(userConfig?: UserConfig) {\n super();\n this.config = new Config({ instance: this, eventEmitter: this }).update(\n userConfig,\n );\n this.plugin = this.config.plugin;\n }\n\n public updateConfig(userConfig: Partial): this {\n this.config.update(userConfig);\n return this;\n }\n\n createElement(): VNode {\n return h(Container, {\n config: this.config,\n pipeline: this.config.pipeline,\n header: this.config.header,\n width: this.config.width,\n height: this.config.height,\n });\n }\n\n /**\n * Uses the existing container and tries to clear the cache\n * and re-render the existing Grid.js instance again. This is\n * useful when a new config is set/updated.\n *\n */\n forceRender(): this {\n if (!this.config || !this.config.container) {\n log.error(\n 'Container is empty. Make sure you call render() before forceRender()',\n true,\n );\n }\n\n // clear the pipeline cache\n this.config.pipeline.clearCache();\n\n // TODO: not sure if it's a good idea to render a null element but I couldn't find a better way\n render(null, this.config.container);\n render(this.createElement(), this.config.container);\n\n return this;\n }\n\n /**\n * Mounts the Grid.js instance to the container\n * and renders the instance\n *\n * @param container\n */\n render(container: Element): this {\n if (!container) {\n log.error('Container element cannot be null', true);\n }\n\n if (container.childNodes.length > 0) {\n log.error(\n `The container element ${container} is not empty. Make sure the container is empty and call render() again`,\n );\n return this;\n }\n\n this.config.container = container;\n render(this.createElement(), container);\n\n return this;\n }\n}\n\nexport default Grid;\n"],"names":["n","l","u","i","t","o","r","f","e","c","s","a","parentNode","removeChild","h","arguments","length","children","call","defaultProps","v","type","props","key","ref","__k","__","__b","__e","__d","__c","__h","constructor","__v","vnode","p","d","this","context","_","indexOf","k","base","b","push","g","__r","debounceRendering","setTimeout","sort","some","__P","j","__n","ownerSVGElement","z","w","y","x","C","Array","isArray","m","A","N","M","appendChild","nextSibling","insertBefore","$","setProperty","test","H","style","cssText","replace","toLowerCase","slice","addEventListener","T","I","removeEventListener","setAttribute","removeAttribute","event","contextType","value","__E","prototype","render","O","sub","state","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","forEach","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","L","diffed","localName","nodeType","document","createTextNode","createElementNS","createElement","is","data","childNodes","dangerouslySetInnerHTML","attributes","name","__html","innerHTML","checked","current","unmount","componentWillUnmount","P","firstChild","generateUUID","Math","random","toString","getDerivedStateFromError","setState","componentDidCatch","forceUpdate","Base","id","_id","search","placeholder","sortAsc","sortDesc","pagination","previous","next","navigate","page","pages","showing","of","to","results","loading","noRecordsFound","error","Translator","language","_language","_defaultLanguage","enUS","getString","message","lang","splitted","split","val","join","translate","messageFormat","translated","BaseComponent","translator","_this","config","keys","Object","getConfig","Component","HTMLElement","parentElement","content","html","ProcessorType","Cell","update","cast","outerHTML","Row","cells","_cells","cell","index","toArray","map","fromCells","Tabular","rows","_rows","_length","row","fromRows","fromArray","oneDtoTwoD","len","EventEmitter","callbacks","init","on","listener","off","eventName","filter","emit","PipelineProcessor","_props","setProps","process","args","validateProps","Function","result","_process","assign","GlobalSearchFilter","keyword","String","trim","columns","ignoreHiddenColumns","tabular","selector","rowIndex","cellIndex","hidden","element","RegExp","Filter","className","prefix","reduce","prev","cur","classJoin","PluginPosition","BaseStore","dispatcher","_state","getInitialState","register","_handle","bind","action","handle","payload","newState","prevState","SearchStore","BaseActions","dispatch","SearchActions","ServerGlobalSearchFilter","options","updates","url","body","ServerFilter","format","toUpperCase","throwException","msg","Error","console","warn","info","PluginBaseComponent","PluginManager","plugins","get","add","plugin","log","remove","splice","list","position","undefined","order","PluginRenderer","pluginId","Fragment","component","Search","searchProcessor","actions","store","storeUpdatedFn","enabled","storeUpdated","server","header","pipeline","unregister","onChange","target","func","waitFor","timeout","onInput","debounceTimeout","Promise","resolve","clearTimeout","PaginationLimit","isNaN","Number","limit","Limit","ServerPaginationLimit","ServerLimit","Pagination","processor","onUpdateFn","setTotalFromTabularFn","total","setTotalFromTabular","_this2","setTotal","onUpdate","resetPageOnUpdate","setPage","totalRows","renderPages","buttonsCount","maxCount","min","pagePivot","floor","tabIndex","role","onClick","title","paginationButton","from","_this3","paginationButtonCurrent","renderSummary","summary","paginationSummary","prevButton","disabled","paginationButtonPrev","nextButton","paginationButtonNext","ceil","width","containerWidth","parseInt","px","ShadowTable","tableElement","tableClassName","tableStyle","tableRef","cloneNode","zIndex","visibility","widths","tableLayout","padding","margin","border","outline","obj","querySelectorAll","clientWidth","getAttribute","minWidth","nodeElement","camelCase","str","words","word","charAt","Header","_columns","adjustWidth","container","tempRef","autoWidth","shadowTable","el","tabularFormat","concat","column","setSort","userConfig","setFixedHeader","fixedHeader","setResizable","resizable","setID","logger","populatePlugins","fromColumns","isValidElement","typedColumn","fromUserConfig","fromHTMLTable","querySelector","th","cols","nextRow","col","leafColumns","maximumDepth","Dispatcher","_callbacks","_isDispatching","_isHandled","_isPending","_lastID","_pendingPayload","callback","ids","ii","_invokeCallback","_startDispatching","_stopDispatching","isDispatching","Storage","MemoryStorage","set","ServerStorage","handler","response","ok","json","status","statusText","opts","fetch","then","res","StorageUtils","createFromUserConfig","storage","tableElementToArray","display","arr","parsedRow","Node","TEXT_NODE","DOMParser","parseFromString","documentElement","textContent","_settle","onFulfilled","onRejected","thenable","Status","Pipeline","steps","_steps","Map","cache","lastProcessorIndexUpdated","step","clearCache","priority","processorPropsUpdated","addProcessorByPriority","afterRegistered","subSteps","proc","newSubStep","first","second","getStepsByType","getSortedProcessorTypes","pact","processorIndex","findProcessorIndexByID","processorID","findIndex","setLastProcessorIndex","StorageExtractor","Extractor","ArrayToTabularTransformer","arrayResponse","Transformer","ServerInitiator","entries","serverStorageOptions","acc","Initiator","StorageResponseToArrayTransformer","castData","pad","storageResponse","PipelineUtils","createFromConfig","Config","_userConfig","defaultConfig","updatedConfig","height","multiColumn","Footer","TD","formatter","handleClick","messageCell","eventEmitter","getCustomAttributes","colSpan","td","TR","getColumn","messageRow","getChildren","tr","MessageRow","TBody","headerLength","visibleColumns","tbody","Loading","Rendered","notfound","NativeSort","condition","direction","compare","cellA","cellB","compareWrapper","cmp","sortedRows","sorted","Sort","SortStore","sortColumn","multi","sortToggle","find","count","reset","SortActions","ServerSort","sortProcessor","updateStateFn","updateSortProcessorFn","getOrCreateSortProcessor","updateState","currentColumn","updateSortProcessor","sortedColumns","processorType","processors","changeDirection","preventDefault","stopPropagation","shiftKey","sortClassName","Resize","moveFn","upFn","getPageX","MouseEvent","pageX","changedTouches","start","fn","wait","inThrottle","lastFn","lastTime","offsetStart","thRef","end","move","Date","now","max","thElement","onMouseDown","onTouchStart","TH","sortRef","isSortable","isResizable","keyDown","which","offsetTop","top","onKeyDown","rowSpan","THead","renderColumn","columnIndex","depth","remainingRows","calculateRowColSpans","renderRow","renderRows","thead","Table","table","HeaderContainer","headerRef","isActive","FooterContainer","footerRef","footer","Container","configContext","processPipelineFn","Consumer","Provider","createContext","processPipeline","Loaded","_this5","previousState","Grid","instance","updateConfig","forceRender","__H","__V","shift","__N","requestAnimationFrame","cancelAnimationFrame","F"],"mappings":"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"}