tsgrid-ui 2.7.1 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +217 -0
- package/dist/base.d.ts +148 -0
- package/dist/base.es6.js +11 -0
- package/dist/base.es6.js.map +1 -0
- package/dist/chunks/chunk-3NYH6545.js +2423 -0
- package/dist/chunks/chunk-3NYH6545.js.map +1 -0
- package/dist/chunks/chunk-6MOFFUV2.js +2305 -0
- package/dist/chunks/chunk-6MOFFUV2.js.map +1 -0
- package/dist/chunks/chunk-6UCGFWIQ.js +865 -0
- package/dist/chunks/chunk-6UCGFWIQ.js.map +1 -0
- package/dist/chunks/chunk-DXZJHS4M.js +1283 -0
- package/dist/chunks/chunk-DXZJHS4M.js.map +1 -0
- package/dist/chunks/chunk-DZSFZLV6.js +1638 -0
- package/dist/chunks/chunk-DZSFZLV6.js.map +1 -0
- package/dist/chunks/chunk-EQK6JAHT.js +33 -0
- package/dist/chunks/chunk-EQK6JAHT.js.map +1 -0
- package/dist/chunks/chunk-FAIRNXQR.js +3020 -0
- package/dist/chunks/chunk-FAIRNXQR.js.map +1 -0
- package/dist/chunks/chunk-GZFWK4LZ.js +677 -0
- package/dist/chunks/chunk-GZFWK4LZ.js.map +1 -0
- package/dist/chunks/chunk-IYF3Q7GX.js +127 -0
- package/dist/chunks/chunk-IYF3Q7GX.js.map +1 -0
- package/dist/chunks/chunk-KLJ35UAH.js +1795 -0
- package/dist/chunks/chunk-KLJ35UAH.js.map +1 -0
- package/dist/chunks/chunk-LUSNRF73.js +1212 -0
- package/dist/chunks/chunk-LUSNRF73.js.map +1 -0
- package/dist/chunks/chunk-N3GASHTI.js +1127 -0
- package/dist/chunks/chunk-N3GASHTI.js.map +1 -0
- package/dist/field.d.ts +329 -0
- package/dist/field.es6.js +12 -0
- package/dist/field.es6.js.map +1 -0
- package/dist/form.d.ts +162 -0
- package/dist/form.es6.js +15 -0
- package/dist/form.es6.js.map +1 -0
- package/dist/layout.d.ts +108 -0
- package/dist/layout.es6.js +14 -0
- package/dist/layout.es6.js.map +1 -0
- package/dist/locale.d.ts +30 -0
- package/dist/locale.es6.js +7 -0
- package/dist/locale.es6.js.map +1 -0
- package/dist/popup.d.ts +97 -0
- package/dist/popup.es6.js +21 -0
- package/dist/popup.es6.js.map +1 -0
- package/dist/query-CKGg5Ugv.d.ts +81 -0
- package/dist/sidebar.d.ts +138 -0
- package/dist/sidebar.es6.js +12 -0
- package/dist/sidebar.es6.js.map +1 -0
- package/dist/tabs.d.ts +63 -0
- package/dist/tabs.es6.js +12 -0
- package/dist/tabs.es6.js.map +1 -0
- package/dist/toolbar.d.ts +97 -0
- package/dist/toolbar.es6.js +12 -0
- package/dist/toolbar.es6.js.map +1 -0
- package/dist/tooltip.d.ts +330 -0
- package/dist/tooltip.es6.js +21 -0
- package/dist/tooltip.es6.js.map +1 -0
- package/dist/tsgrid-ui.css +2 -2
- package/dist/tsgrid-ui.d.ts +16 -2004
- package/dist/tsgrid-ui.es6.js +7751 -23830
- package/dist/tsgrid-ui.es6.js.map +1 -1
- package/dist/tsgrid-ui.es6.min.js +37 -37
- package/dist/tsgrid-ui.js +150 -22
- package/dist/tsgrid-ui.min.css +2 -2
- package/dist/tsgrid-ui.min.js +39 -39
- package/dist/tsutils-message-CogFtVtO.d.ts +82 -0
- package/dist/utils.d.ts +418 -0
- package/dist/utils.es6.js +14 -0
- package/dist/utils.es6.js.map +1 -0
- package/package.json +25 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tslayout.ts"],"sourcesContent":["/**\n * Part of TsUi 2.0 library\n * - Dependencies: mQuery, TsUtils, TsBase, TsTabs, TsToolbar\n *\n * T3.6: Ported to TypeScript with aggressive typing per typing_policy.\n * No @ts-nocheck. Targeted `any` sites documented with // any: comments.\n *\n * == 2.0 changes\n * - CSP - fixed inline events\n * - remove jQuery dependency\n * - layout.confirm - refactored\n * - layout.message - refactored\n * - panel.removed\n * - assignTabs\n */\n\nimport { TsBase } from './tsbase.js'\nimport { TsUi, TsUtils } from './tsutils.js'\nimport { query as _queryRaw, Query } from './query.js'\nimport { TsTabs } from './tstabs.js'\nimport { TsToolbar } from './tstoolbar.js'\n\n// any: query() returns Query|void; cast once for clean selector usage\nconst query = _queryRaw as (selector: unknown, context?: unknown) => Query\n\n// IMPORTANT: do NOT rebind TsUi to a module-top const. esbuild's CJS bundle\n// inlines tslayout BEFORE tsutils, so any module-init binding captures TsUi\n// while it's still hoisted-undefined. Read TsUi at call time via this getter\n// inside class methods (post-init).\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _TsUiRegistry = (): Record<string, any> => TsUi as Record<string, any>\n\n// ---------------------------------------------------------------------------\n// Type definitions\n// ---------------------------------------------------------------------------\n\n/** Valid panel type names in a layout */\nexport type TsPanelType = 'top' | 'left' | 'main' | 'preview' | 'right' | 'bottom'\n\n/** Content that can be placed in a layout panel */\nexport type TsPanelContent =\n | string\n | { render: (box?: HTMLElement) => void; unmount?: () => void; box?: HTMLElement | null; [key: string]: unknown }\n\n/** Individual panel configuration and runtime state */\nexport interface TsLayoutPanel {\n type: TsPanelType | null\n title: string\n size: number | string\n minSize: number\n maxSize: number | boolean\n hidden: boolean\n resizable: boolean\n overflow: string\n style: string\n html: TsPanelContent\n tabs: TsTabs | Record<string, unknown> | null\n toolbar: TsToolbar | Record<string, unknown> | null\n /** Runtime-computed width (read-only after resize) */\n width: number | null\n /** Runtime-computed height (read-only after resize) */\n height: number | null\n /** Runtime-computed size in pixels */\n sizeCalculated?: number\n show: {\n toolbar: boolean\n tabs: boolean\n }\n removed: ((info: { panel: string; html: TsPanelContent; html_new: TsPanelContent; transition: string }) => void) | null\n onRefresh: ((event: unknown) => void) | null\n onShow: ((event: unknown) => void) | null\n onHide: ((event: unknown) => void) | null\n}\n\n/** Options for the html() method return promise-like */\ninterface TsHtmlResult {\n panel: string\n html: TsPanelContent\n error: boolean\n cancelled: boolean\n status?: boolean\n removed: (cb: () => void) => void\n}\n\nconst w2panels: TsPanelType[] = ['top', 'left', 'main', 'preview', 'right', 'bottom']\n\nclass TsLayout extends TsBase {\n declare box: HTMLElement | null\n declare name: string\n panels: TsLayoutPanel[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n last: Record<string, any> // any: accumulates resize state, observeResize, events dict\n padding: number\n resizer: number\n style: string\n onShow: ((event: unknown) => void) | null\n onHide: ((event: unknown) => void) | null\n onResizing: ((event: unknown) => void) | null\n onResizerClick: ((event: unknown) => void) | null\n onRender: ((event: unknown) => void) | null\n onRefresh: ((event: unknown) => void) | null\n onChange: ((event: unknown) => void) | null\n onResize: ((event: unknown) => void) | null\n onDestroy: ((event: unknown) => void) | null\n panel_template: TsLayoutPanel\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any // any: TsBase dynamic event handlers\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(options: any) { // any: options bag — mixed type at construction time\n super(options.name)\n this.box = null // DOM Element that holds the element\n this.name = '' // unique name for TsUi\n this.panels = []\n this.last = {}\n this.padding = 1 // panel padding\n this.resizer = 4 // resizer width or height\n this.style = ''\n this.onShow = null\n this.onHide = null\n this.onResizing = null\n this.onResizerClick = null\n this.onRender = null\n this.onRefresh = null\n this.onChange = null\n this.onResize = null\n this.onDestroy = null\n this.panel_template = {\n type: null, // left, right, top, bottom\n title: '',\n size: 100, // width or height depending on panel name\n minSize: 20,\n maxSize: false,\n hidden: false,\n resizable: false,\n overflow: 'auto',\n style: '',\n html: '', // can be String or Object with .render(box) method\n tabs: null,\n toolbar: null,\n width: null, // read only\n height: null, // read only\n show: {\n toolbar: false,\n tabs: false\n },\n removed: null, // function to call when content is overwritten\n onRefresh: null,\n onShow: null,\n onHide: null\n }\n // mix in options\n Object.assign(this, options)\n if (!Array.isArray(this.panels)) this.panels = []\n // add defined panels\n this.panels.forEach((panel, ind) => {\n this.panels[ind] = TsUtils.extend({}, this.panel_template, panel)\n if (TsUtils.isPlainObject(panel.tabs) || Array.isArray(panel.tabs)) initTabs(this, panel.type)\n if (TsUtils.isPlainObject(panel.toolbar) || Array.isArray(panel.toolbar)) initToolbar(this, panel.type)\n })\n // add all other panels\n w2panels.forEach(tab => {\n if (this.get(tab) != null) return\n this.panels.push(TsUtils.extend({}, this.panel_template, { type: tab, hidden: (tab !== 'main'), size: 50 }))\n })\n\n // render if box specified\n // any: query().get(0) returns Node|Node[]; box selector always resolves to HTMLElement\n if (typeof this.box == 'string') this.box = query(this.box).get(0) as HTMLElement\n if (this.box) this.render(this.box)\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function initTabs(object: TsLayout, panel: TsPanelType | null, tabs?: any): boolean { // any: tabs config bag\n const pan = panel != null ? object.get(panel) : null\n if (pan != null && tabs == null) tabs = pan.tabs\n if (pan == null || tabs == null) return false\n // instantiate tabs\n if (Array.isArray(tabs)) tabs = { tabs: tabs }\n const name = object.name + '_' + (panel ?? '') + '_tabs'\n if (_TsUiRegistry()[name]) _TsUiRegistry()[name].destroy() // destroy if existed\n pan.tabs = new TsTabs(TsUtils.extend({}, tabs, { owner: object, name: object.name + '_' + (panel ?? '') + '_tabs' }))\n pan.show.tabs = true\n return true\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function initToolbar(object: TsLayout, panel: TsPanelType | null, toolbar?: any): boolean { // any: toolbar config bag\n const pan = panel != null ? object.get(panel) : null\n if (pan != null && toolbar == null) toolbar = pan.toolbar\n if (pan == null || toolbar == null) return false\n // instantiate toolbar\n if (Array.isArray(toolbar)) toolbar = { items: toolbar }\n const name = object.name + '_' + (panel ?? '') + '_toolbar'\n if (_TsUiRegistry()[name]) _TsUiRegistry()[name].destroy() // destroy if existed\n pan.toolbar = new TsToolbar(TsUtils.extend({}, toolbar, { owner: object, name: object.name + '_' + (panel ?? '') + '_toolbar' }))\n pan.show.toolbar = true\n return true\n }\n }\n\n html(panel: string, data: TsPanelContent, transition?: string): TsHtmlResult {\n const p = this.get(panel)\n const promise: TsHtmlResult = {\n panel: panel,\n html: p.html,\n error: false,\n cancelled: false,\n removed(cb) {\n if (typeof cb == 'function') {\n p.removed = cb\n }\n }\n }\n if (typeof p.removed == 'function') {\n p.removed({ panel: panel, html: p.html, html_new: data, transition: transition || 'none' })\n p.removed = null // this is one time call back only\n }\n // if it is CSS panel\n if (panel == 'css') {\n query(this.box).find('#layout_'+ this.name +'_panel_css').html('<style>'+ data +'</style>')\n promise.status = true\n return promise\n }\n if (p == null) {\n console.log('ERROR: incorrect panel name. Panel name can be main, left, right, top, bottom, preview or css')\n promise.error = true\n return promise\n }\n if (data == null) {\n return promise\n }\n // event before\n const edata = this.trigger('change', { target: panel, panel: p, html_new: data, transition: transition })\n if (edata.isCancelled === true) {\n promise.cancelled = true\n return promise\n }\n const pname = '#layout_'+ this.name + '_panel_'+ p.type\n const current = query(this.box).find(pname + '> [data-role=\"panel-content\"]')\n let panelTop: string | number = 0\n if (current.length > 0) {\n // any: query().get(0) returns Node|Node[]; panel element is always HTMLElement\n ;(query(this.box).find(pname).get(0) as HTMLElement).scrollTop = 0\n panelTop = query(current).css('top') as string\n }\n // clean up previous content\n if (typeof (p.html as { unmount?: unknown }).unmount == 'function') (p.html as { unmount: () => void }).unmount()\n current.addClass('tsg-panel-content')\n current.removeAttr('style') // styles could have added manually, but all necessary will be added by resizeBoxes\n this.resizeBoxes(panel)\n\n if (p.html === '') {\n p.html = data\n this.refresh(panel)\n } else {\n p.html = data\n if (!p.hidden) {\n if (transition != null && transition !== '') {\n // apply transition\n query(this.box).addClass('animating')\n const div1 = query(this.box).find(pname + '> [data-role=\"panel-content\"]')\n // any: query()[0] returns Node; panel content div is HTMLElement\n div1.after('<div class=\"tsg-panel-content new-panel\" data-role=\"panel-content\" style=\"'+ (div1[0] as HTMLElement).style.cssText +'\"></div>')\n const div2 = query(this.box).find(pname + '> [data-role=\"panel-content\"].new-panel')\n div1.css('top', panelTop)\n div2.css('top', panelTop)\n if (typeof data == 'object') {\n data.box = div2[0] as HTMLElement // do not do .render(box);\n data.render()\n } else {\n div2.hide().html(data)\n }\n // transition\n let style1: string, style2: string\n switch (transition) {\n case 'slide-left':\n style1 = 'left: -'+ TsUtils.getSize(query(this.box), 'width') +'px'\n style2 = 'left: 0px'\n break\n case 'slide-right':\n style1 = 'left: '+ TsUtils.getSize(query(this.box), 'width') +'px'\n style2 = 'left: 0px'\n break\n case 'slide-down':\n style1 = 'top: -'+ TsUtils.getSize(query(this.box), 'height') +'px'\n style2 = 'top: '+ panelTop +'px'\n break\n case 'slide-up':\n style1 = 'top: '+ TsUtils.getSize(query(this.box), 'height') +'px'\n style2 = 'top: '+ panelTop +'px'\n break\n case 'flip-left':\n style1 = 'transform: rotate(90deg)'\n style2 = 'transform: rotate(0deg)'\n break\n case 'flip-right':\n style1 = 'transform: rotate(-90deg)'\n style2 = 'transform: rotate(0deg)'\n break\n case 'flip-down':\n style1 = 'transform: rotate(-180deg)'\n style2 = 'transform: rotate(0deg)'\n break\n case 'flip-up':\n style1 = 'transform: rotate(180deg)'\n style2 = 'transform: rotate(0deg)'\n break\n case 'pop-in':\n style1 = 'transform: scale(.5); opacity: 0;'\n style2 = 'transform: scale(1); opacity: 1;'\n break\n case 'pop-out':\n style1 = 'transform: scale(1); opacity: 1;'\n style2 = 'transform: scale(.5); opacity: 0;'\n break\n default:\n style1 = ''\n style2 = ''\n }\n div1.addClass('previous').css({ 'cssText': 'transition: .5s; '+ style1 })\n div2.addClass('current').css({ 'cssText': 'transition: .5s; '+ style2 })\n // clean\n setTimeout(() => {\n query(this.box).removeClass('animating')\n div1.remove()\n div2.removeClass('new-panel current')\n query(this.box).find(pname +'> [data-role=\"panel-content\"]')\n .css({ 'cssText': '' })\n edata.finish()\n }, 500)\n } else {\n this.refresh(panel)\n edata.finish()\n }\n } else {\n edata.finish()\n }\n }\n return promise\n }\n\n message(panel: string, options: unknown) {\n const p = this.get(panel)\n const box = query(this.box).find('#layout_'+ this.name + '_panel_'+ p.type)\n const oldOverflow = box.css('overflow') as string\n box.css('overflow', 'hidden')\n // any: options is pass-through from caller; TsUtils.message accepts string|number|object\n const prom = TsUtils.message({\n owner: this as unknown as { name?: string; lock?: (...args: unknown[]) => void; unlock?: (...args: unknown[]) => void; focus?: () => void },\n // any: query().get(0) returns Node|Node[]; panel element is HTMLElement\n box : box.get(0) as HTMLElement,\n after: '.tsg-panel-title',\n param: panel\n // any: cast-to-any for dynamic dispatch; TsLayout panel shape is user-defined at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }, options as any)\n if (prom) {\n prom.self.on('close:after', () => {\n box.css('overflow', oldOverflow)\n })\n }\n return prom\n }\n\n confirm(panel: string, options: unknown) {\n const p = this.get(panel)\n const box = query(this.box).find('#layout_'+ this.name + '_panel_'+ p.type)\n const oldOverflow = box.css('overflow') as string\n box.css('overflow', 'hidden')\n // any: options is pass-through from caller; TsUtils.confirm accepts string|number|object\n const prom = TsUtils.confirm({\n owner : this as unknown as { name?: string; lock?: (...args: unknown[]) => void; unlock?: (...args: unknown[]) => void; focus?: () => void },\n // any: query().get(0) returns Node|Node[]; panel element is HTMLElement\n box : box.get(0) as HTMLElement,\n after : '.tsg-panel-title',\n param : panel\n // any: cast-to-any for dynamic dispatch; TsLayout panel shape is user-defined at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }, options as any)\n if (prom) {\n prom.self.on('close:after', () => {\n box.css('overflow', oldOverflow)\n })\n }\n return prom\n }\n\n load(panel: string, url: string, transition?: string) {\n return new Promise<TsHtmlResult | void>((resolve, reject) => {\n if ((panel == 'css' || this.get(panel) != null) && url != null) {\n fetch(url)\n .then(resp => resp.text())\n .then(text => {\n this.resize()\n resolve(this.html(panel, text, transition))\n })\n } else {\n reject()\n }\n })\n }\n\n sizeTo(panel: string, size: number | string, instant?: boolean) {\n const pan = this.get(panel)\n if (pan == null) return false\n // resize\n query(this.box).find(':scope > div > .tsg-panel')\n .css('transition', (instant !== true ? '.2s' : '0s'))\n setTimeout(() => { this.set(panel, { size: size }) }, 1)\n // clean\n setTimeout(() => {\n query(this.box).find(':scope > div > .tsg-panel').css('transition', '0s')\n this.resize()\n }, 300)\n return true\n }\n\n show(panel: string, immediate?: boolean) {\n // event before\n const edata = this.trigger('show', { target: panel, thisect: this.get(panel), immediate: immediate })\n if (edata.isCancelled === true) return\n\n const p = this.get(panel)\n if (p == null) return false\n p.hidden = false\n if (immediate === true) {\n query(this.box).find('#layout_'+ this.name +'_panel_'+panel)\n .css({ 'opacity': '1' })\n edata.finish()\n this.resize()\n } else {\n // resize\n query(this.box).addClass('animating')\n query(this.box).find('#layout_'+ this.name +'_panel_'+panel)\n .css({ 'opacity': '0' })\n query(this.box).find(':scope > div > .tsg-panel')\n .css('transition', '.2s')\n setTimeout(() => { this.resize() }, 1)\n // show\n setTimeout(() => {\n query(this.box).find('#layout_'+ this.name +'_panel_'+ panel).css({ 'opacity': '1' })\n }, 250)\n // clean\n setTimeout(() => {\n query(this.box).find(':scope > div > .tsg-panel')\n .css('transition', '0s')\n query(this.box).removeClass('animating')\n edata.finish()\n this.resize()\n }, 300)\n }\n return true\n }\n\n hide(panel: string, immediate?: boolean) {\n // event before\n const edata = this.trigger('hide', { target: panel, object: this.get(panel), immediate: immediate })\n if (edata.isCancelled === true) return\n\n const p = this.get(panel)\n if (p == null) return false\n p.hidden = true\n if (immediate === true) {\n query(this.box).find('#layout_'+ this.name +'_panel_'+panel)\n .css({ 'opacity': '0' })\n edata.finish()\n this.resize()\n } else {\n // hide\n query(this.box).addClass('animating')\n query(this.box).find(':scope > div > .tsg-panel')\n .css('transition', '.2s')\n query(this.box).find('#layout_'+ this.name +'_panel_'+panel)\n .css({ 'opacity': '0' })\n setTimeout(() => { this.resize() }, 1)\n // clean\n setTimeout(() => {\n query(this.box).find(':scope > div > .tsg-panel')\n .css('transition', '0s')\n query(this.box).removeClass('animating')\n edata.finish()\n this.resize()\n }, 300)\n }\n return true\n }\n\n toggle(panel: string, immediate?: boolean) {\n const p = this.get(panel)\n if (p == null) return false\n if (p.hidden) return this.show(panel, immediate); else return this.hide(panel, immediate)\n }\n\n set(panel: string, options: Partial<TsLayoutPanel>) {\n const ind = this.get(panel, true)\n if (ind == null) return false\n TsUtils.extend(this.panels[ind], options)\n // refresh only when content changed\n if (options.html != null || options.resizable != null) {\n this.refresh(panel)\n }\n // show/hide resizer\n this.resize() // resize is needed when panel size is changed\n return true\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get(panel: string, returnIndex?: boolean): any { // any: returns panel object or index depending on returnIndex\n for (let p = 0; p < this.panels.length; p++) {\n const pan = this.panels[p]\n if (pan != null && pan.type == panel) {\n if (returnIndex === true) return p; else return pan\n }\n }\n return null\n }\n\n el(panel: string): HTMLElement | null {\n const el = query(this.box).find('#layout_'+ this.name +'_panel_'+ panel +'> [data-role=\"panel-content\"]')\n if (el.length != 1) return null\n // any: query()[0] returns Node; panel content element is always HTMLElement\n return el[0] as HTMLElement\n }\n\n hideToolbar(panel: string) {\n const pan = this.get(panel)\n if (!pan) return\n pan.show.toolbar = false\n query(this.box).find(`#layout_${this.name}_panel_${panel} > [data-role=\"panel-toolbar\"]`).hide()\n this.resize()\n }\n\n showToolbar(panel: string) {\n const pan = this.get(panel)\n if (!pan) return\n pan.show.toolbar = true\n query(this.box).find(`#layout_${this.name}_panel_${panel} > [data-role=\"panel-toolbar\"]`).show()\n this.resize()\n }\n\n toggleToolbar(panel: string) {\n const pan = this.get(panel)\n if (!pan) return\n if (pan.show.toolbar) this.hideToolbar(panel); else this.showToolbar(panel)\n }\n\n assignToolbar(panel: string, toolbar: TsToolbar | string | null) {\n if (typeof toolbar == 'string' && _TsUiRegistry()[toolbar] != null) toolbar = _TsUiRegistry()[toolbar]\n const pan = this.get(panel)\n pan.toolbar = toolbar\n // any: query().attr(name) returns string|undefined; used as selector fallback\n const tmp = query(this.box).find(panel +'> [data-role=\"panel-toolbar\"]')\n if (pan.toolbar != null) {\n if ((tmp.attr('name') as string | undefined) != (pan.toolbar as TsToolbar).name) {\n // any: query().get(0) returns Node|Node[]; toolbar container is HTMLElement\n ;(pan.toolbar as TsToolbar).render(tmp.get(0) as HTMLElement)\n } else if (pan.toolbar != null) {\n ;(pan.toolbar as TsToolbar).refresh()\n }\n if (typeof toolbar != 'string' && toolbar) toolbar['owner'] = this\n this.showToolbar(panel)\n this.refresh(panel)\n } else {\n tmp.html('')\n this.hideToolbar(panel)\n }\n }\n\n hideTabs(panel: string) {\n const pan = this.get(panel)\n if (!pan) return\n pan.show.tabs = false\n query(this.box).find('#layout_'+ this.name +'_panel_'+ panel +'> [data-role=\"panel-tabs\"]').hide()\n this.resize()\n }\n\n showTabs(panel: string) {\n const pan = this.get(panel)\n if (!pan) return\n pan.show.tabs = true\n query(this.box).find('#layout_'+ this.name +'_panel_'+ panel +'> [data-role=\"panel-tabs\"]').show()\n this.resize()\n }\n\n toggleTabs(panel: string) {\n const pan = this.get(panel)\n if (!pan) return\n if (pan.show.tabs) this.hideTabs(panel); else this.showTabs(panel)\n }\n\n assignTabs(panel: string, tabs: TsTabs | string | null) {\n if (typeof tabs == 'string' && _TsUiRegistry()[tabs] != null) tabs = _TsUiRegistry()[tabs]\n const pan = this.get(panel)\n pan.tabs = tabs\n const tmp = query(this.box).find(panel +'> [data-role=\"panel-tabs\"]')\n if (pan.tabs != null) {\n if ((tmp.attr('name') as string | undefined) != (pan.tabs as TsTabs).name) {\n // any: query().get(0) returns Node|Node[]; tabs container is HTMLElement\n ;(pan.tabs as TsTabs).render(tmp.get(0) as HTMLElement)\n } else if (pan.tabs != null) {\n ;(pan.tabs as TsTabs).refresh()\n }\n if (typeof tabs != 'string' && tabs) tabs['owner'] = this\n this.showTabs(panel)\n this.refresh(panel)\n } else {\n tmp.html('')\n this.hideTabs(panel)\n }\n }\n\n override render(box?: HTMLElement | string) {\n const time = Date.now()\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n // any: query().get(0) returns Node|Node[]; box selector always resolves to HTMLElement\n if (typeof box == 'string') box = query(box).get(0) as HTMLElement\n // event before\n const edata = this.trigger('render', { target: this.name, box: box ?? this.box })\n if (edata.isCancelled === true) return\n // default action\n if (box != null) {\n this.unmount() // clean previous control\n this.box = box\n }\n if (!this.box) return false\n // render layout\n // any: .attr(name,val) overload returns string|Query; cast to Query for chaining\n ;(query(this.box)\n .attr('name', this.name) as unknown as Query)\n .addClass('tsg-layout')\n .html('<div></div>')\n if (query(this.box).length > 0) {\n // any: query()[0] returns Node; layout box is HTMLElement\n ;(query(this.box)[0] as HTMLElement).style.cssText += this.style\n }\n // create all panels\n for (let p1 = 0; p1 < w2panels.length; p1++) {\n const html = '<div id=\"layout_'+ this.name + '_panel_'+ w2panels[p1] +'\" class=\"tsg-panel\">'+\n ' <div class=\"tsg-panel-title\"></div>'+\n ' <div class=\"tsg-panel-tabs\" data-role=\"panel-tabs\"></div>'+\n ' <div class=\"tsg-panel-toolbar\" data-role=\"panel-toolbar\"></div>'+\n ' <div class=\"tsg-panel-content\" data-role=\"panel-content\"></div>'+\n '</div>'+\n '<div id=\"layout_'+ this.name + '_resizer_'+ w2panels[p1] +'\" class=\"tsg-resizer\"></div>'\n query(this.box).find(':scope > div').append(html)\n }\n query(this.box).find(':scope > div')\n .append('<div id=\"layout_'+ this.name + '_panel_css\" style=\"position: absolute; top: 10000px;\"></div>')\n this.refresh() // if refresh is not called here, the layout will not be available right after initialization\n // observe div resize\n this.last['observeResize'] = new ResizeObserver(() => { this.resize() })\n this.last['observeResize'].observe(this.box)\n // process event\n edata.finish()\n // re-init events\n setTimeout(() => { // needed this timeout to allow browser to render first if there are tabs or toolbar\n self.last['events'] = { resizeStart, mouseMove, mouseUp }\n this.resize()\n }, 0)\n return Date.now() - time\n\n function resizeStart(type: string, evnt: MouseEvent) {\n if (!self.box) return\n if (!evnt) evnt = window.event as MouseEvent\n query(document)\n .off('mousemove', self.last['events'].mouseMove)\n .on('mousemove', self.last['events'].mouseMove)\n query(document)\n .off('mouseup', self.last['events'].mouseUp)\n .on('mouseup', self.last['events'].mouseUp)\n self.last['resize'] = {\n type : type,\n x : evnt.screenX,\n y : evnt.screenY,\n diff_x : 0,\n diff_y : 0,\n value : 0\n }\n // lock all panels\n w2panels.forEach(panel => {\n const $tmp = query(self.el(panel)).find('.tsg-lock')\n if ($tmp.length > 0) {\n $tmp.data('locked', 'yes')\n } else {\n self.lock(panel, { opacity: 0 })\n }\n })\n // any: query().get(0) returns Node|Node[]; resizer element is HTMLElement\n const el = query(self.box).find('#layout_'+ self.name +'_resizer_'+ type).get(0) as HTMLElement\n if (type == 'left' || type == 'right') {\n self.last['resize'].value = parseInt(el.style.left)\n }\n if (type == 'top' || type == 'preview' || type == 'bottom') {\n self.last['resize'].value = parseInt(el.style.top)\n }\n }\n\n function mouseUp(evnt: MouseEvent) {\n if (!self.box) return\n if (!evnt) evnt = window.event as MouseEvent\n query(document).off('mousemove', self.last['events'].mouseMove)\n query(document).off('mouseup', self.last['events'].mouseUp)\n if (self.last['resize'] == null) return\n // unlock all panels\n w2panels.forEach(panel => {\n const $tmp = query(self.el(panel)).find('.tsg-lock')\n if ($tmp.data('locked') == 'yes') {\n $tmp.removeData('locked')\n } else {\n self.unlock(panel)\n }\n })\n // set new size\n if (self.last['diff_x'] !== 0 || self.last['resize'].diff_y !== 0) { // only recalculate if changed\n const ptop = self.get('top')\n const pbottom = self.get('bottom')\n const panel = self.get(self.last['resize'].type)\n const width = TsUtils.getSize(query(self.box), 'width')\n const height = TsUtils.getSize(query(self.box), 'height')\n const str = String(panel.size)\n let ns: number, nd: number\n switch (self.last['resize'].type) {\n case 'top':\n ns = parseInt(panel.sizeCalculated) + self.last['resize'].diff_y\n nd = 0\n break\n case 'bottom':\n ns = parseInt(panel.sizeCalculated) - self.last['resize'].diff_y\n nd = 0\n break\n case 'preview':\n ns = parseInt(panel.sizeCalculated) - self.last['resize'].diff_y\n nd = (ptop && !ptop.hidden ? ptop.sizeCalculated : 0) +\n (pbottom && !pbottom.hidden ? pbottom.sizeCalculated : 0)\n break\n case 'left':\n ns = parseInt(panel.sizeCalculated) + self.last['resize'].diff_x\n nd = 0\n break\n case 'right':\n ns = parseInt(panel.sizeCalculated) - self.last['resize'].diff_x\n nd = 0\n break\n default:\n ns = 0\n nd = 0\n }\n // set size\n if (str.substr(str.length-1) == '%') {\n panel.size = Math.floor(ns * 100 / (panel.type == 'left' || panel.type == 'right' ? width : height - nd) * 100) / 100 + '%'\n } else {\n if (String(panel.size).substr(0, 1) == '-') {\n panel.size = parseInt(panel.size) - panel.sizeCalculated + ns\n } else {\n panel.size = ns\n }\n }\n self.resize()\n }\n query(self.box)\n .find('#layout_'+ self.name + '_resizer_'+ self.last['resize'].type)\n .removeClass(null)\n .addClass('active')\n query(self.box)\n .find('#layout_'+ self.name + '_resizer_'+ self.last['resize'].type)\n .removeClass('active')\n delete self.last['resize']\n }\n\n function mouseMove(evnt: MouseEvent) {\n if (!self.box) return\n if (!evnt) evnt = window.event as MouseEvent\n if (self.last['resize'] == null) return\n const panel = self.get(self.last['resize'].type)\n // event before\n const tmp = self.last['resize']\n const edata = self.trigger('resizing', { target: self.name, object: panel, originalEvent: evnt,\n panel: tmp ? tmp.type : 'all', diff_x: tmp ? tmp.diff_x : 0, diff_y: tmp ? tmp.diff_y : 0 })\n if (edata.isCancelled === true) return\n\n const p = query(self.box).find('#layout_'+ self.name + '_resizer_'+ tmp.type)\n const resize_x = (evnt.screenX - tmp.x)\n const resize_y = (evnt.screenY - tmp.y)\n const mainPanel = self.get('main')\n\n if (!p.hasClass('active')) p.addClass('active')\n\n let adjusted_x = resize_x\n let adjusted_y = resize_y\n\n switch (tmp.type) {\n case 'left':\n if (panel.minSize - adjusted_x > panel.width) {\n adjusted_x = panel.minSize - panel.width\n }\n if (panel.maxSize && (panel.width + adjusted_x > panel.maxSize)) {\n adjusted_x = panel.maxSize - panel.width\n }\n if (mainPanel.minSize + adjusted_x > mainPanel.width) {\n adjusted_x = mainPanel.width - mainPanel.minSize\n }\n break\n\n case 'right':\n if (panel.minSize + adjusted_x > panel.width) {\n adjusted_x = panel.width - panel.minSize\n }\n if (panel.maxSize && (panel.width - adjusted_x > panel.maxSize)) {\n adjusted_x = panel.width - panel.maxSize\n }\n if (mainPanel.minSize - adjusted_x > mainPanel.width) {\n adjusted_x = mainPanel.minSize - mainPanel.width\n }\n break\n\n case 'top':\n if (panel.minSize - adjusted_y > panel.height) {\n adjusted_y = panel.minSize - panel.height\n }\n if (panel.maxSize && (panel.height + adjusted_y > panel.maxSize)) {\n adjusted_y = panel.maxSize - panel.height\n }\n if (mainPanel.minSize + adjusted_y > mainPanel.height) {\n adjusted_y = mainPanel.height - mainPanel.minSize\n }\n break\n\n case 'preview':\n case 'bottom':\n if (panel.minSize + adjusted_y > panel.height) {\n adjusted_y = panel.height - panel.minSize\n }\n if (panel.maxSize && (panel.height - adjusted_y > panel.maxSize)) {\n adjusted_y = panel.height - panel.maxSize\n }\n if (mainPanel.minSize - adjusted_y > mainPanel.height) {\n adjusted_y = mainPanel.minSize - mainPanel.height\n }\n break\n }\n tmp.diff_x = adjusted_x\n tmp.diff_y = adjusted_y\n\n switch (tmp.type) {\n case 'top':\n case 'preview':\n case 'bottom':\n tmp.diff_x = 0\n // any: query()[0] returns Node; resizer element is HTMLElement\n if (p.length > 0) (p[0] as HTMLElement).style.top = (tmp.value + tmp.diff_y) + 'px'\n break\n\n case 'left':\n case 'right':\n tmp.diff_y = 0\n // any: query()[0] returns Node; resizer element is HTMLElement\n if (p.length > 0) (p[0] as HTMLElement).style.left = (tmp.value + tmp.diff_x) + 'px'\n break\n }\n // event after\n edata.finish()\n }\n }\n\n override unmount(): void {\n super.unmount()\n this.panels.forEach(panel => {\n // any: tabs/toolbar may be TsTabs/TsToolbar or plain config object\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(panel.tabs as any)?.unmount?.()\n // any: cast-to-any for dynamic dispatch; TsLayout panel shape is user-defined at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(panel.toolbar as any)?.unmount?.()\n })\n this.last['observeResize']?.disconnect()\n }\n\n destroy() {\n // event before\n const edata = this.trigger('destroy', { target: this.name })\n if (edata.isCancelled === true) return\n if (_TsUiRegistry()[this.name] == null) return false\n // clean up\n this.panels.forEach(panel => {\n // any: tabs/toolbar may be TsTabs/TsToolbar or plain config object\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(panel.tabs as any)?.destroy?.()\n // any: cast-to-any for dynamic dispatch; TsLayout panel shape is user-defined at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(panel.toolbar as any)?.destroy?.()\n })\n if (query(this.box).find('#layout_'+ this.name +'_panel_main').length > 0) {\n this.unmount()\n }\n delete _TsUiRegistry()[this.name]\n // event after\n edata.finish()\n if (this.last['events'] && this.last['events'].resize) {\n query(window).off('resize', this.last['events'].resize)\n }\n return true\n }\n\n refresh(panel?: string) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n // if (window.getSelection) window.getSelection().removeAllRanges(); // clear selection\n const time = Date.now()\n // event before\n const edata = self.trigger('refresh', { target: (panel != null ? panel : self.name), object: panel != null ? self.get(panel) : null })\n if (edata.isCancelled === true) return\n // self.unlock(panel);\n if (typeof panel == 'string') {\n const p = self.get(panel)\n if (p == null) return\n const pname = '#layout_'+ self.name + '_panel_'+ p.type\n const rname = '#layout_'+ self.name +'_resizer_'+ p.type\n // apply properties to the panel\n query(self.box).find(pname).css({ display: p.hidden ? 'none' : 'block' })\n if (p.resizable) {\n query(self.box).find(rname).show()\n } else {\n query(self.box).find(rname).hide()\n }\n // insert content\n if (typeof p.html == 'object' && typeof (p.html as { render?: unknown }).render === 'function') {\n // any: query()[0] returns Node; panel content element is HTMLElement\n ;(p.html as { box: HTMLElement | null; render: () => void }).box =\n query(self.box).find(pname +'> [data-role=\"panel-content\"]')[0] as HTMLElement\n setTimeout(() => {\n // need to remove unnecessary classes\n if (query(self.box).find(pname +'> [data-role=\"panel-content\"]').length > 0) {\n // any: css(key,val) and query()[0] chain issues; cast needed for .style.cssText\n const $content = query(self.box).find(pname +'> [data-role=\"panel-content\"]')\n .removeClass(null)\n .removeAttr('name')\n .addClass('tsg-panel-content')\n ;(($content.css('overflow', p.overflow) as unknown as Query)[0] as HTMLElement).style.cssText += ';' + p.style\n }\n if (p.html && typeof (p.html as { render?: unknown }).render == 'function') {\n ;(p.html as { render: () => void }).render() // do not do .render(box);\n }\n }, 1)\n } else {\n // need to remove unnecessary classes\n if (query(self.box).find(pname +'> [data-role=\"panel-content\"]').length > 0) {\n // any: html(val) and css(key,val) both return union types; cast for chaining\n const $content = query(self.box).find(pname +'> [data-role=\"panel-content\"]')\n .removeClass(null)\n .removeAttr('name')\n .addClass('tsg-panel-content')\n ;(((($content.html(p.html as string) as unknown as Query)\n .css('overflow', p.overflow)) as unknown as Query)[0] as HTMLElement).style.cssText += ';' + p.style\n }\n }\n // if there are tabs and/or toolbar - render it\n let tmp = query(self.box).find(pname +'> [data-role=\"panel-tabs\"]')\n if (p.show.tabs) {\n if ((tmp.attr('name') as string | undefined) != (p.tabs as TsTabs)?.name && p.tabs != null) {\n ;(p.tabs as TsTabs).render(tmp.get(0) as HTMLElement)\n } else {\n ;(p.tabs as TsTabs).refresh()\n }\n tmp.addClass('tsg-panel-tabs')\n } else {\n // any: html(val) return type is string|Query; cast needed to chain removeAttr/css\n ;(tmp.html('') as unknown as Query).removeAttr('name').removeClass(null)\n // any: css(key,val) overload; need to chain hide after css\n ;(tmp.css('display', 'none') as unknown as Query).hide()\n }\n tmp = query(self.box).find(pname +'> [data-role=\"panel-toolbar\"]')\n if (p.show.toolbar) {\n if ((tmp.attr('name') as string | undefined) != (p.toolbar as TsToolbar)?.name && p.toolbar != null) {\n ;(p.toolbar as TsToolbar).render(tmp.get(0) as HTMLElement)\n } else {\n ;(p.toolbar as TsToolbar).refresh()\n }\n tmp.addClass('tsg-panel-toolbar')\n } else {\n // any: html(val) return type is string|Query; cast needed to chain removeAttr/css\n ;(tmp.html('') as unknown as Query).removeAttr('name').removeClass(null)\n // any: css(key,val) overload; need to chain hide after css\n ;(tmp.css('display', 'none') as unknown as Query).hide()\n }\n // show title\n tmp = query(self.box).find(pname +'> .tsg-panel-title')\n if (p.title) {\n // any: html(val) return type is string|Query; cast needed to chain show/hide\n ;(tmp.html(p.title) as unknown as Query).show()\n } else {\n ;(tmp.html('') as unknown as Query).hide()\n }\n } else {\n if (query(self.box).find('#layout_'+ self.name +'_panel_main').length === 0) {\n self.render()\n return\n }\n self.resize()\n // refresh all of them\n for (let p1 = 0; p1 < this.panels.length; p1++) { const p = this.panels[p1]; if (p != null) self.refresh(p.type ?? undefined) }\n }\n edata.finish()\n return Date.now() - time\n }\n\n resize() {\n // if (window.getSelection) window.getSelection().removeAllRanges(); // clear selection\n if (!this.box) return false\n const time = Date.now()\n // event before\n const tmp = this.last['resize']\n const edata = this.trigger('resize', { target: this.name,\n panel: tmp ? tmp.type : 'all', diff_x: tmp ? tmp.diff_x : 0, diff_y: tmp ? tmp.diff_y : 0 })\n if (edata.isCancelled === true) return\n if (this.padding < 0) this.padding = 0\n\n // layout itself\n const width = TsUtils.getSize(query(this.box), 'width')\n const height = TsUtils.getSize(query(this.box), 'height')\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n // panels\n const pmain = this.get('main')\n const pprev = this.get('preview')\n const pleft = this.get('left')\n const pright = this.get('right')\n const ptop = this.get('top')\n const pbottom = this.get('bottom')\n const sprev = (pprev != null && pprev.hidden !== true ? true : false)\n const sleft = (pleft != null && pleft.hidden !== true ? true : false)\n const sright = (pright != null && pright.hidden !== true ? true : false)\n const stop = (ptop != null && ptop.hidden !== true ? true : false)\n const sbottom = (pbottom != null && pbottom.hidden !== true ? true : false)\n let l: number, t: number, w: number, h: number\n // calculate %\n for (let p = 0; p < w2panels.length; p++) {\n const panelType = w2panels[p]\n if (panelType == null || panelType === 'main') continue\n const panTmp = this.get(panelType)\n if (!panTmp) continue\n const str = String(panTmp.size || 0)\n if (str.substr(str.length-1) == '%') {\n let tmph = height\n if (panTmp.type == 'preview') {\n tmph = tmph -\n (ptop && !ptop.hidden ? ptop.sizeCalculated : 0) -\n (pbottom && !pbottom.hidden ? pbottom.sizeCalculated : 0)\n }\n panTmp.sizeCalculated = parseInt(String((panTmp.type == 'left' || panTmp.type == 'right' ? width : tmph) * parseFloat(panTmp.size as string) / 100))\n } else {\n panTmp.sizeCalculated = parseInt(panTmp.size as string)\n }\n panTmp.sizeCalculated = Math.max(panTmp.sizeCalculated, parseInt(panTmp.minSize as unknown as string))\n }\n // negative size\n if (parseInt(pright.size as string) < 0) {\n if (sleft && parseInt(pleft.size as string) < 0) {\n console.log('ERROR: you cannot have both left panel.size and right panel.size be negative.')\n } else {\n pright.sizeCalculated = width - (sleft ? pleft.sizeCalculated : 0) + parseInt(pright.size as string)\n }\n }\n if (parseInt(pleft.size as string) < 0) {\n if (sright && parseInt(pright.size as string) < 0) {\n console.log('ERROR: you cannot have both left panel.size and right panel.size be negative.')\n } else {\n pleft.sizeCalculated = width - (sright ? pright.sizeCalculated : 0) + parseInt(pleft.size as string)\n }\n }\n if (parseInt(pprev.size as string) < 0) {\n pprev.sizeCalculated = height + parseInt(pprev.size as string)\n if (pprev.sizeCalculated > height) pprev.sizeCalculated = height\n }\n // top if any\n if (ptop != null && ptop.hidden !== true) {\n l = 0\n t = 0\n w = width\n h = ptop.sizeCalculated\n query(this.box).find('#layout_'+ this.name +'_panel_top')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px'\n })\n ptop.width = w\n ptop.height = h\n // resizer\n if (ptop.resizable) {\n t = ptop.sizeCalculated - (this.padding === 0 ? this.resizer : 0)\n h = (this.resizer > this.padding ? this.resizer : this.padding)\n // any: css(obj) returns string|Record|Query; cast needed to chain off/on\n ;(query(this.box).find('#layout_'+ this.name +'_resizer_top')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px',\n 'cursor': 'ns-resize'\n }) as unknown as Query)\n .off('mousedown')\n .on('mousedown', function(event) {\n event.preventDefault()\n // event before\n const edata = self.trigger('resizerClick', { target: 'top', originalEvent: event })\n if (edata.isCancelled === true) return\n // default action\n // any: TsUi registry value is dynamic; resize events dict accessed at runtime\n _TsUiRegistry()[self.name].last.events.resizeStart('top', event)\n // event after\n edata.finish()\n return false\n })\n }\n } else {\n query(this.box).find('#layout_'+ this.name +'_panel_top').hide()\n query(this.box).find('#layout_'+ this.name +'_resizer_top').hide()\n }\n // left if any\n if (pleft != null && pleft.hidden !== true) {\n l = 0\n t = 0 + (stop ? ptop.sizeCalculated + this.padding : 0)\n w = pleft.sizeCalculated\n h = height - (stop ? ptop.sizeCalculated + this.padding : 0) -\n (sbottom ? pbottom.sizeCalculated + this.padding : 0)\n query(this.box).find('#layout_'+ this.name +'_panel_left')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px'\n })\n pleft.width = w\n pleft.height = h\n // resizer\n if (pleft.resizable) {\n l = pleft.sizeCalculated - (this.padding === 0 ? this.resizer : 0)\n w = (this.resizer > this.padding ? this.resizer : this.padding)\n // any: css(obj) returns string|Record|Query; cast needed to chain off/on\n ;(query(this.box).find('#layout_'+ this.name +'_resizer_left')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px',\n 'cursor': 'ew-resize'\n }) as unknown as Query)\n .off('mousedown')\n .on('mousedown', function(event) {\n event.preventDefault()\n // event before\n const edata = self.trigger('resizerClick', { target: 'left', originalEvent: event })\n if (edata.isCancelled === true) return\n // default action\n _TsUiRegistry()[self.name].last.events.resizeStart('left', event)\n // event after\n edata.finish()\n return false\n })\n }\n } else {\n query(this.box).find('#layout_'+ this.name +'_panel_left').hide()\n query(this.box).find('#layout_'+ this.name +'_resizer_left').hide()\n }\n // right if any\n if (pright != null && pright.hidden !== true) {\n l = width - pright.sizeCalculated\n t = 0 + (stop ? ptop.sizeCalculated + this.padding : 0)\n w = pright.sizeCalculated\n h = height - (stop ? ptop.sizeCalculated + this.padding : 0) -\n (sbottom ? pbottom.sizeCalculated + this.padding : 0)\n query(this.box).find('#layout_'+ this.name +'_panel_right')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px'\n })\n pright.width = w\n pright.height = h\n // resizer\n if (pright.resizable) {\n l = l - this.padding\n w = (this.resizer > this.padding ? this.resizer : this.padding)\n // any: css(obj) returns string|Record|Query; cast needed to chain off/on\n ;(query(this.box).find('#layout_'+ this.name +'_resizer_right')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px',\n 'cursor': 'ew-resize'\n }) as unknown as Query)\n .off('mousedown')\n .on('mousedown', function(event) {\n event.preventDefault()\n // event before\n const edata = self.trigger('resizerClick', { target: 'right', originalEvent: event })\n if (edata.isCancelled === true) return\n // default action\n _TsUiRegistry()[self.name].last.events.resizeStart('right', event)\n // event after\n edata.finish()\n return false\n })\n }\n } else {\n query(this.box).find('#layout_'+ this.name +'_panel_right').hide()\n query(this.box).find('#layout_'+ this.name +'_resizer_right').hide()\n }\n // bottom if any\n if (pbottom != null && pbottom.hidden !== true) {\n l = 0\n t = height - pbottom.sizeCalculated\n w = width\n h = pbottom.sizeCalculated\n query(this.box).find('#layout_'+ this.name +'_panel_bottom')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px'\n })\n pbottom.width = w\n pbottom.height = h\n // resizer\n if (pbottom.resizable) {\n t = t - (this.padding === 0 ? 0 : this.padding)\n h = (this.resizer > this.padding ? this.resizer : this.padding)\n // any: css(obj) returns string|Record|Query; cast needed to chain off/on\n ;(query(this.box).find('#layout_'+ this.name +'_resizer_bottom')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px',\n 'cursor': 'ns-resize'\n }) as unknown as Query)\n .off('mousedown')\n .on('mousedown', function(event) {\n event.preventDefault()\n // event before\n const edata = self.trigger('resizerClick', { target: 'bottom', originalEvent: event })\n if (edata.isCancelled === true) return\n // default action\n _TsUiRegistry()[self.name].last.events.resizeStart('bottom', event)\n // event after\n edata.finish()\n return false\n })\n }\n } else {\n query(this.box).find('#layout_'+ this.name +'_panel_bottom').hide()\n query(this.box).find('#layout_'+ this.name +'_resizer_bottom').hide()\n }\n // main - always there\n l = 0 + (sleft ? pleft.sizeCalculated + this.padding : 0)\n t = 0 + (stop ? ptop.sizeCalculated + this.padding : 0)\n w = width - (sleft ? pleft.sizeCalculated + this.padding : 0) -\n (sright ? pright.sizeCalculated + this.padding: 0)\n h = height - (stop ? ptop.sizeCalculated + this.padding : 0) -\n (sbottom ? pbottom.sizeCalculated + this.padding : 0) -\n (sprev ? pprev.sizeCalculated + this.padding : 0)\n query(this.box)\n .find('#layout_'+ this.name +'_panel_main')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px'\n })\n pmain.width = w\n pmain.height = h\n\n // preview if any\n if (pprev != null && pprev.hidden !== true) {\n l = 0 + (sleft ? pleft.sizeCalculated + this.padding : 0)\n t = height - (sbottom ? pbottom.sizeCalculated + this.padding : 0) - pprev.sizeCalculated\n w = width - (sleft ? pleft.sizeCalculated + this.padding : 0) -\n (sright ? pright.sizeCalculated + this.padding : 0)\n h = pprev.sizeCalculated\n query(this.box).find('#layout_'+ this.name +'_panel_preview')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px'\n })\n pprev.width = w\n pprev.height = h\n // resizer\n if (pprev.resizable) {\n t = t - (this.padding === 0 ? 0 : this.padding)\n h = (this.resizer > this.padding ? this.resizer : this.padding)\n // any: css(obj) returns string|Record|Query; cast needed to chain off/on\n ;(query(this.box).find('#layout_'+ this.name +'_resizer_preview')\n .css({\n 'display': 'block',\n 'left': l + 'px',\n 'top': t + 'px',\n 'width': w + 'px',\n 'height': h + 'px',\n 'cursor': 'ns-resize'\n }) as unknown as Query)\n .off('mousedown')\n .on('mousedown', function(event) {\n event.preventDefault()\n // event before\n const edata = self.trigger('resizerClick', { target: 'preview', originalEvent: event })\n if (edata.isCancelled === true) return\n // default action\n _TsUiRegistry()[self.name].last.events.resizeStart('preview', event)\n // event after\n edata.finish()\n return false\n })\n }\n } else {\n query(this.box).find('#layout_'+ this.name +'_panel_preview').hide()\n query(this.box).find('#layout_'+ this.name +'_resizer_preview').hide()\n }\n\n // resizes boxes for header, tabs, toolbar inside the panel\n this.resizeBoxes()\n\n edata.finish()\n return Date.now() - time\n }\n\n resizeBoxes(panel?: string) {\n const panels = w2panels\n if (!panel && typeof panel == 'string') panels.slice() // defensive copy if filtered\n // display tabs and toolbar if needed\n panels.forEach((pname, ind) => {\n const pan = w2panels[ind] != null ? this.get(w2panels[ind] as string) : null\n const tmp2 = `#layout_${this.name}_panel_${pname} > `\n let topHeight = 0\n if (pan) {\n if (pan.title) {\n const el = query(this.box).find(tmp2 + '.tsg-panel-title').css({ top: topHeight + 'px', display: 'block' })\n topHeight += TsUtils.getSize(el, 'height')\n }\n if (pan.show.tabs) {\n const el = query(this.box).find(tmp2 + '[data-role=\"panel-tabs\"]').css({ top: topHeight + 'px', display: 'block' })\n topHeight += TsUtils.getSize(el, 'height')\n }\n if (pan.show.toolbar) {\n const el = query(this.box).find(tmp2 + '[data-role=\"panel-toolbar\"]').css({ top: topHeight + 'px', display: 'block' })\n topHeight += TsUtils.getSize(el, 'height')\n }\n }\n query(this.box).find(tmp2 + '[data-role=\"panel-content\"]')\n .css({\n display: 'block',\n top: topHeight + 'px'\n })\n })\n }\n\n lock(panel: string, msg: unknown, showSpinner?: boolean) {\n if (w2panels.indexOf(panel as TsPanelType) == -1) {\n console.log('ERROR: First parameter needs to be the a valid panel name.')\n return\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TsUtils.lock('#layout_'+ this.name + '_panel_' + panel, msg as any, showSpinner) // any: msg is string|TsLockOptions; TsLockOptions not exported from TsUtils\n }\n\n unlock(panel: string, speed?: number) {\n if (w2panels.indexOf(panel as TsPanelType) == -1) {\n console.log('ERROR: First parameter needs to be the a valid panel name.')\n return\n }\n const nm = '#layout_'+ this.name + '_panel_' + panel\n TsUtils.unlock(nm, speed)\n }\n}\n\nexport { TsLayout }\n"],"mappings":"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","names":["query","edata"]}
|
package/dist/field.d.ts
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { TsBase } from './base.js';
|
|
2
|
+
import { Q as Query } from './query-CKGg5Ugv.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Part of TsUi 2.0 library
|
|
6
|
+
* - Dependencies: mQuery, TsUtils, TsBase, TsTooltip, TsColor, TsMenu, TsDate
|
|
7
|
+
*
|
|
8
|
+
* T4.1: Ported to TypeScript with aggressive typing per typing_policy.
|
|
9
|
+
* No @ts-nocheck. Targeted `any` sites documented with // any: comments.
|
|
10
|
+
* Discriminated union on `type` property for per-type option shapes.
|
|
11
|
+
*
|
|
12
|
+
* == TODO ==
|
|
13
|
+
* - upload (regular files)
|
|
14
|
+
* - BUG with prefix/postfix and arrows (test in different contexts)
|
|
15
|
+
* - multiple date selection
|
|
16
|
+
* - month selection, year selections
|
|
17
|
+
* - MultiSelect - Allow Copy/Paste for single and multi values
|
|
18
|
+
* - add routeData to list/enum
|
|
19
|
+
* - ENUM, LIST: should have same as grid (limit, offset, search, sort)
|
|
20
|
+
* - ENUM, LIST: should support wild chars
|
|
21
|
+
* - add selection of predefined times (used for appointments)
|
|
22
|
+
* - options.items - can be an array
|
|
23
|
+
* - options.msgNoItems - can be a function
|
|
24
|
+
* - REMOTE fields
|
|
25
|
+
*
|
|
26
|
+
* == 2.0 changes
|
|
27
|
+
* - removed jQuery dependency
|
|
28
|
+
* - enum options.autoAdd
|
|
29
|
+
* - [numeric, date] - options.autoCorrect to enforce range and validity
|
|
30
|
+
* - remote source response items => records or just an array
|
|
31
|
+
* - deprecated "success" field for remote source response
|
|
32
|
+
* - CSP - fixed inline events
|
|
33
|
+
* - remove clear, use reset instead
|
|
34
|
+
* - options.msgSearch
|
|
35
|
+
* - options.msgNoItems
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/** Shared numeric-field options (int, float, money, currency, percent, alphanumeric, bin, hex, text) */
|
|
39
|
+
interface TsFieldNumericOptions {
|
|
40
|
+
type?: string;
|
|
41
|
+
min?: number | null;
|
|
42
|
+
max?: number | null;
|
|
43
|
+
step?: number;
|
|
44
|
+
autoFormat?: boolean;
|
|
45
|
+
autoCorrect?: boolean;
|
|
46
|
+
currency?: {
|
|
47
|
+
prefix: string;
|
|
48
|
+
suffix: string;
|
|
49
|
+
precision: number;
|
|
50
|
+
};
|
|
51
|
+
decimalSymbol?: string;
|
|
52
|
+
groupSymbol?: string;
|
|
53
|
+
arrows?: boolean;
|
|
54
|
+
keyboard?: boolean;
|
|
55
|
+
precision?: number | null;
|
|
56
|
+
prefix?: string;
|
|
57
|
+
suffix?: string;
|
|
58
|
+
numberRE?: RegExp;
|
|
59
|
+
moneyRE?: RegExp;
|
|
60
|
+
percentRE?: RegExp;
|
|
61
|
+
[key: string]: any;
|
|
62
|
+
}
|
|
63
|
+
/** Color-field options */
|
|
64
|
+
interface TsFieldColorOptions {
|
|
65
|
+
type?: string;
|
|
66
|
+
prefix?: string;
|
|
67
|
+
suffix?: string;
|
|
68
|
+
arrows?: boolean;
|
|
69
|
+
advanced?: boolean | null;
|
|
70
|
+
transparent?: boolean;
|
|
71
|
+
[key: string]: any;
|
|
72
|
+
}
|
|
73
|
+
/** Date-field options */
|
|
74
|
+
interface TsFieldDateOptions {
|
|
75
|
+
type?: string;
|
|
76
|
+
format?: string;
|
|
77
|
+
keyboard?: boolean;
|
|
78
|
+
autoCorrect?: boolean;
|
|
79
|
+
start?: string | null;
|
|
80
|
+
end?: string | null;
|
|
81
|
+
blockDates?: string[];
|
|
82
|
+
blockWeekdays?: number[];
|
|
83
|
+
colored?: Record<string, string>;
|
|
84
|
+
btnNow?: boolean;
|
|
85
|
+
[key: string]: any;
|
|
86
|
+
}
|
|
87
|
+
/** Time-field options */
|
|
88
|
+
interface TsFieldTimeOptions {
|
|
89
|
+
type?: string;
|
|
90
|
+
format?: string;
|
|
91
|
+
keyboard?: boolean;
|
|
92
|
+
autoCorrect?: boolean;
|
|
93
|
+
start?: string | null;
|
|
94
|
+
end?: string | null;
|
|
95
|
+
btnNow?: boolean;
|
|
96
|
+
noMinutes?: boolean;
|
|
97
|
+
[key: string]: any;
|
|
98
|
+
}
|
|
99
|
+
/** DateTime-field options */
|
|
100
|
+
interface TsFieldDateTimeOptions {
|
|
101
|
+
type?: string;
|
|
102
|
+
format?: string;
|
|
103
|
+
keyboard?: boolean;
|
|
104
|
+
autoCorrect?: boolean;
|
|
105
|
+
start?: string | null;
|
|
106
|
+
end?: string | null;
|
|
107
|
+
startTime?: string | null;
|
|
108
|
+
endTime?: string | null;
|
|
109
|
+
blockDates?: string[];
|
|
110
|
+
blockWeekdays?: number[];
|
|
111
|
+
colored?: Record<string, string>;
|
|
112
|
+
btnNow?: boolean;
|
|
113
|
+
noMinutes?: boolean;
|
|
114
|
+
[key: string]: any;
|
|
115
|
+
}
|
|
116
|
+
/** List/combo-field options */
|
|
117
|
+
interface TsFieldListOptions {
|
|
118
|
+
type?: string;
|
|
119
|
+
items?: any[];
|
|
120
|
+
_items_fun?: ((...args: any[]) => any) | null;
|
|
121
|
+
selected?: Record<string, any> | null;
|
|
122
|
+
itemMap?: {
|
|
123
|
+
id: string;
|
|
124
|
+
text: string;
|
|
125
|
+
} | null;
|
|
126
|
+
match?: 'contains' | 'is' | 'begins' | 'ends';
|
|
127
|
+
filter?: boolean;
|
|
128
|
+
compare?: ((...args: any[]) => any) | null;
|
|
129
|
+
prefix?: string;
|
|
130
|
+
suffix?: string;
|
|
131
|
+
icon?: string | null;
|
|
132
|
+
iconStyle?: string;
|
|
133
|
+
url?: string | null;
|
|
134
|
+
method?: string | null;
|
|
135
|
+
postData?: Record<string, unknown>;
|
|
136
|
+
recId?: string | ((item: any) => any) | null;
|
|
137
|
+
recText?: string | ((item: any) => any) | null;
|
|
138
|
+
debounce?: number;
|
|
139
|
+
minLength?: number;
|
|
140
|
+
cacheMax?: number;
|
|
141
|
+
renderDrop?: ((...args: any[]) => string) | null;
|
|
142
|
+
maxDropHeight?: number;
|
|
143
|
+
maxDropWidth?: number | null;
|
|
144
|
+
minDropWidth?: number | null;
|
|
145
|
+
markSearch?: boolean;
|
|
146
|
+
align?: 'left' | 'right' | 'both' | 'none';
|
|
147
|
+
altRows?: boolean;
|
|
148
|
+
openOnFocus?: boolean;
|
|
149
|
+
hideSelected?: boolean;
|
|
150
|
+
msgNoItems?: string;
|
|
151
|
+
msgSearch?: string;
|
|
152
|
+
onSearch?: ((...args: any[]) => void) | null;
|
|
153
|
+
onRequest?: ((...args: any[]) => void) | null;
|
|
154
|
+
onLoad?: ((...args: any[]) => void) | null;
|
|
155
|
+
onError?: ((...args: any[]) => void) | null;
|
|
156
|
+
index?: number[];
|
|
157
|
+
[key: string]: any;
|
|
158
|
+
}
|
|
159
|
+
/** Enum-field options */
|
|
160
|
+
interface TsFieldEnumOptions {
|
|
161
|
+
type?: string;
|
|
162
|
+
items?: any[];
|
|
163
|
+
_items_fun?: ((...args: any[]) => any) | null;
|
|
164
|
+
selected?: any[];
|
|
165
|
+
itemMap?: {
|
|
166
|
+
id: string;
|
|
167
|
+
text: string;
|
|
168
|
+
} | null;
|
|
169
|
+
max?: number;
|
|
170
|
+
match?: 'contains' | 'is' | 'begins' | 'ends';
|
|
171
|
+
filter?: boolean;
|
|
172
|
+
compare?: ((...args: any[]) => any) | null;
|
|
173
|
+
url?: string | null;
|
|
174
|
+
method?: string | null;
|
|
175
|
+
postData?: Record<string, unknown>;
|
|
176
|
+
recId?: string | ((item: any) => any) | null;
|
|
177
|
+
recText?: string | ((item: any) => any) | null;
|
|
178
|
+
debounce?: number;
|
|
179
|
+
minLength?: number;
|
|
180
|
+
cacheMax?: number;
|
|
181
|
+
maxItemWidth?: number;
|
|
182
|
+
maxDropHeight?: number;
|
|
183
|
+
maxDropWidth?: number | null;
|
|
184
|
+
renderItem?: ((item: any, ind: number, removeBtn: string) => string) | null;
|
|
185
|
+
renderDrop?: ((...args: any[]) => string) | null;
|
|
186
|
+
style?: string;
|
|
187
|
+
openOnFocus?: boolean;
|
|
188
|
+
markSearch?: boolean;
|
|
189
|
+
align?: 'left' | 'right' | 'both' | 'none';
|
|
190
|
+
altRows?: boolean;
|
|
191
|
+
hideSelected?: boolean;
|
|
192
|
+
msgNoItems?: string;
|
|
193
|
+
msgSearch?: string;
|
|
194
|
+
onAdd?: ((...args: any[]) => void) | null;
|
|
195
|
+
onNew?: ((...args: any[]) => void) | null;
|
|
196
|
+
onRemove?: ((...args: any[]) => void) | null;
|
|
197
|
+
onSearch?: ((...args: any[]) => void) | null;
|
|
198
|
+
onClick?: ((...args: any[]) => void) | null;
|
|
199
|
+
onRequest?: ((...args: any[]) => void) | null;
|
|
200
|
+
onLoad?: ((...args: any[]) => void) | null;
|
|
201
|
+
onError?: ((...args: any[]) => void) | null;
|
|
202
|
+
onScroll?: ((...args: any[]) => void) | null;
|
|
203
|
+
onMouseEnter?: ((...args: any[]) => void) | null;
|
|
204
|
+
onMouseLeave?: ((...args: any[]) => void) | null;
|
|
205
|
+
[key: string]: any;
|
|
206
|
+
}
|
|
207
|
+
/** File-field options */
|
|
208
|
+
interface TsFieldFileOptions {
|
|
209
|
+
type?: string;
|
|
210
|
+
selected?: any[];
|
|
211
|
+
max?: number;
|
|
212
|
+
maxSize?: number;
|
|
213
|
+
maxFileSize?: number;
|
|
214
|
+
renderItem?: ((item: any, ind: number, removeBtn: string) => string) | null;
|
|
215
|
+
maxItemWidth?: number;
|
|
216
|
+
maxDropHeight?: number;
|
|
217
|
+
maxDropWidth?: number | null;
|
|
218
|
+
readContent?: boolean;
|
|
219
|
+
showErrors?: boolean;
|
|
220
|
+
align?: 'left' | 'right' | 'both' | 'none';
|
|
221
|
+
altRows?: boolean;
|
|
222
|
+
style?: string;
|
|
223
|
+
onClick?: ((...args: any[]) => void) | null;
|
|
224
|
+
onAdd?: ((...args: any[]) => void) | null;
|
|
225
|
+
onRemove?: ((...args: any[]) => void) | null;
|
|
226
|
+
onMouseEnter?: ((...args: any[]) => void) | null;
|
|
227
|
+
onMouseLeave?: ((...args: any[]) => void) | null;
|
|
228
|
+
[key: string]: any;
|
|
229
|
+
}
|
|
230
|
+
/** Discriminated union: all possible options for a TsField instance */
|
|
231
|
+
type TsFieldOptions = TsFieldNumericOptions | TsFieldColorOptions | TsFieldDateOptions | TsFieldTimeOptions | TsFieldDateTimeOptions | TsFieldListOptions | TsFieldEnumOptions | TsFieldFileOptions;
|
|
232
|
+
/** Constructor input — the type discriminant lives here */
|
|
233
|
+
interface TsFieldInput {
|
|
234
|
+
type?: string;
|
|
235
|
+
el?: HTMLElement | null;
|
|
236
|
+
onClick?: ((...args: any[]) => void) | null;
|
|
237
|
+
onAdd?: ((...args: any[]) => void) | null;
|
|
238
|
+
onNew?: ((...args: any[]) => void) | null;
|
|
239
|
+
onRemove?: ((...args: any[]) => void) | null;
|
|
240
|
+
onMouseEnter?: ((...args: any[]) => void) | null;
|
|
241
|
+
onMouseLeave?: ((...args: any[]) => void) | null;
|
|
242
|
+
onScroll?: ((...args: any[]) => void) | null;
|
|
243
|
+
[key: string]: any;
|
|
244
|
+
}
|
|
245
|
+
/** Helper elements bag */
|
|
246
|
+
interface TsFieldHelpers {
|
|
247
|
+
prefix?: HTMLElement | null;
|
|
248
|
+
suffix?: HTMLElement | null;
|
|
249
|
+
arrows?: HTMLElement | null;
|
|
250
|
+
search?: HTMLElement | null;
|
|
251
|
+
search_focus?: HTMLInputElement;
|
|
252
|
+
multi?: Query;
|
|
253
|
+
[key: string]: any;
|
|
254
|
+
}
|
|
255
|
+
/** Temp state bag */
|
|
256
|
+
interface TsFieldTmp {
|
|
257
|
+
'old-padding-left'?: string | null;
|
|
258
|
+
'old-padding-right'?: string | null;
|
|
259
|
+
'old-background-color'?: string;
|
|
260
|
+
'old-border-color'?: string;
|
|
261
|
+
'old-tabIndex'?: number;
|
|
262
|
+
'min-height'?: number;
|
|
263
|
+
'max-height'?: number;
|
|
264
|
+
'current_width'?: number;
|
|
265
|
+
pholder?: string;
|
|
266
|
+
overlay?: any;
|
|
267
|
+
openedOnFocus?: boolean;
|
|
268
|
+
sizeTimer?: ReturnType<typeof setInterval>;
|
|
269
|
+
[key: string]: any;
|
|
270
|
+
}
|
|
271
|
+
declare global {
|
|
272
|
+
interface HTMLElement {
|
|
273
|
+
_w2field?: TsField;
|
|
274
|
+
}
|
|
275
|
+
interface HTMLInputElement {
|
|
276
|
+
_w2field?: TsField;
|
|
277
|
+
}
|
|
278
|
+
interface HTMLTextAreaElement {
|
|
279
|
+
_w2field?: TsField;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
type TsFieldElement = HTMLInputElement | HTMLTextAreaElement;
|
|
283
|
+
declare class TsField extends TsBase {
|
|
284
|
+
el: TsFieldElement | null;
|
|
285
|
+
selected: any;
|
|
286
|
+
helpers: TsFieldHelpers;
|
|
287
|
+
type: string;
|
|
288
|
+
options: TsFieldOptions;
|
|
289
|
+
onClick: ((...args: any[]) => void) | null;
|
|
290
|
+
onAdd: ((...args: any[]) => void) | null;
|
|
291
|
+
onNew: ((...args: any[]) => void) | null;
|
|
292
|
+
onRemove: ((...args: any[]) => void) | null;
|
|
293
|
+
onMouseEnter: ((...args: any[]) => void) | null;
|
|
294
|
+
onMouseLeave: ((...args: any[]) => void) | null;
|
|
295
|
+
onScroll: ((...args: any[]) => void) | null;
|
|
296
|
+
tmp: TsFieldTmp;
|
|
297
|
+
constructor(type: string | TsFieldInput, options?: TsFieldInput);
|
|
298
|
+
render(el: HTMLElement): void;
|
|
299
|
+
init(): void;
|
|
300
|
+
get(): any;
|
|
301
|
+
set(val: any, append?: boolean): void;
|
|
302
|
+
setIndex(ind: number, append?: boolean): boolean;
|
|
303
|
+
refresh(): number;
|
|
304
|
+
resize(): void;
|
|
305
|
+
reset(): void;
|
|
306
|
+
clean(val: any): any;
|
|
307
|
+
format(val: any): any;
|
|
308
|
+
change(event: Event): false | void;
|
|
309
|
+
click(event: MouseEvent): void;
|
|
310
|
+
focus(event: FocusEvent & {
|
|
311
|
+
showMenu?: boolean;
|
|
312
|
+
}): void;
|
|
313
|
+
blur(_event: FocusEvent): void;
|
|
314
|
+
keyDown(event: KeyboardEvent, extra?: {
|
|
315
|
+
keyCode?: number;
|
|
316
|
+
}): false | void;
|
|
317
|
+
keyUp(event: KeyboardEvent): void;
|
|
318
|
+
findItemIndex(items: any[], id: any, parents?: number[]): number[];
|
|
319
|
+
updateOverlay(_indexOnly?: boolean): void;
|
|
320
|
+
isStrValid(ch: string, loose?: boolean): boolean;
|
|
321
|
+
addPrefix(): void;
|
|
322
|
+
addSuffix(): void;
|
|
323
|
+
addSearch(): void;
|
|
324
|
+
addMultiSearch(): void;
|
|
325
|
+
addFile(file: File): void;
|
|
326
|
+
moveCaret2end(): void;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
export { TsField, type TsFieldColorOptions, type TsFieldDateOptions, type TsFieldDateTimeOptions, type TsFieldElement, type TsFieldEnumOptions, type TsFieldFileOptions, type TsFieldListOptions, type TsFieldNumericOptions, type TsFieldOptions, type TsFieldTimeOptions };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TsField
|
|
3
|
+
} from "./chunks/chunk-KLJ35UAH.js";
|
|
4
|
+
import "./chunks/chunk-FAIRNXQR.js";
|
|
5
|
+
import "./chunks/chunk-EQK6JAHT.js";
|
|
6
|
+
import "./chunks/chunk-3NYH6545.js";
|
|
7
|
+
import "./chunks/chunk-IYF3Q7GX.js";
|
|
8
|
+
import "./chunks/chunk-DXZJHS4M.js";
|
|
9
|
+
export {
|
|
10
|
+
TsField
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=field.es6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|