@omegagrid/core 0.10.2 → 0.10.4

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.
Files changed (317) hide show
  1. package/dist/common/actions.d.ts +16 -0
  2. package/dist/common/actions.d.ts.map +1 -0
  3. package/dist/common/actions.js +14 -0
  4. package/dist/common/actions.js.map +1 -0
  5. package/dist/common/colors.d.ts +39 -0
  6. package/dist/common/colors.d.ts.map +1 -0
  7. package/dist/common/colors.js +59 -0
  8. package/dist/common/colors.js.map +1 -0
  9. package/dist/common/csv.d.ts +23 -0
  10. package/dist/common/csv.d.ts.map +1 -0
  11. package/dist/common/csv.js +93 -0
  12. package/dist/common/csv.js.map +1 -0
  13. package/dist/common/dates.d.ts +32 -0
  14. package/dist/common/dates.d.ts.map +1 -0
  15. package/dist/common/dates.js +172 -0
  16. package/dist/common/dates.js.map +1 -0
  17. package/dist/common/device.d.ts +2 -0
  18. package/dist/common/device.d.ts.map +1 -0
  19. package/dist/common/device.js +13 -0
  20. package/dist/common/device.js.map +1 -0
  21. package/dist/common/dom.d.ts +90 -0
  22. package/dist/common/dom.d.ts.map +1 -0
  23. package/dist/common/dom.js +308 -0
  24. package/dist/common/dom.js.map +1 -0
  25. package/dist/common/events.d.ts +15 -0
  26. package/dist/common/events.d.ts.map +1 -0
  27. package/dist/common/events.js +33 -0
  28. package/dist/common/events.js.map +1 -0
  29. package/dist/common/html.d.ts +3 -0
  30. package/dist/common/html.d.ts.map +1 -0
  31. package/dist/common/html.js +25 -0
  32. package/dist/common/html.js.map +1 -0
  33. package/dist/common/index.d.ts +19 -0
  34. package/dist/common/index.d.ts.map +1 -0
  35. package/dist/common/index.js +19 -0
  36. package/dist/common/index.js.map +1 -0
  37. package/dist/common/linkedList.d.ts +24 -0
  38. package/dist/common/linkedList.d.ts.map +1 -0
  39. package/dist/common/linkedList.js +65 -0
  40. package/dist/common/linkedList.js.map +1 -0
  41. package/dist/common/loaders.d.ts +17 -0
  42. package/dist/common/loaders.d.ts.map +1 -0
  43. package/dist/common/loaders.js +54 -0
  44. package/dist/common/loaders.js.map +1 -0
  45. package/dist/common/logger.d.ts +25 -0
  46. package/dist/common/logger.d.ts.map +1 -0
  47. package/dist/common/logger.js +57 -0
  48. package/dist/common/logger.js.map +1 -0
  49. package/dist/common/matrix.d.ts +6 -0
  50. package/dist/common/matrix.d.ts.map +1 -0
  51. package/dist/common/matrix.js +17 -0
  52. package/dist/common/matrix.js.map +1 -0
  53. package/dist/common/numbers.d.ts +26 -0
  54. package/dist/common/numbers.d.ts.map +1 -0
  55. package/dist/common/numbers.js +239 -0
  56. package/dist/common/numbers.js.map +1 -0
  57. package/dist/common/options.d.ts +17 -0
  58. package/dist/common/options.d.ts.map +1 -0
  59. package/dist/common/options.js +29 -0
  60. package/dist/common/options.js.map +1 -0
  61. package/dist/common/paper.d.ts +8 -0
  62. package/dist/common/paper.d.ts.map +1 -0
  63. package/dist/common/paper.js +17 -0
  64. package/dist/common/paper.js.map +1 -0
  65. package/dist/common/shortcutManager.d.ts +17 -0
  66. package/dist/common/shortcutManager.d.ts.map +1 -0
  67. package/dist/common/shortcutManager.js +49 -0
  68. package/dist/common/shortcutManager.js.map +1 -0
  69. package/dist/common/tree.d.ts +87 -0
  70. package/dist/common/tree.d.ts.map +1 -0
  71. package/dist/common/tree.js +204 -0
  72. package/dist/common/tree.js.map +1 -0
  73. package/dist/common/utils.d.ts +30 -0
  74. package/dist/common/utils.d.ts.map +1 -0
  75. package/dist/common/utils.js +136 -0
  76. package/dist/common/utils.js.map +1 -0
  77. package/dist/constants.d.ts +48 -0
  78. package/dist/constants.d.ts.map +1 -0
  79. package/dist/constants.js +24 -0
  80. package/dist/constants.js.map +1 -0
  81. package/dist/index.d.ts +8 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +8 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/model/adapter.d.ts +8 -0
  86. package/dist/model/adapter.d.ts.map +1 -0
  87. package/dist/model/adapter.js +13 -0
  88. package/dist/model/adapter.js.map +1 -0
  89. package/dist/model/component.d.ts +19 -0
  90. package/dist/model/component.d.ts.map +1 -0
  91. package/dist/model/component.js +84 -0
  92. package/dist/model/component.js.map +1 -0
  93. package/dist/model/componentSlice.d.ts +8 -0
  94. package/dist/model/componentSlice.d.ts.map +1 -0
  95. package/dist/model/componentSlice.js +10 -0
  96. package/dist/model/componentSlice.js.map +1 -0
  97. package/dist/model/componentStore.d.ts +12 -0
  98. package/dist/model/componentStore.d.ts.map +1 -0
  99. package/dist/model/componentStore.js +26 -0
  100. package/dist/model/componentStore.js.map +1 -0
  101. package/dist/model/index.d.ts +6 -0
  102. package/dist/model/index.d.ts.map +1 -0
  103. package/dist/model/index.js +6 -0
  104. package/dist/model/index.js.map +1 -0
  105. package/dist/model/plugins.d.ts +13 -0
  106. package/dist/model/plugins.d.ts.map +1 -0
  107. package/dist/model/plugins.js +27 -0
  108. package/dist/model/plugins.js.map +1 -0
  109. package/dist/themes/definitions/tmDark.d.ts +4 -0
  110. package/dist/themes/definitions/tmDark.d.ts.map +1 -0
  111. package/dist/themes/definitions/tmDark.js +83 -0
  112. package/dist/themes/definitions/tmDark.js.map +1 -0
  113. package/dist/themes/definitions/tmLight.d.ts +4 -0
  114. package/dist/themes/definitions/tmLight.d.ts.map +1 -0
  115. package/dist/themes/definitions/tmLight.js +83 -0
  116. package/dist/themes/definitions/tmLight.js.map +1 -0
  117. package/dist/themes/helpers.d.ts +7 -0
  118. package/dist/themes/helpers.d.ts.map +1 -0
  119. package/dist/themes/helpers.js +34 -0
  120. package/dist/themes/helpers.js.map +1 -0
  121. package/dist/themes/index.d.ts +18 -0
  122. package/dist/themes/index.d.ts.map +1 -0
  123. package/dist/themes/index.js +48 -0
  124. package/dist/themes/index.js.map +1 -0
  125. package/dist/themes/mixins.d.ts +10 -0
  126. package/dist/themes/mixins.d.ts.map +1 -0
  127. package/dist/themes/mixins.js +39 -0
  128. package/dist/themes/mixins.js.map +1 -0
  129. package/dist/themes/transformations.d.ts +9 -0
  130. package/dist/themes/transformations.d.ts.map +1 -0
  131. package/dist/themes/transformations.js +48 -0
  132. package/dist/themes/transformations.js.map +1 -0
  133. package/dist/types.d.ts +130 -0
  134. package/dist/types.d.ts.map +1 -0
  135. package/dist/types.js +12 -0
  136. package/dist/types.js.map +1 -0
  137. package/dist/ui/accordion.d.ts +16 -0
  138. package/dist/ui/accordion.d.ts.map +1 -0
  139. package/dist/ui/accordion.js +209 -0
  140. package/dist/ui/accordion.js.map +1 -0
  141. package/dist/ui/alert.d.ts +15 -0
  142. package/dist/ui/alert.d.ts.map +1 -0
  143. package/dist/ui/alert.js +101 -0
  144. package/dist/ui/alert.js.map +1 -0
  145. package/dist/ui/baseElement.d.ts +7 -0
  146. package/dist/ui/baseElement.d.ts.map +1 -0
  147. package/dist/ui/baseElement.js +10 -0
  148. package/dist/ui/baseElement.js.map +1 -0
  149. package/dist/ui/button.d.ts +21 -0
  150. package/dist/ui/button.d.ts.map +1 -0
  151. package/dist/ui/button.js +100 -0
  152. package/dist/ui/button.js.map +1 -0
  153. package/dist/ui/button.style.d.ts +2 -0
  154. package/dist/ui/button.style.d.ts.map +1 -0
  155. package/dist/ui/button.style.js +60 -0
  156. package/dist/ui/button.style.js.map +1 -0
  157. package/dist/ui/checkbox.d.ts +14 -0
  158. package/dist/ui/checkbox.d.ts.map +1 -0
  159. package/dist/ui/checkbox.js +47 -0
  160. package/dist/ui/checkbox.js.map +1 -0
  161. package/dist/ui/close.d.ts +6 -0
  162. package/dist/ui/close.d.ts.map +1 -0
  163. package/dist/ui/close.js +33 -0
  164. package/dist/ui/close.js.map +1 -0
  165. package/dist/ui/colorpicker.d.ts +24 -0
  166. package/dist/ui/colorpicker.d.ts.map +1 -0
  167. package/dist/ui/colorpicker.js +228 -0
  168. package/dist/ui/colorpicker.js.map +1 -0
  169. package/dist/ui/container.d.ts +39 -0
  170. package/dist/ui/container.d.ts.map +1 -0
  171. package/dist/ui/container.js +313 -0
  172. package/dist/ui/container.js.map +1 -0
  173. package/dist/ui/dropdown.d.ts +48 -0
  174. package/dist/ui/dropdown.d.ts.map +1 -0
  175. package/dist/ui/dropdown.js +300 -0
  176. package/dist/ui/dropdown.js.map +1 -0
  177. package/dist/ui/dropdownColorPicker.d.ts +12 -0
  178. package/dist/ui/dropdownColorPicker.d.ts.map +1 -0
  179. package/dist/ui/dropdownColorPicker.js +60 -0
  180. package/dist/ui/dropdownColorPicker.js.map +1 -0
  181. package/dist/ui/dropdownList.d.ts +8 -0
  182. package/dist/ui/dropdownList.d.ts.map +1 -0
  183. package/dist/ui/dropdownList.js +48 -0
  184. package/dist/ui/dropdownList.js.map +1 -0
  185. package/dist/ui/dropdownMenu.d.ts +11 -0
  186. package/dist/ui/dropdownMenu.d.ts.map +1 -0
  187. package/dist/ui/dropdownMenu.js +61 -0
  188. package/dist/ui/dropdownMenu.js.map +1 -0
  189. package/dist/ui/expander.d.ts +28 -0
  190. package/dist/ui/expander.d.ts.map +1 -0
  191. package/dist/ui/expander.js +144 -0
  192. package/dist/ui/expander.js.map +1 -0
  193. package/dist/ui/fileInput.d.ts +24 -0
  194. package/dist/ui/fileInput.d.ts.map +1 -0
  195. package/dist/ui/fileInput.js +130 -0
  196. package/dist/ui/fileInput.js.map +1 -0
  197. package/dist/ui/fileInput.style.d.ts +2 -0
  198. package/dist/ui/fileInput.style.d.ts.map +1 -0
  199. package/dist/ui/fileInput.style.js +73 -0
  200. package/dist/ui/fileInput.style.js.map +1 -0
  201. package/dist/ui/floatingWindow.d.ts +19 -0
  202. package/dist/ui/floatingWindow.d.ts.map +1 -0
  203. package/dist/ui/floatingWindow.js +87 -0
  204. package/dist/ui/floatingWindow.js.map +1 -0
  205. package/dist/ui/icon.d.ts +46 -0
  206. package/dist/ui/icon.d.ts.map +1 -0
  207. package/dist/ui/icon.js +189 -0
  208. package/dist/ui/icon.js.map +1 -0
  209. package/dist/ui/icon.style.d.ts +2 -0
  210. package/dist/ui/icon.style.d.ts.map +1 -0
  211. package/dist/ui/icon.style.js +556 -0
  212. package/dist/ui/icon.style.js.map +1 -0
  213. package/dist/ui/images.d.ts +2 -0
  214. package/dist/ui/images.d.ts.map +1 -0
  215. package/dist/ui/images.js +14 -0
  216. package/dist/ui/images.js.map +1 -0
  217. package/dist/ui/index.d.ts +32 -0
  218. package/dist/ui/index.d.ts.map +1 -0
  219. package/dist/ui/index.js +32 -0
  220. package/dist/ui/index.js.map +1 -0
  221. package/dist/ui/input.d.ts +12 -0
  222. package/dist/ui/input.d.ts.map +1 -0
  223. package/dist/ui/input.js +45 -0
  224. package/dist/ui/input.js.map +1 -0
  225. package/dist/ui/input.style.d.ts +2 -0
  226. package/dist/ui/input.style.d.ts.map +1 -0
  227. package/dist/ui/input.style.js +36 -0
  228. package/dist/ui/input.style.js.map +1 -0
  229. package/dist/ui/label.d.ts +16 -0
  230. package/dist/ui/label.d.ts.map +1 -0
  231. package/dist/ui/label.js +90 -0
  232. package/dist/ui/label.js.map +1 -0
  233. package/dist/ui/list.d.ts +87 -0
  234. package/dist/ui/list.d.ts.map +1 -0
  235. package/dist/ui/list.js +427 -0
  236. package/dist/ui/list.js.map +1 -0
  237. package/dist/ui/list.style.d.ts +2 -0
  238. package/dist/ui/list.style.d.ts.map +1 -0
  239. package/dist/ui/list.style.js +35 -0
  240. package/dist/ui/list.style.js.map +1 -0
  241. package/dist/ui/loader.d.ts +6 -0
  242. package/dist/ui/loader.d.ts.map +1 -0
  243. package/dist/ui/loader.js +25 -0
  244. package/dist/ui/loader.js.map +1 -0
  245. package/dist/ui/menu.d.ts +41 -0
  246. package/dist/ui/menu.d.ts.map +1 -0
  247. package/dist/ui/menu.js +154 -0
  248. package/dist/ui/menu.js.map +1 -0
  249. package/dist/ui/menu.style.d.ts +3 -0
  250. package/dist/ui/menu.style.d.ts.map +1 -0
  251. package/dist/ui/menu.style.js +50 -0
  252. package/dist/ui/menu.style.js.map +1 -0
  253. package/dist/ui/numericInput.d.ts +37 -0
  254. package/dist/ui/numericInput.d.ts.map +1 -0
  255. package/dist/ui/numericInput.js +175 -0
  256. package/dist/ui/numericInput.js.map +1 -0
  257. package/dist/ui/numericInput.style.d.ts +2 -0
  258. package/dist/ui/numericInput.style.d.ts.map +1 -0
  259. package/dist/ui/numericInput.style.js +29 -0
  260. package/dist/ui/numericInput.style.js.map +1 -0
  261. package/dist/ui/overlay.d.ts +17 -0
  262. package/dist/ui/overlay.d.ts.map +1 -0
  263. package/dist/ui/overlay.js +87 -0
  264. package/dist/ui/overlay.js.map +1 -0
  265. package/dist/ui/overlay.style.d.ts +2 -0
  266. package/dist/ui/overlay.style.d.ts.map +1 -0
  267. package/dist/ui/overlay.style.js +46 -0
  268. package/dist/ui/overlay.style.js.map +1 -0
  269. package/dist/ui/panel.d.ts +25 -0
  270. package/dist/ui/panel.d.ts.map +1 -0
  271. package/dist/ui/panel.js +151 -0
  272. package/dist/ui/panel.js.map +1 -0
  273. package/dist/ui/panel.style.d.ts +2 -0
  274. package/dist/ui/panel.style.d.ts.map +1 -0
  275. package/dist/ui/panel.style.js +73 -0
  276. package/dist/ui/panel.style.js.map +1 -0
  277. package/dist/ui/sizer.d.ts +53 -0
  278. package/dist/ui/sizer.d.ts.map +1 -0
  279. package/dist/ui/sizer.js +203 -0
  280. package/dist/ui/sizer.js.map +1 -0
  281. package/dist/ui/slider.d.ts +52 -0
  282. package/dist/ui/slider.d.ts.map +1 -0
  283. package/dist/ui/slider.js +213 -0
  284. package/dist/ui/slider.js.map +1 -0
  285. package/dist/ui/slider.style.d.ts +2 -0
  286. package/dist/ui/slider.style.d.ts.map +1 -0
  287. package/dist/ui/slider.style.js +61 -0
  288. package/dist/ui/slider.style.js.map +1 -0
  289. package/dist/ui/sortableList.d.ts +39 -0
  290. package/dist/ui/sortableList.d.ts.map +1 -0
  291. package/dist/ui/sortableList.js +167 -0
  292. package/dist/ui/sortableList.js.map +1 -0
  293. package/dist/ui/splitContainer.d.ts +52 -0
  294. package/dist/ui/splitContainer.d.ts.map +1 -0
  295. package/dist/ui/splitContainer.js +252 -0
  296. package/dist/ui/splitContainer.js.map +1 -0
  297. package/dist/ui/splitContainer.style.d.ts +2 -0
  298. package/dist/ui/splitContainer.style.d.ts.map +1 -0
  299. package/dist/ui/splitContainer.style.js +62 -0
  300. package/dist/ui/splitContainer.style.js.map +1 -0
  301. package/dist/ui/switch.d.ts +22 -0
  302. package/dist/ui/switch.d.ts.map +1 -0
  303. package/dist/ui/switch.js +83 -0
  304. package/dist/ui/switch.js.map +1 -0
  305. package/dist/ui/switch.style.d.ts +2 -0
  306. package/dist/ui/switch.style.d.ts.map +1 -0
  307. package/dist/ui/switch.style.js +149 -0
  308. package/dist/ui/switch.style.js.map +1 -0
  309. package/dist/ui/tooltip.d.ts +24 -0
  310. package/dist/ui/tooltip.d.ts.map +1 -0
  311. package/dist/ui/tooltip.js +143 -0
  312. package/dist/ui/tooltip.js.map +1 -0
  313. package/dist/ui/tooltip.style.d.ts +2 -0
  314. package/dist/ui/tooltip.style.d.ts.map +1 -0
  315. package/dist/ui/tooltip.style.js +112 -0
  316. package/dist/ui/tooltip.style.js.map +1 -0
  317. package/package.json +2 -2
@@ -0,0 +1,154 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html } from 'lit';
8
+ import { customElement, property, query } from 'lit/decorators.js';
9
+ import constants from '../constants';
10
+ import { getElementOffset, hideElement, setPosition, setSize, showElement, fixPosition } from '../common/dom';
11
+ import { msg } from "@omegagrid/localize";
12
+ import { itemStyle, style } from './menu.style';
13
+ export class MenuEvent extends Event {
14
+ constructor(type, item) {
15
+ super(`menu.${type}`, { bubbles: true, composed: true });
16
+ this.item = item;
17
+ }
18
+ }
19
+ let Menu = class Menu extends LitElement {
20
+ willUpdate(changedProps) {
21
+ if (changedProps.has('items')) {
22
+ this._hasIcons = this.items.findIndex(item => !!item.icon) > -1;
23
+ }
24
+ }
25
+ updated(changedProps) {
26
+ if (changedProps.has('items')) {
27
+ this.list.reset();
28
+ this.list.renderItems(true);
29
+ }
30
+ }
31
+ async updateWidth() {
32
+ await this.list.updateComplete;
33
+ let maxWidth = 0;
34
+ if (this.dynamicWidth) {
35
+ this.list.items.forEach(item => {
36
+ let w = 0;
37
+ for (const ch of item.children)
38
+ w += ch.offsetWidth;
39
+ maxWidth = Math.max(maxWidth, w);
40
+ });
41
+ setSize(this, { w: maxWidth > 0 ? maxWidth : 100 });
42
+ }
43
+ }
44
+ constructor() {
45
+ super();
46
+ this.dynamicWidth = true;
47
+ this.disabledFocus = false;
48
+ this._hasIcons = false;
49
+ this._autoHide = false;
50
+ this.itemRenderer = (div, index) => {
51
+ const item = this.items[index];
52
+ div.classList.toggle('divider', !!item.divider);
53
+ div.classList.toggle('label', item.type == 'label');
54
+ if (item.divider) {
55
+ setSize(div, { h: constants.MENU_ITEM_HEIGHT - 1 });
56
+ }
57
+ div.style.color = item.color ? item.color : 'inherit';
58
+ item.type = item.type || 'normal';
59
+ return html `
60
+ ${this._hasIcons && (item.icon || item.type != 'label') ? html `
61
+ <div class="icon">
62
+ ${item.icon ? html `<og-icon .icon="${item.icon}"></og-icon>` : ``}
63
+ </div>
64
+ ` : ``}
65
+ ${item.renderer ? item.renderer(div, index, item) : html `
66
+ <div class="text">${msg(item.value ?? item.v)}</div>
67
+ `}
68
+ `;
69
+ };
70
+ this._onRender = () => {
71
+ this.updateWidth();
72
+ };
73
+ this._onSelect = (e) => {
74
+ if (this._autoHide)
75
+ hideElement(this);
76
+ const item = this.items[e.index];
77
+ if (item.exec)
78
+ item.exec(item);
79
+ this.dispatchEvent(new MenuEvent('select', item));
80
+ };
81
+ this.render = () => html `
82
+ <og-list
83
+ ?dynamicWidth="${this.dynamicWidth}"
84
+ ?disabledFocus="${this.disabledFocus}"
85
+ maxHeight="200"
86
+ itemHeight="${constants.MENU_ITEM_HEIGHT}"
87
+ size="${this.items?.length ?? 0}"
88
+ .itemRenderer="${this.itemRenderer}"
89
+ .customStyle=${itemStyle},
90
+ @render=${this._onRender}
91
+ @select=${this._onSelect}>
92
+ </og-list>
93
+ `;
94
+ this.addEventListener('contextmenu', e => e.preventDefault());
95
+ this.addEventListener('focus', () => setTimeout(() => this.list.focus(), 100));
96
+ }
97
+ connectedCallback() {
98
+ super.connectedCallback();
99
+ this.tabIndex = 0;
100
+ }
101
+ async open(elm, position = 'left') {
102
+ this._autoHide = true;
103
+ if (this.parentElement != document.body)
104
+ document.body.appendChild(this);
105
+ showElement(this);
106
+ await this.updateWidth();
107
+ const offset = getElementOffset(elm, this.parentElement);
108
+ const pos = fixPosition({
109
+ x: position == 'left' ? offset.left : (offset.left + elm.offsetWidth - this.offsetWidth),
110
+ y: offset.top + elm.offsetHeight,
111
+ w: this.offsetWidth,
112
+ h: this.offsetHeight
113
+ }, document.body);
114
+ setPosition(this, { t: pos.y, l: pos.x });
115
+ this.list.select(0);
116
+ this.list.focus();
117
+ document.body.addEventListener('mousedown', () => hideElement(this), { once: true });
118
+ }
119
+ async openAt(x, y) {
120
+ this._autoHide = true;
121
+ if (this.parentElement != document.body)
122
+ document.body.appendChild(this);
123
+ showElement(this);
124
+ await this.updateWidth();
125
+ const pos = fixPosition({
126
+ x: x,
127
+ y: y,
128
+ w: this.offsetWidth,
129
+ h: this.offsetHeight
130
+ }, document.body);
131
+ setPosition(this, { t: pos.y, l: pos.x });
132
+ this.list.select(0);
133
+ this.list.focus();
134
+ document.body.addEventListener('mousedown', () => hideElement(this), { once: true });
135
+ }
136
+ };
137
+ Menu.styles = [style];
138
+ __decorate([
139
+ property({ type: Array })
140
+ ], Menu.prototype, "items", void 0);
141
+ __decorate([
142
+ property({ type: Boolean })
143
+ ], Menu.prototype, "dynamicWidth", void 0);
144
+ __decorate([
145
+ property({ type: Boolean })
146
+ ], Menu.prototype, "disabledFocus", void 0);
147
+ __decorate([
148
+ query('og-list')
149
+ ], Menu.prototype, "list", void 0);
150
+ Menu = __decorate([
151
+ customElement(`og-menu`)
152
+ ], Menu);
153
+ export { Menu };
154
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +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\tthis.list.renderItems(true);\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}"]}
@@ -0,0 +1,3 @@
1
+ export declare const itemStyle: import("lit").CSSResult;
2
+ export declare const style: import("lit").CSSResult;
3
+ //# sourceMappingURL=menu.style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.style.d.ts","sourceRoot":"","sources":["../../src/ui/menu.style.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,yBAoCrB,CAAC;AAEF,eAAO,MAAM,KAAK,yBASjB,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { css } from 'lit';
2
+ import constants from '../constants';
3
+ export const itemStyle = css `
4
+ .item {
5
+ font-size: var(--og-font-size);
6
+ font-family: var(--og-font-family);
7
+ display: flex;
8
+ position: relative;
9
+ }
10
+
11
+ .item.label, .item.label:hover {
12
+ background-color: transparent !important;
13
+ cursor: default !important;
14
+ font-weight: bold;
15
+ color: var(--og-accent-color) !important;
16
+ }
17
+
18
+ .item .text {
19
+ padding-left: 5px;
20
+ padding-right: 5px;
21
+ white-space: nowrap;
22
+ }
23
+
24
+ .item .icon+.text {
25
+ padding-left: 0px;
26
+ }
27
+
28
+ .item .icon {
29
+ min-width: ${constants.MENU_ITEM_HEIGHT}px;
30
+ text-align: center;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ }
35
+
36
+ .item.divider {
37
+ border-bottom: 1px solid var(--og-accent-color);
38
+ }
39
+ `;
40
+ export const style = css `
41
+ :host {
42
+ font-size: var(--og-font-size);
43
+ display: block;
44
+ border: 1px solid var(--og-accent-color);
45
+ background: var(--og-background-color);
46
+ color: var(--og-text-color);
47
+ border-radius: var(--og-base-radius);
48
+ }
49
+ `;
50
+ //# sourceMappingURL=menu.style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.style.js","sourceRoot":"","sources":["../../src/ui/menu.style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;eA0Bb,SAAS,CAAC,gBAAgB;;;;;;;;;;CAUxC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,CAAA;;;;;;;;;CASvB,CAAC","sourcesContent":["import { css } from 'lit';\nimport constants from '../constants';\n\nexport const itemStyle = css`\n\t.item {\n\t\tfont-size: var(--og-font-size);\n\t\tfont-family: var(--og-font-family);\n\t\tdisplay: flex;\n\t\tposition: relative;\n\t}\n\n\t.item.label, .item.label:hover {\n\t\tbackground-color: transparent !important;\n\t\tcursor: default !important;\n\t\tfont-weight: bold;\n\t\tcolor: var(--og-accent-color) !important;\n\t}\n\n\t.item .text {\n\t\tpadding-left: 5px;\n\t\tpadding-right: 5px;\n\t\twhite-space: nowrap;\n\t}\n\n\t.item .icon+.text {\n\t\tpadding-left: 0px;\n\t}\n\n\t.item .icon {\n\t\tmin-width: ${constants.MENU_ITEM_HEIGHT}px;\n\t\ttext-align: center;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\n\t.item.divider {\n\t\tborder-bottom: 1px solid var(--og-accent-color);\n\t}\n`;\n\nexport const style = css`\n\t:host {\n\t\tfont-size: var(--og-font-size);\n\t\tdisplay: block;\n\t\tborder: 1px solid var(--og-accent-color);\n\t\tbackground: var(--og-background-color);\n\t\tcolor: var(--og-text-color);\n\t\tborder-radius: var(--og-base-radius);\n\t}\n`;"]}
@@ -0,0 +1,37 @@
1
+ import { LitElement } from 'lit';
2
+ import { numbers } from '../common';
3
+ export declare class NumericInput extends LitElement {
4
+ static styles: import("lit").CSSResult[];
5
+ format: string;
6
+ value: number;
7
+ min: number;
8
+ max: number;
9
+ locale: string;
10
+ disabled: boolean;
11
+ buttons: boolean;
12
+ increment: number;
13
+ input: HTMLInputElement;
14
+ editing: boolean;
15
+ private _lastInputValue;
16
+ private _lastValue;
17
+ private _formatter;
18
+ get formatter(): numbers.NumberFormatterFunction;
19
+ private _editingFormatter;
20
+ get editingFormatter(): numbers.NumberFormatterFunction;
21
+ get formattedValue(): string;
22
+ get hasButtons(): boolean;
23
+ resetFormatters(): void;
24
+ willUpdate(props: Map<PropertyKey, unknown>): void;
25
+ constructor();
26
+ focus(): void;
27
+ inc(value?: number): void;
28
+ private _dispatchChangeEvent;
29
+ private isValidNumber;
30
+ _onKeyDown: (e: KeyboardEvent) => void;
31
+ _onInput: (e: InputEvent) => void;
32
+ _onFocus: () => void;
33
+ _onBlur: () => void;
34
+ _onButtonClick: (e: MouseEvent) => void;
35
+ render: () => import("lit-html").TemplateResult<1>;
36
+ }
37
+ //# sourceMappingURL=numericInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numericInput.d.ts","sourceRoot":"","sources":["../../src/ui/numericInput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAIvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,qBACa,YAAa,SAAQ,UAAU;IAE3C,MAAM,CAAC,MAAM,4BAAS;IAGtB,MAAM,SAAmC;IAGzC,KAAK,EAAE,MAAM,CAAC;IAGd,GAAG,EAAE,MAAM,CAAC;IAGZ,GAAG,EAAE,MAAM,CAAC;IAGZ,MAAM,SAAe;IAGrB,QAAQ,UAAS;IAGjB,OAAO,UAAS;IAGhB,SAAS,SAAK;IAGd,KAAK,EAAE,gBAAgB,CAAC;IAGxB,OAAO,UAAS;IAEhB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,UAAU,CAAkC;IACpD,IAAI,SAAS,oCAGZ;IAED,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,IAAI,gBAAgB,oCAKnB;IAED,IAAI,cAAc,WAKjB;IAED,IAAI,UAAU,YAA4C;IAE1D,eAAe;IAKf,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;;IAiB3C,KAAK;IAIL,GAAG,CAAC,KAAK,GAAE,MAAuB;IAKlC,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,aAAa;IAIrB,UAAU,GAAI,GAAG,aAAa,UAM7B;IAED,QAAQ,GAAI,GAAG,UAAU,UAexB;IAED,QAAQ,aAGN;IAEF,OAAO,aAGL;IAEF,cAAc,GAAI,GAAG,UAAU,UAI9B;IAED,MAAM,6CA6BJ;CAEF"}
@@ -0,0 +1,175 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html } from 'lit';
8
+ import { customElement, property, query, state } from 'lit/decorators.js';
9
+ import { getLocale } from '@omegagrid/localize';
10
+ import constants from '../constants';
11
+ import { numbers } from '../common';
12
+ import { style } from './numericInput.style';
13
+ let NumericInput = class NumericInput extends LitElement {
14
+ get formatter() {
15
+ if (!this._formatter)
16
+ this._formatter = numbers.getNumberFormatter(this.locale, this.format);
17
+ return this._formatter;
18
+ }
19
+ get editingFormatter() {
20
+ if (!this._editingFormatter) {
21
+ this._editingFormatter = Intl.NumberFormat(this.locale, { useGrouping: false, maximumFractionDigits: 20 }).format;
22
+ }
23
+ return this._editingFormatter;
24
+ }
25
+ get formattedValue() {
26
+ return this.value == null ? '' : (this.editing
27
+ ? this.editingFormatter(this.value)
28
+ : this.formatter(this.value));
29
+ }
30
+ get hasButtons() { return this.buttons && !this.disabled; }
31
+ resetFormatters() {
32
+ this._formatter = null;
33
+ this._editingFormatter = null;
34
+ }
35
+ willUpdate(props) {
36
+ if (props.has('locale') || props.has('format')) {
37
+ this.resetFormatters();
38
+ }
39
+ if (props.has('value')) {
40
+ if (!this.isValidNumber(this.value)) {
41
+ this.value = props.get('value');
42
+ }
43
+ }
44
+ }
45
+ constructor() {
46
+ super();
47
+ this.format = constants.DEFAULT_NUMBER_FORMAT;
48
+ this.locale = getLocale();
49
+ this.disabled = false;
50
+ this.buttons = false;
51
+ this.increment = 1;
52
+ this.editing = false;
53
+ this._onKeyDown = (e) => {
54
+ if (['ArrowUp', 'ArrowDown'].includes(e.key)) {
55
+ e.preventDefault();
56
+ this.inc(e.key == 'ArrowUp' ? this.increment : -this.increment);
57
+ this._dispatchChangeEvent();
58
+ }
59
+ };
60
+ this._onInput = (e) => {
61
+ if (/^-?(0|[1-9]\d*)([,.]\d*)?$/.test(this.input.value)) {
62
+ this.value = parseFloat(this.input.value.replace(',', '.'));
63
+ }
64
+ else if (this.input.value == '') {
65
+ this.value = null;
66
+ }
67
+ else {
68
+ const s = this.input.selectionStart - (e.data?.length || 0);
69
+ this.input.value = this.formattedValue;
70
+ this.input.selectionStart = this.input.selectionEnd = s;
71
+ }
72
+ if (this.input.value != this._lastInputValue) {
73
+ this._lastInputValue = this.input.value;
74
+ this.dispatchEvent(new InputEvent('input', e));
75
+ }
76
+ };
77
+ this._onFocus = () => {
78
+ this._lastValue = this.value;
79
+ this.editing = true;
80
+ };
81
+ this._onBlur = () => {
82
+ this.editing = false;
83
+ this._dispatchChangeEvent();
84
+ };
85
+ this._onButtonClick = (e) => {
86
+ e.stopPropagation();
87
+ this.inc(parseFloat(e.target.dataset.increment));
88
+ this._dispatchChangeEvent();
89
+ };
90
+ this.render = () => html `
91
+ <div>
92
+ ${this.hasButtons ? html `
93
+ <og-button
94
+ icon="minus"
95
+ data-increment="${-this.increment}"
96
+ @click="${this._onButtonClick}"
97
+ @focus="${(e) => e.stopPropagation()}">
98
+ </og-button>
99
+ ` : null}
100
+
101
+ <input
102
+ type="text"
103
+ ?disabled="${this.disabled}"
104
+ .value="${this.formattedValue}"
105
+ @focus="${this._onFocus}"
106
+ @blur="${this._onBlur}"
107
+ @input="${this._onInput}"
108
+ @keydown="${this._onKeyDown}">
109
+
110
+ ${this.hasButtons ? html `
111
+ <og-button
112
+ icon="plus"
113
+ data-increment="${this.increment}"
114
+ @click="${this._onButtonClick}"
115
+ @focus="${(e) => e.stopPropagation()}">
116
+ </og-button>
117
+ ` : null}
118
+ </div>
119
+ `;
120
+ this.tabIndex = 1;
121
+ }
122
+ focus() {
123
+ this.input?.focus();
124
+ }
125
+ inc(value = this.increment) {
126
+ const v = (this.value || 0) + value;
127
+ if (this.isValidNumber(v))
128
+ this.value = v;
129
+ }
130
+ _dispatchChangeEvent() {
131
+ if (this.value != this._lastValue) {
132
+ this._lastValue = this.value;
133
+ this.dispatchEvent(new Event('change'));
134
+ }
135
+ }
136
+ isValidNumber(value) {
137
+ return (this.min == null || value >= this.min) && (this.max == null || value <= this.max);
138
+ }
139
+ };
140
+ NumericInput.styles = style;
141
+ __decorate([
142
+ property({ type: String })
143
+ ], NumericInput.prototype, "format", void 0);
144
+ __decorate([
145
+ property({ type: Number })
146
+ ], NumericInput.prototype, "value", void 0);
147
+ __decorate([
148
+ property({ type: Number })
149
+ ], NumericInput.prototype, "min", void 0);
150
+ __decorate([
151
+ property({ type: Number })
152
+ ], NumericInput.prototype, "max", void 0);
153
+ __decorate([
154
+ property({ type: String })
155
+ ], NumericInput.prototype, "locale", void 0);
156
+ __decorate([
157
+ property({ type: Boolean })
158
+ ], NumericInput.prototype, "disabled", void 0);
159
+ __decorate([
160
+ property({ type: Boolean })
161
+ ], NumericInput.prototype, "buttons", void 0);
162
+ __decorate([
163
+ property({ type: Number })
164
+ ], NumericInput.prototype, "increment", void 0);
165
+ __decorate([
166
+ query('input')
167
+ ], NumericInput.prototype, "input", void 0);
168
+ __decorate([
169
+ state()
170
+ ], NumericInput.prototype, "editing", void 0);
171
+ NumericInput = __decorate([
172
+ customElement(`og-numericinput`)
173
+ ], NumericInput);
174
+ export { NumericInput };
175
+ //# sourceMappingURL=numericInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numericInput.js","sourceRoot":"","sources":["../../src/ui/numericInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { getLocale } from '@omegagrid/localize';\nimport constants from '../constants';\nimport { numbers } from '../common';\nimport { style } from './numericInput.style';\n\n@customElement(`og-numericinput`)\nexport class NumericInput extends LitElement {\n\n\tstatic styles = style;\n\n\t@property({type: String})\n\tformat = constants.DEFAULT_NUMBER_FORMAT;\n\n\t@property({type: Number})\n\tvalue: number;\n\n\t@property({type: Number})\n\tmin: number;\n\n\t@property({type: Number})\n\tmax: number;\n\n\t@property({type: String})\n\tlocale = getLocale();\n\n\t@property({type: Boolean})\n\tdisabled = false;\n\n\t@property({type: Boolean})\n\tbuttons = false;\n\n\t@property({type: Number})\n\tincrement = 1;\n\n\t@query('input')\n\tinput: HTMLInputElement;\n\n\t@state()\n\tediting = false;\n\n\tprivate _lastInputValue: string;\n\tprivate _lastValue: number;\n\n\tprivate _formatter: numbers.NumberFormatterFunction;\n\tget formatter() {\n\t\tif (!this._formatter) this._formatter = numbers.getNumberFormatter(this.locale, this.format);\n\t\treturn this._formatter;\n\t}\n\n\tprivate _editingFormatter: numbers.NumberFormatterFunction;\n\tget editingFormatter() {\n\t\tif (!this._editingFormatter) {\n\t\t\tthis._editingFormatter = Intl.NumberFormat(this.locale, {useGrouping: false, maximumFractionDigits: 20}).format;\n\t\t}\n\t\treturn this._editingFormatter;\n\t}\n\n\tget formattedValue() {\n\t\treturn this.value == null ? '' : (this.editing\n\t\t\t? this.editingFormatter(this.value)\n\t\t\t: this.formatter(this.value)\n\t\t);\n\t}\n\n\tget hasButtons() { return this.buttons && !this.disabled }\n\n\tresetFormatters() {\n\t\tthis._formatter = null;\n\t\tthis._editingFormatter = null;\n\t}\n\t\n\twillUpdate(props: Map<PropertyKey, unknown>) {\n\t\tif (props.has('locale') || props.has('format')) {\n\t\t\tthis.resetFormatters();\n\t\t}\n\n\t\tif (props.has('value')) {\n\t\t\tif (!this.isValidNumber(this.value)) {\n\t\t\t\tthis.value = props.get('value') as number;\n\t\t\t}\n\t\t}\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.tabIndex = 1;\n\t}\n\n\tfocus() {\n\t\tthis.input?.focus();\n\t}\n\n\tinc(value: number = this.increment) {\n\t\tconst v = (this.value || 0) + value;\n\t\tif (this.isValidNumber(v)) this.value = v;\n\t}\n\n\tprivate _dispatchChangeEvent() {\n\t\tif (this.value != this._lastValue) {\n\t\t\tthis._lastValue = this.value;\n\t\t\tthis.dispatchEvent(new Event('change'));\n\t\t}\n\t}\n\n\tprivate isValidNumber(value: number) {\n\t\treturn (this.min == null || value >= this.min) && (this.max == null || value <= this.max);\n\t}\n\n\t_onKeyDown = (e: KeyboardEvent) => {\n\t\tif (['ArrowUp', 'ArrowDown'].includes(e.key)) {\n\t\t\te.preventDefault();\n\t\t\tthis.inc(e.key == 'ArrowUp' ? this.increment : -this.increment);\n\t\t\tthis._dispatchChangeEvent();\n\t\t}\n\t}\n\n\t_onInput = (e: InputEvent) => {\n\t\tif (/^-?(0|[1-9]\\d*)([,.]\\d*)?$/.test(this.input.value)) {\n\t\t\tthis.value = parseFloat(this.input.value.replace(',', '.'));\n\t\t} else if (this.input.value == '') {\n\t\t\tthis.value = null;\n\t\t} else {\n\t\t\tconst s = this.input.selectionStart - (e.data?.length || 0);\n\t\t\tthis.input.value = this.formattedValue;\n\t\t\tthis.input.selectionStart = this.input.selectionEnd = s;\n\t\t}\n\n\t\tif (this.input.value != this._lastInputValue) {\n\t\t\tthis._lastInputValue = this.input.value;\n\t\t\tthis.dispatchEvent(new InputEvent('input', e));\n\t\t}\n\t}\n\n\t_onFocus = () => {\n\t\tthis._lastValue = this.value;\n\t\tthis.editing = true;\n\t};\n\n\t_onBlur = () => {\n\t\tthis.editing = false;\n\t\tthis._dispatchChangeEvent();\n\t};\n\n\t_onButtonClick = (e: MouseEvent) => {\n\t\te.stopPropagation();\n\t\tthis.inc(parseFloat((e.target as HTMLElement).dataset.increment));\n\t\tthis._dispatchChangeEvent();\n\t}\n\n\trender = () => html`\n\t\t<div>\n\t\t\t${this.hasButtons ? html`\n\t\t\t\t<og-button\n\t\t\t\t\ticon=\"minus\"\n\t\t\t\t\tdata-increment=\"${-this.increment}\"\n\t\t\t\t\t@click=\"${this._onButtonClick}\"\n\t\t\t\t\t@focus=\"${(e: Event) => e.stopPropagation()}\">\n\t\t\t\t</og-button>\n\t\t\t` : null}\n\n\t\t\t<input\n\t\t\t\ttype=\"text\"\n\t\t\t\t?disabled=\"${this.disabled}\"\n\t\t\t\t.value=\"${this.formattedValue}\"\n\t\t\t\t@focus=\"${this._onFocus}\"\n\t\t\t\t@blur=\"${this._onBlur}\"\n\t\t\t\t@input=\"${this._onInput}\"\n\t\t\t\t@keydown=\"${this._onKeyDown}\">\n\n\t\t\t${this.hasButtons ? html`\n\t\t\t\t<og-button\n\t\t\t\t\ticon=\"plus\"\n\t\t\t\t\tdata-increment=\"${this.increment}\"\n\t\t\t\t\t@click=\"${this._onButtonClick}\"\n\t\t\t\t\t@focus=\"${(e: Event) => e.stopPropagation()}\">\n\t\t\t\t</og-button>\n\t\t\t` : null}\n\t\t</div>\n\t`;\n\t\n}"]}
@@ -0,0 +1,2 @@
1
+ export declare const style: import("lit").CSSResult[];
2
+ //# sourceMappingURL=numericInput.style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numericInput.style.d.ts","sourceRoot":"","sources":["../../src/ui/numericInput.style.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,KAAK,2BAyBhB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { css } from 'lit';
2
+ import { style as inputStyle } from './input.style';
3
+ export const style = [inputStyle, css `
4
+ :host {
5
+ text-align: right;
6
+ overflow: hidden;
7
+ }
8
+
9
+ :host > div {
10
+ display: flex;
11
+ flex-direction: row;
12
+ width: 100%;
13
+ height: 100%;
14
+ text-align: inherit;
15
+ }
16
+
17
+ og-button {
18
+ border: none;
19
+ text-align: center;
20
+ width: 16px;
21
+ padding-left: 0;
22
+ padding-right: 0;
23
+ border-radius: 0;
24
+ user-select: none;
25
+ height: 100%;
26
+ font-size: 10px;
27
+ }
28
+ `];
29
+ //# sourceMappingURL=numericInput.style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numericInput.style.js","sourceRoot":"","sources":["../../src/ui/numericInput.style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;CAyBpC,CAAC,CAAC","sourcesContent":["import { css } from 'lit';\nimport { style as inputStyle } from './input.style';\n\nexport const style = [inputStyle, css`\n\t:host {\n\t\ttext-align: right;\n\t\toverflow: hidden;\n\t}\n\n\t:host > div {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\ttext-align: inherit;\n\t}\n\n\tog-button {\n\t\tborder: none;\n\t\ttext-align: center;\n\t\twidth: 16px;\n\t\tpadding-left: 0;\n\t\tpadding-right: 0;\n\t\tborder-radius: 0;\n\t\tuser-select: none;\n\t\theight: 100%;\n\t\tfont-size: 10px;\n\t}\n`];\n"]}
@@ -0,0 +1,17 @@
1
+ import { LitElement } from 'lit';
2
+ import { DirectionalPosition } from '../types';
3
+ export declare class Overlay extends LitElement {
4
+ static defaultLoaderImage: string;
5
+ static defaultLoaderIcon: string;
6
+ static styles: import("lit").CSSResult[];
7
+ text: string;
8
+ striped: boolean;
9
+ loaderImage: string;
10
+ loaderIcon: string;
11
+ defaultLoader: boolean;
12
+ willUpdate(): void;
13
+ show(parent: HTMLElement, position?: DirectionalPosition, size?: number): void;
14
+ hide: () => HTMLElement;
15
+ render: () => import("lit-html").TemplateResult<1>;
16
+ }
17
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/ui/overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAGvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C,qBACa,OAAQ,SAAQ,UAAU;IAEtC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAClC,MAAM,CAAC,iBAAiB,SAAa;IAErC,MAAM,CAAC,MAAM,4BAAW;IAGxB,IAAI,EAAE,MAAM,CAAC;IAGb,OAAO,UAAS;IAGhB,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,MAAM,CAAC;IAGnB,aAAa,UAAS;IAEtB,UAAU;IAOV,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,MAAM;IAsBvE,IAAI,oBAA+B;IAEnC,MAAM,6CAaJ;CAEF"}
@@ -0,0 +1,87 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var Overlay_1;
8
+ import { dom } from '../common';
9
+ import { LitElement, html } from 'lit';
10
+ import { customElement, property } from 'lit/decorators.js';
11
+ import constants from '../constants';
12
+ import { style } from './overlay.style';
13
+ let Overlay = Overlay_1 = class Overlay extends LitElement {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.striped = false;
17
+ this.defaultLoader = false;
18
+ this.hide = () => dom.hideElement(this);
19
+ this.render = () => html `
20
+ <div id="inner">
21
+ ${this.loaderIcon ? html `
22
+ <div id="loader">
23
+ <og-loader .icon="${this.loaderIcon}" size="2x"></og-loader>
24
+ </div>
25
+ ` : (this.loaderImage ? html `
26
+ <div id="loader">
27
+ <img src="${this.loaderImage}" />
28
+ </div>
29
+ ` : ``)}
30
+ ${this.text ? html `<div id="text"><span>${this.text}</span></div>` : ``}
31
+ </div>
32
+ `;
33
+ }
34
+ willUpdate() {
35
+ if (this.defaultLoader && !this.loaderImage && !this.loaderIcon) {
36
+ if (Overlay_1.defaultLoaderImage)
37
+ this.loaderImage = Overlay_1.defaultLoaderImage;
38
+ else
39
+ this.loaderIcon = Overlay_1.defaultLoaderIcon;
40
+ }
41
+ }
42
+ show(parent, position, size) {
43
+ dom.showElement(this);
44
+ const offset = dom.getElementOffset(this, parent);
45
+ if (position && size) {
46
+ dom.setPosition(this, {
47
+ t: position == 'bottom' ? null : offset.top,
48
+ b: position == 'top' ? null : (offset.top + parent.clientHeight),
49
+ l: position == 'right' ? null : offset.left,
50
+ r: position == 'left' ? null : (offset.left + parent.clientWidth)
51
+ });
52
+ dom.setSize(this, {
53
+ w: ['left', 'right'].includes(position) ? size : parent.clientWidth,
54
+ h: ['top', 'bottom'].includes(position) ? size : parent.clientHeight
55
+ });
56
+ }
57
+ else if (offset.top == 0 && offset.left == 0) {
58
+ dom.setPosition(this, { t: 0, l: 0, r: 0, b: 0 });
59
+ }
60
+ else {
61
+ dom.setPosition(this, { t: offset.top, l: offset.left });
62
+ dom.setSize(this, { w: parent.clientWidth, h: parent.clientHeight });
63
+ }
64
+ }
65
+ };
66
+ Overlay.defaultLoaderIcon = 'spinner';
67
+ Overlay.styles = [style];
68
+ __decorate([
69
+ property({ type: String })
70
+ ], Overlay.prototype, "text", void 0);
71
+ __decorate([
72
+ property({ type: Boolean, reflect: true })
73
+ ], Overlay.prototype, "striped", void 0);
74
+ __decorate([
75
+ property({ type: String })
76
+ ], Overlay.prototype, "loaderImage", void 0);
77
+ __decorate([
78
+ property({ type: String })
79
+ ], Overlay.prototype, "loaderIcon", void 0);
80
+ __decorate([
81
+ property({ type: Boolean })
82
+ ], Overlay.prototype, "defaultLoader", void 0);
83
+ Overlay = Overlay_1 = __decorate([
84
+ customElement(`${constants.PREFIX}-overlay`)
85
+ ], Overlay);
86
+ export { Overlay };
87
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../src/ui/overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import { dom } from '../common';\nimport { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport constants from '../constants';\nimport { DirectionalPosition } from '../types';\nimport { style } from './overlay.style';\n\n@customElement(`${constants.PREFIX}-overlay`)\nexport class Overlay extends LitElement {\n\n\tstatic defaultLoaderImage: string;\n\tstatic defaultLoaderIcon = 'spinner';\n\n\tstatic styles = [style];\n\n\t@property({type: String})\n\ttext: string;\n\n\t@property({type: Boolean, reflect: true})\n\tstriped = false;\n\n\t@property({type: String})\n\tloaderImage: string;\n\n\t@property({type: String})\n\tloaderIcon: string;\n\n\t@property({type: Boolean})\n\tdefaultLoader = false;\n\n\twillUpdate() {\n\t\tif (this.defaultLoader && !this.loaderImage && !this.loaderIcon) {\n\t\t\tif (Overlay.defaultLoaderImage) this.loaderImage = Overlay.defaultLoaderImage;\n\t\t\telse this.loaderIcon = Overlay.defaultLoaderIcon;\n\t\t}\n\t}\n\n\tshow(parent: HTMLElement, position?: DirectionalPosition, size?: number) {\n\t\tdom.showElement(this)\n\t\tconst offset = dom.getElementOffset(this, parent);\n\t\tif (position && size) {\n\t\t\tdom.setPosition(this, {\n\t\t\t\tt: position == 'bottom' ? null : offset.top,\n\t\t\t\tb: position == 'top' ? null : (offset.top + parent.clientHeight),\n\t\t\t\tl: position == 'right' ? null : offset.left,\n\t\t\t\tr: position == 'left' ? null : (offset.left + parent.clientWidth)\n\t\t\t});\n\t\t\tdom.setSize(this, {\n\t\t\t\tw: ['left', 'right'].includes(position) ? size : parent.clientWidth,\n\t\t\t\th: ['top', 'bottom'].includes(position) ? size : parent.clientHeight\n\t\t\t});\n\t\t} else if (offset.top == 0 && offset.left == 0) {\n\t\t\tdom.setPosition(this, {t: 0, l: 0, r: 0, b: 0});\n\t\t} else {\n\t\t\tdom.setPosition(this, {t: offset.top, l: offset.left});\n\t\t\tdom.setSize(this, {w: parent.clientWidth, h: parent.clientHeight});\n\t\t}\n\t}\n\n\thide = () => dom.hideElement(this);\n\n\trender = () => html`\n\t\t<div id=\"inner\">\n\t\t\t${this.loaderIcon ? html`\n\t\t\t\t<div id=\"loader\">\n\t\t\t\t\t<og-loader .icon=\"${this.loaderIcon}\" size=\"2x\"></og-loader>\n\t\t\t\t</div>\n\t\t\t` : (this.loaderImage ? html`\n\t\t\t\t<div id=\"loader\">\n\t\t\t\t\t<img src=\"${this.loaderImage}\" />\n\t\t\t\t</div>\n\t\t\t` : ``)}\n\t\t\t${this.text ? html`<div id=\"text\"><span>${this.text}</span></div>` : ``}\n\t\t</div>\n\t`;\n\t\n}"]}
@@ -0,0 +1,2 @@
1
+ export declare const style: import("lit").CSSResult;
2
+ //# sourceMappingURL=overlay.style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.style.d.ts","sourceRoot":"","sources":["../../src/ui/overlay.style.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,KAAK,yBA2CjB,CAAC"}