@toolbox-web/grid 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/all.d.ts +1 -0
- package/all.d.ts.map +1 -1
- package/all.js +1655 -1444
- package/all.js.map +1 -1
- package/index.js +438 -401
- package/index.js.map +1 -1
- package/lib/core/grid.d.ts.map +1 -1
- package/lib/core/internal/rows.d.ts.map +1 -1
- package/lib/core/internal/validate-config.d.ts +10 -0
- package/lib/core/internal/validate-config.d.ts.map +1 -1
- package/lib/core/plugin/base-plugin.d.ts +101 -0
- package/lib/core/plugin/base-plugin.d.ts.map +1 -1
- package/lib/core/plugin/index.d.ts +1 -1
- package/lib/core/plugin/index.d.ts.map +1 -1
- package/lib/plugins/clipboard/index.js +22 -0
- package/lib/plugins/clipboard/index.js.map +1 -1
- package/lib/plugins/column-virtualization/index.js +48 -26
- package/lib/plugins/column-virtualization/index.js.map +1 -1
- package/lib/plugins/context-menu/index.js +64 -42
- package/lib/plugins/context-menu/index.js.map +1 -1
- package/lib/plugins/editing/EditingPlugin.d.ts +6 -1
- package/lib/plugins/editing/EditingPlugin.d.ts.map +1 -1
- package/lib/plugins/editing/index.js +50 -4
- package/lib/plugins/editing/index.js.map +1 -1
- package/lib/plugins/export/index.js +36 -14
- package/lib/plugins/export/index.js.map +1 -1
- package/lib/plugins/filtering/index.js +63 -41
- package/lib/plugins/filtering/index.js.map +1 -1
- package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts +6 -1
- package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts.map +1 -1
- package/lib/plugins/grouping-columns/index.js +47 -6
- package/lib/plugins/grouping-columns/index.js.map +1 -1
- package/lib/plugins/grouping-rows/index.js +22 -0
- package/lib/plugins/grouping-rows/index.js.map +1 -1
- package/lib/plugins/master-detail/index.js +22 -0
- package/lib/plugins/master-detail/index.js.map +1 -1
- package/lib/plugins/multi-sort/index.js +22 -0
- package/lib/plugins/multi-sort/index.js.map +1 -1
- package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts +6 -1
- package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts.map +1 -1
- package/lib/plugins/pinned-columns/index.js +36 -0
- package/lib/plugins/pinned-columns/index.js.map +1 -1
- package/lib/plugins/pinned-rows/index.js +22 -0
- package/lib/plugins/pinned-rows/index.js.map +1 -1
- package/lib/plugins/pivot/index.js +22 -0
- package/lib/plugins/pivot/index.js.map +1 -1
- package/lib/plugins/reorder/index.js +22 -0
- package/lib/plugins/reorder/index.js.map +1 -1
- package/lib/plugins/responsive/ResponsivePlugin.d.ts +123 -0
- package/lib/plugins/responsive/ResponsivePlugin.d.ts.map +1 -0
- package/lib/plugins/responsive/index.d.ts +11 -0
- package/lib/plugins/responsive/index.d.ts.map +1 -0
- package/lib/plugins/responsive/index.js +589 -0
- package/lib/plugins/responsive/index.js.map +1 -0
- package/lib/plugins/responsive/types.d.ts +133 -0
- package/lib/plugins/responsive/types.d.ts.map +1 -0
- package/lib/plugins/selection/SelectionPlugin.d.ts +6 -1
- 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 +105 -63
- package/lib/plugins/selection/index.js.map +1 -1
- package/lib/plugins/selection/types.d.ts +26 -0
- package/lib/plugins/selection/types.d.ts.map +1 -1
- package/lib/plugins/server-side/index.js +22 -0
- package/lib/plugins/server-side/index.js.map +1 -1
- package/lib/plugins/tree/index.js +22 -0
- package/lib/plugins/tree/index.js.map +1 -1
- package/lib/plugins/undo-redo/index.js +27 -5
- package/lib/plugins/undo-redo/index.js.map +1 -1
- package/lib/plugins/visibility/index.js +22 -0
- package/lib/plugins/visibility/index.js.map +1 -1
- package/package.json +1 -1
- package/umd/grid.all.umd.js +28 -22
- package/umd/grid.all.umd.js.map +1 -1
- package/umd/grid.umd.js +18 -14
- package/umd/grid.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/grouping-columns.umd.js +1 -1
- package/umd/plugins/grouping-columns.umd.js.map +1 -1
- package/umd/plugins/pinned-columns.umd.js +1 -1
- package/umd/plugins/pinned-columns.umd.js.map +1 -1
- package/umd/plugins/responsive.umd.js +2 -0
- package/umd/plugins/responsive.umd.js.map +1 -0
- package/umd/plugins/selection.umd.js +3 -1
- package/umd/plugins/selection.umd.js.map +1 -1
|
@@ -25,6 +25,28 @@ class I {
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
static dependencies;
|
|
28
|
+
/**
|
|
29
|
+
* Plugin manifest - declares owned properties, config rules, and hook priorities.
|
|
30
|
+
*
|
|
31
|
+
* This is read by the configuration validator to:
|
|
32
|
+
* - Validate that required plugins are loaded when their properties are used
|
|
33
|
+
* - Execute configRules to detect invalid/conflicting settings
|
|
34
|
+
* - Order hook execution based on priority
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* static override readonly manifest: PluginManifest<MyConfig> = {
|
|
39
|
+
* ownedProperties: [
|
|
40
|
+
* { property: 'myProp', level: 'column', description: 'the "myProp" column property' },
|
|
41
|
+
* ],
|
|
42
|
+
* configRules: [
|
|
43
|
+
* { id: 'myPlugin/conflict', severity: 'warn', message: '...', check: (c) => c.a && c.b },
|
|
44
|
+
* ],
|
|
45
|
+
* };
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
49
|
+
static manifest;
|
|
28
50
|
/**
|
|
29
51
|
* Plugin version - defaults to grid version for built-in plugins.
|
|
30
52
|
* Third-party plugins can override with their own semver.
|
|
@@ -296,46 +318,46 @@ function M(r, e) {
|
|
|
296
318
|
function x(r, e, t, n = C.submenuArrow) {
|
|
297
319
|
const l = document.createElement("div");
|
|
298
320
|
l.className = "tbw-context-menu", l.setAttribute("role", "menu");
|
|
299
|
-
for (const
|
|
300
|
-
if (
|
|
301
|
-
const
|
|
302
|
-
|
|
321
|
+
for (const s of r) {
|
|
322
|
+
if (s.separator) {
|
|
323
|
+
const o = document.createElement("div");
|
|
324
|
+
o.className = "tbw-context-menu-separator", o.setAttribute("role", "separator"), l.appendChild(o);
|
|
303
325
|
continue;
|
|
304
326
|
}
|
|
305
327
|
const i = document.createElement("div");
|
|
306
|
-
i.className = "tbw-context-menu-item",
|
|
307
|
-
const d = M(
|
|
308
|
-
if (d && (i.classList.add("disabled"), i.setAttribute("aria-disabled", "true")),
|
|
309
|
-
const
|
|
310
|
-
|
|
328
|
+
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 = M(s, e);
|
|
330
|
+
if (d && (i.classList.add("disabled"), i.setAttribute("aria-disabled", "true")), s.icon) {
|
|
331
|
+
const o = document.createElement("span");
|
|
332
|
+
o.className = "tbw-context-menu-icon", o.innerHTML = s.icon, i.appendChild(o);
|
|
311
333
|
}
|
|
312
|
-
const
|
|
313
|
-
if (
|
|
314
|
-
const
|
|
315
|
-
|
|
334
|
+
const u = document.createElement("span");
|
|
335
|
+
if (u.className = "tbw-context-menu-label", u.textContent = s.name, i.appendChild(u), s.shortcut) {
|
|
336
|
+
const o = document.createElement("span");
|
|
337
|
+
o.className = "tbw-context-menu-shortcut", o.textContent = s.shortcut, i.appendChild(o);
|
|
316
338
|
}
|
|
317
|
-
if (
|
|
318
|
-
const
|
|
319
|
-
|
|
320
|
-
if (i.querySelector(".tbw-context-menu") || !
|
|
321
|
-
const f = v(
|
|
339
|
+
if (s.subMenu?.length) {
|
|
340
|
+
const o = document.createElement("span");
|
|
341
|
+
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
|
+
if (i.querySelector(".tbw-context-menu") || !s.subMenu) return;
|
|
343
|
+
const f = v(s.subMenu, e), c = x(f, e, t, n);
|
|
322
344
|
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);
|
|
323
345
|
}), i.addEventListener("mouseleave", () => {
|
|
324
|
-
const
|
|
325
|
-
|
|
346
|
+
const a = i.querySelector(".tbw-context-menu");
|
|
347
|
+
a && a.remove();
|
|
326
348
|
});
|
|
327
349
|
}
|
|
328
|
-
!d &&
|
|
329
|
-
|
|
350
|
+
!d && s.action && !s.subMenu && i.addEventListener("click", (o) => {
|
|
351
|
+
o.stopPropagation(), t(s);
|
|
330
352
|
}), l.appendChild(i);
|
|
331
353
|
}
|
|
332
354
|
return l;
|
|
333
355
|
}
|
|
334
356
|
function y(r, e, t) {
|
|
335
357
|
r.style.position = "fixed", r.style.left = `${e}px`, r.style.top = `${t}px`, r.style.visibility = "hidden", r.style.zIndex = "10000";
|
|
336
|
-
const n = r.getBoundingClientRect(), l = window.innerWidth,
|
|
358
|
+
const n = r.getBoundingClientRect(), l = window.innerWidth, s = window.innerHeight;
|
|
337
359
|
let i = e, d = t;
|
|
338
|
-
e + n.width > l && (i = e - n.width), t + n.height >
|
|
360
|
+
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";
|
|
339
361
|
}
|
|
340
362
|
let h = null, b = null, m = null, p = 0;
|
|
341
363
|
const w = [
|
|
@@ -406,13 +428,13 @@ class H extends I {
|
|
|
406
428
|
t && t.getAttribute("data-context-menu-bound") !== "true" && (t.setAttribute("data-context-menu-bound", "true"), t.addEventListener("contextmenu", (n) => {
|
|
407
429
|
const l = n;
|
|
408
430
|
l.preventDefault();
|
|
409
|
-
const
|
|
410
|
-
let
|
|
431
|
+
const s = l.target, i = s.closest("[data-row][data-col]"), d = s.closest(".header-cell");
|
|
432
|
+
let u;
|
|
411
433
|
if (i) {
|
|
412
|
-
const
|
|
413
|
-
|
|
434
|
+
const a = parseInt(i.getAttribute("data-row") ?? "-1", 10), f = parseInt(i.getAttribute("data-col") ?? "-1", 10), c = this.columns[f], E = this.rows[a];
|
|
435
|
+
u = {
|
|
414
436
|
row: E,
|
|
415
|
-
rowIndex:
|
|
437
|
+
rowIndex: a,
|
|
416
438
|
column: c,
|
|
417
439
|
columnIndex: f,
|
|
418
440
|
field: c?.field ?? "",
|
|
@@ -421,12 +443,12 @@ class H extends I {
|
|
|
421
443
|
event: l
|
|
422
444
|
};
|
|
423
445
|
} else if (d) {
|
|
424
|
-
const
|
|
425
|
-
|
|
446
|
+
const a = parseInt(d.getAttribute("data-col") ?? "-1", 10), f = this.columns[a];
|
|
447
|
+
u = {
|
|
426
448
|
row: null,
|
|
427
449
|
rowIndex: -1,
|
|
428
450
|
column: f,
|
|
429
|
-
columnIndex:
|
|
451
|
+
columnIndex: a,
|
|
430
452
|
field: f?.field ?? "",
|
|
431
453
|
value: null,
|
|
432
454
|
isHeader: !0,
|
|
@@ -434,16 +456,16 @@ class H extends I {
|
|
|
434
456
|
};
|
|
435
457
|
} else
|
|
436
458
|
return;
|
|
437
|
-
this.params =
|
|
438
|
-
const
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
(
|
|
443
|
-
|
|
459
|
+
this.params = u, this.position = { x: l.clientX, y: l.clientY };
|
|
460
|
+
const o = v(this.config.items ?? w, u);
|
|
461
|
+
o.length && (this.menuElement && this.menuElement.remove(), this.menuElement = x(
|
|
462
|
+
o,
|
|
463
|
+
u,
|
|
464
|
+
(a) => {
|
|
465
|
+
a.action && a.action(u), this.menuElement?.remove(), this.menuElement = null, this.isOpen = !1;
|
|
444
466
|
},
|
|
445
467
|
this.gridIcons.submenuArrow
|
|
446
|
-
), document.body.appendChild(this.menuElement), y(this.menuElement, l.clientX, l.clientY), this.isOpen = !0, this.emit("context-menu-open", { params:
|
|
468
|
+
), document.body.appendChild(this.menuElement), y(this.menuElement, l.clientX, l.clientY), this.isOpen = !0, this.emit("context-menu-open", { params: u, items: o }));
|
|
447
469
|
}));
|
|
448
470
|
}
|
|
449
471
|
// #endregion
|
|
@@ -464,9 +486,9 @@ class H extends I {
|
|
|
464
486
|
value: n.value ?? null,
|
|
465
487
|
isHeader: n.isHeader ?? !1,
|
|
466
488
|
event: n.event ?? new MouseEvent("contextmenu")
|
|
467
|
-
},
|
|
489
|
+
}, s = v(this.config.items ?? w, l);
|
|
468
490
|
this.menuElement && this.menuElement.remove(), this.menuElement = x(
|
|
469
|
-
|
|
491
|
+
s,
|
|
470
492
|
l,
|
|
471
493
|
(i) => {
|
|
472
494
|
i.action && i.action(l), this.menuElement?.remove(), this.menuElement = null, this.isOpen = !1;
|