react-graph-grid 0.1.4 → 0.1.6

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 (88) hide show
  1. package/README.md +4 -0
  2. package/{src/css → dist}/default.css +2 -1
  3. package/dist/index.esm.js +21 -0
  4. package/dist/index.js +56 -0
  5. package/dist/index10.esm.js +3844 -0
  6. package/dist/index10.js +3848 -0
  7. package/dist/index11.esm.js +4121 -0
  8. package/dist/index11.js +4125 -0
  9. package/dist/index12.esm.js +5238 -0
  10. package/dist/index12.js +5242 -0
  11. package/dist/index13.esm.js +5466 -0
  12. package/dist/index13.js +5470 -0
  13. package/dist/index14.esm.js +22 -0
  14. package/dist/index14.js +26 -0
  15. package/dist/index15.esm.js +402 -0
  16. package/dist/index15.js +403 -0
  17. package/dist/index16.esm.js +507 -0
  18. package/dist/index16.js +507 -0
  19. package/dist/index17.esm.js +256 -0
  20. package/dist/index17.js +257 -0
  21. package/dist/index18.esm.js +261 -0
  22. package/dist/index18.js +263 -0
  23. package/dist/index19.esm.js +623 -0
  24. package/dist/index19.js +624 -0
  25. package/dist/index2.esm.js +6 -0
  26. package/dist/index2.js +2 -0
  27. package/dist/index20.esm.js +219 -0
  28. package/dist/index20.js +220 -0
  29. package/dist/index21.esm.js +298 -0
  30. package/dist/index21.js +299 -0
  31. package/dist/index22.esm.js +662 -0
  32. package/dist/index22.js +663 -0
  33. package/dist/index23.esm.js +340 -0
  34. package/dist/index23.js +341 -0
  35. package/dist/index24.esm.js +269 -0
  36. package/dist/index24.js +270 -0
  37. package/dist/index25.esm.js +600 -0
  38. package/dist/index25.js +601 -0
  39. package/dist/index26.esm.js +245 -0
  40. package/dist/index26.js +246 -0
  41. package/dist/index27.esm.js +136 -0
  42. package/dist/index27.js +137 -0
  43. package/dist/index28.esm.js +70 -0
  44. package/dist/index28.js +70 -0
  45. package/dist/index29.esm.js +748 -0
  46. package/dist/index29.js +748 -0
  47. package/dist/index30.esm.js +363 -0
  48. package/dist/index30.js +363 -0
  49. package/dist/index4.esm.js +27 -0
  50. package/dist/index4.js +27 -0
  51. package/dist/index5.esm.js +35 -0
  52. package/dist/index5.js +39 -0
  53. package/dist/index6.esm.js +200 -0
  54. package/dist/index6.js +204 -0
  55. package/dist/index7.esm.js +9 -0
  56. package/dist/index7.js +13 -0
  57. package/dist/index8.esm.js +65 -0
  58. package/dist/index8.js +68 -0
  59. package/dist/index9.esm.js +102 -0
  60. package/dist/index9.js +103 -0
  61. package/package.json +6 -3
  62. package/eslint.config.js +0 -29
  63. package/index.html +0 -13
  64. package/index.js +0 -19
  65. package/npm.aps +0 -0
  66. package/src/Base.jsx +0 -81
  67. package/src/Card.jsx +0 -333
  68. package/src/Dropdown.jsx +0 -339
  69. package/src/FieldEdit.jsx +0 -376
  70. package/src/Graph.jsx +0 -482
  71. package/src/Grid.jsx +0 -887
  72. package/src/GridCD.jsx +0 -180
  73. package/src/GridDB.jsx +0 -897
  74. package/src/GridFE.jsx +0 -753
  75. package/src/GridFL.jsx +0 -468
  76. package/src/GridGR.jsx +0 -311
  77. package/src/GridPK.jsx +0 -414
  78. package/src/Modal.jsx +0 -511
  79. package/src/Overlay.jsx +0 -140
  80. package/src/Tests/DebugApp.jsx +0 -334
  81. package/src/Tests/TestData.jsx +0 -251
  82. package/src/Themes/DefaultGridTheme.jsx +0 -36
  83. package/src/Themes/Images.jsx +0 -438
  84. package/src/Themes/Translate.jsx +0 -76
  85. package/src/css/default_.css +0 -945
  86. package/src/main.jsx +0 -10
  87. package/vite.config.js +0 -14
  88. /package/{public → dist}/IM.svg +0 -0
@@ -0,0 +1,256 @@
1
+ import { require_jsx_runtime } from "./index7.esm.js";
2
+ import { BaseComponent } from "./index8.esm.js";
3
+ import { ModalClass } from "./index15.esm.js";
4
+ import { Images } from "./index16.esm.js";
5
+ import { useEffect, useState } from "react";
6
+ var import_jsx_runtime = require_jsx_runtime();
7
+ function Dropdown(props) {
8
+ let dd = null;
9
+ const [ddState, setState] = useState({
10
+ dd,
11
+ ind: 0
12
+ });
13
+ if (ddState.dd) dd = ddState.dd;
14
+ else dd = new DropdownClass(props);
15
+ if (props.init && !ModalClass._isFake) props.init(dd);
16
+ dd.refreshState = function() {
17
+ setState({
18
+ dd,
19
+ ind: dd.stateind++
20
+ });
21
+ };
22
+ useEffect(() => {
23
+ dd.setupEvents();
24
+ return () => {
25
+ dd.clearEvents();
26
+ };
27
+ }, [dd]);
28
+ return dd.render();
29
+ }
30
+ var DropdownClass = class extends ModalClass {
31
+ constructor(props) {
32
+ super(props);
33
+ const dd = this;
34
+ dd.getItems = props.getItems || function() {
35
+ return new Promise(function(resolve) {
36
+ resolve([]);
37
+ });
38
+ };
39
+ window._dropdownSeq = window._dropdownSeq || 0;
40
+ dd.id = window._dropdownSeq++;
41
+ dd.pageNumber = 1;
42
+ dd.pageSize = props.pageSize || 20;
43
+ dd.items = props.items || [];
44
+ dd.menuItemClass = props.menuItemClass || BaseComponent.theme.menuItemClass;
45
+ dd.menuClass = props.menuClass || BaseComponent.theme.menuClass;
46
+ dd.stateind = 0;
47
+ dd.opt.onItemClick = props.onItemClick;
48
+ dd.opt.onClose = props.onClose;
49
+ dd.opt.parentRect = props.parentRect;
50
+ dd.maxW = props.maxW;
51
+ dd.opt.closeWhenEscape = true;
52
+ dd.opt.noHeader = true;
53
+ dd.opt.noFooter = true;
54
+ dd.opt.resizable = false;
55
+ dd.opt.noPadding = true;
56
+ dd.opt.hiddenOverlay = true;
57
+ dd.opt.onItemMouseEnter = props.onItemMouseEnter;
58
+ dd.opt.onItemMouseLeave = props.onItemMouseLeave;
59
+ dd.renderContent = dd.renderDropdownContent;
60
+ dd.visible = dd.items.length > 0;
61
+ }
62
+ appendItems() {
63
+ const dd = this;
64
+ dd.pageNumber++;
65
+ dd.getItems({ filter: dd.filter }).then((items) => {
66
+ dd.items = items;
67
+ dd.refreshState();
68
+ });
69
+ }
70
+ render() {
71
+ return super.render();
72
+ }
73
+ renderDropdownContent() {
74
+ const dd = this;
75
+ if (!dd.items || dd.waitingItems) return dd.Spinner(dd.id);
76
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [dd.allowUserFilter ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("ul", {
77
+ className: `dropdown-ul ${dd.menuClass || ""}`,
78
+ style: {
79
+ overflowX: "hidden",
80
+ padding: "0",
81
+ margin: "0"
82
+ },
83
+ children: [dd.items.map((item, ind) => {
84
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", {
85
+ "dropdown-item": `${dd.id}_${item.id}_`,
86
+ title: dd.translate(item.title || item.text),
87
+ className: dd.menuItemClass + (dd.activeItem === item ? " active" : ""),
88
+ style: {
89
+ listStyleType: "none",
90
+ display: "flex",
91
+ justifyContent: "start",
92
+ flexWrap: "nowrap",
93
+ alignItems: "center",
94
+ paddingRight: item.items && item.items.length > 0 ? "" : "1em",
95
+ height: "1.5em"
96
+ },
97
+ onClick: (e) => dd.onItemClick(e, item.id),
98
+ onMouseEnter: (e) => {
99
+ if (!dd.opt.onItemMouseEnter) return;
100
+ dd.opt.onItemMouseEnter(e, item);
101
+ },
102
+ onMouseLeave: (e) => {
103
+ if (!dd.opt.onItemMouseLeave) return;
104
+ dd.opt.onItemMouseLeave(e, item);
105
+ },
106
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
107
+ style: { width: "2em" },
108
+ children: item.img ? item.img() : ""
109
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
110
+ style: {
111
+ display: "flex",
112
+ justifyContent: "space-between",
113
+ flexWrap: "nowrap",
114
+ alignItems: "center",
115
+ width: "100%"
116
+ },
117
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: dd.translate(item.text) }), item.items && item.items.length > 0 ? Images.images.submenu(20, 10) : ""]
118
+ })]
119
+ }, `dropdownitem_${dd.id}_${item.id}_${ind}_`);
120
+ }), dd.allowUpload && dd.pageSize > 0 && dd.items.length === dd.pageSize * dd.pageNumber ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", {
121
+ className: `dropdown-ul ${dd.menuClass || ""}`,
122
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", {
123
+ "dropdown-item": `${dd.id}_append_`,
124
+ title: dd.translate("load more records"),
125
+ className: dd.menuItemClass,
126
+ style: {
127
+ listStyleType: "none",
128
+ display: "flex",
129
+ flexWrap: "nowrap"
130
+ },
131
+ onClick: (e) => dd.onItemClick(e, "append"),
132
+ children: ["$", dd.translate("more") + "..."]
133
+ }, `dropdownitem_$${dd.id}_append_`)
134
+ }, `dropdownadd_${dd.id}_`) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {})]
135
+ }, `dropdown_${dd.id}_`)] });
136
+ }
137
+ calcPos(e) {
138
+ const dd = this;
139
+ const rect = dd.getDimensionsByContent();
140
+ const parentRect = dd.opt.parentRect ? dd.opt.parentRect : {
141
+ x: e.clientX,
142
+ y: e.clientY,
143
+ width: e.width || 0,
144
+ height: e.height || 0
145
+ };
146
+ dd.opt.pos = {
147
+ x: parentRect.x,
148
+ y: parentRect.y + parseInt(parentRect.height),
149
+ w: Math.max(rect.w, parentRect.width),
150
+ h: rect.h
151
+ };
152
+ if (dd.maxW != null) dd.opt.pos.w = Math.min(dd.opt.pos.w, dd.maxW);
153
+ }
154
+ popup(e) {
155
+ const dd = this;
156
+ function afterGetItems(newItems) {
157
+ dd.waitingItems = false;
158
+ if (newItems && newItems.length > 0) dd.items.push(...newItems);
159
+ dd.lastPageNumber = dd.pageNumber;
160
+ dd.visible = dd.items.length > 0;
161
+ if (dd.items.length <= 0 && !dd.opt.allowUserFilter) return;
162
+ dd.calcPos(e);
163
+ dd.refreshState();
164
+ }
165
+ if (!dd.lastPageNumber || dd.lastPageNumber !== dd.pageNumber || dd.items.length <= 0) {
166
+ dd.waitingItems = true;
167
+ dd.visible = true;
168
+ dd.calcPos(e);
169
+ dd.refreshState();
170
+ dd.getItems({
171
+ self: dd,
172
+ filter: dd.filter,
173
+ pageSize: dd.pageSize,
174
+ pageNumber: dd.pageNumber
175
+ }).then((items) => {
176
+ afterGetItems(items);
177
+ }).finally(() => {
178
+ dd.waitingItems = false;
179
+ dd.refreshState();
180
+ });
181
+ } else afterGetItems();
182
+ }
183
+ close() {
184
+ const dd = this;
185
+ dd.items = [];
186
+ delete dd.activeItem;
187
+ delete dd.lastPageNumber;
188
+ super.close();
189
+ }
190
+ onItemClick(e, itemId) {
191
+ const dd = this;
192
+ if (itemId === "append") dd.appendItems();
193
+ else {
194
+ if (dd.opt.onItemClick) dd.opt.onItemClick({
195
+ owner: dd.opt.owner,
196
+ itemId,
197
+ self: dd,
198
+ clientX: e.clientX,
199
+ clientY: e.clientY,
200
+ target: e.target
201
+ });
202
+ const clickedItem = dd.items.find(function(item) {
203
+ return item.id === itemId;
204
+ });
205
+ if (!clickedItem || !clickedItem.noClose) dd.close();
206
+ }
207
+ }
208
+ setupEvents() {
209
+ const dd = this;
210
+ super.setupEvents();
211
+ function onKeyDown(e) {
212
+ const key = e && e.key ? e.key.toLowerCase() : "";
213
+ let ind;
214
+ switch (key) {
215
+ case "enter":
216
+ if (!dd.activeItem) return;
217
+ dd.opt.onItemClick({
218
+ owner: dd.opt.owner,
219
+ itemId: dd.activeItem.id,
220
+ self: dd
221
+ });
222
+ dd.close();
223
+ break;
224
+ case "down":
225
+ case "arrowdown":
226
+ if (dd.activeItem) {
227
+ ind = dd.items.indexOf(dd.activeItem);
228
+ if (ind < 0 || ind === dd.items.length - 1) return;
229
+ dd.activeItem = dd.items[ind + 1];
230
+ } else if (dd.items.length > 0) dd.activeItem = dd.items[0];
231
+ dd.refreshState();
232
+ break;
233
+ case "up":
234
+ case "arrowup":
235
+ if (dd.activeItem) {
236
+ ind = dd.items.indexOf(dd.activeItem);
237
+ if (ind <= 0) return;
238
+ dd.activeItem = dd.items[ind - 1];
239
+ } else if (dd.items.length > 0) dd.activeItem = dd.items[0];
240
+ dd.refreshState();
241
+ break;
242
+ case "tab":
243
+ dd.close();
244
+ break;
245
+ default: break;
246
+ }
247
+ }
248
+ document.addEventListener("keydown", onKeyDown);
249
+ const remClearEvents = dd.clearEvents;
250
+ dd.clearEvents = function() {
251
+ remClearEvents();
252
+ document.removeEventListener("keydown", onKeyDown);
253
+ };
254
+ }
255
+ };
256
+ export { Dropdown, DropdownClass };
@@ -0,0 +1,257 @@
1
+ const require_jsx_runtime$1 = require("./index7.js");
2
+ const require_Base = require("./index8.js");
3
+ const require_Modal = require("./index15.js");
4
+ const require_Images = require("./index16.js");
5
+ let react = require("react");
6
+ var import_jsx_runtime = require_jsx_runtime$1.default;
7
+ function Dropdown(props) {
8
+ let dd = null;
9
+ const [ddState, setState] = (0, react.useState)({
10
+ dd,
11
+ ind: 0
12
+ });
13
+ if (ddState.dd) dd = ddState.dd;
14
+ else dd = new DropdownClass(props);
15
+ if (props.init && !require_Modal.ModalClass._isFake) props.init(dd);
16
+ dd.refreshState = function() {
17
+ setState({
18
+ dd,
19
+ ind: dd.stateind++
20
+ });
21
+ };
22
+ (0, react.useEffect)(() => {
23
+ dd.setupEvents();
24
+ return () => {
25
+ dd.clearEvents();
26
+ };
27
+ }, [dd]);
28
+ return dd.render();
29
+ }
30
+ var DropdownClass = class extends require_Modal.ModalClass {
31
+ constructor(props) {
32
+ super(props);
33
+ const dd = this;
34
+ dd.getItems = props.getItems || function() {
35
+ return new Promise(function(resolve) {
36
+ resolve([]);
37
+ });
38
+ };
39
+ window._dropdownSeq = window._dropdownSeq || 0;
40
+ dd.id = window._dropdownSeq++;
41
+ dd.pageNumber = 1;
42
+ dd.pageSize = props.pageSize || 20;
43
+ dd.items = props.items || [];
44
+ dd.menuItemClass = props.menuItemClass || require_Base.BaseComponent.theme.menuItemClass;
45
+ dd.menuClass = props.menuClass || require_Base.BaseComponent.theme.menuClass;
46
+ dd.stateind = 0;
47
+ dd.opt.onItemClick = props.onItemClick;
48
+ dd.opt.onClose = props.onClose;
49
+ dd.opt.parentRect = props.parentRect;
50
+ dd.maxW = props.maxW;
51
+ dd.opt.closeWhenEscape = true;
52
+ dd.opt.noHeader = true;
53
+ dd.opt.noFooter = true;
54
+ dd.opt.resizable = false;
55
+ dd.opt.noPadding = true;
56
+ dd.opt.hiddenOverlay = true;
57
+ dd.opt.onItemMouseEnter = props.onItemMouseEnter;
58
+ dd.opt.onItemMouseLeave = props.onItemMouseLeave;
59
+ dd.renderContent = dd.renderDropdownContent;
60
+ dd.visible = dd.items.length > 0;
61
+ }
62
+ appendItems() {
63
+ const dd = this;
64
+ dd.pageNumber++;
65
+ dd.getItems({ filter: dd.filter }).then((items) => {
66
+ dd.items = items;
67
+ dd.refreshState();
68
+ });
69
+ }
70
+ render() {
71
+ return super.render();
72
+ }
73
+ renderDropdownContent() {
74
+ const dd = this;
75
+ if (!dd.items || dd.waitingItems) return dd.Spinner(dd.id);
76
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [dd.allowUserFilter ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("ul", {
77
+ className: `dropdown-ul ${dd.menuClass || ""}`,
78
+ style: {
79
+ overflowX: "hidden",
80
+ padding: "0",
81
+ margin: "0"
82
+ },
83
+ children: [dd.items.map((item, ind) => {
84
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", {
85
+ "dropdown-item": `${dd.id}_${item.id}_`,
86
+ title: dd.translate(item.title || item.text),
87
+ className: dd.menuItemClass + (dd.activeItem === item ? " active" : ""),
88
+ style: {
89
+ listStyleType: "none",
90
+ display: "flex",
91
+ justifyContent: "start",
92
+ flexWrap: "nowrap",
93
+ alignItems: "center",
94
+ paddingRight: item.items && item.items.length > 0 ? "" : "1em",
95
+ height: "1.5em"
96
+ },
97
+ onClick: (e) => dd.onItemClick(e, item.id),
98
+ onMouseEnter: (e) => {
99
+ if (!dd.opt.onItemMouseEnter) return;
100
+ dd.opt.onItemMouseEnter(e, item);
101
+ },
102
+ onMouseLeave: (e) => {
103
+ if (!dd.opt.onItemMouseLeave) return;
104
+ dd.opt.onItemMouseLeave(e, item);
105
+ },
106
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
107
+ style: { width: "2em" },
108
+ children: item.img ? item.img() : ""
109
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
110
+ style: {
111
+ display: "flex",
112
+ justifyContent: "space-between",
113
+ flexWrap: "nowrap",
114
+ alignItems: "center",
115
+ width: "100%"
116
+ },
117
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: dd.translate(item.text) }), item.items && item.items.length > 0 ? require_Images.Images.images.submenu(20, 10) : ""]
118
+ })]
119
+ }, `dropdownitem_${dd.id}_${item.id}_${ind}_`);
120
+ }), dd.allowUpload && dd.pageSize > 0 && dd.items.length === dd.pageSize * dd.pageNumber ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", {
121
+ className: `dropdown-ul ${dd.menuClass || ""}`,
122
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", {
123
+ "dropdown-item": `${dd.id}_append_`,
124
+ title: dd.translate("load more records"),
125
+ className: dd.menuItemClass,
126
+ style: {
127
+ listStyleType: "none",
128
+ display: "flex",
129
+ flexWrap: "nowrap"
130
+ },
131
+ onClick: (e) => dd.onItemClick(e, "append"),
132
+ children: ["$", dd.translate("more") + "..."]
133
+ }, `dropdownitem_$${dd.id}_append_`)
134
+ }, `dropdownadd_${dd.id}_`) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {})]
135
+ }, `dropdown_${dd.id}_`)] });
136
+ }
137
+ calcPos(e) {
138
+ const dd = this;
139
+ const rect = dd.getDimensionsByContent();
140
+ const parentRect = dd.opt.parentRect ? dd.opt.parentRect : {
141
+ x: e.clientX,
142
+ y: e.clientY,
143
+ width: e.width || 0,
144
+ height: e.height || 0
145
+ };
146
+ dd.opt.pos = {
147
+ x: parentRect.x,
148
+ y: parentRect.y + parseInt(parentRect.height),
149
+ w: Math.max(rect.w, parentRect.width),
150
+ h: rect.h
151
+ };
152
+ if (dd.maxW != null) dd.opt.pos.w = Math.min(dd.opt.pos.w, dd.maxW);
153
+ }
154
+ popup(e) {
155
+ const dd = this;
156
+ function afterGetItems(newItems) {
157
+ dd.waitingItems = false;
158
+ if (newItems && newItems.length > 0) dd.items.push(...newItems);
159
+ dd.lastPageNumber = dd.pageNumber;
160
+ dd.visible = dd.items.length > 0;
161
+ if (dd.items.length <= 0 && !dd.opt.allowUserFilter) return;
162
+ dd.calcPos(e);
163
+ dd.refreshState();
164
+ }
165
+ if (!dd.lastPageNumber || dd.lastPageNumber !== dd.pageNumber || dd.items.length <= 0) {
166
+ dd.waitingItems = true;
167
+ dd.visible = true;
168
+ dd.calcPos(e);
169
+ dd.refreshState();
170
+ dd.getItems({
171
+ self: dd,
172
+ filter: dd.filter,
173
+ pageSize: dd.pageSize,
174
+ pageNumber: dd.pageNumber
175
+ }).then((items) => {
176
+ afterGetItems(items);
177
+ }).finally(() => {
178
+ dd.waitingItems = false;
179
+ dd.refreshState();
180
+ });
181
+ } else afterGetItems();
182
+ }
183
+ close() {
184
+ const dd = this;
185
+ dd.items = [];
186
+ delete dd.activeItem;
187
+ delete dd.lastPageNumber;
188
+ super.close();
189
+ }
190
+ onItemClick(e, itemId) {
191
+ const dd = this;
192
+ if (itemId === "append") dd.appendItems();
193
+ else {
194
+ if (dd.opt.onItemClick) dd.opt.onItemClick({
195
+ owner: dd.opt.owner,
196
+ itemId,
197
+ self: dd,
198
+ clientX: e.clientX,
199
+ clientY: e.clientY,
200
+ target: e.target
201
+ });
202
+ const clickedItem = dd.items.find(function(item) {
203
+ return item.id === itemId;
204
+ });
205
+ if (!clickedItem || !clickedItem.noClose) dd.close();
206
+ }
207
+ }
208
+ setupEvents() {
209
+ const dd = this;
210
+ super.setupEvents();
211
+ function onKeyDown(e) {
212
+ const key = e && e.key ? e.key.toLowerCase() : "";
213
+ let ind;
214
+ switch (key) {
215
+ case "enter":
216
+ if (!dd.activeItem) return;
217
+ dd.opt.onItemClick({
218
+ owner: dd.opt.owner,
219
+ itemId: dd.activeItem.id,
220
+ self: dd
221
+ });
222
+ dd.close();
223
+ break;
224
+ case "down":
225
+ case "arrowdown":
226
+ if (dd.activeItem) {
227
+ ind = dd.items.indexOf(dd.activeItem);
228
+ if (ind < 0 || ind === dd.items.length - 1) return;
229
+ dd.activeItem = dd.items[ind + 1];
230
+ } else if (dd.items.length > 0) dd.activeItem = dd.items[0];
231
+ dd.refreshState();
232
+ break;
233
+ case "up":
234
+ case "arrowup":
235
+ if (dd.activeItem) {
236
+ ind = dd.items.indexOf(dd.activeItem);
237
+ if (ind <= 0) return;
238
+ dd.activeItem = dd.items[ind - 1];
239
+ } else if (dd.items.length > 0) dd.activeItem = dd.items[0];
240
+ dd.refreshState();
241
+ break;
242
+ case "tab":
243
+ dd.close();
244
+ break;
245
+ default: break;
246
+ }
247
+ }
248
+ document.addEventListener("keydown", onKeyDown);
249
+ const remClearEvents = dd.clearEvents;
250
+ dd.clearEvents = function() {
251
+ remClearEvents();
252
+ document.removeEventListener("keydown", onKeyDown);
253
+ };
254
+ }
255
+ };
256
+ exports.Dropdown = Dropdown;
257
+ exports.DropdownClass = DropdownClass;