tsgrid-ui 2.7.1 → 2.9.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 +173 -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-26XP2XU3.js +1795 -0
- package/dist/chunks/chunk-26XP2XU3.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-BIB3X2TW.js +1638 -0
- package/dist/chunks/chunk-BIB3X2TW.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-EVZMMVXO.js +1212 -0
- package/dist/chunks/chunk-EVZMMVXO.js.map +1 -0
- package/dist/chunks/chunk-GJD5NFWQ.js +2305 -0
- package/dist/chunks/chunk-GJD5NFWQ.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-OFASTA2A.js +2980 -0
- package/dist/chunks/chunk-OFASTA2A.js.map +1 -0
- package/dist/chunks/chunk-OMLGN735.js +677 -0
- package/dist/chunks/chunk-OMLGN735.js.map +1 -0
- package/dist/chunks/chunk-WKSLGUB3.js +1127 -0
- package/dist/chunks/chunk-WKSLGUB3.js.map +1 -0
- package/dist/chunks/chunk-YBY52G2U.js +849 -0
- package/dist/chunks/chunk-YBY52G2U.js.map +1 -0
- package/dist/field.d.ts +329 -0
- package/dist/field.es6.js +11 -0
- package/dist/field.es6.js.map +1 -0
- package/dist/form.d.ts +162 -0
- package/dist/form.es6.js +14 -0
- package/dist/form.es6.js.map +1 -0
- package/dist/layout.d.ts +108 -0
- package/dist/layout.es6.js +13 -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/metafile-esm.json +1 -0
- package/dist/popup.d.ts +92 -0
- package/dist/popup.es6.js +18 -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 +11 -0
- package/dist/sidebar.es6.js.map +1 -0
- package/dist/tabs.d.ts +63 -0
- package/dist/tabs.es6.js +11 -0
- package/dist/tabs.es6.js.map +1 -0
- package/dist/toolbar.d.ts +97 -0
- package/dist/toolbar.es6.js +11 -0
- package/dist/toolbar.es6.js.map +1 -0
- package/dist/tooltip.d.ts +322 -0
- package/dist/tooltip.es6.js +18 -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 +7750 -23830
- package/dist/tsgrid-ui.es6.js.map +1 -1
- package/dist/tsgrid-ui.es6.min.js +28 -28
- package/dist/tsgrid-ui.js +96 -17
- package/dist/tsgrid-ui.min.css +2 -2
- package/dist/tsgrid-ui.min.js +24 -24
- 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 +26 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tspopup.ts"],"sourcesContent":["/**\n * Part of TsUi 2.0 library\n * - Dependencies: mQuery, TsUtils, TsBase\n *\n * == 2.0 changes\n * - CSP - fixed inline events\n * - removed jQuery dependency\n * - popup.open - returns promise like object\n * - popup.confirm - refactored\n * - popup.message - refactored\n * - removed popup.options.mutliple\n * - refactores TsAlert, TsConfirm, TsPrompt\n * - add TsPopup.open().on('')\n * - removed TsPopup.restoreTemplate\n * - deprecated onMsgOpen and onMsgClose\n * - deprecated options.bgColor\n * - rename focus -> setFocus\n * - added center() // will auto center on window resize\n * - close(immediate), also refactored if popup is closed when opening\n * - options.resizable\n * - actions in popup can be just html (for example separator)\n * - resize - returns promise\n */\n\nimport { TsBase } from './tsbase.js'\nimport { TsUtils } from './tsutils.js'\nimport { query as _queryRaw, Query } from './query.js'\n// any: query() returns Query|void but is always used in chain; cast once here\nconst query = _queryRaw as (selector: unknown, context?: unknown) => Query\n\ninterface DialogOptions {\n title?: string\n text?: string\n body?: string\n buttons?: string\n width?: number\n height?: number\n focus?: number | string | null\n actions?: Record<string, unknown> | null\n style?: string\n speed?: number\n blockPage?: boolean\n modal?: boolean\n maximized?: boolean\n keyboard?: boolean\n showClose?: boolean\n showMax?: boolean\n resizable?: boolean\n transition?: unknown\n openMaximized?: boolean\n moved?: boolean\n prevSize?: string | null\n cancelAction?: string\n closingTimer?: ReturnType<typeof setTimeout>\n _last_focus?: HTMLElement | null\n [key: string]: unknown\n}\n\nclass TsDialog extends TsBase {\n defaults: DialogOptions\n options!: DialogOptions // definite assignment: set in open() before any property access\n declare name: string\n status: string\n tmp: Record<string, unknown>\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleResize: (event?: any) => void\n _promCreated!: (value?: unknown) => void\n _promOpened!: (value?: unknown) => void\n _promClosing!: (value?: unknown) => void\n _promClosed!: (value?: unknown) => void\n _timer?: ReturnType<typeof setTimeout>\n\n constructor() {\n super()\n this.defaults = {\n title: '',\n text: '', // just a text (will be centered)\n body: '',\n buttons: '',\n width: 450,\n height: 250,\n focus: null, // brings focus to the element, can be a number or selector\n actions: null, // actions object\n style: '', // style of the message div\n speed: 0.3,\n blockPage: true,\n modal: false,\n maximized: false, // this is a flag to show the state - to open the popup maximized use openMaximized instead\n keyboard: true, // will close popup on esc if not modal\n showClose: true,\n showMax: false,\n resizable: false,\n transition: null,\n openMaximized: false,\n moved: false\n }\n this.name = 'popup'\n this.status = 'closed' // string that describes current status\n this['onOpen'] = null\n this['onClose'] = null\n this['onMax'] = null\n this['onMin'] = null\n this['onToggle'] = null\n this['onKeydown'] = null\n this['onAction'] = null\n this['onMove'] = null\n this.tmp = {}\n // event handler for resize\n this.handleResize = (_event) => {\n // if it was moved by the user, do not auto resize\n if (!this.options.moved) {\n this.center(undefined, undefined, true)\n }\n }\n }\n\n /**\n * Sample calls\n * - TsPopup.open('ddd').ok(() => { TsPopup.close() })\n * - TsPopup.open('ddd', { height: 120 }).ok(() => { TsPopup.close() })\n * - TsPopup.open({ body: 'text', title: 'caption', actions: [\"Close\"] }).close(() => { TsPopup.close() })\n * - TsPopup.open({ body: 'text', title: 'caption', actions: { Close() { TsPopup.close() }} })\n */\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n open(options?: any, extraOptions?: any) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n if (this.status == 'closing' || query('#tsg-popup').hasClass('animating')) {\n // if called when previous is closing\n this.close(true)\n }\n // get old options and merge them\n const old_options = this.options\n if (['string', 'number'].includes(typeof options)) {\n options = TsUtils.extend({\n title: 'Notification',\n body: `<div class=\"tsg-centered\">${options}</div>`,\n actions: { Ok() { self.close() }},\n cancelAction: 'ok'\n }, extraOptions ?? {})\n }\n if (options.text != null) options.body = `<div class=\"tsg-centered tsg-msg-text\">${options.text}</div>`\n options = Object.assign({}, this.defaults, old_options, { title: '', body : '' }, options, { maximized: false })\n this.options = options\n // if new - reset event handlers\n if (query('#tsg-popup').length === 0) {\n this.off('*')\n Object.keys(this).forEach(key => {\n if (key.startsWith('on') && key != 'on') this[key] = null\n })\n }\n // reassign events\n Object.keys(options).forEach(key => {\n if (key.startsWith('on') && key != 'on' && options[key]) {\n this[key] = options[key]\n }\n })\n options.width = parseInt(options.width)\n options.height = parseInt(options.height)\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let edata: any, msg: any // any: TsEvent + dynamic message state\n const { top, left, width, height } = this.center()\n // make sure popup is not bigger then available screen\n if (options.width > width) options.width = width\n if (options.height > height) options.height = height\n\n const prom: Record<string, unknown> & {\n self: TsDialog\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n action(callBack: any): typeof prom // any: callback event shape is dynamic\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close(callBack: any): typeof prom // any: callback event shape is dynamic\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n then(callBack: any): typeof prom // any: callback event shape is dynamic\n } = {\n self: this,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n action(callBack: any) { // any: action callback event shape is dynamic\n self.on('action.prom', callBack)\n return prom\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close(callBack: any) { // any: close callback event shape is dynamic\n self.on('close.prom', callBack)\n return prom\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n then(callBack: any) { // any: then callback event shape is dynamic\n self.on('open:after.prom', callBack)\n return prom\n }\n }\n // convert action arrays into buttons\n if (options.actions != null && !options.buttons) {\n options.buttons = ''\n Object.keys(options.actions).forEach((action) => {\n const handler = options.actions[action]\n let btnAction = action\n if (typeof handler == 'function') {\n options.buttons += `<button class=\"tsg-btn tsg-eaction\" name=\"${action}\" data-click='[\"action\",\"${action}\",\"event\"]'>${action}</button>`\n }\n if (typeof handler == 'object') {\n options.buttons += `<button class=\"tsg-btn tsg-eaction ${handler.class || ''}\" name=\"${action}\" data-click='[\"action\",\"${action}\",\"event\"]'\n style=\"${handler.style}\" ${handler.attrs}>${handler.text || action}</button>`\n btnAction = Array.isArray(options.actions) ? handler.text : action\n }\n if (typeof handler == 'string') {\n if (handler.trim().startsWith('<')) {\n btnAction = 'none'\n options.buttons += handler\n\n } else {\n btnAction = (handler[0] ?? '').toLowerCase() + handler.substr(1).replace(/\\s+/g, '')\n options.buttons += `<button class=\"tsg-btn tsg-eaction\" name=\"${action}\" data-click='[\"action\",\"${btnAction}\",\"event\"]'>${handler}</button>`\n }\n }\n if (typeof btnAction == 'string') {\n btnAction = (btnAction[0] ?? '').toLowerCase() + btnAction.substr(1).replace(/\\s+/g, '')\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prom[btnAction] = function (callBack: any) { // any: button action callback event shape is dynamic\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n self.on('action.buttons', (event: any) => { // any: action event has dynamic detail\n const target = (event.detail.action[0] ?? '').toLowerCase() + event.detail.action.substr(1).replace(/\\s+/g, '')\n if (target == btnAction) callBack(event)\n })\n return prom\n }\n })\n }\n // check if message is already displayed\n let titleBtns = ''\n if (options.showClose) {\n titleBtns += `<div class=\"tsg-popup-button tsg-popup-close\">\n <span class=\"tsg-icon tsg-icon-cross tsg-eaction\" data-mousedown=\"stop\" data-click=\"close\"></span>\n </div>`\n }\n if (options.showMax) {\n titleBtns += `<div class=\"tsg-popup-button tsg-popup-max\">\n <span class=\"tsg-icon tsg-icon-box tsg-eaction\" data-mousedown=\"stop\" data-click=\"toggle\"></span>\n </div>`\n }\n\n if (query('#tsg-popup').length === 0) {\n // trigger event\n edata = this.trigger('open', { target: 'popup', present: false })\n if (edata.isCancelled === true) return\n this.status = 'opening'\n // output message\n if (options.blockPage) {\n TsUtils.lock(document.body, {\n opacity: 0.3,\n ...(options.modal ? {} : { onClick: () => { this.close() } })\n })\n }\n // first insert just body\n let styles = `\n left: ${left}px;\n top: ${top}px;\n width: ${parseInt(options.width)}px;\n height: ${parseInt(options.height)}px;\n transition: ${options.speed}s\n `\n msg = `<div id=\"tsg-popup\" class=\"tsg-popup tsg-anim-open animating ${!options.blockPage ? 'tsg-non-blocking' : ''}\" style=\"${TsUtils.stripSpaces(styles)}\"></div>`\n query('body').append(msg)\n // any: cast-to-any for dynamic dispatch; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(query('#tsg-popup')[0] as any)._w2popup = {\n self: this,\n created: new Promise((resolve) => { this._promCreated = resolve }),\n opened: new Promise((resolve) => { this._promOpened = resolve }),\n closing: new Promise((resolve) => { this._promClosing = resolve }),\n closed: new Promise((resolve) => { this._promClosed = resolve }),\n }\n // then content\n styles = `${!options.title ? 'top: 0px !important;' : ''} ${!options.buttons ? 'bottom: 0px !important;' : ''}`\n msg = `\n <span name=\"hidden-first\" tabindex=\"0\" style=\"position: absolute; top: -100px\"></span>\n <div class=\"tsg-popup-title-btns\">${titleBtns}</div>\n <div class=\"tsg-popup-title\" style=\"${!options.title ? 'display: none' : ''}\"></div>\n <div class=\"tsg-box\" style=\"${styles}\">\n <div class=\"tsg-popup-body ${!options.title || ' tsg-popup-no-title'}\n ${!options.buttons || ' tsg-popup-no-buttons'}\" style=\"${options.style}\">\n </div>\n </div>\n <div class=\"tsg-popup-buttons\" style=\"${!options.buttons ? 'display: none' : ''}\"></div>\n <div class=\"tsg-popup-resizer resize-point resize-icon\"></div>\n <span name=\"hidden-last\" tabindex=\"0\" style=\"position: absolute; top: -100px\"></span>\n `\n query('#tsg-popup').html(msg)\n\n if (options.title) query('#tsg-popup .tsg-popup-title').append(TsUtils.lang(options.title))\n if (options.buttons) query('#tsg-popup .tsg-popup-buttons').append(options.buttons)\n if (options.body) query('#tsg-popup .tsg-popup-body').append(options.body)\n\n // allow element to render\n setTimeout(() => {\n ;(query('#tsg-popup')\n .css('transition', options.speed + 's') as unknown as Query)\n .removeClass('tsg-anim-open')\n TsUtils.bindEvents('#tsg-popup .tsg-eaction', this)\n query('#tsg-popup').find('.tsg-popup-body').show()\n this._promCreated()\n }, 1)\n // clean transform\n clearTimeout(this._timer)\n this._timer = setTimeout(() => {\n this.status = 'open'\n self.setFocus(options.focus)\n // event after\n edata.finish()\n this._promOpened()\n query('#tsg-popup').removeClass('animating')\n }, options.speed * 1000)\n\n } else {\n // trigger event\n edata = this.trigger('open', { target: 'popup', present: true })\n if (edata.isCancelled === true) return\n // check if size changed\n this.status = 'opening'\n if (old_options != null) {\n if (!old_options.maximized && (old_options.width != options.width || old_options.height != options.height)) {\n this.resize(options.width, options.height)\n }\n options.prevSize = options.width + 'px:' + options.height + 'px'\n options.maximized = old_options.maximized\n }\n // show new items\n const cloned = (query('#tsg-popup .tsg-box').get(0) as Node).cloneNode(true)\n query(cloned as HTMLElement).removeClass('tsg-box').addClass('tsg-box-temp').find('.tsg-popup-body').empty().append(options.body as string)\n query('#tsg-popup .tsg-box').after(cloned)\n\n if (options.buttons) {\n ;(query('#tsg-popup .tsg-popup-buttons').show().html('') as unknown as Query).append(options.buttons as string)\n query('#tsg-popup .tsg-popup-body').removeClass('tsg-popup-no-buttons')\n query('#tsg-popup .tsg-box, #tsg-popup .tsg-box-temp').css('bottom', '')\n } else {\n query('#tsg-popup .tsg-popup-buttons').hide().html('')\n query('#tsg-popup .tsg-popup-body').addClass('tsg-popup-no-buttons')\n query('#tsg-popup .tsg-box, #tsg-popup .tsg-box-temp').css('bottom', '0px')\n }\n if (options.title) {\n query('#tsg-popup .tsg-popup-title')\n .show()\n .html(TsUtils.lang(options.title))\n query('#tsg-popup .tsg-popup-body').removeClass('tsg-popup-no-title')\n query('#tsg-popup .tsg-box, #tsg-popup .tsg-box-temp').css('top', '')\n } else {\n query('#tsg-popup .tsg-popup-title').hide().html('')\n query('#tsg-popup .tsg-popup-body').addClass('tsg-popup-no-title')\n query('#tsg-popup .tsg-box, #tsg-popup .tsg-box-temp').css('top', '0px')\n }\n if (titleBtns) {\n query('#tsg-popup .tsg-popup-title-btns')\n .show()\n .html(titleBtns)\n } else {\n query('#tsg-popup .tsg-popup-title-btns')\n .hide()\n }\n // transition\n const div_old = query('#tsg-popup .tsg-box')[0] as HTMLElement\n const div_new = query('#tsg-popup .tsg-box-temp')[0] as HTMLElement\n query('#tsg-popup').addClass('animating')\n TsUtils.transition(div_old, div_new, options.transition as string, () => {\n // clean up\n query(div_old).remove()\n query(div_new).removeClass('tsg-box-temp').addClass('tsg-box')\n const $body = query(div_new).find('.tsg-popup-body')\n if ($body.length == 1) {\n ($body[0] as HTMLElement).style.cssText = options.style as string\n $body.show()\n }\n // focus on first button\n self.setFocus(options.focus)\n query('#tsg-popup').removeClass('animating')\n })\n // call event onOpen\n this.status = 'open'\n edata.finish()\n TsUtils.bindEvents('#tsg-popup .tsg-eaction', this)\n query('#tsg-popup').find('.tsg-popup-body').show()\n }\n\n if (options.openMaximized) {\n this.max()\n }\n // save new options\n options._last_focus = document.activeElement\n // keyboard events\n if (options.keyboard) {\n query(document.body)\n .off('.TsPopup')\n .on('keydown.TsPopup', (event) => {\n this.keydown(event)\n })\n }\n query(window).on('resize', this.handleResize)\n // initialize move; any: drag-state bag mutated dynamically in mvStart/mvMove/mvStop\n // any: parameter typed any — runtime dispatch by call site; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tmp: any = {\n changing : false,\n mvMove : mvMove,\n mvStop : mvStop\n }\n query('#tsg-popup .tsg-popup-title')\n .off('mousedown')\n .on('mousedown', function(event) {\n if (!self.options.maximized) mvStart(event)\n })\n\n if (options.resizable) {\n query('#tsg-popup .tsg-popup-resizer').show()\n query('#tsg-popup .tsg-popup-resizer')\n .off('mousedown')\n .on('mousedown', event => {\n mvStart(event, true)\n })\n } else {\n query('#tsg-popup .tsg-popup-resizer').hide()\n }\n\n return prom\n\n // handlers\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function mvStart(evt: any, resizer?: any) {\n if (!evt) evt = window.event\n self.status = resizer ? 'resizing' : 'moving'\n const rect = (query('#tsg-popup').get(0) as HTMLElement).getBoundingClientRect()\n Object.assign(tmp, {\n changing: true,\n isLocked: query('#tsg-popup > .tsg-lock').length == 1 ? true : false,\n x : evt.screenX,\n y : evt.screenY,\n pos_x : rect.x,\n pos_y : rect.y,\n width : rect.width,\n height : rect.height\n })\n if (!tmp.isLocked) self.lock({ opacity: 0 })\n query(document.body)\n .on('mousemove.tsg-popup', tmp.mvMove)\n .on('mouseup.tsg-popup', tmp.mvStop)\n if (evt.stopPropagation) evt.stopPropagation(); else evt.cancelBubble = true\n if (evt.preventDefault) evt.preventDefault(); else return false\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function mvMove(evt: any): void { // any: MouseEvent or window.event\n if (tmp.changing != true) return\n if (!evt) evt = window.event\n tmp.div_x = evt.screenX - tmp.x\n tmp.div_y = evt.screenY - tmp.y\n // trigger event\n const edata = self.trigger('move', { target: 'popup', div_x: tmp.div_x, div_y: tmp.div_y, originalEvent: evt })\n if (edata.isCancelled === true) return\n // default behavior\n if (self.status == 'moving') {\n query('#tsg-popup').css({\n 'transition': 'none',\n 'transform' : 'translate3d('+ tmp.div_x +'px, '+ tmp.div_y +'px, 0px)'\n })\n self.options.moved = true\n } else {\n query('#tsg-popup').css({\n transition: 'none',\n width: (tmp.width + tmp.div_x) + 'px',\n height: (tmp.height + tmp.div_y) + 'px'\n })\n }\n // event after\n edata.finish()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function mvStop(evt: any): void { // any: MouseEvent or window.event\n if (tmp.changing != true) return\n if (!evt) evt = window.event\n tmp.div_x = (evt.screenX - tmp.x)\n tmp.div_y = (evt.screenY - tmp.y)\n if (self.status == 'moving') {\n ;(query('#tsg-popup')\n .css({\n 'left': (tmp.pos_x + tmp.div_x) + 'px',\n 'top' : (tmp.pos_y + tmp.div_y) + 'px'\n }) as unknown as Query)\n .css({\n 'transition': 'none',\n 'transform' : 'translate3d(0px, 0px, 0px)'\n })\n } else {\n query('#tsg-popup').css({\n transition: 'none',\n width: (tmp.width + tmp.div_x) + 'px',\n height: (tmp.height + tmp.div_y) + 'px'\n })\n self.resizeMessages()\n }\n tmp.changing = false\n self.status = 'open'\n query(document.body).off('.tsg-popup')\n if (!tmp.isLocked) self.unlock()\n }\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n load(options: any) {\n return new Promise((resolve, reject) => {\n if (typeof options == 'string') {\n options = { url: options }\n }\n if (options.url == null) {\n console.log('ERROR: The url is not defined.')\n reject('The url is not defined')\n return\n }\n this.status = 'loading'\n const [url, selector] = String(options.url).split('#')\n if (url) {\n fetch(url).then(res => res.text()).then(html => {\n resolve(this.template(html, selector, options))\n })\n }\n })\n }\n\n // any: parameter typed any — runtime dispatch by call site; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template(data: any, id: any, options: any = {}) {\n let html\n try {\n html = query(data)\n } catch (e) {\n // any: cast-to-any for dynamic dispatch; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n html = (_queryRaw as any).html(data)\n }\n if (id) html = html.filter('#' + id)\n Object.assign(options, {\n width: parseInt(query(html).css('width') as string),\n height: parseInt(query(html).css('height') as string),\n title: query(html).find('[rel=title]').html(),\n body: query(html).find('[rel=body]').html(),\n buttons: query(html).find('[rel=buttons]').html(),\n style: (query(html).find('[rel=body]').get(0) as HTMLElement).style.cssText,\n })\n return this.open(options)\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n action(action: any, event?: any) {\n // any: parameter typed any — runtime dispatch by call site; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let click: any = this.options.actions?.[action]\n // any: cast-to-any for dynamic dispatch; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (click instanceof Object && (click as any).onClick) click = (click as any).onClick\n // event before\n const edata = this.trigger('action', { action, target: 'popup', self: this,\n // any: cast-to-any for dynamic dispatch; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n originalEvent: event, value: this['input'] ? (this['input'] as any).value : null })\n if (edata.isCancelled === true) return\n // default actions\n if (typeof click === 'function') click.call(this, event)\n // event after\n edata.finish()\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keydown(event: any) {\n if (this.options && !this.options.keyboard) return\n // trigger event\n const edata = this.trigger('keydown', { target: 'popup', originalEvent: event })\n if (edata.isCancelled === true) return\n // default behavior\n switch (event.keyCode) {\n case 27:\n event.preventDefault()\n if (query('#tsg-popup .tsg-message').length == 0) {\n if (this.options.cancelAction) {\n this.action(this.options.cancelAction)\n } else {\n this.close()\n }\n }\n break\n }\n // event after\n edata.finish()\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close(immediate?: any) {\n // trigger event\n const edata = this.trigger('close', { target: 'popup' })\n if (edata.isCancelled === true) return\n const cleanUp = () => {\n // return template\n query('#tsg-popup').remove()\n // restore active\n if (this.options._last_focus) this.options._last_focus.focus()\n this.status = 'closed'\n this.options = {}\n // event after\n edata.finish()\n this._promClosed()\n }\n if (query('#tsg-popup').length === 0 || this.status == 'closed') { // already closed\n return\n }\n if (this.status == 'opening') { // if it is opening\n immediate = true\n }\n if (this.status == 'closing' && immediate === true) {\n cleanUp()\n clearTimeout(this.tmp['closingTimer'] as ReturnType<typeof setTimeout>)\n TsUtils.unlock(document.body, 0)\n return\n }\n // default behavior\n this.status = 'closing'\n ;(query('#tsg-popup')\n .css('transition', this.options.speed + 's') as unknown as Query)\n .addClass('tsg-anim-close animating')\n TsUtils.unlock(document.body, 300)\n this._promClosing()\n\n if (immediate) {\n cleanUp()\n } else {\n this.tmp['closingTimer'] = setTimeout(cleanUp, (this.options.speed ?? 0.3) * 1000)\n }\n // remove keyboard events\n if (this.options.keyboard) {\n query(document.body).off('keydown', this.keydown)\n }\n query(window).off('resize', this.handleResize)\n }\n\n toggle() {\n const edata = this.trigger('toggle', { target: 'popup' })\n if (edata.isCancelled === true) return\n // default action\n if (this.options.maximized === true) this.min(); else this.max()\n // event after\n setTimeout(() => {\n edata.finish()\n }, ((this.options.speed ?? 0.3) * 1000) + 50)\n }\n\n max() {\n if (this.options.maximized === true) return\n // trigger event\n const edata = this.trigger('max', { target: 'popup' })\n if (edata.isCancelled === true) return\n // default behavior\n this.status = 'resizing'\n const rect = (query('#tsg-popup').get(0) as HTMLElement).getBoundingClientRect()\n this.options.prevSize = rect.width + ':' + rect.height\n // do resize\n this.resize(10000, 10000, () => {\n this.status = 'open'\n this.options.maximized = true\n edata.finish()\n })\n }\n\n min() {\n if (this.options.maximized !== true) return\n const size = (this.options.prevSize ?? '').split(':')\n // trigger event\n const edata = this.trigger('min', { target: 'popup' })\n if (edata.isCancelled === true) return\n // default behavior\n this.status = 'resizing'\n // do resize\n this.options.maximized = false\n this.resize(parseInt(size[0] ?? '0'), parseInt(size[1] ?? '0'), () => {\n this.status = 'open'\n this.options.prevSize = null\n edata.finish()\n })\n }\n\n clear() {\n query('#tsg-popup .tsg-popup-title').html('')\n query('#tsg-popup .tsg-popup-body').html('')\n query('#tsg-popup .tsg-popup-buttons').html('')\n }\n\n reset() {\n this.open(this.defaults)\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n message(options: any) {\n return TsUtils.message({\n owner: this,\n box : query('#tsg-popup').get(0) as HTMLElement,\n after: '.tsg-popup-title'\n }, options)\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n confirm(options: any) {\n return TsUtils.confirm({\n owner: this,\n box : query('#tsg-popup').get(0) as HTMLElement,\n after: '.tsg-popup-title'\n }, options)\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setFocus(focus?: any) {\n const box = query('#tsg-popup')\n const sel = 'input, button, select, textarea, [contentEditable], [tabindex], .tsg-input'\n if (focus != null) {\n const el = isNaN(focus)\n ? box.find(sel).filter(focus).filter(':not([name=hidden-first])').get(0) as HTMLElement\n : box.find(sel).filter(':not([name=hidden-first])').get(focus) as HTMLElement\n el?.focus()\n } else {\n const el = box.find('[name=hidden-first]').get(0) as HTMLElement\n if (el) el.focus()\n }\n // keep focus/blur inside popup\n query(box).find(sel)\n .off('.keep-focus')\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on('blur.keep-focus', function (_event: any) {\n setTimeout(() => {\n const focus = document.activeElement\n // any: cast-to-any for dynamic dispatch; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inside = query(box).find(sel).filter(focus as any).length > 0\n // any: cast-to-any for dynamic dispatch; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const name = query(focus as any).attr('name')\n if (!inside && focus && focus !== document.body) {\n (query(box).find(sel).get(0) as HTMLElement)?.focus()\n }\n if (name == 'hidden-last') {\n (query(box).find(sel).get(1) as HTMLElement)?.focus()\n }\n if (name == 'hidden-first') {\n (query(box).find(sel).get(-2) as HTMLElement)?.focus()\n }\n }, 1)\n })\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lock(msg?: any, showSpinner?: any) {\n TsUtils.lock(query('#tsg-popup'), msg, showSpinner)\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n unlock(speed?: any) {\n TsUtils.unlock(query('#tsg-popup'), speed)\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n center(width?: any, height?: any, force?: any) {\n let maxW, maxH\n if (window.innerHeight == undefined) {\n maxW = Math.floor(document.documentElement.offsetWidth)\n maxH = Math.floor(document.documentElement.offsetHeight)\n } else {\n maxW = Math.floor(window.innerWidth)\n maxH = Math.floor(window.innerHeight)\n }\n width = parseInt(width ?? this.options.width)\n height = parseInt(height ?? this.options.height)\n if (this.options.maximized === true) {\n width = maxW\n height = maxH\n }\n if (maxW - 10 < width) width = maxW - 10\n if (maxH - 10 < height) height = maxH - 10\n const top = (maxH - height) / 3 // it is my oppinion that it is more estatic to show closer to top then in exact middle\n const left = (maxW - width) / 2\n if (force) {\n query('#tsg-popup').css({\n 'transition': 'none',\n 'top' : top + 'px',\n 'left' : left + 'px',\n 'width' : width + 'px',\n 'height': height + 'px'\n })\n this.resizeMessages() // then messages resize nicely\n }\n return { top, left, width, height }\n }\n\n // any: callback parameter — caller signature varies; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resize(newWidth: any, newHeight: any, callBack?: any) {\n return new Promise(resolve => {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n if (this.options.speed == null) this.options.speed = 0\n // calculate new position\n const { top, left, width, height } = this.center(newWidth, newHeight)\n const speed = this.options.speed\n query('#tsg-popup').css({\n 'transition': `${speed}s width, ${speed}s height, ${speed}s left, ${speed}s top`,\n 'top' : top + 'px',\n 'left' : left + 'px',\n 'width' : width + 'px',\n 'height': height + 'px'\n })\n const tmp_int = setInterval(() => { self.resizeMessages() }, 10) // then messages resize nicely\n setTimeout(() => {\n clearInterval(tmp_int)\n self.resizeMessages()\n if (typeof callBack == 'function') callBack()\n resolve(undefined)\n }, (this.options.speed * 1000) + 50) // give extra 50 ms\n })\n }\n\n // internal function\n resizeMessages() {\n // see if there are messages and resize them\n query('#tsg-popup .tsg-message').each((node: Node) => {\n const msg = node as HTMLElement\n // any: cast-to-any for dynamic dispatch; TsPopup options accept untyped user payloads at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mopt = (msg as any)._msg_options\n const popup = query('#tsg-popup')\n if (parseInt(mopt.width) < 10) mopt.width = 10\n if (parseInt(mopt.height) < 10) mopt.height = 10\n const rect = (popup[0] as HTMLElement).getBoundingClientRect()\n const titleHeight = (popup.find('.tsg-popup-title')[0] as HTMLElement).clientHeight\n const pWidth = Math.floor(rect.width)\n const pHeight = Math.floor(rect.height)\n // re-calc width\n mopt.width = mopt.originalWidth\n if (mopt.width > pWidth - 10) {\n mopt.width = pWidth - 10\n }\n // re-calc height\n mopt.height = mopt.originalHeight\n if (mopt.height > pHeight - titleHeight - 5) {\n mopt.height = pHeight - titleHeight - 5\n }\n if (mopt.originalHeight < 0) mopt.height = pHeight + mopt.originalHeight - titleHeight\n if (mopt.originalWidth < 0) mopt.width = pWidth + mopt.originalWidth * 2 // x 2 because there is left and right margin\n query(msg).css({\n left : ((pWidth - mopt.width) / 2) + 'px',\n width : mopt.width + 'px',\n height : mopt.height + 'px'\n })\n })\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction TsAlert(msg: any, title?: any, callBack?: any): any { // any: msg/title/callBack are heterogeneous convenience params\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let prom: any // any: return from open() or message() differs; unified at call site\n const options = {\n title: TsUtils.lang(title ?? 'Notification'),\n body: `<div class=\"tsg-centered tsg-msg-text\">${msg}</div>`,\n showClose: false,\n actions: { ok: TsUtils.lang('Ok') },\n cancelAction: 'ok'\n }\n if (query('#tsg-popup').length > 0 && TsPopup.status != 'closing') {\n prom = TsPopup.message(options)\n } else {\n prom = TsPopup.open(options)\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prom['ok']((event: any) => { // any: ok callback event is dynamic\n if (typeof event.detail.self?.close == 'function') {\n event.detail.self.close()\n }\n if (typeof callBack == 'function') callBack()\n })\n return prom\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction TsConfirm(msg: any, title?: any, callBack?: any): any { // any: msg/title/callBack are heterogeneous convenience params\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let prom: any // any: return from open() or message() differs; unified at call site\n let options = msg\n if (['string', 'number'].includes(typeof options)) {\n options = { msg: options }\n }\n if (options.msg) {\n options.body = `<div class=\"tsg-centered tsg-msg-text\">${options.msg}</div>`,\n delete options.msg\n }\n if (typeof title == 'function' && callBack == null) {\n callBack = title\n title = undefined\n }\n TsUtils.extend(options, {\n title: TsUtils.lang(title ?? options.title ?? 'Confirmation'),\n showClose: false,\n modal: true,\n cancelAction: 'no'\n })\n if (callBack == null && options.callBack != null) {\n callBack = options.callBack\n }\n TsUtils.normButtons(options, { yes: TsUtils.lang('Yes'), no: TsUtils.lang('No') })\n if (query('#tsg-popup').length > 0 && TsPopup.status != 'closing') {\n prom = TsPopup.message(options)\n } else {\n prom = TsPopup.open(options)\n }\n prom.self\n .off('.confirm')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on('action:after.confirm', (event: any) => { // any: action event detail is dynamic\n if (typeof event.detail.self?.close == 'function') {\n event.detail.self.close()\n }\n if (typeof callBack == 'function') callBack(event.detail.action)\n })\n return prom\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction TsPrompt(label: any, title?: any, callBack?: any): any { // any: label/title/callBack are heterogeneous convenience params\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let prom: any // any: return from open() or message() differs; unified at call site\n let options = label\n if (['string', 'number'].includes(typeof options)) {\n options = { label: options }\n }\n if (options.label) {\n options.focus = 0 // the input should be in focus, which is first in the popup\n options.body = (options.textarea\n ? `<div class=\"tsg-prompt textarea\">\n <div>${options.label}</div>\n <textarea id=\"TsPrompt\" class=\"tsg-input\" ${options.attrs ?? ''}\n data-keydown=\"keydown|event\" data-keyup=\"change|event\"></textarea>\n </div>`\n : `<div class=\"tsg-prompt tsg-centered\">\n <label>${options.label}</label>\n <input id=\"TsPrompt\" class=\"tsg-input\" ${options.attrs ?? ''}\n data-keydown=\"keydown|event\" data-keyup=\"change|event\">\n </div>`\n )\n }\n TsUtils.extend(options, {\n title: TsUtils.lang(title ?? options.title ?? 'Notification'),\n showClose: false,\n modal: true,\n cancelAction: 'cancel'\n })\n TsUtils.normButtons(options, { ok: TsUtils.lang('Ok'), cancel: TsUtils.lang('Cancel') })\n if (query('#tsg-popup').length > 0 && TsPopup.status != 'closing') {\n prom = TsPopup.message(options)\n } else {\n prom = TsPopup.open(options)\n }\n if (prom.self.box) {\n prom.self['input'] = query(prom.self.box).find('#TsPrompt').get(0)\n } else {\n prom.self['input'] = query('#tsg-popup .tsg-popup-body #TsPrompt').get(0)\n }\n if (options.value != null) {\n prom.self['input'].value = options.value\n prom.self['input'].select()\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prom.change = function (callback: any) { // any: change callback event shape is dynamic\n prom.self.on('change', callback)\n return this\n }\n prom.self\n .off('.prompt')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on('open:after.prompt', (event: any) => { // any: open event detail is dynamic\n const box = event.detail.box ? event.detail.box : query('#tsg-popup .tsg-popup-body').get(0)\n TsUtils.bindEvents(query(box).find('#TsPrompt'), {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keydown(evt: any) { // any: KeyboardEvent\n if (evt.keyCode == 27) evt.stopPropagation()\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n change(evt: any) { // any: KeyboardEvent\n const edata = prom.self.trigger('change', { target: 'prompt', originalEvent: evt })\n if (edata.isCancelled === true) return\n if (evt.keyCode == 13 && (evt.ctrlKey || evt.metaKey || evt.target.tagName != 'TEXTAREA')) {\n prom.self.action('Ok', evt)\n }\n if (evt.keyCode == 27) {\n prom.self.action('Cancel', evt)\n }\n edata.finish()\n }\n })\n query(box).find('.tsg-eaction').trigger('keyup')\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on('action:after.prompt', (event: any) => { // any: action event detail is dynamic\n if (typeof event.detail.self?.close == 'function') {\n event.detail.self.close()\n }\n if (typeof callBack == 'function') callBack(event.detail.action)\n })\n return prom\n}\n\nconst TsPopup = new TsDialog()\nexport { TsPopup, TsAlert, TsConfirm, TsPrompt, TsDialog }"],"mappings":"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","names":["query","edata","focus"]}
|
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,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TsField
|
|
3
|
+
} from "./chunks/chunk-26XP2XU3.js";
|
|
4
|
+
import "./chunks/chunk-OFASTA2A.js";
|
|
5
|
+
import "./chunks/chunk-3NYH6545.js";
|
|
6
|
+
import "./chunks/chunk-IYF3Q7GX.js";
|
|
7
|
+
import "./chunks/chunk-DXZJHS4M.js";
|
|
8
|
+
export {
|
|
9
|
+
TsField
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=field.es6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|