@ninebone/datagrid 0.0.13 → 0.0.15

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.
@@ -274,6 +274,14 @@ var n = new class extends e.constructor {
274
274
  let a = this.#u(e), o = this.#t.rawRecords[a];
275
275
  o && (o.v[i] !== n && o.m._[r.META.INDEX.ROW_STATE] !== r.ROW_STATE.INSERT && (o.m._[r.META.INDEX.ROW_STATE] = r.ROW_STATE.UPDATE), o.v[i] = n);
276
276
  };
277
+ getChangedData = (e) => {
278
+ let t = this.#t.rawRecords;
279
+ return e ? this.#d(t.filter((t) => t.m._[r.META.INDEX.ROW_STATE] === e)) : {
280
+ C: this.#d(t.filter((e) => e.m._[r.META.INDEX.ROW_STATE] === r.ROW_STATE.INSERT)),
281
+ U: this.#d(t.filter((e) => e.m._[r.META.INDEX.ROW_STATE] === r.ROW_STATE.UPDATE)),
282
+ D: this.#d(t.filter((e) => e.m._[r.META.INDEX.ROW_STATE] === r.ROW_STATE.DELETE))
283
+ };
284
+ };
277
285
  #d = (e) => {
278
286
  if (!e) return e;
279
287
  let t = !Array.isArray(e), n = t ? [e] : e, r = this.getHostFields(), i = n.filter((e) => !e.__ng?.deleted).map((e) => {
@@ -296,7 +304,7 @@ var n = new class extends e.constructor {
296
304
  if (!(t >= this.data.count())) return this.data.getValidData()[t]?.__ng?.rowState;
297
305
  }, this.getRowPosition = () => this.row.at, this.setRowPosition = (e) => {
298
306
  this.row.at = e;
299
- }, this.scrollTo_V1 = (e) => (e < 0 && (e = 0), e >= this.rawRecords.length && (e = this.rawRecords.length - 1), this.viewRecords.rawIndex = e, this.viewRecords.reset && this.viewRecords.reset(), !(e <= 0 || e >= this.rawRecords.length - 1)), this.getColumn = (e, t) => this.data.get(e, t), this.setColumn = (e, t, n) => {
307
+ }, this.getColumn = (e, t) => this.data.get(e, t), this.setColumn = (e, t, n) => {
300
308
  e = parseInt(e, 10), this.data.setValue(e, t, n);
301
309
  }, this.setDataSource([]);
302
310
  }
@@ -582,17 +590,13 @@ var f = class extends HTMLElement {
582
590
  }, t = () => {
583
591
  clearInterval(this.#r), clearInterval(this.#i);
584
592
  };
585
- [
586
- "mouseup",
587
- "mouseleave",
588
- "touchend"
589
- ].forEach((e) => {
593
+ ["mouseup", "mouseleave"].forEach((e) => {
590
594
  this.#n.left.addEventListener(e, t), this.#n.right.addEventListener(e, t), this.#n.track.addEventListener(e, t);
591
595
  }), this.#n.left.addEventListener("mousedown", (t) => {
592
596
  t.button === 0 && e(-20);
593
597
  }), this.#n.right.addEventListener("mousedown", (t) => {
594
598
  t.button === 0 && e(20);
595
- }), this.#n.left.addEventListener("touchstart", () => e(-20)), this.#n.right.addEventListener("touchstart", () => e(20)), this.#n.track.addEventListener("mousedown", (e) => {
599
+ }), this.#n.track.addEventListener("mousedown", (e) => {
596
600
  if (e.button !== 0) return;
597
601
  e.preventDefault();
598
602
  let t = this.#n.track.getBoundingClientRect(), n = this.#n.thumb.clientWidth;
@@ -854,10 +858,10 @@ var m = {
854
858
  }
855
859
  let o = this.#n.templateLength, s = (this.#n.elements.body.thead?.offsetHeight || 0) + (this.#n.elements.body.tfoot?.offsetHeight || 0) + this.#n.elements.body.tbody.head.offsetHeight, c = this.#n.querySelector(".ng-sheet-body").offsetHeight || 0, l = Math.max(a * n - (c - s - n), 0), u = 15e6, d = l > u, f = 1, p = l;
856
860
  d && (f = u / l, p = u), this.#n.elements.scrollHolder.style.height = `${p}px`;
857
- let m = d ? e / f : e, h = Math.max(0, a - 1), g = Math.min(m, l), _ = Math.max(0, Math.min(Math.floor(g / n), h)), v = g % n;
858
- this.#n.elements.left.tbody.body.style.top = this.#n.elements.body.tbody.body.style.top = this.#n.elements.right.tbody.body.style.top = `-${v}px`;
859
- let y = this.#r.firstTr, b = y && y.dataset.row !== void 0 ? parseInt(y.dataset.row, 10) : -1;
860
- (t || b !== _) && ([
861
+ let m = d ? e / f : e, h = Math.max(0, a - 1), g = Math.min(m, l), _ = Math.max(0, Math.min(Math.floor(g / n), h));
862
+ this.#n.elements.left.tbody.body.style.transform = this.#n.elements.body.tbody.body.style.transform = this.#n.elements.right.tbody.body.style.transform = `translate3d(0px, -${g % n}px, 0px)`;
863
+ let v = this.#r.firstTr, y = v && v.dataset.row !== void 0 ? parseInt(v.dataset.row, 10) : -1;
864
+ (t || y !== _) && ([
861
865
  this.#n.elements.left.tbody.body,
862
866
  this.#n.elements.body.tbody.body,
863
867
  this.#n.elements.right.tbody.body
@@ -1197,13 +1201,15 @@ var m = {
1197
1201
  e.classList.remove("selected-start");
1198
1202
  });
1199
1203
  }), e < 0 || t < 0 || i.forEach((i) => {
1200
- Array.from(i.querySelectorAll("tbody tr")).filter((e) => e.style.display !== "none").forEach((i) => {
1201
- let { matrixRow: a } = this.#n(i);
1202
- a < 0 || (a >= e && a <= n && i.classList.add("selected"), i.querySelectorAll("td, th").forEach((i) => {
1203
- let o = parseInt(i.dataset.col, 10);
1204
- if (isNaN(o)) return;
1205
- let s = parseInt(i.rowSpan || 1, 10), c = parseInt(i.colSpan || 1, 10), l = a + s - 1, u = o + c - 1;
1206
- l >= e && a <= n && u >= t && o <= r && (i.classList.add("selected"), a <= e && i.classList.add("selected-top"), l >= n && i.classList.add("selected-bottom"), o <= t && i.classList.add("selected-left"), u >= r && i.classList.add("selected-right"));
1204
+ Array.from(i.querySelectorAll("tbody tr")).filter((e) => e.style.display !== "none").forEach((a) => {
1205
+ let { matrixRow: o } = this.#n(a);
1206
+ o < 0 || (o >= e && o <= n && i.querySelectorAll(`tbody tr[data-index="${a.dataset.index}"]`).forEach((e) => {
1207
+ e.classList.add("selected");
1208
+ }), a.querySelectorAll("td, th").forEach((i) => {
1209
+ let a = parseInt(i.dataset.col, 10);
1210
+ if (isNaN(a)) return;
1211
+ let s = parseInt(i.rowSpan || 1, 10), c = parseInt(i.colSpan || 1, 10), l = o + s - 1, u = a + c - 1;
1212
+ l >= e && o <= n && u >= t && a <= r && (i.classList.add("selected"), o <= e && i.classList.add("selected-top"), l >= n && i.classList.add("selected-bottom"), a <= t && i.classList.add("selected-left"), u >= r && i.classList.add("selected-right"));
1207
1213
  }));
1208
1214
  });
1209
1215
  });
@@ -1433,7 +1439,7 @@ var m = {
1433
1439
  this.#e.addEventListener("mousedown", (e) => {
1434
1440
  if (e.button !== 0) return;
1435
1441
  let t = e.target.closest("td, th");
1436
- t && t.dataset.index !== void 0 && t.dataset.col !== void 0 && (this.currentCell = t);
1442
+ t && t.dataset.index !== void 0 && t.dataset.col !== void 0 && (t.querySelector("cell-row-indicator") ? this.#e.row.focus(t.dataset.index) : this.currentCell = t);
1437
1443
  }), this.#e.addEventListener("keydown", (e) => {
1438
1444
  [
1439
1445
  "Enter",
@@ -2520,7 +2526,50 @@ var k = class {
2520
2526
  }
2521
2527
  });
2522
2528
  }
2523
- }, M = class extends HTMLElement {
2529
+ }, M = class {
2530
+ #e;
2531
+ #t;
2532
+ constructor(e) {
2533
+ this.#e = e, this.#t = e.getRootNode().host;
2534
+ }
2535
+ row = {
2536
+ at: () => Math.floor(this.#e.selection.minRow / this.#e.template.length),
2537
+ focus: (e) => {
2538
+ this.#e.row.isVisible(e) || this.#e.row.moveTo(e);
2539
+ let t = this.#e.querySelectorAll(`tbody.body tr[data-index="${e}"]`), n = Array.from(t, (e) => parseInt(e.dataset.matrixRow, 10)).filter((e) => !isNaN(e)), r = [];
2540
+ return t.forEach((e) => {
2541
+ e.querySelectorAll("td, th").forEach((e) => {
2542
+ parseInt(e.dataset.col, 10) != 0 && r.push(parseInt(e.dataset.col, 10));
2543
+ });
2544
+ }), this.#e.selection.setRange(Math.min(...n), Math.min(...r), Math.max(...n), Math.max(...r));
2545
+ },
2546
+ isVisible: (e) => {
2547
+ let t = this.#e.querySelector(".ng-sheet-body"), n = t.querySelectorAll(`.ng-container-body tbody.body tr[data-index="${e}"]`);
2548
+ if (!n || n.length === 0) return !1;
2549
+ let r = t.getBoundingClientRect(), i = t.querySelector("thead")?.offsetHeight || 0, a = t.querySelector("tfoot")?.offsetHeight || 0, o = r.top + i, s = r.bottom - a, c = !0;
2550
+ for (let e of n) {
2551
+ let t = e.getBoundingClientRect(), n = t.top < o, r = t.bottom > s;
2552
+ if (n || r) {
2553
+ c = !1;
2554
+ break;
2555
+ }
2556
+ }
2557
+ return c;
2558
+ },
2559
+ add: (e, t) => this.#t.data.add(e, t),
2560
+ moveTo: (e, t) => {
2561
+ this.#e.row.isVisible(e) || this.#e.scrollTo(e, t);
2562
+ },
2563
+ insert: (e, t, n = !0) => {
2564
+ let i = this.#e.view.get(e).m._[r.META.INDEX.ROWID], a = this.#t.data.insert(i, t, n);
2565
+ return this.#e.view.getArray().findIndex((e) => !e || !e.m || !e.m._ ? !1 : e.m._[r.META.INDEX.ROWID] === a);
2566
+ },
2567
+ remove: (e) => {
2568
+ let t = this.#e.view.get(e).m._[r.META.INDEX.ROWID];
2569
+ this.#t.data.remove(t);
2570
+ }
2571
+ };
2572
+ }, N = class extends HTMLElement {
2524
2573
  #e;
2525
2574
  #t;
2526
2575
  #n;
@@ -2533,14 +2582,15 @@ var k = class {
2533
2582
  #l;
2534
2583
  #u;
2535
2584
  #d;
2536
- #f = { table: null };
2537
- #p;
2585
+ #f;
2586
+ #p = { table: null };
2587
+ #m;
2538
2588
  static SCROLLBAR_SIZE = 16;
2539
2589
  constructor() {
2540
- super(), this.#t = this.getRootNode().host, this.#n = new _(this);
2590
+ super(), this.#t = this.getRootNode().host, this.#n = new _(this), this.#d = new M(this), this.#E();
2541
2591
  }
2542
2592
  connectedCallback() {
2543
- this.#b();
2593
+ this.#x();
2544
2594
  }
2545
2595
  get index() {
2546
2596
  return this.#e;
@@ -2570,29 +2620,35 @@ var k = class {
2570
2620
  return this.#i;
2571
2621
  }
2572
2622
  get templateLength() {
2573
- return this.#f.tbody.tr.length || 0;
2623
+ return this.#p.tbody.tr.length || 0;
2574
2624
  }
2575
2625
  get elements() {
2576
- return this.#p;
2626
+ return this.#m;
2627
+ }
2628
+ get template() {
2629
+ return {
2630
+ length: this.#p?.tbody?.tr?.length || 0,
2631
+ trs: this.#p?.tbody?.tr || []
2632
+ };
2577
2633
  }
2578
2634
  get isAutoFitCol() {
2579
- let e = this.getAttribute("auto-fit-col") === "true" || this.#t?.getAttribute("auto-fit-col") === "true", t = this.#f.table?.getAttribute("auto-fit-col") === "true";
2635
+ let e = this.getAttribute("auto-fit-col") === "true" || this.#t?.getAttribute("auto-fit-col") === "true", t = this.#p.table?.getAttribute("auto-fit-col") === "true";
2580
2636
  return e || t;
2581
2637
  }
2582
2638
  get sourceTable() {
2583
- return this.#f.table;
2639
+ return this.#p.table;
2584
2640
  }
2585
2641
  get source() {
2586
- return this.#f;
2642
+ return this.#p;
2587
2643
  }
2588
- get #m() {
2644
+ get #h() {
2589
2645
  return this.#t.hasAttribute("simple") || this.#t.getAttribute("theme") === "simple";
2590
2646
  }
2591
2647
  scrollTo = (e, t) => {
2592
2648
  this.rowManager.scrollToDataRow(e, "top", t);
2593
2649
  };
2594
2650
  recompileAndRefresh() {
2595
- this.#f.table && (v.recompile(this.#f.table), [
2651
+ this.#p.table && (v.recompile(this.#p.table), [
2596
2652
  "left",
2597
2653
  "right",
2598
2654
  "body"
@@ -2605,31 +2661,31 @@ var k = class {
2605
2661
  let n = this.querySelector(`.ng-sheet-${t} .ng-container-${e}`);
2606
2662
  n && n.querySelectorAll("table").forEach((e) => e.remove());
2607
2663
  });
2608
- }), this.#v(), this.#_(), this.#n.initialize(), this.isAutoFitCol ? this.autoFit(!0) : this.querySelector("nine-table-hscrollbar")?.refresh(), requestAnimationFrame(() => {
2609
- this.#_(), this.#n?.refresh();
2664
+ }), this.#y(), this.#v(), this.#n.initialize(), this.isAutoFitCol ? this.autoFit(!0) : this.querySelector("nine-table-hscrollbar")?.refresh(), requestAnimationFrame(() => {
2665
+ this.#v(), this.#n?.refresh();
2610
2666
  }));
2611
2667
  }
2612
2668
  refreshLayout() {
2613
2669
  requestAnimationFrame(() => {
2614
- this.classList.contains("active") && this.#f.table && (this.#_(), this.isAutoFitCol ? this.autoFit(!0) : this.querySelector("nine-table-hscrollbar")?.refresh(), this.#h(), this.#a?.refreshLayout(), this.#n?.refresh());
2670
+ this.classList.contains("active") && this.#p.table && (this.#v(), this.isAutoFitCol ? this.autoFit(!0) : this.querySelector("nine-table-hscrollbar")?.refresh(), this.#g(), this.#a?.refreshLayout(), this.#n?.refresh());
2615
2671
  });
2616
2672
  }
2617
- #h = () => {
2673
+ #g = () => {
2618
2674
  let e = this.querySelector(".ng-container-body thead"), t = this.querySelector(".nodata-overlay");
2619
2675
  t.style.top = `${e.offsetHeight}px`;
2620
2676
  };
2621
2677
  get view() {
2622
- return !this.#d && this.#t?.data && (this.#d = new A(this)), this.#d;
2678
+ return !this.#f && this.#t?.data && (this.#f = new A(this)), this.#f;
2623
2679
  }
2624
2680
  invalidate = () => {
2625
2681
  this.view.refresh(), this.#n.refresh(!0), this.isAutoFitCol && this.autoFit(!0);
2626
2682
  };
2627
2683
  autoFit = (e = !0) => {
2628
2684
  requestAnimationFrame(() => {
2629
- this.#g?.(e);
2685
+ this.#_?.(e);
2630
2686
  });
2631
2687
  };
2632
- #g = (e = !0) => {
2688
+ #_ = (e = !0) => {
2633
2689
  let t = this.querySelector(".ng-sheet-body .ng-container-body");
2634
2690
  if (!t) return;
2635
2691
  let n = this.querySelector(".ng-container-body table colgroup");
@@ -2689,16 +2745,16 @@ var k = class {
2689
2745
  }
2690
2746
  };
2691
2747
  generate = (e, t) => {
2692
- e.style.display = "none", this.#e = t, j.initializeTable(this.#t, e), e.style.display = "", this.#f = {
2748
+ e.style.display = "none", this.#e = t, j.initializeTable(this.#t, e), e.style.display = "", this.#p = {
2693
2749
  table: v.compile(e),
2694
2750
  tbody: { tr: e.querySelectorAll("tbody tr") }
2695
- }, this.#v(), this.#_(), this.#S(), this.#w(), [
2751
+ }, this.#y(), this.#v(), this.#C(), this.#T(), [
2696
2752
  "left",
2697
2753
  "body",
2698
2754
  "right"
2699
2755
  ].forEach((e) => {
2700
2756
  let t = `.ng-container-${e}`;
2701
- this.#p[e] = {
2757
+ this.#m[e] = {
2702
2758
  thead: this.querySelector(`${t} thead`),
2703
2759
  tbody: {
2704
2760
  head: this.querySelector(`${t} tbody.head`),
@@ -2709,7 +2765,7 @@ var k = class {
2709
2765
  };
2710
2766
  }), this.#n.initialize(), this.isAutoFitCol ? this.autoFit(!0) : this.querySelector("nine-table-hscrollbar").refresh(), this.#u.initialize(), this.loaded = !0;
2711
2767
  };
2712
- #_ = () => {
2768
+ #v = () => {
2713
2769
  [
2714
2770
  "left",
2715
2771
  "right",
@@ -2728,7 +2784,7 @@ var k = class {
2728
2784
  });
2729
2785
  });
2730
2786
  };
2731
- #v = () => {
2787
+ #y = () => {
2732
2788
  [
2733
2789
  {
2734
2790
  selector: ".ng-container-left",
@@ -2743,11 +2799,11 @@ var k = class {
2743
2799
  type: "right"
2744
2800
  }
2745
2801
  ].forEach(({ selector: e, type: t }) => {
2746
- this.querySelector(`.ng-sheet-body ${e}`).appendChild(this.#y(t));
2802
+ this.querySelector(`.ng-sheet-body ${e}`).appendChild(this.#b(t));
2747
2803
  });
2748
2804
  };
2749
- #y = (e) => {
2750
- let t = this.#f.table.cloneNode(!0);
2805
+ #b = (e) => {
2806
+ let t = this.#p.table.cloneNode(!0);
2751
2807
  return e === "left" ? t.querySelectorAll("col, th, td").forEach((e) => {
2752
2808
  e.getAttribute("fixed") !== "left" && e.remove();
2753
2809
  }) : e === "right" ? t.querySelectorAll("col, th, td").forEach((e) => {
@@ -2757,9 +2813,9 @@ var k = class {
2757
2813
  }), t;
2758
2814
  };
2759
2815
  getRowHeight = () => this.#n.getRowHeight();
2760
- getViewHeight = () => (this.#p.content.offsetHeight || 0) - ((this.#p.body.thead?.offsetHeight || 0) + (this.#p.body.tfoot?.offsetHeight || 0) + (this.#p.body.tbody.head.offsetHeight || 0));
2816
+ getViewHeight = () => (this.#m.content.offsetHeight || 0) - ((this.#m.body.thead?.offsetHeight || 0) + (this.#m.body.tfoot?.offsetHeight || 0) + (this.#m.body.tbody.head.offsetHeight || 0));
2761
2817
  isLastRow = () => {
2762
- let e = this.querySelector(".ng-sheet-body"), t = this.querySelector(".ng-container-body tbody.body"), n = this.#p.body.tfoot?.offsetHeight || 0, r = e.getBoundingClientRect().bottom, i = t.getBoundingClientRect().bottom;
2818
+ let e = this.querySelector(".ng-sheet-body"), t = this.querySelector(".ng-container-body tbody.body"), n = this.#m.body.tfoot?.offsetHeight || 0, r = e.getBoundingClientRect().bottom, i = t.getBoundingClientRect().bottom;
2763
2819
  return r - n >= i;
2764
2820
  };
2765
2821
  scrollToX = (e) => {
@@ -2770,13 +2826,13 @@ var k = class {
2770
2826
  let t = this.querySelector(".ng-sheet-body");
2771
2827
  t && (t.scrollTop = e);
2772
2828
  };
2773
- #b = () => {
2774
- this.#x(), this.#r = new y(this), this.#i = new b(this), this.#a = new S(this), this.#o = new w(this), this.#s = new T(this), this.#d = new A(this), this.#l = new O(this), this.#u = new h(this), this.#m || (this.#c = new k(this)), this.#p.mainBody.addEventListener("scroll", () => {
2829
+ #x = () => {
2830
+ this.#S(), this.#r = new y(this), this.#i = new b(this), this.#a = new S(this), this.#o = new w(this), this.#s = new T(this), this.#f = new A(this), this.#l = new O(this), this.#u = new h(this), this.#h || (this.#c = new k(this)), this.#m.mainBody.addEventListener("scroll", () => {
2775
2831
  this.querySelector("nine-table-hscrollbar").refresh();
2776
2832
  });
2777
2833
  };
2778
- #x = () => {
2779
- this.innerHTML = "\n <div class=\"ng-sheet-body\">\n <div class=\"ng-sheet-body-content\">\n <div class=\"ng-container-left\"></div>\n <div class=\"ng-container-body\"></div>\n <div class=\"ng-container-right\"></div>\n </div>\n <div class=\"ng-virtual-height-holder\"></div>\n </div>\n\n <div class=\"nodata-overlay\">Data Not Found</div>\n\n <nine-table-vscrollbar></nine-table-vscrollbar>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class=\"scroll-edge\"></div>\n \n <nine-table-col-resizer-panel></nine-table-col-resizer-panel>\n \n <div class=\"ng-col-mover-grip\"></div>\n <div class=\"ng-col-mover-indi\"></div>\n ", this.#p = {
2834
+ #S = () => {
2835
+ this.innerHTML = "\n <div class=\"ng-sheet-body\">\n <div class=\"ng-sheet-body-content\">\n <div class=\"ng-container-left\"></div>\n <div class=\"ng-container-body\"></div>\n <div class=\"ng-container-right\"></div>\n </div>\n <div class=\"ng-virtual-height-holder\"></div>\n </div>\n\n <div class=\"nodata-overlay\">Data Not Found</div>\n\n <nine-table-vscrollbar></nine-table-vscrollbar>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class=\"scroll-edge\"></div>\n \n <nine-table-col-resizer-panel></nine-table-col-resizer-panel>\n \n <div class=\"ng-col-mover-grip\"></div>\n <div class=\"ng-col-mover-indi\"></div>\n ", this.#m = {
2780
2836
  mainBody: this.querySelector(".ng-sheet-body .ng-container-body"),
2781
2837
  hscrollbar: this.querySelector("nine-table-hscrollbar"),
2782
2838
  vscrollbar: this.querySelector("nine-table-vscrollbar"),
@@ -2784,13 +2840,13 @@ var k = class {
2784
2840
  scrollHolder: this.querySelector(".ng-sheet-body .ng-virtual-height-holder")
2785
2841
  };
2786
2842
  };
2787
- #S = () => {
2843
+ #C = () => {
2788
2844
  let e = this.querySelector(".ng-container-left table"), t = this.querySelector(".ng-container-body table"), n = this.querySelector(".ng-container-right table"), r = Array.from(e.querySelectorAll("thead tr:not(.col-indicator-rowgroup)")), i = Array.from(t.querySelectorAll("thead tr:not(.col-indicator-rowgroup)")), a = Array.from(n.querySelectorAll("thead tr:not(.col-indicator-rowgroup)"));
2789
- this.#C(r, i, a);
2845
+ this.#w(r, i, a);
2790
2846
  let o = Array.from(e.querySelectorAll("tfoot tr")), s = Array.from(t.querySelectorAll("tfoot tr")), c = Array.from(n.querySelectorAll("tfoot tr"));
2791
- this.#C(o, s, c);
2847
+ this.#w(o, s, c);
2792
2848
  };
2793
- #C = (e, t, n) => {
2849
+ #w = (e, t, n) => {
2794
2850
  setTimeout(() => {
2795
2851
  let r = Math.max(e.length, t.length, n.length);
2796
2852
  for (let i = 0; i < r; i++) {
@@ -2803,7 +2859,7 @@ var k = class {
2803
2859
  }
2804
2860
  });
2805
2861
  };
2806
- #w = () => {
2862
+ #T = () => {
2807
2863
  let e = this.querySelector(".ng-sheet-body");
2808
2864
  if (!e) return;
2809
2865
  let t = null;
@@ -2823,13 +2879,22 @@ var k = class {
2823
2879
  }), t = null);
2824
2880
  });
2825
2881
  };
2882
+ #E = () => {
2883
+ [this.#d].forEach((e) => {
2884
+ (/* @__PURE__ */ new Set([...Reflect.ownKeys(e), ...Reflect.ownKeys(Object.getPrototypeOf(e))])).forEach((t) => {
2885
+ if (t === "constructor" || String(t).startsWith("#")) return;
2886
+ let n = e[t];
2887
+ typeof n == "function" ? this[t] || (this[t] = (...t) => n.apply(e, t)) : typeof n == "object" && n && (this[t] || (this[t] = n));
2888
+ });
2889
+ });
2890
+ };
2826
2891
  disconnectedCallback() {
2827
2892
  this.#a?.destroy(), this.#o?.destroy(), this.innerHTML = "";
2828
2893
  }
2829
2894
  };
2830
- customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", M);
2895
+ customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", N);
2831
2896
  // src/layout/core/LayoutManager.js
2832
- var N = class {
2897
+ var P = class {
2833
2898
  #e;
2834
2899
  constructor(e) {
2835
2900
  this.#e = e, this.#t();
@@ -2845,14 +2910,14 @@ var N = class {
2845
2910
  #n = () => {
2846
2911
  let e = Array.from(this.#e.shadowRoot.querySelectorAll("nine-table-sheet.active"));
2847
2912
  if (e.length === 0) return;
2848
- let t = parseInt(this.#e.getAttribute("max-display-row"), 10) || 10, n = Math.max(...e.map((e) => e.getRowHeight())), r = this.#e.shadowRoot.querySelector("nine-table-toolbar"), i = this.#e.shadowRoot.querySelector("nine-table-sheets-footer"), a = r ? r.getBoundingClientRect().height : 0, o = i ? i.getBoundingClientRect().height : 0, s = M.SCROLLBAR_SIZE, c = t * n + a + o + s;
2913
+ let t = parseInt(this.#e.getAttribute("max-display-row"), 10) || 10, n = Math.max(...e.map((e) => e.getRowHeight())), r = this.#e.shadowRoot.querySelector("nine-table-toolbar"), i = this.#e.shadowRoot.querySelector("nine-table-sheets-footer"), a = r ? r.getBoundingClientRect().height : 0, o = i ? i.getBoundingClientRect().height : 0, s = N.SCROLLBAR_SIZE, c = t * n + a + o + s;
2849
2914
  this.#e.style.height = `${c}px`;
2850
2915
  };
2851
2916
  #r = () => {
2852
2917
  let e = Array.from(this.#e.children).filter((e) => e.tagName.toUpperCase() === "TABLE"), t = this.#e.getAttribute("auto-height") === "true", n = e.length, r = e.map((e, t) => {
2853
2918
  let r = t === 0 ? "active" : "", i = e.id || `sheet${t + 1}`;
2854
2919
  return `<nine-table-sheet class="${r}" data-index="${t}" data-sheet-id="${i}" id="${i}"></nine-table-sheet>` + (t < n - 1 ? `<nine-splitter class="h" data-split-index="${t}"></nine-splitter>` : "");
2855
- }).join(""), i = ["@import \"https://cdn.jsdelivr.net/npm/@ninebone/datagrid@0.0.13/dist/css/nine-table.css\";"];
2920
+ }).join(""), i = ["@import \"https://cdn.jsdelivr.net/npm/@ninebone/datagrid@0.0.15/dist/css/nine-table.css\";"];
2856
2921
  nine["nine-table"] && nine["nine-table"].cssFile && i.push(`@import "${nine["nine-table"].cssFile}";`), this.#e.shadowRoot.innerHTML = `
2857
2922
  <style>
2858
2923
  ${i.join("\n")}
@@ -2879,7 +2944,7 @@ var N = class {
2879
2944
  });
2880
2945
  });
2881
2946
  };
2882
- }, P = class {
2947
+ }, F = class {
2883
2948
  #e;
2884
2949
  #t;
2885
2950
  #n = /* @__PURE__ */ new Map();
@@ -2914,30 +2979,56 @@ var N = class {
2914
2979
  return e;
2915
2980
  }
2916
2981
  }
2917
- }, F = class extends HTMLElement {
2982
+ }, I = class {
2983
+ #e;
2984
+ constructor(e) {
2985
+ this.#e = e;
2986
+ }
2987
+ }, L = class {
2988
+ #e;
2989
+ constructor(e) {
2990
+ this.#e = e, ["row"].forEach((e) => {
2991
+ this[e] = new Proxy({}, { get: (t, n) => {
2992
+ let r = this.getActiveSheet();
2993
+ if (!r || !r[e]) return;
2994
+ let i = r[e][n];
2995
+ return typeof i == "function" ? (...t) => i.apply(r[e], t) : i;
2996
+ } });
2997
+ });
2998
+ }
2999
+ getActiveSheets() {
3000
+ return this.#e.shadow.querySelectorAll("nine-table-sheet.active");
3001
+ }
3002
+ getActiveSheet() {
3003
+ let e = this.getActiveSheets();
3004
+ return e.length > 0 ? e[0] : null;
3005
+ }
3006
+ }, R = class extends HTMLElement {
2918
3007
  #e;
2919
3008
  #t;
2920
3009
  #n;
2921
- #r = 0;
2922
- #i = "";
3010
+ #r;
3011
+ #i;
3012
+ #a = 0;
3013
+ #o = "";
2923
3014
  constructor() {
2924
- super(), ["NINE-TABLE"].includes(this.tagName) && n.log("Welcome nine-table", "0.0.13"), this.#e = this.attachShadow({ mode: "open" }), this.#t = new o(this);
3015
+ super(), ["NINE-TABLE"].includes(this.tagName) && n.log("Welcome nine-table", "0.0.15"), this.#e = this.attachShadow({ mode: "open" }), this.#t = new o(this), this.#r = new I(this), this.#i = new L(this), this.#l();
2925
3016
  }
2926
3017
  connectedCallback() {
2927
3018
  setTimeout(() => {
2928
- this.#r = this.querySelectorAll("table")?.length, this.fields = new s(this), this.exprEngine = new P(this), this.#o(), this.#n = new N(this), this.#a();
3019
+ this.#a = this.querySelectorAll("table")?.length, this.fields = new s(this), this.exprEngine = new F(this), this.#c(), this.#n = new P(this), this.#s();
2929
3020
  });
2930
3021
  }
2931
3022
  disconnectedCallback() {}
2932
- #a = () => {
3023
+ #s = () => {
2933
3024
  let e = 0, t = setInterval(() => {
2934
3025
  e++;
2935
3026
  let n = this.shadow.querySelectorAll("nine-table-sheet");
2936
- if (e >= 50 && clearInterval(t), n.length >= this.#r) {
3027
+ if (e >= 50 && clearInterval(t), n.length >= this.#a) {
2937
3028
  let e = 0;
2938
3029
  n.forEach((t) => {
2939
3030
  t.loaded && e++;
2940
- }), e >= this.#r && (clearInterval(t), this.loaded = !0, this.dispatchEvent(new CustomEvent(r.EVENT.LOAD, {
3031
+ }), e >= this.#a && (clearInterval(t), this.loaded = !0, this.dispatchEvent(new CustomEvent(r.EVENT.LOAD, {
2941
3032
  bubbles: !0,
2942
3033
  detail: { target: this }
2943
3034
  })));
@@ -2953,56 +3044,14 @@ var N = class {
2953
3044
  get data() {
2954
3045
  return this.#t.data;
2955
3046
  }
2956
- get row() {
2957
- return this.#t.row;
2958
- }
2959
3047
  get customStyle() {
2960
- return this.#i;
3048
+ return this.#o;
2961
3049
  }
2962
- scrollTo = (e, t) => {
2963
- this.#e.querySelectorAll("nine-table-sheet.active").forEach((n) => {
2964
- n.scrollTo(e, t);
2965
- });
2966
- };
2967
- currentRow = () => {
2968
- let e = this.currentRows();
2969
- return e.length === 0 ? -1 : e[0];
2970
- };
2971
- currentRows = () => {
2972
- let e = [];
2973
- return this.#e.querySelectorAll("nine-table-sheet.active").forEach((t) => {
2974
- let n = t.view.getArray(t.selection.minRow).m._[r.META.INDEX.ROWID];
2975
- e.push(n);
2976
- }), e;
2977
- };
2978
- addRow = (e, t = !0) => this.data.add(e, t);
2979
- insertRow = (e, t, n = !0) => {
2980
- let i = this.#e.querySelector("nine-table-sheet.active");
2981
- if (!i) return;
2982
- let a = i.view.get(e).m._[r.META.INDEX.ROWID], o = this.data.insert(a, t, n);
2983
- return i.view.getArray().findIndex((e) => !e || !e.m || !e.m._ ? !1 : e.m._[r.META.INDEX.ROWID] === o);
2984
- };
2985
- removeRow = (e) => {
2986
- let t = this.#e.querySelector("nine-table-sheet.active");
2987
- if (!t) return;
2988
- let n = t.view.get(e).m._[r.META.INDEX.ROWID];
2989
- this.data.remove(n);
2990
- };
2991
- currentIndex = () => {
2992
- let e = this.currentIndexs();
2993
- return e.length === 0 ? -1 : e[0];
2994
- };
2995
- currentIndexs = () => {
2996
- let e = [];
2997
- return this.#e.querySelectorAll("nine-table-sheet.active").forEach((t) => {
2998
- e.push(t.selection.minRow);
2999
- }), e;
3000
- };
3001
3050
  addProvider(e) {
3002
3051
  if (!e || typeof e != "object") return;
3003
3052
  let { style: t, ...n } = e;
3004
3053
  if (t && typeof t == "string") {
3005
- this.#i = t;
3054
+ this.#o = t;
3006
3055
  let e = this.#e.getElementById("nine-table-scoped-custom-style");
3007
3056
  e && (e.textContent = t);
3008
3057
  }
@@ -3037,7 +3086,7 @@ var N = class {
3037
3086
  get activeSheet() {
3038
3087
  return this.shadow.querySelector("nine-table-sheet.active") || null;
3039
3088
  }
3040
- #o() {
3089
+ #c() {
3041
3090
  let e = /* @__PURE__ */ new Set();
3042
3091
  this.querySelectorAll("[data-source]").forEach((t) => {
3043
3092
  let n = t.getAttribute("data-source");
@@ -3070,20 +3119,29 @@ var N = class {
3070
3119
  });
3071
3120
  });
3072
3121
  };
3122
+ #l() {
3123
+ [this.#i].forEach((e) => {
3124
+ (/* @__PURE__ */ new Set([...Reflect.ownKeys(e), ...Reflect.ownKeys(Object.getPrototypeOf(e))])).forEach((t) => {
3125
+ if (t === "constructor" || String(t).startsWith("#")) return;
3126
+ let n = e[t];
3127
+ typeof n == "function" ? this[t] || (this[t] = (...t) => n.apply(e, t)) : typeof n == "object" && n && (this[t] || (this[t] = n));
3128
+ });
3129
+ });
3130
+ }
3073
3131
  };
3074
- customElements.get("nine-table") || customElements.define("nine-table", F), customElements.get("nine-table-simple") || customElements.define("nine-table-simple", class extends F {
3132
+ customElements.get("nine-table") || customElements.define("nine-table", R), customElements.get("nine-table-simple") || customElements.define("nine-table-simple", class extends R {
3075
3133
  connectedCallback() {
3076
3134
  this.setAttribute("theme", "simple"), super.connectedCallback();
3077
3135
  }
3078
3136
  });
3079
3137
  // src/cell/core/BasicCellElement.js
3080
- var I = class extends HTMLElement {
3138
+ var z = class extends HTMLElement {
3081
3139
  constructor() {
3082
3140
  super();
3083
3141
  }
3084
3142
  applyBaseStyle() {}
3085
3143
  connectedCallback() {}
3086
- }, L = /* @__PURE__ */ new Map(), R = class extends I {
3144
+ }, B = /* @__PURE__ */ new Map(), V = class extends z {
3087
3145
  #e;
3088
3146
  #t;
3089
3147
  #n;
@@ -3255,7 +3313,7 @@ var I = class extends HTMLElement {
3255
3313
  }
3256
3314
  if (this.#e && typeof this.#e.exprFunction == "function") return this.#e.exprFunction(e).call(this, t, n, this.#e.data);
3257
3315
  if (e.includes("data.") || e.includes("childRecords") || e.includes("groupRecord")) {
3258
- let i = L.get("grp_" + e);
3316
+ let i = B.get("grp_" + e);
3259
3317
  return i || (i = Function("groupRecord", "row", "cell", "host", `
3260
3318
  const indices = groupRecord[3]; // GROUP_IDX.CHILDREN = 3
3261
3319
  const allRecords = host?.data?.getArray ? host.data.getArray() : [];
@@ -3280,14 +3338,14 @@ var I = class extends HTMLElement {
3280
3338
 
3281
3339
  const data = childRecords; // data.length 등을 쓸 수 있도록 호환
3282
3340
  return ${e};
3283
- `), L.set("grp_" + e, i)), i(t, n, r, this.#e);
3341
+ `), B.set("grp_" + e, i)), i(t, n, r, this.#e);
3284
3342
  }
3285
3343
  return e;
3286
3344
  } catch (t) {
3287
3345
  return console.error("Group expr evaluation error:", e, t), e;
3288
3346
  }
3289
3347
  };
3290
- }, z = class extends R {
3348
+ }, H = class extends V {
3291
3349
  get host() {
3292
3350
  return super.host;
3293
3351
  }
@@ -3318,7 +3376,7 @@ var I = class extends HTMLElement {
3318
3376
  getExprValue = (e, t, n, r) => super.getExprValue(e, t, n, r);
3319
3377
  isValid = () => super.isValid();
3320
3378
  isInvalid = () => super.isInvalid();
3321
- }, B = class extends z {
3379
+ }, U = class extends H {
3322
3380
  #e;
3323
3381
  constructor() {
3324
3382
  super();
@@ -3347,9 +3405,9 @@ var I = class extends HTMLElement {
3347
3405
  return this.cell.getAttribute("maxbyte") || this.cell.getAttribute("max-byte");
3348
3406
  }
3349
3407
  };
3350
- customElements.get("cell-input") || customElements.define("cell-input", B);
3408
+ customElements.get("cell-input") || customElements.define("cell-input", U);
3351
3409
  // src/cell/cell-input-number.js
3352
- var V = class extends z {
3410
+ var W = class extends H {
3353
3411
  #e;
3354
3412
  constructor() {
3355
3413
  super();
@@ -3433,9 +3491,9 @@ var V = class extends z {
3433
3491
  return this.cell.getAttribute("maxbyte") || this.cell.getAttribute("max-byte");
3434
3492
  }
3435
3493
  };
3436
- customElements.get("cell-input-number") || customElements.define("cell-input-number", V);
3494
+ customElements.get("cell-input-number") || customElements.define("cell-input-number", W);
3437
3495
  // src/cell/cell-input-color.js
3438
- var H = class extends z {
3496
+ var G = class extends H {
3439
3497
  #e;
3440
3498
  #t;
3441
3499
  #n;
@@ -3491,9 +3549,9 @@ var H = class extends z {
3491
3549
  return !(isNaN(t) || isNaN(n) || isNaN(r) || t < 0 || t > 255 || n < 0 || n > 255 || r < 0 || r > 255);
3492
3550
  };
3493
3551
  };
3494
- customElements.get("cell-input-color") || customElements.define("cell-input-color", H);
3552
+ customElements.get("cell-input-color") || customElements.define("cell-input-color", G);
3495
3553
  // src/cell/cell-input-date.js
3496
- var U = class extends z {
3554
+ var K = class extends H {
3497
3555
  #e;
3498
3556
  #t;
3499
3557
  constructor() {
@@ -3599,9 +3657,9 @@ var U = class extends z {
3599
3657
  return this.cell.getAttribute("max");
3600
3658
  }
3601
3659
  };
3602
- customElements.get("cell-input-date") || customElements.define("cell-input-date", U);
3660
+ customElements.get("cell-input-date") || customElements.define("cell-input-date", K);
3603
3661
  // src/cell/cell-checkbox.js
3604
- var W = class extends z {
3662
+ var q = class extends H {
3605
3663
  #e;
3606
3664
  #t;
3607
3665
  constructor() {
@@ -3674,9 +3732,9 @@ var W = class extends z {
3674
3732
  return this.cell.getAttribute("visible") || !1;
3675
3733
  }
3676
3734
  };
3677
- customElements.get("cell-checkbox") || customElements.define("cell-checkbox", W);
3735
+ customElements.get("cell-checkbox") || customElements.define("cell-checkbox", q);
3678
3736
  // src/cell/cell-radio.js
3679
- var G = class extends z {
3737
+ var J = class extends H {
3680
3738
  #e;
3681
3739
  #t = [];
3682
3740
  #n = [];
@@ -3739,9 +3797,9 @@ var G = class extends z {
3739
3797
  return this.cell.getAttribute("value-name") || "v";
3740
3798
  }
3741
3799
  };
3742
- customElements.get("cell-radio") || customElements.define("cell-radio", G);
3800
+ customElements.get("cell-radio") || customElements.define("cell-radio", J);
3743
3801
  // src/cell/cell-combo-panel.js
3744
- var K = class extends HTMLElement {
3802
+ var Y = class extends HTMLElement {
3745
3803
  #e;
3746
3804
  #t;
3747
3805
  #n;
@@ -3839,9 +3897,9 @@ var K = class extends HTMLElement {
3839
3897
  this.innerHTML = "\n <div class=\"head\">\n <input type=\"text\" class=\"search-input\" placeholder=\"Search...\" />\n </div>\n \n <nine-table-simple class=\"combo-list\" theme=\"simple\">\n <table auto-fit-col=\"true\">\n <colgroup>\n <col width=\"30\" fixed=\"left\" />\n <col width=\"100\" />\n <col width=\"100\" />\n <col width=\"100\" />\n <col width=\"100\" />\n <col width=\"100\" />\n <col width=\"100\" />\n <col width=\"100\" />\n <col width=\"100\" />\n <col width=\"100\" />\n <col width=\"100\" />\n <col width=\"0\" />\n </colgroup>\n <tbody>\n <tr>\n <td cell-type=\"checkbox\" data-bind=\"CHK\"></td>\n <td data-bind=\"tmp1\" />\n <td data-bind=\"tmp2\" />\n <td data-bind=\"tmp3\" />\n <td data-bind=\"tmp4\" />\n <td data-bind=\"tmp5\" />\n <td data-bind=\"tmp6\" />\n <td data-bind=\"tmp7\" />\n <td data-bind=\"tmp8\" />\n <td data-bind=\"tmp9\" />\n <td data-bind=\"tmp10\" />\n <td data-bind=\"k\" />\n </tr>\n </tbody>\n </table>\n </nine-table-simple>\n \n <div class=\"footer\">\n <div>\n <input id=\"chkAll\" type=\"checkbox\" checked>\n <label for=\"chkAll\">Select All</label>\n </div>\n <button id=\"btnOk\">OK</button>\n </div>\n ";
3840
3898
  };
3841
3899
  };
3842
- customElements.get("cell-combo-panel") || customElements.define("cell-combo-panel", K);
3900
+ customElements.get("cell-combo-panel") || customElements.define("cell-combo-panel", Y);
3843
3901
  // src/cell/cell-combo.js
3844
- var q = class extends z {
3902
+ var X = class extends H {
3845
3903
  #e;
3846
3904
  #t = [];
3847
3905
  #n;
@@ -3903,9 +3961,9 @@ var q = class extends z {
3903
3961
  return this.#t;
3904
3962
  }
3905
3963
  };
3906
- customElements.get("cell-combo") || customElements.define("cell-combo", q);
3964
+ customElements.get("cell-combo") || customElements.define("cell-combo", X);
3907
3965
  // src/cell/cell-renderer.js
3908
- var J = class extends R {
3966
+ var Z = class extends V {
3909
3967
  #e;
3910
3968
  constructor() {
3911
3969
  super();
@@ -3920,9 +3978,9 @@ var J = class extends R {
3920
3978
  this.innerHTML = "\n <span class=\"wrapper\"></span>\n ";
3921
3979
  };
3922
3980
  };
3923
- customElements.get("cell-renderer") || customElements.define("cell-renderer", J);
3981
+ customElements.get("cell-renderer") || customElements.define("cell-renderer", Z);
3924
3982
  // src/cell/cell-button.js
3925
- var Y = class extends R {
3983
+ var Q = class extends V {
3926
3984
  #e;
3927
3985
  constructor() {
3928
3986
  super();
@@ -3955,9 +4013,9 @@ var Y = class extends R {
3955
4013
  this.innerHTML = "\n <button class=\"button\">...</button>\n ";
3956
4014
  };
3957
4015
  };
3958
- customElements.get("cell-button") || customElements.define("cell-button", Y);
4016
+ customElements.get("cell-button") || customElements.define("cell-button", Q);
3959
4017
  // src/cell/cell-row-indicator.js
3960
- var X = class extends R {
4018
+ var $ = class extends V {
3961
4019
  #e;
3962
4020
  #t;
3963
4021
  #n;
@@ -3998,9 +4056,9 @@ var X = class extends R {
3998
4056
  this.#t.innerHTML = e, this.#t.style.display = a || o ? "" : "none";
3999
4057
  };
4000
4058
  };
4001
- customElements.get("cell-row-indicator") || customElements.define("cell-row-indicator", X);
4059
+ customElements.get("cell-row-indicator") || customElements.define("cell-row-indicator", $);
4002
4060
  // src/col/col-expand.js
4003
- var Z = class extends HTMLElement {
4061
+ var ee = class extends HTMLElement {
4004
4062
  #e;
4005
4063
  #t;
4006
4064
  constructor() {
@@ -4048,9 +4106,9 @@ var Z = class extends HTMLElement {
4048
4106
  this.removeEventListener("click", this.#n);
4049
4107
  }
4050
4108
  };
4051
- customElements.get("nine-table-col-expand") || customElements.define("nine-table-col-expand", Z);
4109
+ customElements.get("nine-table-col-expand") || customElements.define("nine-table-col-expand", ee);
4052
4110
  // src/menu/nine-table-menu.js
4053
- var Q = class extends HTMLElement {
4111
+ var te = class extends HTMLElement {
4054
4112
  #e;
4055
4113
  #t;
4056
4114
  connectedCallback() {
@@ -4219,9 +4277,9 @@ var Q = class extends HTMLElement {
4219
4277
  this.#e?.removeEventListener("contextmenu", this.#n);
4220
4278
  }
4221
4279
  };
4222
- customElements.get("nine-table-menu") || customElements.define("nine-table-menu", Q);
4280
+ customElements.get("nine-table-menu") || customElements.define("nine-table-menu", te);
4223
4281
  // src/menu/nine-table-menu-panel.js
4224
- var $ = class extends HTMLElement {
4282
+ var ne = class extends HTMLElement {
4225
4283
  #e;
4226
4284
  #t = null;
4227
4285
  constructor() {
@@ -4298,7 +4356,7 @@ var $ = class extends HTMLElement {
4298
4356
  this.close();
4299
4357
  }
4300
4358
  };
4301
- customElements.get("nine-table-menu-panel") || customElements.define("nine-table-menu-panel", $);
4359
+ customElements.get("nine-table-menu-panel") || customElements.define("nine-table-menu-panel", ne);
4302
4360
  export { r as NINE_TABLE };
4303
4361
 
4304
4362
  //# sourceMappingURL=nine-table.js.map