@toolbox-web/grid 1.2.0 → 1.3.1
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/README.md +80 -22
- package/all.js +619 -571
- package/all.js.map +1 -1
- package/index.js +362 -302
- package/index.js.map +1 -1
- package/lib/core/grid.d.ts +64 -1
- package/lib/core/grid.d.ts.map +1 -1
- package/lib/core/internal/row-animation.d.ts +37 -0
- package/lib/core/internal/row-animation.d.ts.map +1 -0
- package/lib/core/types.d.ts +17 -0
- package/lib/core/types.d.ts.map +1 -1
- package/lib/plugins/clipboard/index.js +82 -76
- package/lib/plugins/clipboard/index.js.map +1 -1
- package/lib/plugins/clipboard/types.d.ts +1 -0
- package/lib/plugins/clipboard/types.d.ts.map +1 -1
- package/lib/plugins/column-virtualization/index.js +43 -41
- package/lib/plugins/column-virtualization/index.js.map +1 -1
- package/lib/plugins/context-menu/index.js +24 -22
- package/lib/plugins/context-menu/index.js.map +1 -1
- package/lib/plugins/editing/EditingPlugin.d.ts.map +1 -1
- package/lib/plugins/editing/index.js +83 -52
- package/lib/plugins/editing/index.js.map +1 -1
- package/lib/plugins/export/index.js +22 -20
- package/lib/plugins/export/index.js.map +1 -1
- package/lib/plugins/filtering/FilteringPlugin.d.ts +11 -1
- package/lib/plugins/filtering/FilteringPlugin.d.ts.map +1 -1
- package/lib/plugins/filtering/index.js +160 -125
- package/lib/plugins/filtering/index.js.map +1 -1
- package/lib/plugins/grouping-columns/index.js +20 -18
- package/lib/plugins/grouping-columns/index.js.map +1 -1
- package/lib/plugins/grouping-rows/index.js +66 -64
- package/lib/plugins/grouping-rows/index.js.map +1 -1
- package/lib/plugins/master-detail/index.js +51 -49
- package/lib/plugins/master-detail/index.js.map +1 -1
- package/lib/plugins/multi-sort/index.js +17 -15
- package/lib/plugins/multi-sort/index.js.map +1 -1
- package/lib/plugins/pinned-columns/index.js +24 -22
- package/lib/plugins/pinned-columns/index.js.map +1 -1
- package/lib/plugins/pinned-rows/index.js +25 -23
- package/lib/plugins/pinned-rows/index.js.map +1 -1
- package/lib/plugins/pivot/index.js +49 -47
- package/lib/plugins/pivot/index.js.map +1 -1
- package/lib/plugins/reorder/index.js +24 -22
- package/lib/plugins/reorder/index.js.map +1 -1
- package/lib/plugins/responsive/index.js +19 -17
- package/lib/plugins/responsive/index.js.map +1 -1
- package/lib/plugins/row-reorder/index.js +38 -36
- package/lib/plugins/row-reorder/index.js.map +1 -1
- package/lib/plugins/selection/SelectionPlugin.d.ts +13 -0
- package/lib/plugins/selection/SelectionPlugin.d.ts.map +1 -1
- package/lib/plugins/selection/index.d.ts +1 -1
- package/lib/plugins/selection/index.d.ts.map +1 -1
- package/lib/plugins/selection/index.js +118 -85
- package/lib/plugins/selection/index.js.map +1 -1
- package/lib/plugins/selection/types.d.ts +50 -6
- package/lib/plugins/selection/types.d.ts.map +1 -1
- package/lib/plugins/server-side/index.js +34 -32
- package/lib/plugins/server-side/index.js.map +1 -1
- package/lib/plugins/tree/index.js +25 -23
- package/lib/plugins/tree/index.js.map +1 -1
- package/lib/plugins/undo-redo/index.js +22 -20
- package/lib/plugins/undo-redo/index.js.map +1 -1
- package/lib/plugins/visibility/index.js +21 -19
- package/lib/plugins/visibility/index.js.map +1 -1
- package/package.json +21 -4
- package/public.d.ts +1 -1
- package/public.d.ts.map +1 -1
- package/umd/grid.all.umd.js +19 -19
- package/umd/grid.all.umd.js.map +1 -1
- package/umd/grid.umd.js +9 -9
- package/umd/grid.umd.js.map +1 -1
- package/umd/plugins/clipboard.umd.js +5 -5
- package/umd/plugins/clipboard.umd.js.map +1 -1
- package/umd/plugins/editing.umd.js +1 -1
- package/umd/plugins/editing.umd.js.map +1 -1
- package/umd/plugins/filtering.umd.js +1 -1
- package/umd/plugins/filtering.umd.js.map +1 -1
- package/umd/plugins/selection.umd.js +2 -2
- package/umd/plugins/selection.umd.js.map +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const y = '<svg viewBox="0 0 16 16" width="12" height="12"><path fill="currentColor" d="M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>', I = {
|
|
2
2
|
expand: "▶",
|
|
3
3
|
collapse: "▼",
|
|
4
4
|
sortAsc: "▲",
|
|
@@ -6,9 +6,11 @@ const C = {
|
|
|
6
6
|
sortNone: "⇅",
|
|
7
7
|
submenuArrow: "▶",
|
|
8
8
|
dragHandle: "⋮⋮",
|
|
9
|
-
toolPanel: "☰"
|
|
9
|
+
toolPanel: "☰",
|
|
10
|
+
filter: y,
|
|
11
|
+
filterActive: y
|
|
10
12
|
};
|
|
11
|
-
class
|
|
13
|
+
class M {
|
|
12
14
|
/**
|
|
13
15
|
* Plugin dependencies - declare other plugins this one requires.
|
|
14
16
|
*
|
|
@@ -232,7 +234,7 @@ class I {
|
|
|
232
234
|
*/
|
|
233
235
|
get gridIcons() {
|
|
234
236
|
const e = this.grid?.gridConfig?.icons ?? {};
|
|
235
|
-
return { ...
|
|
237
|
+
return { ...I, ...e };
|
|
236
238
|
}
|
|
237
239
|
// #region Animation Helpers
|
|
238
240
|
/**
|
|
@@ -312,10 +314,10 @@ const g = "@layer tbw-plugins{.tbw-context-menu{position:fixed;background:var(--
|
|
|
312
314
|
function v(r, e) {
|
|
313
315
|
return (typeof r == "function" ? r(e) : r).filter((n) => !(n.hidden === !0 || typeof n.hidden == "function" && n.hidden(e)));
|
|
314
316
|
}
|
|
315
|
-
function
|
|
317
|
+
function H(r, e) {
|
|
316
318
|
return r.disabled === !0 ? !0 : typeof r.disabled == "function" ? r.disabled(e) : !1;
|
|
317
319
|
}
|
|
318
|
-
function x(r, e, t, n =
|
|
320
|
+
function x(r, e, t, n = I.submenuArrow) {
|
|
319
321
|
const l = document.createElement("div");
|
|
320
322
|
l.className = "tbw-context-menu", l.setAttribute("role", "menu");
|
|
321
323
|
for (const s of r) {
|
|
@@ -326,7 +328,7 @@ function x(r, e, t, n = C.submenuArrow) {
|
|
|
326
328
|
}
|
|
327
329
|
const i = document.createElement("div");
|
|
328
330
|
i.className = "tbw-context-menu-item", s.cssClass && i.classList.add(s.cssClass), i.setAttribute("role", "menuitem"), i.setAttribute("data-id", s.id);
|
|
329
|
-
const d =
|
|
331
|
+
const d = H(s, e);
|
|
330
332
|
if (d && (i.classList.add("disabled"), i.setAttribute("aria-disabled", "true")), s.icon) {
|
|
331
333
|
const o = document.createElement("span");
|
|
332
334
|
o.className = "tbw-context-menu-icon", o.innerHTML = s.icon, i.appendChild(o);
|
|
@@ -340,7 +342,7 @@ function x(r, e, t, n = C.submenuArrow) {
|
|
|
340
342
|
const o = document.createElement("span");
|
|
341
343
|
o.className = "tbw-context-menu-arrow", typeof n == "string" ? o.innerHTML = n : n instanceof HTMLElement && o.appendChild(n.cloneNode(!0)), i.appendChild(o), i.addEventListener("mouseenter", () => {
|
|
342
344
|
if (i.querySelector(".tbw-context-menu") || !s.subMenu) return;
|
|
343
|
-
const
|
|
345
|
+
const h = v(s.subMenu, e), c = x(h, e, t, n);
|
|
344
346
|
c.classList.add("tbw-context-submenu"), c.style.position = "absolute", c.style.left = "100%", c.style.top = "0", i.style.position = "relative", i.appendChild(c);
|
|
345
347
|
}), i.addEventListener("mouseleave", () => {
|
|
346
348
|
const a = i.querySelector(".tbw-context-menu");
|
|
@@ -353,13 +355,13 @@ function x(r, e, t, n = C.submenuArrow) {
|
|
|
353
355
|
}
|
|
354
356
|
return l;
|
|
355
357
|
}
|
|
356
|
-
function
|
|
358
|
+
function C(r, e, t) {
|
|
357
359
|
r.style.position = "fixed", r.style.left = `${e}px`, r.style.top = `${t}px`, r.style.visibility = "hidden", r.style.zIndex = "10000";
|
|
358
360
|
const n = r.getBoundingClientRect(), l = window.innerWidth, s = window.innerHeight;
|
|
359
361
|
let i = e, d = t;
|
|
360
362
|
e + n.width > l && (i = e - n.width), t + n.height > s && (d = t - n.height), i = Math.max(0, i), d = Math.max(0, d), r.style.left = `${i}px`, r.style.top = `${d}px`, r.style.visibility = "visible";
|
|
361
363
|
}
|
|
362
|
-
let
|
|
364
|
+
let f = null, b = null, m = null, p = 0;
|
|
363
365
|
const w = [
|
|
364
366
|
{
|
|
365
367
|
id: "copy",
|
|
@@ -378,7 +380,7 @@ const w = [
|
|
|
378
380
|
}
|
|
379
381
|
}
|
|
380
382
|
];
|
|
381
|
-
class
|
|
383
|
+
class L extends M {
|
|
382
384
|
/** @internal */
|
|
383
385
|
name = "contextMenu";
|
|
384
386
|
/** @internal */
|
|
@@ -405,9 +407,9 @@ class H extends I {
|
|
|
405
407
|
// #endregion
|
|
406
408
|
// #region Private Methods
|
|
407
409
|
installGlobalHandlers() {
|
|
408
|
-
!m && typeof document < "u" && typeof g == "string" && g && (m = document.createElement("style"), m.id = "tbw-context-menu-styles", m.textContent = g, document.head.appendChild(m)),
|
|
410
|
+
!m && typeof document < "u" && typeof g == "string" && g && (m = document.createElement("style"), m.id = "tbw-context-menu-styles", m.textContent = g, document.head.appendChild(m)), f || (f = () => {
|
|
409
411
|
document.querySelectorAll(".tbw-context-menu").forEach((t) => t.remove());
|
|
410
|
-
}, document.addEventListener("click",
|
|
412
|
+
}, document.addEventListener("click", f)), b || (b = (e) => {
|
|
411
413
|
e.key === "Escape" && document.querySelectorAll(".tbw-context-menu").forEach((n) => n.remove());
|
|
412
414
|
}, document.addEventListener("keydown", b));
|
|
413
415
|
}
|
|
@@ -416,7 +418,7 @@ class H extends I {
|
|
|
416
418
|
* Uses reference counting to ensure handlers persist while any grid uses the plugin.
|
|
417
419
|
*/
|
|
418
420
|
uninstallGlobalHandlers() {
|
|
419
|
-
p--, !(p > 0) && (
|
|
421
|
+
p--, !(p > 0) && (f && (document.removeEventListener("click", f), f = null), b && (document.removeEventListener("keydown", b), b = null), m && (m.remove(), m = null));
|
|
420
422
|
}
|
|
421
423
|
// #endregion
|
|
422
424
|
// #region Hooks
|
|
@@ -431,25 +433,25 @@ class H extends I {
|
|
|
431
433
|
const s = l.target, i = s.closest("[data-row][data-col]"), d = s.closest(".header-cell");
|
|
432
434
|
let u;
|
|
433
435
|
if (i) {
|
|
434
|
-
const a = parseInt(i.getAttribute("data-row") ?? "-1", 10),
|
|
436
|
+
const a = parseInt(i.getAttribute("data-row") ?? "-1", 10), h = parseInt(i.getAttribute("data-col") ?? "-1", 10), c = this.columns[h], E = this.rows[a];
|
|
435
437
|
u = {
|
|
436
438
|
row: E,
|
|
437
439
|
rowIndex: a,
|
|
438
440
|
column: c,
|
|
439
|
-
columnIndex:
|
|
441
|
+
columnIndex: h,
|
|
440
442
|
field: c?.field ?? "",
|
|
441
443
|
value: E?.[c?.field] ?? null,
|
|
442
444
|
isHeader: !1,
|
|
443
445
|
event: l
|
|
444
446
|
};
|
|
445
447
|
} else if (d) {
|
|
446
|
-
const a = parseInt(d.getAttribute("data-col") ?? "-1", 10),
|
|
448
|
+
const a = parseInt(d.getAttribute("data-col") ?? "-1", 10), h = this.columns[a];
|
|
447
449
|
u = {
|
|
448
450
|
row: null,
|
|
449
451
|
rowIndex: -1,
|
|
450
|
-
column:
|
|
452
|
+
column: h,
|
|
451
453
|
columnIndex: a,
|
|
452
|
-
field:
|
|
454
|
+
field: h?.field ?? "",
|
|
453
455
|
value: null,
|
|
454
456
|
isHeader: !0,
|
|
455
457
|
event: l
|
|
@@ -465,7 +467,7 @@ class H extends I {
|
|
|
465
467
|
a.action && a.action(u), this.menuElement?.remove(), this.menuElement = null, this.isOpen = !1;
|
|
466
468
|
},
|
|
467
469
|
this.gridIcons.submenuArrow
|
|
468
|
-
), document.body.appendChild(this.menuElement),
|
|
470
|
+
), document.body.appendChild(this.menuElement), C(this.menuElement, l.clientX, l.clientY), this.isOpen = !0, this.emit("context-menu-open", { params: u, items: o }));
|
|
469
471
|
}));
|
|
470
472
|
}
|
|
471
473
|
// #endregion
|
|
@@ -494,7 +496,7 @@ class H extends I {
|
|
|
494
496
|
i.action && i.action(l), this.menuElement?.remove(), this.menuElement = null, this.isOpen = !1;
|
|
495
497
|
},
|
|
496
498
|
this.gridIcons.submenuArrow
|
|
497
|
-
), document.body.appendChild(this.menuElement),
|
|
499
|
+
), document.body.appendChild(this.menuElement), C(this.menuElement, e, t), this.isOpen = !0;
|
|
498
500
|
}
|
|
499
501
|
/**
|
|
500
502
|
* Hide the context menu.
|
|
@@ -513,6 +515,6 @@ class H extends I {
|
|
|
513
515
|
// Styles are injected globally via installGlobalHandlers() since menu renders in document.body
|
|
514
516
|
}
|
|
515
517
|
export {
|
|
516
|
-
|
|
518
|
+
L as ContextMenuPlugin
|
|
517
519
|
};
|
|
518
520
|
//# sourceMappingURL=index.js.map
|