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/tstoolbar.ts"],"sourcesContent":["/**\n * Part of TsUi 2.0 library\n * - Dependencies: mQuery, TsUtils, TsBase, TsTooltip, TsColor, TsMenu\n *\n * == TODO ==\n * - tab navigation (index state)\n * - vertical toolbar\n * - TsMenu on second click of tb button should hide\n * - button display groups for each show/hide, possibly add state: { single: t/f, multiple: t/f, type: 'font' }\n * - item.count - should just support html, so a custom block can be created, such as a colored line\n *\n * == 2.0 changes\n * - CSP - fixed inline events\n * - removed jQuery dependency\n * - item.icon - can be class or <custom-icon-component> or <svg>\n * - new w2tooltips and TsMenu\n * - scroll returns promise\n * - added onMouseEntter, onMouseLeave, onMouseDown, onMouseUp events\n * - add(..., skipRefresh), insert(..., skipRefresh)\n * - item.items can be a function\n * - item.icon_style - style for the icon\n * - item.icon - can be a function\n * - item.type = 'label', item.type = 'input'\n * - item.placeholder\n * - item.input: { spinner, style, min, max, step, precision, suffix }\n * - item.backColor\n * - onLiveUpdate - for colors\n */\n\nimport { TsBase } from './tsbase.js'\nimport { TsUi, TsUtils } from './tsutils.js'\nimport { query as _queryRaw, Query } from './query.js'\nimport { TsTooltip, TsColor, TsMenu } from './tstooltip.js'\n// any: query() returns Query|void; cast once here for clean chaining\nconst query = _queryRaw as (selector: unknown, context?: unknown) => Query\n\nclass TsToolbar extends TsBase {\n declare box: HTMLElement | null\n declare name: string\n routeData: Record<string, unknown>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n items: any[] // any: toolbar items have dynamic shape\n right: string | string[]\n tooltip: string\n item_template: Record<string, unknown>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n last: any // any: accumulates badge, pendingRefresh, etc.\n // any: callback parameter — caller signature varies; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _refresh: (opts: any) => void\n _refreshDebounced: () => void\n // any: targeted-any per typing_policy; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any\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.routeData = {} // data for dynamic routes\n this.items = []\n this.right = '' // HTML text on the right of toolbar\n this.tooltip = 'top|left'// can be top, bottom, left, right\n this['onClick'] = null\n this['onChange'] = null\n this['onMouseDown'] = null\n this['onMouseUp'] = null\n this['onMouseEnter'] = null // mouse enter the button event\n this['onMouseLeave'] = null\n this['onRender'] = null\n this['onRefresh'] = null\n this['onResize'] = null\n this['onDestroy'] = null\n this['onLiveUpdate'] = null\n this.item_template = {\n id: null, // command to be sent to all event handlers\n type: 'button', // button, check, radio, drop, menu, menu-radio, menu-check, break, html, label, input spacer\n text: null,\n html: '',\n tooltip: null, // TsToolbar.tooltip should be\n count: null,\n hidden: false,\n disabled: false,\n checked: false, // used for radio buttons\n icon: null,\n route: null, // if not null, it is route to go\n arrow: null, // arrow down for drop/menu types\n style: null, // extra css style for caption\n group: null, // used for radio buttons\n items: null, // for type menu* it is an array of items in the menu\n selected: null, // used for menu-check, menu-radio\n color: null, // color value - used in color pickers\n backColor: null, // background color value for color pickter\n overlay: { // additional options for overlay\n anchorClass: ''\n },\n onClick: null,\n onRefresh: null\n }\n this.last = {\n badge: {},\n pendingRefresh: {} // what should be refreshed with a debounce\n }\n /**\n * This _refresh function is needed for speed. It will store what should be refreshed in this.last.refesh\n * obect and then call _refreshDebounced(), which will do it withing 15 ms. However, if new items are added\n * they will not cause multiple unnecessary refreshes\n */\n this._refresh = ({ effected, resize, refreshTooltip, hideTooltip }) => {\n const options = this.last.pendingRefresh\n options.ids ??= []\n options.ids.push(...effected)\n Object.assign(options, { resize, refreshTooltip, hideTooltip })\n this._refreshDebounced()\n }\n this._refreshDebounced = TsUtils.debounce(() => {\n const options = this.last.pendingRefresh\n // new Set will make array unique\n new Set(options.ids).forEach(id => {\n this.refresh(id)\n if (options.hideTooltip) this.tooltipHide(id)\n })\n if (options.resize) this.resize()\n // once refresh is complete, then clear refresh object\n this.last.pendingRefresh = {}\n }, 15)\n // mix in options, w/o items\n const items = options.items\n delete options.items\n Object.assign(this, options)\n // add item via method to makes sure item_template is applied\n if (Array.isArray(items)) this.add(items, true)\n // need to reassign back to keep it in config\n options.items = items\n\n // render if box specified\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\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n add(items: any, skipRefresh?: any): void { // any: items array or single item object\n this.insert(null, items, skipRefresh)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n insert(id: any, items: any, skipRefresh?: any): void { // any: id, items, skipRefresh are heterogeneous\n if (!Array.isArray(items)) items = [items]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n items.forEach((item: any, idx: any, arr: any) => { // any: toolbar item objects have dynamic shape\n if (typeof item === 'string') {\n item = arr[idx] = { id: item, text: item }\n }\n // checks\n const valid = ['button', 'check', 'radio', 'drop', 'menu', 'menu-radio', 'menu-check', 'color', 'text-color', 'html', 'label', 'input',\n 'group', 'break', 'spacer', 'new-line']\n if (!valid.includes(String(item.type))) {\n console.log('ERROR: The parameter \"type\" should be one of the following:', valid, `, but ${item.type} is supplied.`, item)\n return\n }\n if (item.id == null && !['break', 'spacer', 'new-line'].includes(item.type)) {\n console.log('ERROR: The parameter \"id\" is required but not supplied.', item)\n return\n }\n if (!TsUtils.checkUniqueId(item.id, this.items, 'toolbar', this.name)) return\n // add item\n const newItem = TsUtils.extend({}, this.item_template, item)\n if (newItem.type == 'group' && Array.isArray(newItem.items)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newItem.items.forEach((_it: any, ind: any) => { // any: item shape is dynamic\n newItem.items[ind] = TsUtils.extend({}, this.item_template, newItem.items[ind])\n })\n }\n if (newItem.type == 'menu-check') {\n if (!Array.isArray(newItem.selected)) newItem.selected = []\n if (Array.isArray(newItem.items)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newItem.items.forEach((it: any, idx: any, arr: any) => { // any: menu item shape is dynamic\n if (typeof it === 'string') {\n it = arr[idx] = { id: it, text: it }\n }\n if (it.checked && !newItem.selected.includes(it.id)) newItem.selected.push(it.id)\n if (!it.checked && newItem.selected.includes(it.id)) it.checked = true\n if (it.checked == null) it.checked = false\n })\n } else if (typeof newItem.items === 'function') {\n // Eager-once reconciliation: evaluate items() to seed `selected` from `checked` at insert time.\n // The function reference is preserved on newItem.items; live evaluation on menu open is unchanged.\n // Side effects in items() will fire ONCE here (in addition to every menu open as today).\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const materialized = newItem.items(newItem)\n if (Array.isArray(materialized)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n materialized.forEach((it: any) => {\n if (it && it.checked && !newItem.selected.includes(it.id)) newItem.selected.push(it.id)\n })\n }\n }\n } else if (newItem.type == 'menu-radio') {\n if (Array.isArray(newItem.items)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newItem.items.forEach((it: any, idx: any, arr: any) => { // any: menu item shape is dynamic\n if (typeof it === 'string') {\n it = arr[idx] = { id: it, text: it }\n }\n if (it.checked && newItem.selected == null) newItem.selected = it.id; else it.checked = false\n if (!it.checked && newItem.selected == it.id) it.checked = true\n if (it.checked == null) it.checked = false\n })\n }\n }\n if (id == null) {\n this.items.push(newItem)\n } else {\n const middle = this.get(id, true)\n if (middle == null) {\n console.warn(`TsToolbar: insert anchor id \"${id}\" not found; appending instead.`)\n this.items.push(newItem)\n } else {\n this.items = this.items.slice(0, middle).concat([newItem], this.items.slice(middle))\n }\n }\n newItem.line = newItem.line ?? 1\n if (skipRefresh !== true) this.refresh(newItem.id)\n })\n if (skipRefresh !== true) this.resize()\n }\n\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n remove(...args: any[]) {\n let effected = 0\n args.forEach(item => {\n const it = this.get(item)\n if (!it || String(item).indexOf(':') != -1) return\n effected++\n // remove from screen\n query(this.box).find('#tb_'+ this.name +'_item_'+ TsUtils.escapeId(it.id)).remove()\n // remove from array\n const ind = this.get(it.id, true)\n if (ind != null) {\n const top = this.items[ind]\n if (top.id === it.id) {\n // top-level match → splice from this.items\n this.items.splice(ind, 1)\n } else if (top.type === 'group' && Array.isArray(top.items)) {\n // group sub-item match → splice from group.items, leave top-level intact\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const subIdx = top.items.findIndex((s: any) => s && s.id === it.id)\n if (subIdx !== -1) top.items.splice(subIdx, 1)\n }\n }\n })\n this.resize()\n return effected\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n set(id: any, newOptions: any): boolean { // any: id can be string or number; newOptions is partial item config\n const item = this.get(id)\n if (item == null) return false\n Object.assign(item, newOptions)\n this.refresh(String(id).split(':')[0])\n return true\n }\n\n // any: parameter typed any — runtime dispatch by call site; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get(id?: any, returnIndex?: boolean, items?: any[]): any {\n if (arguments.length === 0) {\n const all = []\n for (let i1 = 0; i1 < this.items.length; i1++) {\n const it = this.items[i1]\n if (it.id != null) all.push(it.id)\n if (it.type == 'group') {\n for (let i2 = 0; i2 < it.items.length; i2++) {\n if (it.items[i2].id != null) all.push(it.items[i2].id)\n }\n }\n }\n return all\n }\n const tmp = String(id).split(':')\n if (items == null) items = this.items\n for (let i1 = 0; i1 < items.length; i1++) {\n const it = items[i1]\n // find a menu item\n if (['menu', 'menu-radio', 'menu-check'].includes(it.type) && tmp.length == 2 && it.id == tmp[0]) {\n let subItems = it.items\n if (typeof subItems == 'function') subItems = subItems(this)\n for (let i = 0; i < subItems.length; i++) {\n const item = subItems[i]\n if (item.id == tmp[1] || (item.id == null && item.text == tmp[1])) {\n if (returnIndex == true) return i; else return item\n }\n if (Array.isArray(item.items)) {\n for (let j = 0; j < item.items.length; j++) {\n if (item.items[j].id == tmp[1] || (item.items[j].id == null && item.items[j].text == tmp[1])) {\n if (returnIndex == true) return i; else return item.items[j]\n }\n }\n }\n }\n } else if (it.id == tmp[0]) {\n if (returnIndex == true) return i1; else return it\n } else if (it.type == 'group') {\n const sub = this.get(id, returnIndex, it.items)\n if (sub != null) {\n // When returning an index for a group sub-item match, return the\n // GROUP's top-level index in this.items (i1), not the sub-item's\n // index within it.items. Callers (insert/remove/refresh) splice\n // against this.items, so they need the top-level position.\n if (returnIndex === true) return i1\n return sub\n }\n }\n }\n return null\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setCount(id: any, count: any, className?: any, style?: any): void { // any: toolbar item badge params are heterogeneous\n const btn = query(this.box).find(`#tb_${this.name}_item_${TsUtils.escapeId(id)} .tsg-tb-count > span`)\n if (btn.length > 0) {\n btn.removeClass(null)\n .addClass(className ?? '')\n .text(count);\n (btn.get(0) as HTMLElement).style.cssText = style ?? ''\n this.last.badge[id] = {\n className: className ?? '',\n style: style ?? ''\n }\n const item = this.get(id)\n item.count = count\n } else {\n this.set(id, { count: count })\n // base case: re-query after refresh; if the item type does not render\n // a count span (break / spacer / html / input / group), stop recursing.\n const after = query(this.box).find(`#tb_${this.name}_item_${TsUtils.escapeId(id)} .tsg-tb-count > span`)\n if (after.length === 0) return\n this.setCount(id, count, className, style) // to update styles\n }\n }\n\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n show(...args: any[]) {\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const effected: any[] = []\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.forEach((item: any) => { // any: item id can be string or number\n const it = this.get(item)\n if (!it) return\n // since group can have style, it should still be shown\n it.hidden = false\n effected.push(String(item).split(':')[0])\n if (it.type == 'group') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n it.items.forEach((itm: any) => this.show(itm.id)) // any: group items are dynamic\n }\n })\n this._refresh({ effected, resize: true }) // debounced, needed for speed\n return effected\n }\n\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n hide(...args: any[]) {\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const effected: any[] = []\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.forEach((item: any) => { // any: item id can be string or number\n const it = this.get(item)\n if (!it) return\n // since group can have style, it should still be hidden\n it.hidden = true\n effected.push(String(item).split(':')[0])\n if (it.type == 'group') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n it.items.forEach((itm: any) => this.hide(itm.id)) // any: group items are dynamic\n }\n })\n this._refresh({ effected, hideTooltip: true, resize: true }) // debounced, needed for speed\n return effected\n }\n\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n enable(...args: any[]) {\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const effected: any[] = []\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.forEach((item: any) => { // any: item id can be string or number\n const it = this.get(item)\n if (!it) return\n if (it.type == 'group') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n it.items.forEach((itm: any) => this.enable(itm.id)) // any: group items are dynamic\n } else {\n it.disabled = false\n effected.push(String(item).split(':')[0])\n }\n })\n this._refresh({ effected }) // debounced, needed for speed\n return effected\n }\n\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n disable(...args: any[]) {\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const effected: any[] = []\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.forEach((item: any) => { // any: item id can be string or number\n const it = this.get(item)\n if (!it) return\n if (it.type == 'group') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n it.items.forEach((itm: any) => this.disable(itm.id)) // any: group items are dynamic\n } else {\n it.disabled = true\n effected.push(String(item).split(':')[0])\n }\n })\n this._refresh({ effected, hideTooltip: true }) // debounced, needed for speed\n return effected\n }\n\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n check(...args: any[]) {\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const effected: any[] = []\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.forEach((item: any) => { // any: item id can be string or number\n const it = this.get(item)\n if (!it || String(item).indexOf(':') != -1) return\n if (it.type == 'group') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n it.items.forEach((itm: any) => this.check(itm.id)) // any: group items are dynamic\n } else {\n it.checked = true\n effected.push(String(item).split(':')[0])\n }\n })\n this._refresh({ effected }) // debounced, needed for speed\n return effected\n }\n\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n uncheck(...args: any[]) {\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const effected: any[] = []\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.forEach((item: any) => { // any: item id can be string or number\n const it = this.get(item)\n if (!it || String(item).indexOf(':') != -1) return\n // remove overlay\n if (['menu', 'menu-radio', 'menu-check', 'drop', 'color', 'text-color'].includes(it.type) && it.checked) {\n TsTooltip.hide(this.name + '-drop')\n }\n if (it.type == 'group') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n it.items.forEach((itm: any) => this.uncheck(itm.id)) // any: group items are dynamic\n } else {\n it.checked = false\n effected.push(String(item).split(':')[0])\n }\n })\n this._refresh({ effected }) // debounced, needed for speed\n return effected\n }\n\n /**\n * Toggle the `checked` state of one or more items.\n *\n * State management only — does NOT fire events (no `onClick`, no `onChange`)\n * and does NOT open drop / menu / color overlays. For full UI interaction\n * including opening pickers, call `click(id)` instead.\n *\n * Per-item behaviour:\n * - button / check / html / spacer / break: flips `it.checked`.\n * - drop / menu / menu-radio / menu-check / color / text-color: if currently\n * checked, closes the toolbar's `-drop` overlay via `TsTooltip.hide` before\n * flipping. Same overlay-close path as `uncheck()`. Never opens overlays.\n * - radio: emits `console.warn` and is skipped (would leave the group with\n * no checked member). Use `check()` / `uncheck()` for radios.\n * - group: recurses into `it.items` and toggles each child individually; the\n * group container itself is never in the effected list.\n * - sub-id with `:` notation: skipped (same guard as siblings).\n * - missing id: silently skipped.\n *\n * @param args ids of items to toggle. Varargs, independent per id.\n * @returns array of ids whose checked state actually flipped. Never `undefined`.\n */\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toggle(...args: any[]): any[] {\n // any: array of heterogeneous runtime values; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const effected: any[] = []\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.flat().forEach((item: any) => { // any: item id can be string or number\n const it = this.get(item)\n if (!it || String(item).indexOf(':') != -1) return\n if (it.type == 'radio') {\n console.warn(`TsToolbar.toggle: radio items are not supported, use check()/uncheck() instead. Item: ${item}`)\n return\n }\n if (it.type == 'group') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const childIds = it.items.map((itm: any) => itm.id) // any: group items are dynamic\n const childEffected = this.toggle(...childIds)\n effected.push(...childEffected)\n return\n }\n // Capture intended final value before potential overlay-close side-effects\n const newChecked = !it.checked\n // Mirror uncheck(): close overlay BEFORE flipping checked → false\n if (['menu', 'menu-radio', 'menu-check', 'drop', 'color', 'text-color'].includes(it.type) && it.checked) {\n TsTooltip.hide(this.name + '-drop')\n }\n it.checked = newChecked\n effected.push(String(item).split(':')[0])\n })\n this._refresh({ effected }) // debounced, needed for speed\n return effected\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n click(id: any, event?: any): void { // any: id can be string or number; event is MouseEvent or similar\n // click on menu items\n const tmp = String(id).split(':')\n const it = this.get(tmp[0])\n let items = (it && it.items ? TsUtils.normMenu.call(this, it.items, it) : [])\n\n if (tmp.length > 1) {\n const subItem = this.get(id)\n if (subItem && !subItem.disabled) {\n this.menuClick({ name: this.name, item: it, subItem: subItem, originalEvent: event })\n }\n return\n }\n if (it && !it.disabled) {\n // event before\n const edata = this.trigger('click', {\n target: (id != null ? id : this.name),\n item: it, object: it, originalEvent: event\n })\n if (edata.isCancelled === true) return\n // read items again, they might have been changed in the click event handler\n items = (it && it.items ? TsUtils.normMenu.call(this, it.items, it) : [])\n\n const btn = '#tb_'+ this.name +'_item_'+ TsUtils.escapeId(it.id)\n query(this.box).find(btn).removeClass('down') // need to re-query at the moment -- as well as elsewhere in this function\n\n if (it.type == 'radio') {\n for (let i = 0; i < this.items.length; i++) {\n const itt = this.items[i]\n if (itt.type == 'group') {\n for (let i1 = 0; i1 < itt.items.length; i1++) {\n const itt1 = itt.items[i1]\n if (itt1 == null || itt1.id == it.id || itt1.type !== 'radio') continue\n if (itt1.group == it.group && itt1.checked) {\n itt1.checked = false\n this.refresh(itt1.id)\n }\n }\n }\n if (itt == null || itt.id == it.id || itt.type !== 'radio') continue\n if (itt.group == it.group && itt.checked) {\n itt.checked = false\n this.refresh(itt.id)\n }\n }\n it.checked = true\n query(this.box).find(btn).addClass('checked')\n }\n\n if (['menu', 'menu-radio', 'menu-check', 'drop', 'color', 'text-color'].includes(it.type)) {\n this.tooltipHide(id)\n if (it.checked) {\n TsTooltip.hide(this.name + '-drop')\n return\n } else {\n /**\n * Need to clear all previous event listeners, since tooltip name is reused and it finds the old configuration and\n * extends it. If events are not cleared, it would trigger old listeners too.\n */\n // any: parameter typed any — runtime dispatch by call site; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const overlay: any = TsTooltip.get(this.name + '-drop')\n if (overlay?.displayed) overlay.hide()\n overlay?.listeners?.splice(0)\n\n // timeout is needed to make sure previous overlay hides\n setTimeout(() => {\n // any: callback parameter — caller signature varies; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const hideDrop = (id: any, _btn?: any) => {\n // need a closure to capture id variable\n return () => {\n this.set(id, { checked: false })\n }\n }\n const el = query(this.box).find('#tb_'+ this.name +'_item_'+ TsUtils.escapeId(it.id))\n if (!TsUtils.isPlainObject(it.overlay)) it.overlay = {}\n if (it.type == 'drop') {\n ;(TsTooltip.show(TsUtils.extend({\n html: it.html,\n class: 'tsg-white',\n hideOn: ['doc-click']\n }, it.overlay, {\n anchor: el[0],\n name: this.name + '-drop',\n data: { item: it, btn }\n // any: cast-to-any for dynamic dispatch; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n })) as any)\n .hide(hideDrop(it.id, btn))\n }\n if (['menu', 'menu-radio', 'menu-check'].includes(it.type)) {\n let menuType = 'normal'\n if (it.type == 'menu-radio') {\n menuType = 'radio'\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n items?.forEach((item: any) => { // any: TsMenuItem extended with checked flag\n if (it.selected == item.id) item['checked'] = true; else item['checked'] = false\n })\n }\n if (it.type == 'menu-check') {\n menuType = 'check'\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n items?.forEach((item: any) => { // any: TsMenuItem extended with checked flag\n if (Array.isArray(it.selected) && it.selected.includes(item.id)) item['checked'] = true; else item['checked'] = false\n })\n }\n ;(TsMenu.show(TsUtils.extend({\n items,\n selected: -1,\n align: it.text ? 'left' : 'none', // if there is no text, then no alignent\n }, it.overlay, {\n type: menuType,\n name : this.name + '-drop',\n anchor: el[0],\n data: { item: it, btn }\n // any: cast-to-any for dynamic dispatch; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n })) as any)\n .hide(hideDrop(it.id, btn))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .remove((event: any) => { // any: Tooltip CustomEvent\n this.menuClick({ name: this.name, remove: true, item: it, subItem: event.detail.item,\n originalEvent: event })\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .select((event: any) => { // any: Tooltip CustomEvent\n this.menuClick({ name: this.name, item: it, subItem: event.detail.item,\n originalEvent: event })\n })\n }\n if (['color', 'text-color'].includes(it.type)) {\n ;(TsColor.show(TsUtils.extend({\n color: it.color\n }, it.overlay, {\n anchor: el[0],\n name: this.name + '-drop',\n data: { item: it, btn }\n // any: cast-to-any for dynamic dispatch; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n })) as any)\n .hide(hideDrop(it.id, btn))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .liveUpdate((event: any) => { // any: Tooltip CustomEvent\n const edata = this.trigger('liveUpdate', { name: this.name, item: it, color: event.detail.color })\n edata.finish()\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .select((event: any) => { // any: Tooltip CustomEvent\n if (event.detail.color != null) {\n this.colorClick({ name: this.name, item: it, color: event.detail.color })\n }\n })\n }\n }, 0)\n }\n }\n\n if (['check', 'menu', 'menu-radio', 'menu-check', 'drop', 'color', 'text-color'].includes(it.type)) {\n it.checked = !it.checked\n if (it.checked) {\n query(this.box).find(btn).addClass('checked')\n } else {\n query(this.box).find(btn).removeClass('checked')\n }\n }\n // route processing\n if (it.route) {\n let route = String('/'+ it.route).replace(/\\/{2,}/g, '/')\n const info = TsUtils.parseRoute(route)\n if (info.keys.length > 0) {\n for (let k = 0; k < info.keys.length; k++) {\n const key = info.keys[k]\n if (key == null) continue\n route = route.replace((new RegExp(':'+ key.name, 'g')), this.routeData[key.name] as string)\n }\n }\n setTimeout(() => { window.location.hash = route }, 1)\n }\n // need to refresh toolbar as it might be dynamic\n this.tooltipShow(id)\n // event after\n edata.finish()\n }\n }\n\n // any: callback parameter — caller signature varies; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scroll(direction?: any, line?: any, instant?: any) {\n return new Promise<void>((resolve, _reject) => {\n const scrollBox = query(this.box).find(`.tsg-tb-line:nth-child(${line}) .tsg-scroll-wrapper`)\n const scrollBoxEl = scrollBox.get(0) as HTMLElement\n const scrollLeft = scrollBoxEl.scrollLeft\n const right = scrollBox.find('.tsg-tb-right').get(0) as HTMLElement\n const width1 = (scrollBox.parent().get(0) as HTMLElement).getBoundingClientRect().width\n const width2 = scrollLeft + right.offsetLeft + right.clientWidth\n\n switch (direction) {\n case 'left': {\n let scrollPos = scrollLeft - width1 + 50 // 35 is width of both button\n if (scrollPos <= 0) scrollPos = 0\n scrollBoxEl.scrollTo({ top: 0, left: scrollPos, behavior: instant ? 'auto' : 'smooth' })\n break\n }\n case 'right': {\n let scrollPos = scrollLeft + width1 - 50 // 35 is width of both button\n if (scrollPos >= width2 - width1) scrollPos = width2 - width1\n scrollBoxEl.scrollTo({ top: 0, left: scrollPos, behavior: instant ? 'auto' : 'smooth' })\n break\n }\n }\n /**\n * Timeout is needed because browser animates scroll. Also, I found that 500ms is not enough\n * as it could take longer then that, but animation seems to be around 500ms\n */\n setTimeout(() => { this.resize(); resolve() }, instant ? 0 : 600)\n })\n }\n\n // any: callback parameter — caller signature varies; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override render(box?: any) {\n const time = Date.now()\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 // defaul action\n if (box != null) {\n this.unmount() // clean previous control\n this.box = box\n }\n if (!this.box) return\n if (!Array.isArray(this.right)) {\n this.right = [this.right]\n }\n // render all buttons\n let html = ''\n let line = 0\n for (let i = 0; i < this.items.length; i++) {\n const it = this.items[i]\n if (it == null) continue\n if (it.id == null) it.id = 'item_' + i\n if (it.caption != null) {\n console.log('NOTICE: toolbar item.caption property is deprecated, please use item.text. Item -> ', it)\n }\n if (it.hint != null) {\n console.log('NOTICE: toolbar item.hint property is deprecated, please use item.tooltip. Item -> ', it)\n }\n if (i === 0 || it.type == 'new-line') {\n line++\n html += `\n <div class=\"tsg-tb-line\">\n <div class=\"tsg-scroll-wrapper tsg-eaction\" data-mousedown=\"resize\">\n <div class=\"tsg-tb-right\">${this.right[line-1] ?? ''}</div>\n </div>\n <div class=\"tsg-scroll-left tsg-eaction\" data-click='[\"scroll\", \"left\", \"${line}\"]'></div>\n <div class=\"tsg-scroll-right tsg-eaction\" data-click='[\"scroll\", \"right\", \"${line}\"]'></div>\n </div>\n `\n }\n it.line = line\n }\n query(this.box)\n .attr('name', this.name)\n .addClass('tsg-reset tsg-toolbar')\n .html(html)\n if (query(this.box).length > 0) {\n (query(this.box)[0] as HTMLElement).style.cssText += this['style']\n }\n // overflow buttons\n TsUtils.bindEvents(query(this.box).find('.tsg-tb-line .tsg-eaction'), this)\n // observe div resize\n this.last.observeResize = new ResizeObserver(() => { this.resize() })\n this.last.observeResize.observe(this.box)\n // refresh all\n this.refresh()\n this.resize()\n // event after\n edata.finish()\n return Date.now() - time\n }\n\n // any: callback parameter — caller signature varies; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refresh(id?: any) {\n const time = Date.now()\n // event before\n const edata = this.trigger('refresh', { target: (id != null ? id : this.name), item: this.get(id) })\n if (edata.isCancelled === true) return\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let edata2: any // any: TsEvent instance or undefined\n // refresh all\n if (id == null) {\n for (let i = 0; i < this.items.length; i++) {\n const it1 = this.items[i]\n if (it1.id == null) it1.id = 'item_' + i\n this.refresh(it1.id)\n }\n return\n }\n // create or refresh only one item\n const it = this.get(id)\n if (it == null) return false\n if (typeof it.onRefresh == 'function') {\n edata2 = this.trigger('refresh', { target: id, item: it, object: it })\n if (edata2.isCancelled === true) return\n }\n const selector = `#tb_${this.name}_item_${TsUtils.escapeId(it.id)}`\n const btn = query(this.box).find(selector)\n const html = this.getItemHTML(it)\n // hide tooltip\n this.tooltipHide(id)\n\n // if there is a spacer, then right HTML is not 100%\n if (it.type == 'spacer') {\n query(this.box).find(`.tsg-tb-line:nth-child(${it.line ?? 1})`).find('.tsg-tb-right').css('width', 'auto')\n }\n\n if (btn.length === 0) {\n const next = parseInt(this.get(id, true)) + 1\n let $next = query(this.box).find(`#tb_${this.name}_item_${TsUtils.escapeId(this.items[next] ? this.items[next].id : '--')}`) // \"--\" is needed or it will insert wrong\n if ($next.length == 0) {\n $next = query(this.box).find(`.tsg-tb-line:nth-child(${it.line})`).find('.tsg-tb-right').before(html)\n } else {\n $next.after(html)\n }\n TsUtils.bindEvents(query(this.box).find(`${selector}, ${selector} .tsg-eaction`), this)\n } else {\n // refresh\n // any: cast-to-any for dynamic dispatch; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n query(this.box).find(selector).replace((_queryRaw as any).html(html))\n const newBtn = query(this.box).find(selector)\n TsUtils.bindEvents(newBtn, this)\n TsUtils.bindEvents(newBtn.find('.tsg-eaction'), this)\n // update overlay's anchor if changed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const overlays = TsTooltip.get(true) as Record<string, any> | undefined // any: TooltipOverlay shape is dynamic\n if (overlays != null) Object.keys(overlays).forEach(key => {\n if (overlays[key]?.anchor == btn.get(0)) {\n overlays[key].anchor = newBtn.get(0)\n }\n })\n }\n if (['menu', 'menu-radio', 'menu-check'].includes(it.type) && it.checked) {\n // check selected items\n const selected = Array.isArray(it.selected) ? it.selected : [it.selected]\n const items = typeof it.items == 'function' ? it.items(it) : [...it.items]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n items.forEach((item: any) => { // any: menu item shape is dynamic\n if (selected.includes(item.id)) item.checked = true; else item.checked = false\n })\n TsMenu.update(this.name + '-drop', items)\n }\n // event after\n if (typeof it.onRefresh == 'function') {\n edata2.finish()\n }\n edata.finish()\n return Date.now() - time\n }\n\n resize() {\n const time = Date.now()\n // event before\n const edata = this.trigger('resize', { target: this.name })\n if (edata.isCancelled === true) return\n\n query(this.box).find('.tsg-tb-line').each(el => {\n // show hide overflow buttons\n const box = query(el)\n box.find('.tsg-scroll-left, .tsg-scroll-right').hide()\n const scrollBox = box.find('.tsg-scroll-wrapper').get(0) as HTMLElement\n const $right = box.find('.tsg-tb-right')\n const boxWidth = (box.get(0) as HTMLElement).getBoundingClientRect().width\n // Do not use $right[0].getBoundingClientRect(). right box is the most left div\n const itemsWidth = ($right.length > 0 ? ($right[0] as HTMLElement).offsetLeft + ($right[0] as HTMLElement).clientWidth : 0)\n if (boxWidth < itemsWidth) {\n // we have overflown content\n if (scrollBox.scrollLeft > 0) {\n box.find('.tsg-scroll-left').show()\n }\n if (boxWidth < itemsWidth - scrollBox.scrollLeft) {\n box.find('.tsg-scroll-right').show()\n }\n }\n })\n // event after\n edata.finish()\n return Date.now() - time\n }\n\n destroy() {\n // event before\n const edata = this.trigger('destroy', { target: this.name })\n if (edata.isCancelled === true) return\n // close any open overlays BEFORE unmount so hideDrop runs on a live toolbar\n // (synchronous; covers both rendered + never-rendered cases — TsTooltip.hide() is a no-op on missing overlay)\n TsTooltip.hide(this.name + '-tooltip')\n TsTooltip.hide(this.name + '-drop')\n // clean up\n if (query(this.box).find('.tsg-scroll-wrapper').length > 0) {\n this.unmount()\n }\n delete TsUi[this.name]\n // event after\n edata.finish()\n }\n\n override unmount(): void {\n super.unmount()\n this.last.observeResize?.disconnect()\n }\n\n // ========================================\n // --- Internal Functions\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getItemHTML(item: any): string { // any: toolbar item config has dynamic shape\n let html = ''\n if (item.caption != null && item.text == null) item.text = item.caption // for backward compatibility\n if (item.text == null) item.text = ''\n if (item.tooltip == null && item.hint != null) item.tooltip = item.hint // for backward compatibility\n if (item.tooltip == null) item.tooltip = ''\n if (typeof item.get !== 'function' && (Array.isArray(item.items) || typeof item.items == 'function')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n item.get = function get(id: any): any { // any: item ids and shapes are dynamic\n let tmp = item.items\n if (typeof tmp == 'function') tmp = item.items(item)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return tmp.find((it: any) => it.id == id ? true : false) // any: menu item shape is dynamic\n }\n }\n let icon = ''\n let text = (typeof item.text == 'function' ? item.text.call(this, item) : item.text)\n if (item.icon) {\n icon = item.icon\n if (typeof item.icon == 'function') {\n icon = item.icon.call(this, item)\n }\n if (String(icon).slice(0, 1) !== '<') {\n icon = `<span class=\"${icon}\" ${item.icon_style ? `style=\"${item.icon_style}\"` : ''}></span>`\n }\n icon = `<div class=\"tsg-tb-icon\">${icon}</div>`\n }\n const classes = ['tsg-tb-button', 'tsg-eaction']\n if (item.checked) classes.push('checked')\n if (item.disabled) classes.push('disabled')\n if (item.hidden) classes.push('hidden')\n if (!icon) classes.push('no-icon')\n\n switch (item.type) {\n case 'color':\n case 'text-color':\n if (typeof item.color == 'string') {\n if (item.color.slice(0, 1) == '#') item.color = item.color.slice(1)\n if ([3, 6, 8].includes(item.color.length)) item.color = '#' + item.color\n }\n if (item.type == 'color') {\n text = `<span class=\"tsg-tb-color-box\" style=\"background-color: ${(item.color != null ? item.color : '#fff')}\"></span>\n ${(item.text ? `<div style=\"margin-left: 17px;\">${TsUtils.lang(item.text)}</div>` : '')}`\n }\n if (item.type == 'text-color') {\n const color = (item.color != null ? item.color : '#444')\n let bcolor = item.backColor\n if (item.backColor === true) {\n bcolor = '#fff'\n if (TsUtils.colorContrastValue('#fff', color) < 2) {\n bcolor = '#555'\n }\n }\n text = `<span style=\"color: ${color}\">${item.text\n ? TsUtils.lang(item.text)\n : (item.backColor\n ? `<b style=\"background-color: ${bcolor ?? 'transparent'}; padding: 2px 5px; border-radius: 3px;\">Ab</b>`\n : '<b>Ab</b>'\n )\n }</span>`\n }\n // falls through\n case 'menu':\n case 'menu-check':\n case 'menu-radio':\n case 'button':\n case 'check':\n case 'radio':\n case 'label':\n case 'drop': {\n const arrow = (item.arrow === true\n || (item.arrow !== false && ['menu', 'menu-radio', 'menu-check', 'drop', 'color', 'text-color'].includes(item.type)))\n html = `\n <div id=\"tb_${this.name}_item_${item.id}\" class=\"${classes.join(' ')} ${(item.class ? item.class : '')}\"\n style=\"${(item.hidden ? 'display: none;' : '')} ${item.type == 'label' ? (item.style ?? '') + ';' : ''}\"\n ${!item.disabled\n ? `data-click='[\"click\",\"${item.id}\", \"event\"]'\n data-mouseenter='[\"mouseAction\", \"event\", \"this\", \"Enter\", \"${item.id}\"]'\n data-mouseleave='[\"mouseAction\", \"event\", \"this\", \"Leave\", \"${item.id}\"]'\n data-mousedown='[\"mouseAction\", \"event\", \"this\", \"Down\", \"${item.id}\"]'\n data-mouseup='[\"mouseAction\", \"event\", \"this\", \"Up\", \"${item.id}\"]'`\n : ''}\n >\n ${ icon }\n ${ (text != '' && text != null) || item.count != null || arrow\n ? `<div class=\"tsg-tb-text\" style=\"${item.type != 'label' ? (item.style ?? '') : ''}; ${!text ? 'padding-left: 0; margin-left: 23px;' : ''}\">\n ${ TsUtils.lang(text) }\n ${ item.count != null\n ? TsUtils.stripSpaces(`\n <span class=\"tsg-tb-count\">\n <span class=\"${this.last.badge[item.id] ? this.last.badge[item.id].className ?? '' : ''}\"\n style=\"${this.last.badge[item.id] ? this.last.badge[item.id].style ?? '' : ''}\">${item.count}</span>\n </span>`)\n : ''\n }\n ${ arrow\n ? `<span class=\"tsg-tb-down\" ${!text && !item.count ? 'style=\"margin-left: -3px\"' : ''}><span></span></span>`\n : ''\n }\n </div>`\n : ''\n }\n </div>\n `\n break\n }\n case 'break': {\n html = `<div id=\"tb_${this.name}_item_${item.id}\" class=\"tsg-tb-break\"\n style=\"${(item.hidden ? 'display: none' : '')}; ${(item.style ? item.style : '')}\">\n  \n </div>`\n break\n }\n case 'spacer': {\n html = `<div id=\"tb_${this.name}_item_${item.id}\" class=\"tsg-tb-spacer\"\n style=\"${(item.hidden ? 'display: none' : '')}; ${(item.style ? item.style : '')}\">\n </div>`\n break\n }\n case 'html': {\n html = `<div id=\"tb_${this.name}_item_${item.id}\" class=\"tsg-tb-html ${classes.join(' ')}\"\n style=\"${(item.hidden ? 'display: none' : '')}; ${(item.style ? item.style : '')}\">\n ${(typeof item.html == 'function' ? item.html.call(this, item) : item.html)}\n </div>`\n break\n }\n case 'input': {\n const ph = item.placeholder\n let val = item.value\n // For backword compatibility\n if (item.spinner && typeof item.spinner == 'object') {\n item.input ??= {}\n Object.assign(item.input, item.spinner, { spinner: true })\n }\n // round to step\n if (val != null && String(val).trim() !== '' && item.input?.spinner) {\n const step = item.input?.step ?? 1\n const prec = item.input?.precision ?? String(step).split('.')[1]?.length ?? 0\n val = isNaN(val) ? val : Number(val).toFixed(prec)\n }\n html = `<div id=\"tb_${this.name}_item_${item.id}\" class=\"tsg-tb-input tsg-eaction ${classes.join(' ')}\"\n style=\"${(item.hidden ? 'display: none' : '')}; ${(item.style ? item.style : '')}\"\n >\n <span class=\"tsg-input-label\">${item.text ?? ''}</span>\n ${item.input?.spinner\n ? `<span class=\"tsg-spinner-dec tsg-eaction\" data-click='[\"spinner\", \"${item.id}\", \"dec\", \"event\"]'> – </span>`\n : ''}\n <input class=\"tsg-toolbar-input tsg-eaction ${item.input?.spinner ? 'tsg-has-spinner' : ''}\"\n ${ph ? `placeholder=\"${ph}\"` : ''} style=\"${item.input?.style ?? ''}\"\n value=\"${val ?? ''}${item.input?.suffix ?? ''}\" ${item.input?.attrs ?? ''}\n data-input='[\"change\", \"${item.id}\", \"this\", true]'\n data-change='[\"change\", \"${item.id}\", \"this\"]'\n data-keydown='[\"spinner\", \"${item.id}\", \"key\", \"event\"]'\n data-mouseenter='[\"mouseAction\", \"event\", \"this\", \"Enter\", \"${item.id}\"]'\n data-mouseleave='[\"mouseAction\", \"event\", \"this\", \"Leave\", \"${item.id}\"]'\n >\n ${item.input?.spinner\n ? `<span class=\"tsg-spinner-inc tsg-eaction\" data-click='[\"spinner\", \"${item.id}\", \"inc\", \"event\"]'> + </span>`\n : ''}\n </div>`\n break\n }\n case 'group': {\n html = `<div id=\"tb_${this.name}_item_${item.id}\" class=\"tsg-tb-group\"\n style=\"display: ${(item.hidden ? 'none' : 'flex')}; ${(item.style ? item.style : '')}\">`\n if (Array.isArray(item.items)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n item.items.forEach((it: any) => { // any: item shape is dynamic\n html += this.getItemHTML(it)\n })\n } else {\n console.log('ERROR: toolbar group is empty')\n }\n html += '</div>'\n }\n }\n return html\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n spinner(id: any, action: any, event?: any): void { // any: id/action/event are heterogeneous at runtime\n const it = this.get(id)\n let inc = 0\n const edata = this.trigger('keyDown', { id, item: it, originalEvent: event })\n switch (action) {\n case 'inc': {\n inc = (it.input?.step ?? 1)\n break\n }\n case 'dec': {\n inc = -(it.input?.step ?? 1)\n break\n }\n case 'key': {\n if (it.input?.spinner || it.input?.step != null) {\n let mult = 1\n if (event.shiftKey || event.metaKey) mult = 10\n if (event.altKey) mult = 0.1\n switch (event.key) {\n case 'ArrowUp': {\n inc = (it.input?.step ?? 1) * mult\n event.preventDefault()\n break\n }\n case 'ArrowDown': {\n inc = -(it.input?.step ?? 1) * mult\n event.preventDefault()\n break\n }\n }\n }\n break\n }\n }\n if (inc !== 0) {\n this.change(id, parseFloat(it.value ?? 0) + inc)\n }\n edata.finish()\n }\n\n // any: callback parameter — caller signature varies; TsToolbar item shape varies by `type` at runtime\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n change(id?: any, value?: any, dynamic?: any) {\n const it = this.get(id)\n const input = query(this.box).find('#tb_'+ this.name +'_item_'+ TsUtils.escapeId(id)).find('input.tsg-toolbar-input')\n if (value instanceof HTMLInputElement) {\n value = value.value\n }\n if (value == null) value = input.val()\n if (it.input?.spinner || it.input?.min != null || it.input?.max != null || it.input?.step != null) {\n value = parseFloat(value)\n }\n // remove suffix if it is there\n if (it.input?.suffix != null) {\n const strValue = String(value)\n if (strValue.substr(-it.input.suffix.length) == it.input.suffix) {\n value = strValue.substr(0, strValue.length - it.input.suffix.length)\n }\n }\n // min/max\n if (it.input?.min != null && it.input.min > value) {\n value = it.input.min\n }\n if (it.input?.max != null && it.input.max < value) {\n value = it.input.max\n }\n // round to step\n if (it.input?.step != null) {\n if (isNaN(value)) value = it.input.min ?? 0\n const step = it.input.step ?? 1\n const prec = it.input.precision ?? String(step).split('.')[1]?.length ?? 0\n value = Number(value).toFixed(prec)\n }\n\n // event beofre\n const edata = this.trigger(dynamic ? 'input' : 'change', { target: id, id, value, item: it })\n if (edata.isCancelled) {\n return\n }\n it.value = value\n let suffix = ''\n if (it.input?.suffix != null && String(value).substr(-it.input.suffix.length) != it.input.suffix) {\n suffix = it.input.suffix\n }\n if (!dynamic) input.val(value + suffix)\n // event after\n edata.finish()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tooltipShow(id: any): void { // any: id can be string or number\n if (this.tooltip == null) return\n const el = query(this.box).find('#tb_'+ this.name + '_item_'+ TsUtils.escapeId(id)).get(0) as HTMLElement\n const item = this.get(id)\n const overlay = (typeof this.tooltip == 'string' ? { position: this.tooltip } : this.tooltip)\n let txt = item.tooltip\n if (typeof txt == 'function') txt = txt.call(this, item)\n // not for opened drop downs\n if (['menu', 'menu-radio', 'menu-check', 'drop', 'color', 'text-color'].includes(item.type)\n && item.checked == true) {\n return\n }\n TsTooltip.show({\n anchor: el,\n name: this.name + '-tooltip',\n html: txt,\n ...overlay\n })\n return\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tooltipHide(_id: any): void { // any: id can be string or number\n if (this.tooltip == null) return\n TsTooltip.hide(this.name + '-tooltip')\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n menuClick(event: any): void { // any: menu click event has dynamic detail shape\n if (event.item && !event.item.disabled) {\n // event before\n const edata = this.trigger((event.remove !== true ? 'click' : 'remove'), {\n target: event.item.id + ':' + event.subItem.id, item: event.item,\n subItem: event.subItem, originalEvent: event.originalEvent\n })\n if (edata.isCancelled === true) return\n\n // route processing\n const it = event.subItem\n const item = this.get(event.item.id)\n let items = item.items\n if (typeof items == 'function') items = item.items()\n if (item.type == 'menu') {\n item.selected = it.id\n }\n if (item.type == 'menu-radio') {\n item.selected = it.id\n if (Array.isArray(items)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n items.forEach((item: any) => { // any: menu item shape is dynamic\n if (item.checked === true) delete item.checked\n if (Array.isArray(item.items)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n item.items.forEach((item: any) => { // any: nested menu item shape is dynamic\n if (item.checked === true) delete item.checked\n })\n }\n })\n }\n it.checked = true\n }\n if (item.type == 'menu-check') {\n if (!Array.isArray(item.selected)) item.selected = []\n if (it.group == null) {\n const ind = item.selected.indexOf(it.id)\n if (ind == -1) {\n item.selected.push(it.id)\n it.checked = true\n } else {\n item.selected.splice(ind, 1)\n it.checked = false\n }\n } else if (it.group === false) {\n // if group is false, then it is not part of checkboxes\n } else {\n const unchecked = []\n const ind = item.selected.indexOf(it.id)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const checkNested = (items: any): void => { // any: nested menu items have dynamic shape\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n items.forEach((sub: any) => { // any: sub-item shape is dynamic\n if (sub.group === it.group) {\n const ind = item.selected.indexOf(sub.id)\n if (ind != -1) {\n if (sub.id != it.id) unchecked.push(sub.id)\n item.selected.splice(ind, 1)\n }\n }\n if (Array.isArray(sub.items)) checkNested(sub.items)\n })\n }\n checkNested(items)\n if (ind == -1) {\n item.selected.push(it.id)\n it.checked = true\n }\n }\n }\n if (typeof it.route == 'string') {\n let route = it.route !== '' ? String('/'+ it.route).replace(/\\/{2,}/g, '/') : ''\n const info = TsUtils.parseRoute(route)\n if (info.keys.length > 0) {\n for (let k = 0; k < info.keys.length; k++) {\n const key = info.keys[k]\n if (key == null || this.routeData[key.name] == null) continue\n route = route.replace((new RegExp(':'+ key.name, 'g')), this.routeData[key.name] as string)\n }\n }\n setTimeout(() => { window.location.hash = route }, 1)\n }\n this.refresh(event.item.id)\n // event after\n edata.finish()\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n colorClick(event: any): void { // any: color pick event has dynamic shape\n if (event.item && !event.item.disabled) {\n // event before\n const edata = this.trigger('click', { target: event.item.id, item: event.item, color: event.color, final: true })\n if (edata.isCancelled === true) return\n\n // default behavior\n event.item.color = event.color\n this.refresh(event.item.id)\n\n // event after\n edata.finish()\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mouseAction(event: any, target: any, action: any, id: any): void { // any: mouse event and toolbar item ids are heterogeneous\n const btn = this.get(id)\n const edata = this.trigger('mouse' + action, { target: id, item: btn, object: btn, originalEvent: event })\n if (edata.isCancelled === true || btn.disabled || btn.hidden) { edata.finish(); return }\n switch (action) {\n case 'Enter':\n if (!['label', 'input'].includes(btn.type)) {\n query(target).addClass('over')\n }\n this.tooltipShow(id)\n break\n case 'Leave':\n if (!['label', 'input'].includes(btn.type)) {\n query(target).removeClass('over down')\n }\n this.tooltipHide(id)\n break\n case 'Down':\n if (!['label', 'input'].includes(btn.type)) {\n query(target).addClass('down')\n }\n break\n case 'Up':\n if (!['label', 'input'].includes(btn.type)) {\n query(target).removeClass('down')\n }\n break\n }\n edata.finish()\n }\n}\nexport { TsToolbar }"],"mappings":"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","names":["query","options","idx","arr","id","event","edata","item","items","ind"]}
|