@ninebone/datagrid 0.0.10 → 0.0.11

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.
@@ -515,6 +515,28 @@ cell-row-indicator {
515
515
  pointer-events: none;
516
516
  }
517
517
  }
518
+
519
+ cell-row-indicator .row-status {
520
+ display: inline-block;
521
+ position: absolute;
522
+ right: 0;
523
+ top: 1px;
524
+ width: 4px;
525
+ height: 4px;
526
+ border-radius: 50%;
527
+ }
528
+
529
+ cell-row-indicator.is-insert .row-status {
530
+ background-color: #333;
531
+ }
532
+
533
+ cell-row-indicator.is-update .row-status {
534
+ background-color: darkgoldenrod;
535
+ }
536
+
537
+ cell-row-indicator.is-delete .row-status {
538
+ background-color: red;
539
+ }
518
540
  :host {
519
541
  --cell-selection-bg: rgba(37, 99, 235, 0.08);
520
542
  --cell-selection-border-color: #2563eb;
@@ -534,6 +556,7 @@ tbody {
534
556
  .selected-left { border-left: 2px solid var(--cell-selection-border-color); }
535
557
  .selected-right { border-right: 2px solid var(--cell-selection-border-color); }
536
558
  }
559
+
537
560
  nine-table-col-expand {
538
561
  position: absolute;
539
562
  right: 2px;
@@ -56,15 +56,16 @@ var n = new class extends e.constructor {
56
56
  }(), r = {
57
57
  META: { INDEX: {
58
58
  ROWID: 0,
59
- FILTER: 1,
60
- GROUP: 2
59
+ ROW_STATE: 1,
60
+ FILTER: 2,
61
+ GROUP: 3
61
62
  } },
62
63
  ROW_STATE: {
63
- EMPTY: "EMPTY",
64
- NORMAL: "NORMAL",
65
- INSERT: "INSERT",
66
- UPDATE: "UPDATE",
67
- DELETE: "DELETE"
64
+ EMPTY: 0,
65
+ NORMAL: 1,
66
+ INSERT: 2,
67
+ UPDATE: 3,
68
+ DELETE: 9
68
69
  },
69
70
  EVENT: {
70
71
  LOAD: "load",
@@ -99,7 +100,7 @@ var n = new class extends e.constructor {
99
100
  constructor(e, t) {
100
101
  this.#e = e, this.#t = t, this.#a();
101
102
  }
102
- #i = () => (this.#t.rawRecords || []).filter((e) => !e.__ng?.deleted);
103
+ #i = () => (this.#t.rawRecords || []).filter((e) => e.m._[r.META.INDEX.ROW_STATE] !== r.ROW_STATE.DELETE);
103
104
  get count() {
104
105
  return this.length;
105
106
  }
@@ -121,14 +122,14 @@ var n = new class extends e.constructor {
121
122
  };
122
123
  get = (e, t) => {
123
124
  let n = this.#i();
124
- if (e == null) return this.#u(n);
125
+ if (e == null) return this.#d(n);
125
126
  if (e < 0 || e >= n.length) return null;
126
127
  let r = n[e], i = this.getHostFields();
127
128
  if (t != null) {
128
129
  let e = i.indexOf(t);
129
130
  return e >= 0 ? r.v[e] : null;
130
131
  }
131
- return this.#u(r);
132
+ return this.#d(r);
132
133
  };
133
134
  getAll = () => this.#t.rawRecords || [];
134
135
  getHostFields = () => typeof this.#e.fields?.get == "function" ? this.#e.fields.get() : [];
@@ -142,7 +143,7 @@ var n = new class extends e.constructor {
142
143
  });
143
144
  };
144
145
  get source() {
145
- return this.#u(this.#t.rawRecords);
146
+ return this.#d(this.#t.rawRecords);
146
147
  }
147
148
  set source(e) {
148
149
  this.set(e);
@@ -203,7 +204,12 @@ var n = new class extends e.constructor {
203
204
  {},
204
205
  {}
205
206
  ],
206
- _: [t, []]
207
+ _: [
208
+ t,
209
+ r.ROW_STATE.EMPTY,
210
+ [],
211
+ []
212
+ ]
207
213
  });
208
214
  reset = () => {
209
215
  this.#t.rawRecords = [], this.#o();
@@ -221,43 +227,54 @@ var n = new class extends e.constructor {
221
227
  }), n.push(r);
222
228
  }), n;
223
229
  };
224
- #l = (t) => (Array.isArray(t) || (t = [t]), t.forEach((t) => {
225
- let n = this.nextId;
226
- t.m = this.#s(n), t.__ng = t.m, t.__ng.rowid = n, t.__ng.rowState = e.ROW_STATE.INSERT, t.__ng._[0] = n;
227
- }), t);
228
- add = (t, n = !0) => {
229
- t === void 0 && (t = {});
230
- let r = this.#c(t);
231
- this.#t.rawRecords = this.#t.rawRecords.concat(this.#l(r));
230
+ #l = (e) => (Array.isArray(e) || (e = [e]), e.forEach((e) => {
231
+ let t = this.nextId;
232
+ e.m = this.#s(t), e.__ng = e.m, e.__ng.rowid = t, e.m._[r.META.INDEX.ROWID] = t, e.m._[r.META.INDEX.ROW_STATE] = r.ROW_STATE.EMPTY;
233
+ }), e);
234
+ #u = (e) => this.#t.rawRecords.findIndex((t) => !t || !t.m || !t.m._ ? !1 : t.m._[r.META.INDEX.ROWID] === e);
235
+ add = (e, t = !0) => {
236
+ e === void 0 && (e = {});
237
+ let n = this.#c(e);
238
+ this.#t.rawRecords = this.#t.rawRecords.concat(this.#l(n));
232
239
  let i = this.count() - 1;
233
- return n || r.forEach((t, n) => {
234
- let r = this.#t.rawRecords[this.#t.rawRecords.length - 1 - n];
235
- r && (r.__ng.rowState = e.ROW_STATE.EMPTY);
240
+ return t && n.forEach((e, t) => {
241
+ let n = this.#t.rawRecords[this.#t.rawRecords.length - 1 - t];
242
+ n && (n.m._[r.META.INDEX.ROW_STATE] = r.ROW_STATE.INSERT);
236
243
  }), this.#o(), i;
237
244
  };
238
- delete = (t) => {
245
+ insert = (e, t, n = !0) => {
246
+ t === void 0 && (t = {});
247
+ let i = this.#c(t);
248
+ if (i.length === 0) return -1;
249
+ let a = this.#u(e), o = this.#l(i);
250
+ return this.#t.rawRecords.splice(a, 0, ...o), n && o.forEach((e, t) => {
251
+ let n = this.#t.rawRecords[a + t];
252
+ n && n.m && n.m._ && (n.m._[r.META.INDEX.ROW_STATE] = r.ROW_STATE.INSERT);
253
+ }), this.#o(), o[0].m._[r.META.INDEX.ROWID];
254
+ };
255
+ remove = (e) => {
256
+ let t = [];
257
+ t = Array.isArray(e) ? at : [parseInt(e, 10)];
239
258
  let n = [];
240
- n = Array.isArray(t) ? t : t === void 0 ? [this.#t.host.row.at] : [parseInt(t, 10)];
241
- let r = this.#i();
242
- n.sort((e, t) => t - e).forEach((t) => {
243
- if (r[t]) {
244
- let n = r[t].__ng.rowid;
245
- r[t].__ng.rowState === e.ROW_STATE.INSERT ? this.#t.rawRecords = this.#t.rawRecords.filter((e) => e.__ng.rowid !== n) : this.#t.rawRecords.forEach((t) => {
246
- t.__ng.rowid === n && (t.__ng.deleted = !0, t.__ng.rowState = e.ROW_STATE.DELETE);
247
- });
248
- }
259
+ t.forEach((e) => {
260
+ n.push(this.#u(e));
261
+ });
262
+ let i = this.#t.rawRecords;
263
+ n.sort((e, t) => t - e).forEach((e) => {
264
+ let t = i[e].m._[r.META.INDEX.ROWID];
265
+ i[e].m._[r.META.INDEX.ROW_STATE] === r.ROW_STATE.INSERT ? this.#t.rawRecords = this.#t.rawRecords.filter((e) => e.m._[r.META.INDEX.ROWID] !== t) : this.#t.rawRecords.forEach((e) => {
266
+ e.m._[r.META.INDEX.ROWID] === t && (e.m._[r.META.INDEX.ROW_STATE] = r.ROW_STATE.DELETE);
267
+ });
249
268
  }), this.#o();
250
269
  };
251
- setValue = (t, n, r) => {
252
- t = parseInt(t, 10);
253
- let i = this.getHostFields().indexOf(n);
270
+ setValue = (e, t, n) => {
271
+ e = parseInt(e, 10);
272
+ let i = this.getHostFields().indexOf(t);
254
273
  if (i < 0) return;
255
- let a = this.#i()[t];
256
- if (!a) return;
257
- let o = a.v[i];
258
- o !== r && a.__ng.rowState !== e.ROW_STATE.INSERT && (a.__ng.o.hasOwnProperty(n) || (a.__ng.o[n] = o), a.__ng.rowState = e.ROW_STATE.UPDATE), a.v[i] = r;
274
+ let a = this.#i()[e];
275
+ a && (a.v[i] !== n && a.m._[r.META.INDEX.ROW_STATE] !== r.ROW_STATE.INSERT && (a.m._[r.META.INDEX.ROW_STATE] = r.ROW_STATE.UPDATE), a.v[i] = n);
259
276
  };
260
- #u = (e) => {
277
+ #d = (e) => {
261
278
  if (!e) return e;
262
279
  let t = !Array.isArray(e), n = t ? [e] : e, r = this.getHostFields(), i = n.filter((e) => !e.__ng?.deleted).map((e) => {
263
280
  let t = {};
@@ -1156,6 +1173,18 @@ var m = {
1156
1173
  endCol: s
1157
1174
  }, this.render();
1158
1175
  }
1176
+ get minRow() {
1177
+ return this.#t.startRow;
1178
+ }
1179
+ get maxRow() {
1180
+ return this.#t.endRow;
1181
+ }
1182
+ get minCol() {
1183
+ return this.#t.startCol;
1184
+ }
1185
+ get maxCol() {
1186
+ return this.#t.endCol;
1187
+ }
1159
1188
  refresh = () => {
1160
1189
  this.render();
1161
1190
  };
@@ -1170,12 +1199,12 @@ var m = {
1170
1199
  }), e < 0 || t < 0 || i.forEach((i) => {
1171
1200
  Array.from(i.querySelectorAll("tbody tr")).filter((e) => e.style.display !== "none").forEach((i) => {
1172
1201
  let { matrixRow: a } = this.#n(i);
1173
- a < 0 || i.querySelectorAll("td, th").forEach((i) => {
1202
+ a < 0 || (a >= e && a <= n && i.classList.add("selected"), i.querySelectorAll("td, th").forEach((i) => {
1174
1203
  let o = parseInt(i.dataset.col, 10);
1175
1204
  if (isNaN(o)) return;
1176
1205
  let s = parseInt(i.rowSpan || 1, 10), c = parseInt(i.colSpan || 1, 10), l = a + s - 1, u = o + c - 1;
1177
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"));
1178
- });
1207
+ }));
1179
1208
  });
1180
1209
  });
1181
1210
  };
@@ -2550,6 +2579,9 @@ var k = class {
2550
2579
  get #m() {
2551
2580
  return this.#t.hasAttribute("simple") || this.#t.getAttribute("theme") === "simple";
2552
2581
  }
2582
+ scrollTo = (e, t) => {
2583
+ this.rowManager.scrollToDataRow(e, "top", t);
2584
+ };
2553
2585
  recompileAndRefresh() {
2554
2586
  this.#f.table && (v.recompile(this.#f.table), [
2555
2587
  "left",
@@ -2811,10 +2843,11 @@ var N = class {
2811
2843
  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) => {
2812
2844
  let r = t === 0 ? "active" : "", i = e.id || `sheet${t + 1}`;
2813
2845
  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>` : "");
2814
- }).join(""), i = ["@import \"https://cdn.jsdelivr.net/npm/@ninebone/datagrid@0.0.10/dist/css/nine-table.css\";"];
2846
+ }).join(""), i = ["@import \"https://cdn.jsdelivr.net/npm/@ninebone/datagrid@0.0.11/dist/css/nine-table.css\";"];
2815
2847
  nine["nine-table"] && nine["nine-table"].cssFile && i.push(`@import "${nine["nine-table"].cssFile}";`), this.#e.shadowRoot.innerHTML = `
2816
2848
  <style>
2817
2849
  ${i.join("\n")}
2850
+ ${this.#e.customStyle}
2818
2851
  </style>
2819
2852
 
2820
2853
  <nine-table-toolbar></nine-table-toolbar>
@@ -2877,16 +2910,17 @@ var N = class {
2877
2910
  #t;
2878
2911
  #n;
2879
2912
  #r = 0;
2913
+ #i = "";
2880
2914
  constructor() {
2881
- super(), ["NINE-TABLE"].includes(this.tagName) && n.log("Welcome nine-table", "0.0.10"), this.#e = this.attachShadow({ mode: "open" }), this.#t = new o(this);
2915
+ super(), ["NINE-TABLE"].includes(this.tagName) && n.log("Welcome nine-table", "0.0.11"), this.#e = this.attachShadow({ mode: "open" }), this.#t = new o(this);
2882
2916
  }
2883
2917
  connectedCallback() {
2884
2918
  setTimeout(() => {
2885
- this.#r = this.querySelectorAll("table")?.length, this.fields = new s(this), this.exprEngine = new P(this), this.#a(), this.#n = new N(this), this.#i();
2919
+ 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();
2886
2920
  });
2887
2921
  }
2888
2922
  disconnectedCallback() {}
2889
- #i = () => {
2923
+ #a = () => {
2890
2924
  let e = 0, t = setInterval(() => {
2891
2925
  e++;
2892
2926
  let n = this.shadow.querySelectorAll("nine-table-sheet");
@@ -2913,9 +2947,58 @@ var N = class {
2913
2947
  get row() {
2914
2948
  return this.#t.row;
2915
2949
  }
2950
+ get customStyle() {
2951
+ return this.#i;
2952
+ }
2953
+ scrollTo = (e, t) => {
2954
+ this.#e.querySelectorAll("nine-table-sheet.active").forEach((n) => {
2955
+ n.scrollTo(e, t);
2956
+ });
2957
+ };
2958
+ currentRow = () => {
2959
+ let e = this.currentRows();
2960
+ return e.length === 0 ? -1 : e[0];
2961
+ };
2962
+ currentRows = () => {
2963
+ let e = [];
2964
+ return this.#e.querySelectorAll("nine-table-sheet.active").forEach((t) => {
2965
+ let n = t.view.getArray(t.selection.minRow).m._[r.META.INDEX.ROWID];
2966
+ e.push(n);
2967
+ }), e;
2968
+ };
2969
+ addRow = (e, t = !0) => this.data.add(e, t);
2970
+ insertRow = (e, t, n = !0) => {
2971
+ let i = this.#e.querySelector("nine-table-sheet.active");
2972
+ if (!i) return;
2973
+ let a = i.view.get(e).m._[r.META.INDEX.ROWID], o = this.data.insert(a, t, n);
2974
+ return i.view.getArray().findIndex((e) => !e || !e.m || !e.m._ ? !1 : e.m._[r.META.INDEX.ROWID] === o);
2975
+ };
2976
+ removeRow = (e) => {
2977
+ let t = this.#e.querySelector("nine-table-sheet.active");
2978
+ if (!t) return;
2979
+ let n = t.view.get(e).m._[r.META.INDEX.ROWID];
2980
+ this.data.remove(n);
2981
+ };
2982
+ currentIndex = () => {
2983
+ let e = this.currentIndexs();
2984
+ return e.length === 0 ? -1 : e[0];
2985
+ };
2986
+ currentIndexs = () => {
2987
+ let e = [];
2988
+ return this.#e.querySelectorAll("nine-table-sheet.active").forEach((t) => {
2989
+ e.push(t.selection.minRow);
2990
+ }), e;
2991
+ };
2916
2992
  addProvider(e) {
2917
- e && typeof e == "object" && setTimeout(() => {
2918
- Object.entries(e).forEach(([e, t]) => {
2993
+ if (!e || typeof e != "object") return;
2994
+ let { style: t, ...n } = e;
2995
+ if (t && typeof t == "string") {
2996
+ this.#i = t;
2997
+ let e = this.#e.getElementById("nine-table-scoped-custom-style");
2998
+ e && (e.textContent = t);
2999
+ }
3000
+ Object.keys(n).length > 0 && setTimeout(() => {
3001
+ Object.entries(n).forEach(([e, t]) => {
2919
3002
  typeof t == "function" && (this[e] = t);
2920
3003
  }), this.rerenderer();
2921
3004
  });
@@ -2945,7 +3028,7 @@ var N = class {
2945
3028
  get activeSheet() {
2946
3029
  return this.shadow.querySelector("nine-table-sheet.active") || null;
2947
3030
  }
2948
- #a() {
3031
+ #o() {
2949
3032
  let e = /* @__PURE__ */ new Set();
2950
3033
  this.querySelectorAll("[data-source]").forEach((t) => {
2951
3034
  let n = t.getAttribute("data-source");
@@ -3085,10 +3168,8 @@ var I = class extends HTMLElement {
3085
3168
  }
3086
3169
  set value(e) {
3087
3170
  if (!this.#r || !this.#e?.data) return;
3088
- let t = parseInt(this.#r.dataset.row, 10), n = this.#r.dataset.bind;
3089
- if (isNaN(t) || !n) return;
3090
- let r = this.getAttribute("update-row-state") !== "false";
3091
- this.#e.data.setValue(t, n, e, r);
3171
+ let t = parseInt(this.#n.dataset.row, 10), n = this.#r.dataset.bind;
3172
+ !isNaN(t) && n && this.#e.data.setValue(t, n, e);
3092
3173
  }
3093
3174
  get row() {
3094
3175
  return parseInt(this.#r?.dataset?.row, 10);
@@ -3875,27 +3956,37 @@ var X = class extends R {
3875
3956
  super();
3876
3957
  }
3877
3958
  connectedCallback() {
3878
- this.#r(), super.connectedCallback(), this.cell && (this.cell.removeAttribute("tabindex"), this.cell.dataset.bind = "rowState"), this.#e = this.querySelector(".ng-row-main"), this.#t = this.querySelector(".ng-row-sub"), this.#n = this.querySelector(".ng-row-status");
3959
+ this.#r(), super.connectedCallback(), this.cell && (this.cell.removeAttribute("tabindex"), this.cell.dataset.bind = "rowState"), this.#e = this.querySelector(".ng-row-main"), this.#t = this.querySelector(".ng-row-sub"), this.#n = this.querySelector(".row-status");
3879
3960
  }
3880
3961
  #r = () => {
3881
- this.innerHTML = "\n <span class=\"ng-row-main\"></span>\n <span class=\"ng-row-sub\"></span>\n <span class=\"ng-row-status\"></span>\n ";
3962
+ this.innerHTML = "\n <span class=\"ng-row-main\"></span>\n <span class=\"ng-row-sub\"></span>\n <span class=\"row-status\"></span>\n ";
3882
3963
  };
3883
3964
  refresh = () => {
3884
3965
  if (!this.cell || !this.tr) return;
3966
+ this.classList.remove("is-insert", "is-update", "is-delete");
3885
3967
  let e = this.row;
3886
3968
  if (isNaN(e)) return;
3887
3969
  let t = this.tr.data;
3888
- t && t.__ng;
3889
- let n = this.index + 1, r = n.toLocaleString();
3970
+ if (t) switch (t.m._[r.META.INDEX.ROW_STATE]) {
3971
+ case r.ROW_STATE.INSERT:
3972
+ this.classList.add("is-insert");
3973
+ break;
3974
+ case r.ROW_STATE.UPDATE:
3975
+ this.classList.add("is-update");
3976
+ break;
3977
+ case r.ROW_STATE.DELETE: this.classList.add("is-delete");
3978
+ }
3979
+ let n = this.index + 1, i = n.toLocaleString();
3890
3980
  if (n >= 1e4) {
3891
- let e = r.length - 4, t = r.substring(0, e + 1), n = r.substring(e + 1);
3981
+ let e = i.length - 4, t = i.substring(0, e + 1), n = i.substring(e + 1);
3892
3982
  this.#e.innerHTML = `
3893
3983
  <span class="ng-row-prefix">${t}</span>
3894
3984
  <span class="ng-row-suffix">${n}</span>
3985
+ <div class="row-status"></div>
3895
3986
  `;
3896
- } else this.#e.innerHTML = `${r}`;
3897
- let i = !!this.sheet.querySelector("thead .asc,thead .desc"), a = !!this.sheet.querySelector("thead nine-table-filter-button.filtered");
3898
- this.#t.innerHTML = e, this.#t.style.display = i || a ? "" : "none";
3987
+ } else this.#e.innerHTML = `${i}`;
3988
+ let a = !!this.sheet.querySelector("thead .asc,thead .desc"), o = !!this.sheet.querySelector("thead nine-table-filter-button.filtered");
3989
+ this.#t.innerHTML = e, this.#t.style.display = a || o ? "" : "none";
3899
3990
  };
3900
3991
  };
3901
3992
  customElements.get("cell-row-indicator") || customElements.define("cell-row-indicator", X);