@omegagrid/core 0.6.122 → 0.6.123

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/dist/ui/menu.js CHANGED
@@ -113,7 +113,7 @@ let Menu = class Menu extends LitElement {
113
113
  setPosition(this, { t: pos.y, l: pos.x });
114
114
  this.list.select(0);
115
115
  this.list.focus();
116
- document.body.addEventListener('mouseup', () => hideElement(this), { once: true });
116
+ document.body.addEventListener('mousedown', () => hideElement(this), { once: true });
117
117
  }
118
118
  async openAt(x, y) {
119
119
  this._autoHide = true;
@@ -130,7 +130,7 @@ let Menu = class Menu extends LitElement {
130
130
  setPosition(this, { t: pos.y, l: pos.x });
131
131
  this.list.select(0);
132
132
  this.list.focus();
133
- document.body.addEventListener('mouseup', () => hideElement(this), { once: true });
133
+ document.body.addEventListener('mousedown', () => hideElement(this), { once: true });
134
134
  }
135
135
  };
136
136
  Menu.styles = [style];
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, TemplateResult, html } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport constants from '../constants';\nimport { getElementOffset, hideElement, setPosition, setSize, showElement, fixPosition } from '../common/dom';\nimport { List, ListSelectEvent } from './list';\nimport { msg } from \"@omegagrid/localize\";\nimport { itemStyle, style } from './menu.style';\nimport { IconSpec } from './icon';\n\nexport type MenuItem = {\n\tk?: number|string,\n\tv?: string,\n\tkey?: number|string,\n\tvalue?: string,\n\ticon?: IconSpec|string,\n\tcolor?: string,\n\ttype?: 'normal'|'label'|null,\n\tdivider?: boolean,\n\trenderer?: (div: HTMLDivElement, index: number, item: MenuItem) => TemplateResult<1>|HTMLElement,\n\texec?: (item: MenuItem) => void,\n};\n\nexport class MenuEvent extends Event {\n\tconstructor(\n\t\ttype: string,\n\t\tpublic readonly item: MenuItem,\n\t) {\n\t\tsuper(`menu.${type}`, {bubbles: true, composed: true});\n\t}\n}\n\nexport type MenuPosition = 'right'|'left';\n\n@customElement(`og-menu`)\nexport class Menu extends LitElement {\n\n\tstatic styles = [style];\n\n\t@property({type: Array})\n\titems: MenuItem[];\n\t\n\t@property({type: Boolean})\n\tdynamicWidth = true;\n\n\t@property({type: Boolean})\n\tdisabledFocus = false;\n\n\t@query('og-list')\n\tlist: List;\n\n\tprivate _hasIcons = false;\n\tprivate _autoHide = false;\n\n\twillUpdate(changedProps: Map<PropertyKey, unknown>) {\n\t\tif (changedProps.has('items')) {\n\t\t\tthis._hasIcons = this.items.findIndex(item => !!item.icon) > -1;\n\t\t}\n\t}\n\n\tupdated(changedProps: Map<PropertyKey, unknown>) {\n\t\tif (changedProps.has('items')) {\n\t\t\tthis.list.reset();\n\t\t}\n\t}\n\n\tasync updateWidth() {\n\t\tawait this.list.updateComplete;\n\n\t\tlet maxWidth = 0;\n\n\t\tif (this.dynamicWidth) {\n\t\t\tthis.list.items.forEach(item => {\n\t\t\t\tlet w = 0;\n\t\t\t\tfor (const ch of item.children) w += (ch as HTMLElement).offsetWidth;\n\t\t\t\tmaxWidth = Math.max(maxWidth, w)\n\t\t\t});\n\t\t\tsetSize(this, {w: maxWidth > 0 ? maxWidth : 100});\n\t\t}\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.addEventListener('contextmenu', e => e.preventDefault());\n\t\tthis.addEventListener('focus', () => setTimeout(() => this.list.focus(), 100));\n\t}\n\n\tconnectedCallback() {\t\t\n\t\tsuper.connectedCallback();\n\t\tthis.tabIndex = 0;\n\t}\n\n\titemRenderer = (div: HTMLDivElement, index: number) => {\n\t\tconst item = this.items[index];\n\t\tdiv.classList.toggle('divider', !!item.divider);\n\t\tdiv.classList.toggle('label', item.type == 'label');\n\n\t\tif (item.divider) {\n\t\t\tsetSize(div, {h: constants.MENU_ITEM_HEIGHT - 1});\n\t\t}\n\n\t\tdiv.style.color = item.color ? item.color : 'inherit';\n\t\titem.type = item.type || 'normal';\n\n\t\treturn html`\n\t\t\t${this._hasIcons && (item.icon || item.type != 'label') ? html`\n\t\t\t\t<div class=\"icon\">\n\t\t\t\t\t${item.icon ? html`<og-icon .icon=\"${item.icon}\"></og-icon>` : ``}\n\t\t\t\t</div>\n\t\t\t`: ``}\n\t\t\t${item.renderer ? item.renderer(div, index, item) : html`\n\t\t\t\t<div class=\"text\">${msg(item.value ?? item.v)}</div>\n\t\t\t`}\n\t\t`;\n\t}\n\n\tasync open(elm: HTMLElement, position: MenuPosition = 'left') {\n\t\tthis._autoHide = true;\n\t\tif (this.parentElement != document.body) document.body.appendChild(this);\n\t\tshowElement(this);\n\t\tawait this.updateWidth();\n\t\tconst offset = getElementOffset(elm, this.parentElement);\n\t\tconst pos = fixPosition({\n\t\t\tx: position == 'left' ? offset.left : (offset.left + elm.offsetWidth - this.offsetWidth),\n\t\t\ty: offset.top + elm.offsetHeight,\n\t\t\tw: this.offsetWidth,\n\t\t\th: this.offsetHeight\n\t\t}, document.body);\n\n\t\tsetPosition(this, {t: pos.y, l: pos.x});\n\t\tthis.list.select(0);\n\t\tthis.list.focus();\n\t\tdocument.body.addEventListener('mouseup', () => hideElement(this), {once: true});\n\t}\n\n\tasync openAt(x: number, y: number) {\n\t\tthis._autoHide = true;\n\t\tif (this.parentElement != document.body) document.body.appendChild(this);\n\t\tshowElement(this);\n\t\tawait this.updateWidth();\n\t\tconst pos = fixPosition({\n\t\t\tx: x,\n\t\t\ty: y,\n\t\t\tw: this.offsetWidth,\n\t\t\th: this.offsetHeight\n\t\t}, document.body);\n\t\tsetPosition(this, {t: pos.y, l: pos.x});\n\t\tthis.list.select(0);\n\t\tthis.list.focus();\n\t\tdocument.body.addEventListener('mouseup', () => hideElement(this), {once: true});\n\t}\n\n\t_onRender = () => {\n\t\tthis.updateWidth();\n\t}\n\n\t_onSelect = (e: ListSelectEvent) => {\n\t\tif (this._autoHide) hideElement(this);\n\t\tconst item = this.items[e.index];\n\t\tif (item.exec) item.exec(item);\n\t\tthis.dispatchEvent(new MenuEvent('select', item));\n\t}\n\n\trender = () => html`\n\t\t<og-list\n\t\t\t?dynamicWidth=\"${this.dynamicWidth}\"\n\t\t\t?disabledFocus=\"${this.disabledFocus}\"\n\t\t\tmaxHeight=\"200\"\n\t\t\titemHeight=\"${constants.MENU_ITEM_HEIGHT}\"\n\t\t\tsize=\"${this.items?.length ?? 0}\"\n\t\t\t.itemRenderer=\"${this.itemRenderer}\"\n\t\t\t.customStyle=${itemStyle},\n\t\t\t@render=${this._onRender}\n\t\t\t@select=${this._onSelect}>\n\t\t</og-list>\n\t`;\n\t\n}"]}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, TemplateResult, html } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport constants from '../constants';\nimport { getElementOffset, hideElement, setPosition, setSize, showElement, fixPosition } from '../common/dom';\nimport { List, ListSelectEvent } from './list';\nimport { msg } from \"@omegagrid/localize\";\nimport { itemStyle, style } from './menu.style';\nimport { IconSpec } from './icon';\n\nexport type MenuItem = {\n\tk?: number|string,\n\tv?: string,\n\tkey?: number|string,\n\tvalue?: string,\n\ticon?: IconSpec|string,\n\tcolor?: string,\n\ttype?: 'normal'|'label'|null,\n\tdivider?: boolean,\n\trenderer?: (div: HTMLDivElement, index: number, item: MenuItem) => TemplateResult<1>|HTMLElement,\n\texec?: (item: MenuItem) => void,\n};\n\nexport class MenuEvent extends Event {\n\tconstructor(\n\t\ttype: string,\n\t\tpublic readonly item: MenuItem,\n\t) {\n\t\tsuper(`menu.${type}`, {bubbles: true, composed: true});\n\t}\n}\n\nexport type MenuPosition = 'right'|'left';\n\n@customElement(`og-menu`)\nexport class Menu extends LitElement {\n\n\tstatic styles = [style];\n\n\t@property({type: Array})\n\titems: MenuItem[];\n\t\n\t@property({type: Boolean})\n\tdynamicWidth = true;\n\n\t@property({type: Boolean})\n\tdisabledFocus = false;\n\n\t@query('og-list')\n\tlist: List;\n\n\tprivate _hasIcons = false;\n\tprivate _autoHide = false;\n\n\twillUpdate(changedProps: Map<PropertyKey, unknown>) {\n\t\tif (changedProps.has('items')) {\n\t\t\tthis._hasIcons = this.items.findIndex(item => !!item.icon) > -1;\n\t\t}\n\t}\n\n\tupdated(changedProps: Map<PropertyKey, unknown>) {\n\t\tif (changedProps.has('items')) {\n\t\t\tthis.list.reset();\n\t\t}\n\t}\n\n\tasync updateWidth() {\n\t\tawait this.list.updateComplete;\n\n\t\tlet maxWidth = 0;\n\n\t\tif (this.dynamicWidth) {\n\t\t\tthis.list.items.forEach(item => {\n\t\t\t\tlet w = 0;\n\t\t\t\tfor (const ch of item.children) w += (ch as HTMLElement).offsetWidth;\n\t\t\t\tmaxWidth = Math.max(maxWidth, w)\n\t\t\t});\n\t\t\tsetSize(this, {w: maxWidth > 0 ? maxWidth : 100});\n\t\t}\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.addEventListener('contextmenu', e => e.preventDefault());\n\t\tthis.addEventListener('focus', () => setTimeout(() => this.list.focus(), 100));\n\t}\n\n\tconnectedCallback() {\t\t\n\t\tsuper.connectedCallback();\n\t\tthis.tabIndex = 0;\n\t}\n\n\titemRenderer = (div: HTMLDivElement, index: number) => {\n\t\tconst item = this.items[index];\n\t\tdiv.classList.toggle('divider', !!item.divider);\n\t\tdiv.classList.toggle('label', item.type == 'label');\n\n\t\tif (item.divider) {\n\t\t\tsetSize(div, {h: constants.MENU_ITEM_HEIGHT - 1});\n\t\t}\n\n\t\tdiv.style.color = item.color ? item.color : 'inherit';\n\t\titem.type = item.type || 'normal';\n\n\t\treturn html`\n\t\t\t${this._hasIcons && (item.icon || item.type != 'label') ? html`\n\t\t\t\t<div class=\"icon\">\n\t\t\t\t\t${item.icon ? html`<og-icon .icon=\"${item.icon}\"></og-icon>` : ``}\n\t\t\t\t</div>\n\t\t\t`: ``}\n\t\t\t${item.renderer ? item.renderer(div, index, item) : html`\n\t\t\t\t<div class=\"text\">${msg(item.value ?? item.v)}</div>\n\t\t\t`}\n\t\t`;\n\t}\n\n\tasync open(elm: HTMLElement, position: MenuPosition = 'left') {\n\t\tthis._autoHide = true;\n\t\tif (this.parentElement != document.body) document.body.appendChild(this);\n\t\tshowElement(this);\n\t\tawait this.updateWidth();\n\t\tconst offset = getElementOffset(elm, this.parentElement);\n\t\tconst pos = fixPosition({\n\t\t\tx: position == 'left' ? offset.left : (offset.left + elm.offsetWidth - this.offsetWidth),\n\t\t\ty: offset.top + elm.offsetHeight,\n\t\t\tw: this.offsetWidth,\n\t\t\th: this.offsetHeight\n\t\t}, document.body);\n\n\t\tsetPosition(this, {t: pos.y, l: pos.x});\n\t\tthis.list.select(0);\n\t\tthis.list.focus();\n\t\tdocument.body.addEventListener('mousedown', () => hideElement(this), {once: true});\n\t}\n\n\tasync openAt(x: number, y: number) {\n\t\tthis._autoHide = true;\n\t\tif (this.parentElement != document.body) document.body.appendChild(this);\n\t\tshowElement(this);\n\t\tawait this.updateWidth();\n\t\tconst pos = fixPosition({\n\t\t\tx: x,\n\t\t\ty: y,\n\t\t\tw: this.offsetWidth,\n\t\t\th: this.offsetHeight\n\t\t}, document.body);\n\t\tsetPosition(this, {t: pos.y, l: pos.x});\n\t\tthis.list.select(0);\n\t\tthis.list.focus();\n\t\tdocument.body.addEventListener('mousedown', () => hideElement(this), {once: true});\n\t}\n\n\t_onRender = () => {\n\t\tthis.updateWidth();\n\t}\n\n\t_onSelect = (e: ListSelectEvent) => {\n\t\tif (this._autoHide) hideElement(this);\n\t\tconst item = this.items[e.index];\n\t\tif (item.exec) item.exec(item);\n\t\tthis.dispatchEvent(new MenuEvent('select', item));\n\t}\n\n\trender = () => html`\n\t\t<og-list\n\t\t\t?dynamicWidth=\"${this.dynamicWidth}\"\n\t\t\t?disabledFocus=\"${this.disabledFocus}\"\n\t\t\tmaxHeight=\"200\"\n\t\t\titemHeight=\"${constants.MENU_ITEM_HEIGHT}\"\n\t\t\tsize=\"${this.items?.length ?? 0}\"\n\t\t\t.itemRenderer=\"${this.itemRenderer}\"\n\t\t\t.customStyle=${itemStyle},\n\t\t\t@render=${this._onRender}\n\t\t\t@select=${this._onSelect}>\n\t\t</og-list>\n\t`;\n\t\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/core",
3
- "version": "0.6.122",
3
+ "version": "0.6.123",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Core components",
6
6
  "main": "./dist/index.js",
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@fortawesome/fontawesome-svg-core": "6.4.2",
39
- "@omegagrid/localize": "^0.6.122",
39
+ "@omegagrid/localize": "^0.6.123",
40
40
  "@riovir/wc-fontawesome": "^0.1.9",
41
41
  "color": "^4.2.3",
42
42
  "date-fns": "^3.2.0",