@plotdb/sheet 0.7.4 → 0.7.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # Change Logs
2
2
 
3
+ ## v0.7.6
4
+
5
+ - support `display`, a function translating the value a cell stores into the value it
6
+ shows. `cellcfg`'s `format` applies to whatever it returns, and editing keeps working
7
+ on the stored value, so a cell can now hold one thing and show another.
8
+ - fix bug: the class from `cellcfg` and from the `class` option lands on the wrong cell
9
+ in a frozen row / column once the sheet is scrolled, since the coordinate used to look
10
+ it up treated a cell frozen on one axis as frozen on both. the idx band, which
11
+ addresses no data of its own, was given a scrolled coordinate as well.
12
+ - fix bug: a sheet with an index column but no index row leaves the first row label
13
+ blank, the corner test comparing both axes against the column offset.
14
+ - refactor: grid position to data coordinate now lives in one place ( `_coord` ) rather
15
+ than three, and rendering a value goes through `_display` rather than formatting
16
+ inline.
17
+ - fix bug: editing a cell whose rendered text differs from what it stores ( a number
18
+ with a `format` from `cellcfg`, for one ) puts the rendered text into the editor, so
19
+ committing writes that back as the value. `1234567` shown as `1,234,567` becomes the
20
+ string `1,234,567`, which then renders as `NaN`. editing now starts from the raw
21
+ value in `@_data`. cells holding advanced content ( an object ) keep falling back to
22
+ what is rendered, there being no other textual form.
23
+
24
+
25
+ ## v0.7.5
26
+
27
+ - fix bug: `enableScrolling: false` stops the wheel handler but the sheet still swallows
28
+ the scroll. `.sheet` is a scroll container even at `overflow: hidden`, and the
29
+ `overscroll-behavior: contain` guarding against swipe back keeps the gesture from ever
30
+ reaching the page. it now relaxes to `overscroll-behavior-y: auto` while scrolling is
31
+ off, via a `no-scrolling` class. the horizontal axis keeps `contain`, that being the
32
+ axis swipe back lives on, and behaviour with scrolling enabled is unchanged.
33
+
34
+
3
35
  ## v0.7.4
4
36
 
5
37
  - fix bug: a sheet with neither an index nor a fixed row/col renders every track
package/README.md CHANGED
@@ -55,6 +55,9 @@ initialize:
55
55
  - the difference between `scrollLock` and `enableScrolling` is that:
56
56
  - `scrollLock` is for horizontal scrolling that may conflict with browser gesture.
57
57
  - `enableScrolling` is for mouse / trackpad scrolling behavior
58
+ - when false the sheet stops taking the wheel, and lets a vertical scroll started over
59
+ it reach the page instead of holding on to it. pair it with `scrollbar: true` so the
60
+ grid can still be scrolled.
58
61
  - `data`: initial data, as array of arrays
59
62
  - `slider`: default false. show slider widgets if true.
60
63
  - `scrollbar`: default false. show overlay scrollbars if true.
@@ -63,6 +66,12 @@ initialize:
63
66
  the data plus one page. scrolling beyond it is still allowed - the thumb just sticks
64
67
  to the end. the scrollbar hides itself when there is nothing to scroll.
65
68
  - dragging the thumb moves the view; clicking on the track pages toward the clicked side.
69
+ - `display(opt)`: custom function translating the value a cell stores into the value it
70
+ shows. `opt` contains `raw` ( the stored value, which may be undefined for an empty
71
+ cell ), `row` and `col`. return what the cell should show.
72
+ - the `format` from `cellcfg` applies to whatever this returns, so a computed value
73
+ still gets formatted.
74
+ - editing always works on the stored value, never on what is shown.
66
75
  - `cellcfg(opt)`: custom cell definition function. return value based on the given `opt`, which contains:
67
76
  - `row`: row of the cell to query
68
77
  - `col`: col of the cell to query
package/index.css CHANGED
@@ -6,6 +6,12 @@
6
6
  overscroll-behavior: contain;
7
7
  /* sheet may get focus. this prevents unwanted outline. */
8
8
  outline: none;
9
+ /* with `enableScrolling: false` we no longer take the wheel, so the page should get it.
10
+ the horizontal axis keeps `contain` - that is the axis the swipe back gesture lives on,
11
+ and nothing here scrolls horizontally either way. */
12
+ }
13
+ .sheet.no-scrolling {
14
+ overscroll-behavior-y: auto;
9
15
  }
10
16
  .sheet .inner {
11
17
  z-index: 1;
package/index.js CHANGED
@@ -68,6 +68,7 @@
68
68
  : opt.root;
69
69
  this.evtHandler = {};
70
70
  this._ccfg = typeof opt.cellcfg === 'function' ? opt.cellcfg : null;
71
+ this._dsp = typeof opt.display === 'function' ? opt.display : null;
71
72
  this._data = opt.data || [];
72
73
  this._size = {
73
74
  row: (ref$ = import$({
@@ -150,6 +151,7 @@
150
151
  this.dom["slide-x"].style.display = this.dom["slide-y"].style.display = 'none';
151
152
  }
152
153
  this.scrollbar = !!this.opt.scrollbar;
154
+ this.enableScrolling = this.opt.enableScrolling != null ? !!this.opt.enableScrolling : true;
153
155
  ['x', 'y'].map(function(it){
154
156
  var x$, n;
155
157
  x$ = n = document.createElement('div');
@@ -163,6 +165,9 @@
163
165
  if (this.scrollbar) {
164
166
  this.dom.sheet.classList.add('has-scrollbar');
165
167
  }
168
+ if (!this.enableScrolling) {
169
+ this.dom.sheet.classList.add('no-scrolling');
170
+ }
166
171
  this.dom.edit.appendChild(this.dom.textarea);
167
172
  this._init();
168
173
  return this;
@@ -600,7 +605,7 @@
600
605
  document.addEventListener('wheel', function(e){
601
606
  var inscope, spos, ref$, dx, dy, ox, oy;
602
607
  inscope = this$.eventInScope(e);
603
- if (this$.opt.enableScrolling != null && !this$.opt.enableScrolling) {
608
+ if (!this$.enableScrolling) {
604
609
  return;
605
610
  }
606
611
  if (!(this$.opt.scrollLock != null) || this$.opt.scrollLock) {
@@ -1012,88 +1017,115 @@
1012
1017
  });
1013
1018
  }
1014
1019
  },
1020
+ _coord: function(x, y){
1021
+ var ref$, fc, fr, ret, axis;
1022
+ ref$ = [x < this.xif.col[2], y < this.xif.row[2]], fc = ref$[0], fr = ref$[1];
1023
+ ret = {
1024
+ x: x,
1025
+ y: y,
1026
+ col: (fc
1027
+ ? 0
1028
+ : this.pos.col) + x - this.xif.col[1],
1029
+ row: (fr
1030
+ ? 0
1031
+ : this.pos.row) + y - this.xif.row[1],
1032
+ frozen: {
1033
+ col: fc,
1034
+ row: fr
1035
+ }
1036
+ };
1037
+ if (x < this.xif.col[0] || y < this.xif.row[0]) {
1038
+ axis = x >= this.xif.col[0]
1039
+ ? 'col'
1040
+ : y >= this.xif.row[0] ? 'row' : null;
1041
+ return ret.type = 'idx', ret.axis = axis, ret.className = "cell idx", ret;
1042
+ }
1043
+ if (x < this.xif.col[1] || y < this.xif.row[1]) {
1044
+ return ret.type = 'fixed', ret.className = "cell fixed", ret;
1045
+ }
1046
+ return import$(ret, {
1047
+ type: 'cell',
1048
+ className: fc && fr
1049
+ ? "cell frozen fixed"
1050
+ : fc || fr ? "cell frozen" : "cell"
1051
+ });
1052
+ },
1053
+ _format: function(v, arg$){
1054
+ var row, col, fc;
1055
+ row = arg$.row, col = arg$.col;
1056
+ if (!this._ccfg || sheet._d3warning || isNaN(parseFloat(v))) {
1057
+ return v;
1058
+ }
1059
+ if (!(fc = this._ccfg({
1060
+ type: 'format',
1061
+ row: row,
1062
+ col: col
1063
+ }))) {
1064
+ return v;
1065
+ }
1066
+ if ((typeof d3 != 'undefined' && d3 !== null) && d3.format) {
1067
+ return d3.format(fc)(v);
1068
+ }
1069
+ console.warn("[@plotdb/sheet] cell format provided yet d3.format not available. skip formatting.");
1070
+ sheet._d3warning = true;
1071
+ return v;
1072
+ },
1073
+ _display: function(raw, arg$){
1074
+ var row, col, v;
1075
+ row = arg$.row, col = arg$.col;
1076
+ v = !this._dsp
1077
+ ? raw
1078
+ : this._dsp({
1079
+ raw: raw,
1080
+ row: row,
1081
+ col: col
1082
+ });
1083
+ return this._format(v, {
1084
+ row: row,
1085
+ col: col
1086
+ });
1087
+ },
1015
1088
  _content: function(arg$){
1016
- var x, y, n, v, ref$, key$, content, className, fr, clsext, clsopt, fc;
1089
+ var x, y, n, c, content, ref$, key$, clsext, clsopt;
1017
1090
  x = arg$.x, y = arg$.y, n = arg$.n;
1018
1091
  if (!n && !(n = this.dom.inner.childNodes[x + y * this.dim.col])) {
1019
1092
  return;
1020
1093
  }
1021
- ref$ = x < this.xif.col[0] && y < this.xif.col[0]
1022
- ? ["", "cell idx"]
1023
- : x < this.xif.col[0]
1024
- ? (v = y < this.xif.row[1]
1094
+ c = this._coord(x, y);
1095
+ content = c.type === 'idx'
1096
+ ? c.axis === 'row'
1097
+ ? y < this.xif.row[1]
1025
1098
  ? " "
1026
- : y < this.xif.row[2]
1027
- ? y - this.xif.row[1] + 1
1028
- : y - this.xif.row[1] + this.pos.row + 1, [v, "cell idx"])
1029
- : y < this.xif.row[0]
1030
- ? (v = x < this.xif.col[1]
1031
- ? " "
1032
- : x < this.xif.col[2]
1033
- ? idxToLabel(x - this.xif.col[1])
1034
- : idxToLabel(x - this.xif.col[1] + this.pos.col), [v, "cell idx"])
1035
- : x < this.xif.col[1]
1036
- ? [null, "cell fixed"]
1037
- : y < this.xif.row[1]
1038
- ? [null, "cell fixed"]
1039
- : x < this.xif.col[2] && y < this.xif.row[2]
1040
- ? [((ref$ = this._data)[key$ = y - this.xif.row[1]] || (ref$[key$] = []))[x - this.xif.col[1]], "cell frozen fixed"]
1041
- : x < this.xif.col[2]
1042
- ? [((ref$ = this._data)[key$ = this.pos.row + y - this.xif.row[1]] || (ref$[key$] = []))[x - this.xif.col[1]], "cell frozen"]
1043
- : y < this.xif.row[2]
1044
- ? [((ref$ = this._data)[key$ = y - this.xif.row[1]] || (ref$[key$] = []))[this.pos.col + x - this.xif.col[1]], "cell frozen"]
1045
- : [((ref$ = this._data)[key$ = this.pos.row + y - this.xif.row[1]] || (ref$[key$] = []))[this.pos.col + x - this.xif.col[1]], "cell"], content = ref$[0], className = ref$[1];
1099
+ : c.row + 1
1100
+ : c.axis === 'col' ? x < this.xif.col[1]
1101
+ ? " "
1102
+ : idxToLabel(c.col) : ""
1103
+ : c.type === 'fixed'
1104
+ ? ""
1105
+ : this._display(((ref$ = this._data)[key$ = c.row] || (ref$[key$] = []))[c.col], c);
1046
1106
  if (!(content != null)) {
1047
1107
  content = "";
1048
1108
  }
1049
- fr = /frozen/.exec(className);
1050
- clsext = x >= this.xif.col[0] && y >= this.xif.row[0] ? (this.cls.col[(fr
1051
- ? 0
1052
- : this.pos.col) + x - this.xif.col[1]] || '') + ' ' + (this.cls.row[(fr
1053
- ? 0
1054
- : this.pos.row) + y - this.xif.row[1]] || '') : '';
1055
- clsopt = !this._ccfg
1109
+ clsext = c.type === 'idx'
1110
+ ? ''
1111
+ : (this.cls.col[c.col] || '') + ' ' + (this.cls.row[c.row] || '');
1112
+ clsopt = (!this._ccfg
1056
1113
  ? ''
1057
1114
  : this._ccfg({
1058
1115
  type: 'class',
1059
- col: (fr
1060
- ? 0
1061
- : this.pos.col) + x - this.xif.col[1],
1062
- row: (fr
1063
- ? 0
1064
- : this.pos.row) + y - this.xif.row[1]
1065
- }) || '';
1066
- n.className = [className, clsext, clsopt].filter(function(it){
1116
+ row: c.row,
1117
+ col: c.col
1118
+ })) || '';
1119
+ n.className = [c.className, clsext, clsopt].filter(function(it){
1067
1120
  return it.trim();
1068
1121
  }).join(' ').trim();
1069
- if (content !== null) {
1070
- if (typeof content === 'object') {
1071
- if (content.type === 'dom') {
1072
- n.textContent = "";
1073
- return n.appendChild(content.node);
1074
- }
1075
- } else {
1076
- if (this._ccfg && !sheet._d3warning && !isNaN(parseFloat(content))) {
1077
- fc = this._ccfg({
1078
- type: 'format',
1079
- col: (fr
1080
- ? 0
1081
- : this.pos.col) + x - this.xif.col[1],
1082
- row: (fr
1083
- ? 0
1084
- : this.pos.row) + y - this.xif.row[1]
1085
- });
1086
- if (fc) {
1087
- if ((typeof d3 != 'undefined' && d3 !== null) && d3.format) {
1088
- content = d3.format(fc)(content);
1089
- } else {
1090
- console.warn("[@plotdb/sheet] cell format provided yet d3.format not available. skip formatting.");
1091
- sheet._d3warning = true;
1092
- }
1093
- }
1094
- }
1095
- return n.textContent = content;
1122
+ if (typeof content === 'object') {
1123
+ if (content.type === 'dom') {
1124
+ n.textContent = "";
1125
+ return n.appendChild(content.node);
1096
1126
  }
1127
+ } else {
1128
+ return n.textContent = content;
1097
1129
  }
1098
1130
  },
1099
1131
  _md: function(mag){
@@ -1324,7 +1356,7 @@
1324
1356
  return this.renderSelection();
1325
1357
  },
1326
1358
  edit: function(arg$){
1327
- var node, quick, idx, ref$, lbox, box, rbox, sx, sy, v;
1359
+ var node, quick, idx, raw, ref$, lbox, box, rbox, sx, sy, v;
1328
1360
  node = arg$.node, quick = arg$.quick;
1329
1361
  if (!this._editing) {
1330
1362
  return;
@@ -1340,11 +1372,17 @@
1340
1372
  })) {
1341
1373
  return;
1342
1374
  }
1375
+ raw = (this._data[idx.row] || [])[idx.col];
1376
+ raw = raw == null
1377
+ ? ''
1378
+ : typeof raw === 'object'
1379
+ ? node.textContent || ''
1380
+ : '' + raw;
1343
1381
  ref$ = this.editing;
1344
1382
  ref$.node = node;
1345
1383
  ref$.quick = quick;
1346
1384
  ref$.on = true;
1347
- this.dom.layout.textContent = node.textContent;
1385
+ this.dom.layout.textContent = raw;
1348
1386
  lbox = this.dom.layout.getBoundingClientRect();
1349
1387
  box = node.getBoundingClientRect();
1350
1388
  rbox = this.dom.sheet.getBoundingClientRect();
@@ -1358,9 +1396,7 @@
1358
1396
  ref$ = this.dom.textarea.style;
1359
1397
  ref$.width = Math.max(lbox.width, box.width + 1) + "px";
1360
1398
  ref$.height = Math.max(lbox.height, box.height + 1) + "px";
1361
- this.dom.textarea.value = v = quick
1362
- ? ''
1363
- : node.textContent || '';
1399
+ this.dom.textarea.value = v = quick ? '' : raw;
1364
1400
  this.dom.textarea.focus();
1365
1401
  return this.dom.textarea.setSelectionRange(v.length, v.length);
1366
1402
  },
@@ -1381,32 +1417,22 @@
1381
1417
  return ref$ = this.editing, ref$.node = null, ref$.on = false, ref$;
1382
1418
  },
1383
1419
  index: function(node){
1384
- var idx, x, y, col, row;
1420
+ var idx, x, c;
1385
1421
  idx = Array.from(this.dom.inner.childNodes).indexOf(node);
1386
1422
  if (idx < 0) {
1387
1423
  return null;
1388
1424
  }
1389
1425
  x = idx % this.dim.col;
1390
- y = (idx - x) / this.dim.col;
1391
- if (x < this.xif.col[1]) {
1392
- col = -1;
1393
- } else if (x < this.xif.col[2]) {
1394
- col = x - this.xif.col[1];
1395
- } else {
1396
- col = x - this.xif.col[1] + this.pos.col;
1397
- }
1398
- if (y < this.xif.row[1]) {
1399
- row = -1;
1400
- } else if (y < this.xif.row[2]) {
1401
- row = y - this.xif.row[1];
1402
- } else {
1403
- row = y - this.xif.row[1] + this.pos.row;
1404
- }
1426
+ c = this._coord(x, (idx - x) / this.dim.col);
1405
1427
  return {
1406
- x: x,
1407
- y: y,
1408
- col: col,
1409
- row: row
1428
+ x: c.x,
1429
+ y: c.y,
1430
+ col: c.x < this.xif.col[1]
1431
+ ? -1
1432
+ : c.col,
1433
+ row: c.y < this.xif.row[1]
1434
+ ? -1
1435
+ : c.row
1410
1436
  };
1411
1437
  },
1412
1438
  cell: function(opt){
package/index.min.css CHANGED
@@ -1 +1 @@
1
- .sheet{position:relative;width:100%;height:100%;overflow:hidden;overscroll-behavior:contain;outline:0}.sheet .inner{z-index:1;display:grid;width:100%;height:100%;overflow:hidden}.sheet .cell{position:relative;user-select:none;border-width:0 1px 1px 0;border-style:solid;border-color:#ddd;padding:1px 3px;min-width:48px;min-height:29px;line-height:26px;box-sizing:border-box;white-space:pre;overflow:hidden}.sheet .cell.idx{z-index:100;background:#f1f2f3;color:#919293;font-size:.85em;text-align:center;user-select:none}.sheet .cell.fixed,.sheet .cell.fixed.frozen{z-index:13}.sheet .cell.fixed{background:#fafbfc;white-space:initial;padding:0}.sheet .cell.frozen{z-index:12;background:#fdfeff}.sheet .cell.fixed.frozen{padding:1px 3px}.sheet .range,.sheet .range-cut{z-index:14;border:1px solid #27f;user-select:none;pointer-events:none;opacity:0;display:none;top:0;left:0;position:absolute}.sheet .range-cut{border-style:dashed}.sheet .caret{z-index:15;border:2px solid #27f;user-select:none;pointer-events:none;opacity:0;display:none;top:0;left:0;position:absolute}.sheet .edit{z-index:121;border:2px solid #27f;pointer-events:none;opacity:0;width:0;height:0;top:0;left:0;position:absolute}.sheet .edit textarea{display:block;border:0;outline:0}.sheet .layout{display:inline-block;top:0;left:0;position:absolute;z-index:0;opacity:0;pointer-events:none;user-select:none;white-space:pre}.sheet .show{opacity:1 !important;display:block}.sheet .edit.show{pointer-events:auto;width:initial;height:initial;opacity:initial}.sheet .scroll-y,.sheet .scroll-x{position:absolute;z-index:130;background:rgba(0,0,0,0.04)}.sheet .scroll-y.idle,.sheet .scroll-x.idle{opacity:0;pointer-events:none}.sheet .scroll-y .thumb,.sheet .scroll-x .thumb{position:absolute;top:0;left:0;border-radius:4px;background:rgba(0,0,0,0.32);transition:background .1s ease}.sheet .scroll-y:hover .thumb,.sheet .scroll-x:hover .thumb,.sheet .scroll-y.active .thumb,.sheet .scroll-x.active .thumb{background:rgba(0,0,0,0.52)}.sheet .scroll-y{top:0;right:0;bottom:10px;width:10px;cursor:default}.sheet .scroll-y .thumb{width:100%}.sheet .scroll-x{left:0;right:10px;bottom:0;height:10px;cursor:default}.sheet .scroll-x .thumb{height:100%}.sheet.has-scrollbar .slide-y{right:12px}.sheet.has-scrollbar .slide-x{bottom:12px}.sheet .slide-y,.sheet .slide-x{display:flex;align-items:center;justify-content:space-between;position:absolute;z-index:1;background:#fff;color:rgba(0,0,0,0.5);padding:.25em;border:1px solid #bbb;border-radius:.25em}.sheet .slide-y:before,.sheet .slide-x:before,.sheet .slide-y:after,.sheet .slide-x:after{display:block;line-height:1em}.sheet .slide-y{flex-direction:column;width:1em;height:3em;right:0;transform:translate(0,-50%);bottom:50%;cursor:ns-resize}.sheet .slide-y:before{content:"↑"}.sheet .slide-y:after{content:"↓"}.sheet .slide-x{width:3em;height:1em;bottom:0;left:50%;transform:translate(-50%,0);cursor:ew-resize}.sheet .slide-x:before{content:"←"}.sheet .slide-x:after{content:"→"}
1
+ .sheet{position:relative;width:100%;height:100%;overflow:hidden;overscroll-behavior:contain;outline:0}.sheet.no-scrolling{overscroll-behavior-y:auto}.sheet .inner{z-index:1;display:grid;width:100%;height:100%;overflow:hidden}.sheet .cell{position:relative;user-select:none;border-width:0 1px 1px 0;border-style:solid;border-color:#ddd;padding:1px 3px;min-width:48px;min-height:29px;line-height:26px;box-sizing:border-box;white-space:pre;overflow:hidden}.sheet .cell.idx{z-index:100;background:#f1f2f3;color:#919293;font-size:.85em;text-align:center;user-select:none}.sheet .cell.fixed,.sheet .cell.fixed.frozen{z-index:13}.sheet .cell.fixed{background:#fafbfc;white-space:initial;padding:0}.sheet .cell.frozen{z-index:12;background:#fdfeff}.sheet .cell.fixed.frozen{padding:1px 3px}.sheet .range,.sheet .range-cut{z-index:14;border:1px solid #27f;user-select:none;pointer-events:none;opacity:0;display:none;top:0;left:0;position:absolute}.sheet .range-cut{border-style:dashed}.sheet .caret{z-index:15;border:2px solid #27f;user-select:none;pointer-events:none;opacity:0;display:none;top:0;left:0;position:absolute}.sheet .edit{z-index:121;border:2px solid #27f;pointer-events:none;opacity:0;width:0;height:0;top:0;left:0;position:absolute}.sheet .edit textarea{display:block;border:0;outline:0}.sheet .layout{display:inline-block;top:0;left:0;position:absolute;z-index:0;opacity:0;pointer-events:none;user-select:none;white-space:pre}.sheet .show{opacity:1 !important;display:block}.sheet .edit.show{pointer-events:auto;width:initial;height:initial;opacity:initial}.sheet .scroll-y,.sheet .scroll-x{position:absolute;z-index:130;background:rgba(0,0,0,0.04)}.sheet .scroll-y.idle,.sheet .scroll-x.idle{opacity:0;pointer-events:none}.sheet .scroll-y .thumb,.sheet .scroll-x .thumb{position:absolute;top:0;left:0;border-radius:4px;background:rgba(0,0,0,0.32);transition:background .1s ease}.sheet .scroll-y:hover .thumb,.sheet .scroll-x:hover .thumb,.sheet .scroll-y.active .thumb,.sheet .scroll-x.active .thumb{background:rgba(0,0,0,0.52)}.sheet .scroll-y{top:0;right:0;bottom:10px;width:10px;cursor:default}.sheet .scroll-y .thumb{width:100%}.sheet .scroll-x{left:0;right:10px;bottom:0;height:10px;cursor:default}.sheet .scroll-x .thumb{height:100%}.sheet.has-scrollbar .slide-y{right:12px}.sheet.has-scrollbar .slide-x{bottom:12px}.sheet .slide-y,.sheet .slide-x{display:flex;align-items:center;justify-content:space-between;position:absolute;z-index:1;background:#fff;color:rgba(0,0,0,0.5);padding:.25em;border:1px solid #bbb;border-radius:.25em}.sheet .slide-y:before,.sheet .slide-x:before,.sheet .slide-y:after,.sheet .slide-x:after{display:block;line-height:1em}.sheet .slide-y{flex-direction:column;width:1em;height:3em;right:0;transform:translate(0,-50%);bottom:50%;cursor:ns-resize}.sheet .slide-y:before{content:"↑"}.sheet .slide-y:after{content:"↓"}.sheet .slide-x{width:3em;height:1em;bottom:0;left:50%;transform:translate(-50%,0);cursor:ew-resize}.sheet .slide-x:before{content:"←"}.sheet .slide-x:after{content:"→"}
package/index.min.js CHANGED
@@ -1 +1 @@
1
- !function(){var f,m,h,c;function o(t,e){var i,o={}.hasOwnProperty;for(i in e)o.call(e,i)&&(t[i]=e[i]);return t}f=function(t){return"undefined"!=typeof Papa&&null!==Papa?Papa.parse(t).data:[[t]]},m=function(t,e,i){for(var o=t;t&&t!==i;)t=t.parentNode;if(t!==i)return null;if(!e)return t;for(t=o;t&&t!==i&&(!t.matches||t.matches&&!t.matches(e));)t=t.parentNode;return t!==i||i.matches&&i.matches(e)?t:null},h=function(t){for(var e=Math.floor(Math.log(25*(t+1)+1)/Math.log(26))-1,i=t-((Math.pow(26,1+e)-1)/25-1),o="",s=0;s<=e;++s)o="ABCDEFGHIJKLMNOPQRSTUVWXYZ".charAt(i%26)+o,i=(i-i%26)/26;return o},(c=function(t){var e,i=this;return this.opt=t=null==t?{}:t,this.root="string"==typeof t.root?document.querySelector(t.root):t.root,this.evtHandler={},this._ccfg="function"==typeof t.cellcfg?t.cellcfg:null,this._data=t.data||[],this._size={row:(e=o({row:[],col:[]},t.size)).row,col:e.col},this.cls={row:(e=o({row:[],col:[]},t.class)).row,col:e.col},this._editing=null==t.editing||!!t.editing,this.dim={col:(t.dim||(t.dim={})).col||30,row:(t.dim||(t.dim={})).row||30},this.frozen={col:(e=o({col:0,row:0},t.frozen||{})).col,row:e.row},this.idx={col:(e=o({row:!0,col:!0},t.idx||{})).col,row:e.row},this.fixed={col:(e=o({col:0,row:0},t.fixed||{})).col,row:e.row},this.xif={row:[this.idx.row?1:0,0,0],col:[this.idx.col?1:0,0,0]},["row","col"].map(function(t){return i.xif[t][1]=i.xif[t][0]+i.fixed[t],i.xif[t][2]=i.xif[t][1]+i.frozen[t]}),this.fix={row:this.xif.row[2],col:this.xif.col[2]},this.pos={col:0,row:0},this.scrollPos={x:0,y:0},this.sel={cut:{}},this.les={},this.editing={},this.dom=Object.fromEntries(["sheet","inner","caret","range","edit","layout","range-cut","slide-y","slide-x","scroll-y","scroll-x"].map(function(t){var e;e=document.createElement("div");return e.classList.add(t),[t,e]})),this.dom.sheet.setAttribute("tabindex",-1),this.dom.textarea=document.createElement("textarea"),this.root.appendChild(this.dom.sheet),["inner","caret","range","edit","layout","range-cut","slide-y","slide-x","scroll-y","scroll-x"].map(function(t){return i.dom.sheet.appendChild(i.dom[t])}),this.opt.slider||(this.dom["slide-x"].style.display=this.dom["slide-y"].style.display="none"),this.scrollbar=!!this.opt.scrollbar,["x","y"].map(function(t){var e;e=document.createElement("div");if(e.classList.add("thumb"),i.dom["scroll-"+t].appendChild(e),i.dom["thumb-"+t]=e,!i.scrollbar)return i.dom["scroll-"+t].style.display="none"}),this.scrollbar&&this.dom.sheet.classList.add("has-scrollbar"),this.dom.edit.appendChild(this.dom.textarea),this._init(),this}).prototype=o(Object.create(Object.prototype),{on:function(t,e){var i;return((i=this.evtHandler)[t]||(i[t]=[])).push(e)},fire:function(t){for(var e,i,o,s,r=[],n=[],l=1,h=arguments.length;l<h;++l)n.push(arguments[l]);for(e=n,l=0,o=(i=this.evtHandler[t]||[]).length;l<o;++l)s=i[l],r.push(s.apply(this,e));return r},_init:function(){for(var t,e,i,o,d,s,a,r,n,l,u=this,h=0,c=this.dim.row;h<c;++h)for(t=h,e=0,i=this.dim.col;e<i;++e)o=e,this.addCell(o,t);return this.regrid(),this.dom.textarea.addEventListener("mousedown",function(t){return t.stopPropagation()}),this.dom.sheet.addEventListener("contextmenu",function(t){if(u.fire("menu.on",{evt:t,node:t.target}),!u._menuOff)return u._menuOff=function(t){if("keydown"!==t.type||27===t.keyCode)return document.body.removeEventListener("click",u._menuOff),document.body.removeEventListener("keydown",u._menuOff),u._menuOff=null,u.fire("menu.off",{evt:t,node:t.target})},document.body.addEventListener("click",u._menuOff),document.body.addEventListener("keydown",u._menuOff)}),(d=this.dom.sheet).addEventListener("mousedown",function(t){var e,i,o;if(!(1<t.button)&&(u.dom.textarea.focus(),u.edited(),e=m(t.target,".cell",d))){if(!((o={row:(i=u.index(e)).row,col:i.col}).col<0||o.row<0))return t.shiftKey&&u.les.start?u.les.end=o:(u.les.start=u.les.end=o,u.les.node=e),u.renderSelection();u.les.node=u.cell(u.les.start),t.shiftKey&&u.les.start||(u.les.start={col:0<(i=o.col)?i:0,row:0<(i=o.row)?i:0},u.les.node=u.cell(u.les.start)),u.les.end={col:0<=o.col?o.col:void 0,row:0<=o.row?o.row:void 0},u.renderSelection()}}),d.addEventListener("mousemove",function(t){var e;if(!(u._slider.y.on||u._slider.x.on||u._scrolling)&&!u.editing.on&&t.buttons&&(e=m(t.target,".cell",d)))return e={row:(t=u.index(e)).row,col:t.col},u.les.end={col:0<=e.col?e.col:void 0,row:0<=e.row?e.row:void 0},u.renderSelection()}),d.addEventListener("dblclick",function(t){if(t=m(t.target,".cell",d))return u.edit({node:t,quick:!1})}),s=new DOMParser,a=function(t){return s.parseFromString(t,"text/html")},document.body.addEventListener("paste",function(t){var e,i,o,s,r,n,l,h,c;if(m(document.activeElement,".sheet",d)&&u.les.start&&(s=function(t,e){var i=-1,o=e.length>>>0;for(;++i<o;)if(t===e[i])return 1;return}("text/html",t.clipboardData.types||[])?(s=a(t.clipboardData.getData("text/html")),Array.from(s.querySelectorAll("tr")).map(function(t){return Array.from(t.querySelectorAll("th,td")).map(function(t){return t.textContent})})):(e=t.clipboardData.getData("text"),f(e)),u.set({row:u.les.start.row,col:u.les.start.col,data:s,range:!0,src:"user"}),u.sel.cut)){if(u._toText({sel:u.sel.cut})===e){for(i=(t=u._bound({sel:u.sel.cut})).sc,o=t.ec,s=t.sr,r=t.er,n=s;n<=r;++n)for(l=n,h=i;h<=o;++h)c=h,u.set({row:l,col:c,data:"",src:"user"});navigator.clipboard.writeText("")}return u.sel.cut=null,u.dom["range-cut"].classList.toggle("show",!1)}}),this.dom.textarea.addEventListener("keypress",function(t){var e;return(31!==(e=t.keyCode)&&61!==e&&67!==e&&88!==e||!t.metaKey&&!t.ctrlKey)&&u.les.node&&!u.editing.on&&(u.edit({node:u.les.node,quick:13!==t.keyCode}),13===t.keyCode)?t.preventDefault():void 0}),this.dom.textarea.addEventListener("keydown",function(t){var e,i,o,s,r,n,l,h,c,d,a=t.keyCode;if(86!==t.keyCode||!t.metaKey&&!t.ctrlKey){if(!u.editing.on){if(67===t.keyCode&&(t.metaKey||t.ctrlKey))return u.copy();if(88===t.keyCode&&(t.metaKey||t.ctrlKey))return u.copy({cut:!0})}if(u.eventInScope(t)){if(8===a){if(!u.les.node)return;for(i=(e=u._bound()).sc,o=e.ec,d=e.sr,s=e.er,r=[],n=d;n<=s;++n){for(l=[],h=i;h<=o;++h)l.push("");r.push(l)}c=r,u.set({row:d,col:i,data:c,range:!0,src:"user"}),u.render()}if(189===a&&(t.metaKey||t.ctrlKey)&&u.slice(),187===a&&(t.metaKey||t.ctrlKey)&&u.insert(),d=function(){switch(a){case 37:return{y:0,x:-1};case 38:return{y:-1,x:0};case 39:return{y:0,x:1};case 40:return{y:1,x:0};case 9:return{y:0,x:1};default:return null}}()){if(u.editing.on&&!u.editing.quick)return;u.move((d.select=t.shiftKey,d)),t.stopPropagation(),t.preventDefault(),u.dom.textarea.focus()}if(u.les.node&&!u.editing.on)return 37!==(e=t.keyCode)&&38!==e&&39!==e&&40!==e&&9!==e&&16!==e&&18!==e&&91!==e&&27!==e&&17!==e&&(31!==(e=t.keyCode)&&61!==e&&67!==e&&88!==e||!t.metaKey&&!t.ctrlKey)?(u.edit({node:u.les.node,quick:13!==t.keyCode}),void(13===t.keyCode&&t.preventDefault())):void 0;if(u.editing.on){if(27===t.keyCode)u.edited({cancel:!0});else{if(13!==t.keyCode||t.altKey||t.metaKey)return 13===t.keyCode&&(t.altKey||t.metaKey)?(u.dom.textarea.value+="\n",u.dom.layout.textContent=u.dom.textarea.value+" ",c=u.dom.layout.getBoundingClientRect(),d=u.editing.node.getBoundingClientRect(),(e=u.dom.textarea.style).width=Math.max(c.width,d.width+1)+"px",e.height=Math.max(c.height,d.height+1)+"px",e):void 0;u.move({y:1,x:0})}t.stopPropagation(),t.preventDefault(),u.dom.textarea.focus()}}}}),(r=this)._slider={hc:function(t){var e=t.target.getBoundingClientRect(),e=e[this.t[3]]+e[this.t[4]]/2,t=this.dir*Math.sign(t[this.t[2]]-e);return r[t<0?this.t[1]:this.t[0]](1),r.renderSelection()},hd:function(t){var e=this;return this.on=!0,this.p=t[this.t[2]],document.addEventListener("mouseup",function(t){return e.hu(t)}),document.addEventListener("mousemove",function(t){return e.hm(t)})},hu:function(t){return this.on=!1,document.removeEventListener("mouseup",this.hu),document.removeEventListener("mousemove",this.hm)},hm:function(t){var e;if(this.on)return t=this.p-t[this.t[2]],(e=500<(e=Math.abs(t))?10:300<e?5:150<e?2:100<e?1:.3)<1&&(e=Math.random()<e?1:0),0<(t=Math.sign(t)*this.dir*e)&&r[this.t[1]](t),t<0&&r[this.t[0]](t),r.renderSelection()}},this._slider.y=((n={n:"slide-y",on:!1,p:0,t:["_mu","_md","clientY","y","height"],dir:-1}).hd=(l=this._slider).hd,n.hu=l.hu,n.hm=l.hm,n.hc=l.hc,n),this._slider.x=((l={n:"slide-x",on:!1,p:0,t:["_mr","_ml","clientX","x","width"],dir:1}).hd=(n=this._slider).hd,l.hu=n.hu,l.hm=n.hm,l.hc=n.hc,l),["x","y"].map(function(e){return u.dom[u._slider[e].n].addEventListener("mousedown",function(t){return u._slider[e].hd(t)}),u.dom[u._slider[e].n].addEventListener("click",function(t){return u._slider[e].hc(t)})}),this.scrollbar&&(["x","y"].map(function(n){return u.dom["scroll-"+n].addEventListener("mousedown",function(t){var e,i,o,s,r;return t.preventDefault(),t.stopPropagation(),t.target===u.dom["thumb-"+n]?u._scrollDrag(n,t):(i=(e="y"===n?["row","clientY"]:["col","clientX"])[0],o=e[1],s=u.dom["thumb-"+n].getBoundingClientRect(),r=u._scrollInfo(i),t=t[o]<s["y"===n?"top":"left"]?-1:1,u._scrollTo(i,u.pos[i]+t*(1<(e=r.vis)?e:1),r))})}),null!=window.ResizeObserver)&&(this._ro=new ResizeObserver(function(){return u.renderScrollbar()}),this._ro.observe(this.dom.sheet)),document.addEventListener("wheel",function(t){var e,i,o,s,r=u.eventInScope(t);if(null==u.opt.enableScrolling||u.opt.enableScrolling)return(null==u.opt.scrollLock||u.opt.scrollLock)&&Math.abs(t.deltaX)>Math.abs(t.deltaY)&&(!r&&t.target!==document.body||t.preventDefault()),!!r&&(r=u.scrollPos,e=(s=[t.deltaX,t.deltaY])[0],i=s[1],t.shiftKey&&Math.abs(i)>Math.abs(e)&&(e=(s=[i,0])[0],i=s[1]),e=(s=Math.abs(e)>Math.abs(i)?[e,0]:[0,i])[0],i=s[1],o=(s=[r.x,r.y])[0],s=s[1],r.x+=e/30,r.y+=i/30,e=Math.round(r.x)-Math.round(o),0<(i=Math.round(r.y)-Math.round(s))?u._md(i):i<0?u._mu(i):0<e?u._mr(e):e<0&&u._ml(e),u.renderSelection(),t.preventDefault())},{passive:!1}),this.renderScrollbar()},select:function(t){var e,i;if(!arguments.length)return this.les.start?((e={}).col=this.les.start.col,e.row=this.les.start.row,this.les.end?(null==this.les.end.col?delete e.col:e.colspan=this.les.end.col-e.col+1,null==this.les.end.row?delete e.row:e.rowspan=this.les.end.row-e.row+1):(e.colspan=1,e.rowspan=1),e):null;this.les={},t&&(this.les={start:{col:0,row:0},end:{}},null!=t.row&&(this.les.start.row=t.row,this.les.end.row=t.row+((i=t.rowspan)&&1<i?i:1)-1),null!=t.col)&&(this.les.start.col=t.col,this.les.end.col=t.col+((i=t.colspan)&&1<i?i:1)-1),this.renderSelection()},_bound:function(t){var e,i,o,s,r=(e=[(e=(t=null==t?{}:t).sel||this.les).start,e.end])[1];return(s=e[0])&&r?(i=(e=s.col<r.col||null==r.col?[s.col,r.col]:[r.col,s.col])[0],o=e[1],r=(e=s.row<r.row||null==r.row?[s.row,r.row]:[r.row,s.row])[0],s=e[1],null!=t.defined&&!t.defined||(null==o&&(o=this._dataSize("col")-1),null!=s)||(s=this._dataSize("row")-1),{sc:i,ec:o,sr:r,er:s}):{sc:0,ec:0,sr:0,er:0}},_toText:function(t){var e,i,o,s,r,n,l,h,c,d,t=t.sel;if(!t||!t.start)return"";for(e=[],o=(i=this._bound({sel:t})).sc,s=i.ec,t=i.sr,r=i.er,n=t;n<=r;++n){for(l=n,h=[],c=o;c<=s;++c)d=c,"object"!=typeof(d=null==(d=((i=this._data)[l]||(i[l]=[]))[d])?"":d)&&h.push('"'+(""+d||"").replace(/"/g,'""')+'"');e.push(h.join("\t"))}return e.join("\n")},copy:function(t){var e;if(null==t&&(t={}),this.les.start)return e=this._toText({sel:this.les}),navigator.clipboard.writeText(e),t.cut?(this.sel.cut={start:this.les.start,end:this.les.end},this.renderSelection(this.sel.cut,{cut:!0})):void 0},eventInScope:function(t){return m(t.target,".sheet",this.dom.sheet)===this.dom.sheet},size:function(t){return null==t?this._size:(this._size={row:(t=o({row:[],col:[]},t)).row,col:t.col},this.regrid())},_template:function(o){var e=this;return[0<this.xif[o][1]?"repeat("+this.xif[o][1]+", max-content)":"",function(){for(var t=[],e=0,i=this.frozen[o];e<i;++e)t.push(e);return t}.call(this).map(function(t){return e._size[o][t]||"max-content"}).join(" "),function(){for(var t=[],e=this.xif[o][2],i=this.dim[o];e<i;++e)t.push(e);return t}.call(this).map(function(t){return e._size[o][t+e.pos[o]-e.xif[o][1]]||"max-content"}).join(" ")].filter(function(t){return t}).join(" ")},regrid:function(){return this.dom.inner.style.gridTemplateColumns=this._template("col"),this.dom.inner.style.gridTemplateRows=this._template("row")},_viewport:function(){for(var t,e,i,o=this.dom.sheet.getBoundingClientRect(),s=this.dom.inner,r={row:0,col:0},n=this.xif.row[2],l=this.dim.row;n<l&&(t=n,e=s.childNodes[t*this.dim.col])&&!(e.getBoundingClientRect().top>=o.bottom);++n)r.row++;for(n=this.xif.col[2],l=this.dim.col;n<l&&(i=n,e=s.childNodes[i])&&!(e.getBoundingClientRect().left>=o.right);++n)r.col++;return r},_dataSize:function(t){var e,i,o,s,r,n;if("col"===t){for(i=e=0,s=(o=this._data).length;i<s;++i)(r=o[i])&&r.length>e&&(e=r.length);return e}for(n=this._data.length;0<n&&!(this._data[n-1]||[]).length;)n--;return n},_scrollInfo:function(t){var e=this._viewport()[t],t=this._dataSize(t);return{vis:e,total:t,extent:t+e,max:t}},_scrollTo:function(t,e,i){var o;if(null==i&&(i=this._scrollInfo(t)),(e=0<(o=(o=Math.round(e))<(i=i.max)?o:i)?o:0)!==this.pos[t])return this.goto("row"===t?{row:e}:{col:e})},_scrollMetric:function(t,e){var i="y"===t?"height":"width",t=this.dom["scroll-"+t].getBoundingClientRect()[i];return 0<t&&0<e.extent?{dim:i,len:t,size:i=(e=20<(i=t*(e.vis/e.extent))?i:20)<t?e:t,span:t-i}:null},_scrollDrag:function(e,t){var i,o,s,r,n,l=this,h="y"===e?["row","clientY"]:["col","clientX"],c=h[0],d=h[1],a=this._scrollInfo(c);if((i=this._scrollMetric(e,a))&&!(i.span<=0||a.max<=0))return h=[t[d],(h=this.pos[c])<(t=a.max)?h:t],o=h[0],s=h[1],r=function(t){return l._scrollTo(c,s+(t[d]-o)/i.span*a.max,a)},n=function(t){return l._scrolling=!1,l.dom["scroll-"+e].classList.remove("active"),document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",n)},this._scrolling=!0,this.dom["scroll-"+e].classList.add("active"),document.addEventListener("mousemove",r),document.addEventListener("mouseup",n)},renderScrollbar:function(){var l=this;if(this.scrollbar)return[["row","y","top"],["col","x","left"]].map(function(t){var e=t[0],i=t[1],t=t[2],o=[l.dom["scroll-"+i],l.dom["thumb-"+i]],s=o[0],r=o[1],n=l._scrollInfo(e);if(i=l._scrollMetric(i,n))return s.classList.toggle("idle",n.max<=0),r.style[i.dim]=i.size+"px",r.style[t]=(n.max<=0?0:i.span*((o=l.pos[e]/n.max)<1?o:1))+"px";s.classList.add("idle")})},addCell:function(t,e){var i=document.createElement("div");return this.dom.inner.insertBefore(i,this.dom.inner.childNodes[e*this.dim.col+t]),this._content({x:t,y:e,n:i})},set:function(t){var e,i,o,s,r,n,l,h,c,d=t.row,a=t.col,u=t.data,f=t.range,m=t.src;if(f)for(e=!1,o=0,s=(u=JSON.parse(JSON.stringify(u))).length;o<s;++o)for(n=0,l=u[r=o].length;n<l;++n)h=n,m&&this._ccfg&&this._ccfg({row:d+r,col:a+h,type:"readonly"})?u[r][h]=((i=this._data)[c=r+d]||(i[c]=[]))[h+a]:(e=!0,((i=this._data)[c=r+d]||(i[c]=[]))[h+a]=u[r][h],this._content({y:r+d-this.pos.row+this.xif.row[1],x:h+a-this.pos.col+this.xif.col[1]}));else{if(m&&this._ccfg&&this._ccfg({row:d,col:a,type:"readonly"}))return;e=!0,((i=this._data)[d]||(i[d]=[]))[a]=u,this._content({y:d-this.pos.row+this.xif.row[1],x:a-this.pos.col+this.xif.col[1]})}if(e)return this.fire("change",{row:d,col:a,data:u,range:!!f})},_content:function(t){var e,i,o,s,r,n=t.x,l=t.y,t=t.n;if(t||(t=this.dom.inner.childNodes[n+l*this.dim.col]))return e=(r=n<this.xif.col[0]&&l<this.xif.col[0]?["","cell idx"]:n<this.xif.col[0]?[l<this.xif.row[1]?" ":l<this.xif.row[2]?l-this.xif.row[1]+1:l-this.xif.row[1]+this.pos.row+1,"cell idx"]:l<this.xif.row[0]?[n<this.xif.col[1]?" ":n<this.xif.col[2]?h(n-this.xif.col[1]):h(n-this.xif.col[1]+this.pos.col),"cell idx"]:n<this.xif.col[1]||l<this.xif.row[1]?[null,"cell fixed"]:n<this.xif.col[2]&&l<this.xif.row[2]?[((r=this._data)[e=l-this.xif.row[1]]||(r[e]=[]))[n-this.xif.col[1]],"cell frozen fixed"]:n<this.xif.col[2]?[((r=this._data)[e=this.pos.row+l-this.xif.row[1]]||(r[e]=[]))[n-this.xif.col[1]],"cell frozen"]:l<this.xif.row[2]?[((r=this._data)[e=l-this.xif.row[1]]||(r[e]=[]))[this.pos.col+n-this.xif.col[1]],"cell frozen"]:[((r=this._data)[e=this.pos.row+l-this.xif.row[1]]||(r[e]=[]))[this.pos.col+n-this.xif.col[1]],"cell"])[0],r=r[1],null==e&&(e=""),i=/frozen/.exec(r),o=n>=this.xif.col[0]&&l>=this.xif.row[0]?(this.cls.col[(i?0:this.pos.col)+n-this.xif.col[1]]||"")+" "+(this.cls.row[(i?0:this.pos.row)+l-this.xif.row[1]]||""):"",s=this._ccfg&&this._ccfg({type:"class",col:(i?0:this.pos.col)+n-this.xif.col[1],row:(i?0:this.pos.row)+l-this.xif.row[1]})||"",t.className=[r,o,s].filter(function(t){return t.trim()}).join(" ").trim(),null!==e?"object"!=typeof e?(!this._ccfg||c._d3warning||isNaN(parseFloat(e))||(r=this._ccfg({type:"format",col:(i?0:this.pos.col)+n-this.xif.col[1],row:(i?0:this.pos.row)+l-this.xif.row[1]}))&&("undefined"!=typeof d3&&null!==d3&&d3.format?e=d3.format(r)(e):(console.warn("[@plotdb/sheet] cell format provided yet d3.format not available. skip formatting."),c._d3warning=!0)),t.textContent=e):"dom"===e.type?(t.textContent="",t.appendChild(e.node)):void 0:void 0},_md:function(t){var e,i,o,s,r,n,l,h,c;for(null==t&&(t=1),e=this.dom.inner,o=i=0<(i=(t=Math.round(Math.abs(t)))-(this.dim.row-this.fix.row))?i:0;o<t;++o)for(s=o,r=0,n=this.dim.col;r<n&&(l=r,h=this.dim.col*this.fix.row,e.childNodes[h]);++r)e.removeChild(e.childNodes[h]);for(o=i;o<t;++o)for(s=o,r=0,n=this.dim.col;r<n;++r)l=r,c=document.createElement("div"),this._content({x:l,y:this.dim.row+s,n:c}),e.appendChild(c);return this.pos.row+=t,this.renderScrollbar()},_mu:function(t){var e,i,o,s,r,n,l,h,c;if(null==t&&(t=1),e=this.dom.inner,!(this.pos.row<=0)){for(s=i=0<(o=(t=(t=Math.round(Math.abs(t)))>=this.pos.row?this.pos.row:t)-(this.dim.row-this.xif.row[2]))?o:0;s<t;++s)for(r=s,n=0,l=this.dim.col;n<l&&(h=n,e.childNodes.length);++n)e.removeChild(e.childNodes[e.childNodes.length-1]);for(this.pos.row-=t,s=i;s<t;++s)for(r=s,n=0,l=this.dim.col;n<l;++n)h=n,c=document.createElement("div"),this._content({x:h,y:r+this.xif.row[2],n:c}),e.insertBefore(c,e.childNodes[h+(r-i)*this.dim.col+this.dim.col*this.xif.row[2]]);return this.renderScrollbar()}},_mr:function(t){var e,i,o,s,r,n,l,h;for(null==t&&(t=1),e=this.dom.inner,o=0<(i=(t=Math.round(Math.abs(t)))-(this.dim.col-this.fix.col))?i:0;o<t;++o)for(s=o,r=0,n=this.dim.row;r<n;++r)l=r,e.removeChild(e.childNodes[l*this.dim.col+this.fix.col]),h=document.createElement("div"),this._content({x:this.dim.col+s,y:l,n:h}),e.insertBefore(h,e.childNodes[(l+1)*this.dim.col-1]);return this.pos.col+=t,this.regrid(),this.renderScrollbar()},_ml:function(t){var e,i,o,s,r,n,l,h,c;if(null==t&&(t=1),e=this.dom.inner,(t=Math.round(Math.abs(t)))>=this.pos.col&&(t=this.pos.col),!(this.pos.col<=0||t<=0)){for(i=0<(o=t-(this.dim.col-this.xif.col[2]))?o:0,this.pos.col-=t,s=i;s<t;++s)for(r=s,n=0,l=this.dim.row;n<l;++n)h=n,e.removeChild(e.childNodes[(h+1)*this.dim.col-1]),c=document.createElement("div"),this._content({x:r+this.xif.col[2],y:h,n:c}),e.insertBefore(c,e.childNodes[h*this.dim.col+this.xif.col[2]+r-i]);return this.regrid(),this.renderScrollbar()}},goto:function(t){return o(this.pos,t=null==t?{row:0,col:0}:t),this.regrid(),this.render()},render:function(){for(var t,e,i,o,s=0,r=this.dim.row;s<r;++s)for(t=s,e=0,i=this.dim.col;e<i;++e)o=e,this._content({x:o,y:t});return this.renderSelection(),this.renderScrollbar()},move:function(t){var e,i,o,s,r;if(null==t&&(t={}),this.editing.on&&this.edited(),(t.node=this.les.node)&&(e=this.cell(t))){if(i=this.index(e),r=e.getBoundingClientRect(),o=this.dom.sheet.getBoundingClientRect(),r.x+r.width>o.x+o.width&&this._mr(1),r.y+r.height>o.y+o.height&&this._md(1),i.x<=this.frozen.col)if(0<this.pos.col)this._ml(1);else if(i.x<=0)return;if(i.y<=this.frozen.row)if(0<this.pos.row)this._mu(1);else if(i.y<=0)return;if((e=this.cell(t))||(e=this.cell({col:i.col,row:i.row})))return this.les.node=e,t.select?(r={col:(s=this.index(e)).col,row:s.row},this.les.end===this.les.start&&(this.les.end=JSON.parse(JSON.stringify(this.les.start))),r.col<this.les.start.col&&(r.col<this.les.end.col||null==this.les.end.col)&&((this.les.start.col>this.les.end.col?this.les.end:this.les.start).col=r.col),r.row<this.les.start.row&&(r.row<this.les.end.row||null==this.les.end.row)&&((this.les.start.row>this.les.end.row?this.les.end:this.les.start).row=r.row),r.col>this.les.start.col&&r.col>this.les.end.col&&((this.les.start.col<this.les.end.col?this.les.end:this.les.start).col=r.col),r.row>this.les.start.row&&r.row>this.les.end.row&&((this.les.start.row<this.les.end.row?this.les.end:this.les.start).row=r.row)):this.les.start=this.les.end={col:(s=this.index(e)).col,row:s.row},this.renderSelection()}},edit:function(t){var e,i,o,s,r,n,l=t.node,t=t.quick;if(this._editing&&!(!(e=this.index(l))||e.col<0||e.row<0||this._ccfg&&this._ccfg({row:e.row,col:e.col,type:"readonly"})))return(e=this.editing).node=l,e.quick=t,e.on=!0,this.dom.layout.textContent=l.textContent,i=this.dom.layout.getBoundingClientRect(),o=l.getBoundingClientRect(),s=this.dom.sheet.getBoundingClientRect(),n=(e=[this.dom.sheet.scrollLeft,this.dom.sheet.scrollTop])[0],r=e[1],(e=this.dom.edit.style).left=o.x-s.x+n-2+"px",e.top=o.y-s.y+r-2+"px",e.width="fit-content",e.height="fit-content",this.dom.edit.classList.toggle("show",!0),(e=this.dom.textarea.style).width=Math.max(i.width,o.width+1)+"px",e.height=Math.max(i.height,o.height+1)+"px",this.dom.textarea.value=n=!t&&l.textContent||"",this.dom.textarea.focus(),this.dom.textarea.setSelectionRange(n.length,n.length)},edited:function(t){if(null==t&&(t={}),this.editing.on)return t.cancel||this.set({row:this.les.start.row,col:this.les.start.col,data:this.dom.textarea.value||""}),this.dom.edit.classList.toggle("show",!1),(t=this.editing).node=null,t.on=!1,t},index:function(t){var e,t=Array.from(this.dom.inner.childNodes).indexOf(t);return t<0?null:{x:e=t%this.dim.col,y:t=(t-e)/this.dim.col,col:e<this.xif.col[1]?-1:e<this.xif.col[2]?e-this.xif.col[1]:e-this.xif.col[1]+this.pos.col,row:t<this.xif.row[1]?-1:t<this.xif.row[2]?t-this.xif.row[1]:t-this.xif.row[1]+this.pos.row}},cell:function(t){var e,i,o=(t=null==t?{}:t).roughly;if(null!=t.col||null!=t.row){if(t.col<this.frozen.col)e=t.col;else if(t.col-this.pos.col<this.frozen.col){if(!o)return null;e=this.frozen.col}else e=t.col-this.pos.col;if(t.row<this.frozen.row)i=t.row;else if(t.row-this.pos.row<this.frozen.row){if(!o)return null;i=this.frozen.row}else i=t.row-this.pos.row;return i=(o=[e+this.xif.col[1],i+this.xif.row[1]])[1],(e=o[0])<0||i<0||e>=this.dim.col||i>=this.dim.row?null:this.dom.inner.childNodes[i*this.dim.col+e]}if(o=t.node?this.index(t.node):{y:0,x:0})return i=o.y+(t.y||0),e=o.x+(t.x||0),this.dom.inner.childNodes[i*this.dim.col+e]},editing:function(t){return null==t?this._editing:this._editing=!!t},renderSelection:function(t,e){var i,o,s,r,n,l,h,c,d,a,u,f,m,w=this;if(null==e&&(e={}),(t=t||this.les).start)return n=(i=this._bound({defined:!1,sel:t})).sc,o=i.ec,h=i.sr,s=i.er,r=this.dom.inner.getBoundingClientRect(),m=(i=[this.cell({col:this.pos.col+this.frozen.col,row:this.pos.row+this.frozen.row}),this.cell({col:n,row:h,roughly:!0}),this.cell({col:n,row:s,roughly:!0}),this.cell({col:o,row:h,roughly:!0}),this.cell({col:o,row:s,roughly:!0}),this.cell({col:this.pos.col+this.dim.col-2,row:this.pos.row+this.dim.row-2})].map(function(t){return t?t.getBoundingClientRect():null}))[0],l=i[1],a=i[2],d=i[3],u=i[4],f=i[5],m.width=0,m.height=0,n=(l||a||(n>this.pos.col?f:m)).x-r.x,l=(l||d||(h>this.pos.row?f:m)).y-r.y,h=o-this.pos.col<0,c=s-this.pos.row<0,d=(d||u||f||m).x+(h?0:(d||u||f||m).width)-r.x-n+1,a=(a||u||f||m).y+(c?0:(a||u||f||m).height)-r.y-l+1,null==o&&(d=this.root.getBoundingClientRect().width),null==s&&(a=this.root.getBoundingClientRect().height),f=(u=this.les.node)?u.getBoundingClientRect():null,(i=(m=e.cut?this.dom["range-cut"]:this.dom.range).style).left=n+"px",i.top=l+"px",i.width=d+"px",i.height=a+"px",m.classList.toggle("show",!0),e.cut||(f&&((i=this.dom.caret.style).left=f.x-r.x-1+"px",i.top=f.y-r.y-1+"px",i.width=(h?0:f.width)+2+"px",i.height=(c?0:f.height)+2+"px",i.zIndex=t.start.row+this.xif.row[1]<this.xif.row[2]&&t.start.col+this.xif.col[1]<this.xif.col[2]?101:t.start.row+this.xif.row[1]<this.xif.row[2]||t.start.col+this.xif.col[1]<this.xif.col[2]?20:15),this.dom.caret.classList.toggle("show",!!f)),this.dom.textarea===document.activeElement?setTimeout(function(){return w.dom.textarea.focus({preventScroll:!0})},0):void 0;this.dom.caret.classList.toggle("show",!1),this.dom.range.classList.toggle("show",!1)},data:function(t){return null==t?this._data:(this._data=t,this.render())},sort:function(i){var o,t,s=this;return null==i&&(i={}),t=this._bound({defined:!1}),o=t.sc,t.ec,t.sr,t.er,(t=this._data.map(function(t,e){return{d:t,i:e}})).sort(function(t,e){return t.i<s.frozen.row&&e.i>=s.frozen.row?-1:e.i<s.frozen.row&&t.i>=s.frozen.row?1:(t=isNaN(+t.d[o])?t.d[o]:+t.d[o],e=isNaN(+e.d[o])?e.d[o]:+e.d[o],("asc"===i.dir?1:-1)*(e<t?1:t<e?-1:0))}),this._data=t.map(function(t){return t.d}),this.fire("change",{row:0,col:0,data:this._data,range:!0}),this.renderSelection(),this.render()},insert:function(){var t,e=this._bound({defined:!1}),i=e.sc,o=e.ec,s=e.sr,e=e.er;null==o&&(t=this._data.splice(s,0,[])),null==e&&(t=this._data.map(function(t){return t.splice(i,0,"")})),this.fire("change",{row:s,col:i,data:t,range:!0}),this.les.end=this.les.start,this.renderSelection(),this.render()},slice:function(){var t,e=this._bound({defined:!1}),i=e.sc,o=e.ec,s=e.sr,e=e.er;null==o&&(t=this._data.splice(s,e-s+1)),null==e&&(t=this._data.map(function(t){return t.splice(i,o-i+1)})),this.fire("change",{row:s,col:i,data:t,range:!0}),this.les.end=this.les.start,this.renderSelection(),this.render()}}),"undefined"!=typeof module&&null!==module?module.exports=c:"undefined"!=typeof window&&null!==window&&(window.sheet=c)}.call(this);
1
+ !function(){var f,m,s,i;function n(t,e){var o,i={}.hasOwnProperty;for(o in e)i.call(e,o)&&(t[o]=e[o]);return t}f=function(t){return"undefined"!=typeof Papa&&null!==Papa?Papa.parse(t).data:[[t]]},m=function(t,e,o){for(var i=t;t&&t!==o;)t=t.parentNode;if(t!==o)return null;if(!e)return t;for(t=i;t&&t!==o&&(!t.matches||t.matches&&!t.matches(e));)t=t.parentNode;return t!==o||o.matches&&o.matches(e)?t:null},s=function(t){for(var e=Math.floor(Math.log(25*(t+1)+1)/Math.log(26))-1,o=t-((Math.pow(26,1+e)-1)/25-1),i="",r=0;r<=e;++r)i="ABCDEFGHIJKLMNOPQRSTUVWXYZ".charAt(o%26)+i,o=(o-o%26)/26;return i},(i=function(t){var e,o=this;return this.opt=t=null==t?{}:t,this.root="string"==typeof t.root?document.querySelector(t.root):t.root,this.evtHandler={},this._ccfg="function"==typeof t.cellcfg?t.cellcfg:null,this._dsp="function"==typeof t.display?t.display:null,this._data=t.data||[],this._size={row:(e=n({row:[],col:[]},t.size)).row,col:e.col},this.cls={row:(e=n({row:[],col:[]},t.class)).row,col:e.col},this._editing=null==t.editing||!!t.editing,this.dim={col:(t.dim||(t.dim={})).col||30,row:(t.dim||(t.dim={})).row||30},this.frozen={col:(e=n({col:0,row:0},t.frozen||{})).col,row:e.row},this.idx={col:(e=n({row:!0,col:!0},t.idx||{})).col,row:e.row},this.fixed={col:(e=n({col:0,row:0},t.fixed||{})).col,row:e.row},this.xif={row:[this.idx.row?1:0,0,0],col:[this.idx.col?1:0,0,0]},["row","col"].map(function(t){return o.xif[t][1]=o.xif[t][0]+o.fixed[t],o.xif[t][2]=o.xif[t][1]+o.frozen[t]}),this.fix={row:this.xif.row[2],col:this.xif.col[2]},this.pos={col:0,row:0},this.scrollPos={x:0,y:0},this.sel={cut:{}},this.les={},this.editing={},this.dom=Object.fromEntries(["sheet","inner","caret","range","edit","layout","range-cut","slide-y","slide-x","scroll-y","scroll-x"].map(function(t){var e;e=document.createElement("div");return e.classList.add(t),[t,e]})),this.dom.sheet.setAttribute("tabindex",-1),this.dom.textarea=document.createElement("textarea"),this.root.appendChild(this.dom.sheet),["inner","caret","range","edit","layout","range-cut","slide-y","slide-x","scroll-y","scroll-x"].map(function(t){return o.dom.sheet.appendChild(o.dom[t])}),this.opt.slider||(this.dom["slide-x"].style.display=this.dom["slide-y"].style.display="none"),this.scrollbar=!!this.opt.scrollbar,this.enableScrolling=null==this.opt.enableScrolling||!!this.opt.enableScrolling,["x","y"].map(function(t){var e;e=document.createElement("div");if(e.classList.add("thumb"),o.dom["scroll-"+t].appendChild(e),o.dom["thumb-"+t]=e,!o.scrollbar)return o.dom["scroll-"+t].style.display="none"}),this.scrollbar&&this.dom.sheet.classList.add("has-scrollbar"),this.enableScrolling||this.dom.sheet.classList.add("no-scrolling"),this.dom.edit.appendChild(this.dom.textarea),this._init(),this}).prototype=n(Object.create(Object.prototype),{on:function(t,e){var o;return((o=this.evtHandler)[t]||(o[t]=[])).push(e)},fire:function(t){for(var e,o,i,r,s=[],n=[],l=1,c=arguments.length;l<c;++l)n.push(arguments[l]);for(e=n,l=0,i=(o=this.evtHandler[t]||[]).length;l<i;++l)r=o[l],s.push(r.apply(this,e));return s},_init:function(){for(var t,e,o,i,h,r,a,s,n,l,u=this,c=0,d=this.dim.row;c<d;++c)for(t=c,e=0,o=this.dim.col;e<o;++e)i=e,this.addCell(i,t);return this.regrid(),this.dom.textarea.addEventListener("mousedown",function(t){return t.stopPropagation()}),this.dom.sheet.addEventListener("contextmenu",function(t){if(u.fire("menu.on",{evt:t,node:t.target}),!u._menuOff)return u._menuOff=function(t){if("keydown"!==t.type||27===t.keyCode)return document.body.removeEventListener("click",u._menuOff),document.body.removeEventListener("keydown",u._menuOff),u._menuOff=null,u.fire("menu.off",{evt:t,node:t.target})},document.body.addEventListener("click",u._menuOff),document.body.addEventListener("keydown",u._menuOff)}),(h=this.dom.sheet).addEventListener("mousedown",function(t){var e,o,i;if(!(1<t.button)&&(u.dom.textarea.focus(),u.edited(),e=m(t.target,".cell",h))){if(!((i={row:(o=u.index(e)).row,col:o.col}).col<0||i.row<0))return t.shiftKey&&u.les.start?u.les.end=i:(u.les.start=u.les.end=i,u.les.node=e),u.renderSelection();u.les.node=u.cell(u.les.start),t.shiftKey&&u.les.start||(u.les.start={col:0<(o=i.col)?o:0,row:0<(o=i.row)?o:0},u.les.node=u.cell(u.les.start)),u.les.end={col:0<=i.col?i.col:void 0,row:0<=i.row?i.row:void 0},u.renderSelection()}}),h.addEventListener("mousemove",function(t){var e;if(!(u._slider.y.on||u._slider.x.on||u._scrolling)&&!u.editing.on&&t.buttons&&(e=m(t.target,".cell",h)))return e={row:(t=u.index(e)).row,col:t.col},u.les.end={col:0<=e.col?e.col:void 0,row:0<=e.row?e.row:void 0},u.renderSelection()}),h.addEventListener("dblclick",function(t){if(t=m(t.target,".cell",h))return u.edit({node:t,quick:!1})}),r=new DOMParser,a=function(t){return r.parseFromString(t,"text/html")},document.body.addEventListener("paste",function(t){var e,o,i,r,s,n,l,c,d;if(m(document.activeElement,".sheet",h)&&u.les.start&&(r=function(t,e){var o=-1,i=e.length>>>0;for(;++o<i;)if(t===e[o])return 1;return}("text/html",t.clipboardData.types||[])?(r=a(t.clipboardData.getData("text/html")),Array.from(r.querySelectorAll("tr")).map(function(t){return Array.from(t.querySelectorAll("th,td")).map(function(t){return t.textContent})})):(e=t.clipboardData.getData("text"),f(e)),u.set({row:u.les.start.row,col:u.les.start.col,data:r,range:!0,src:"user"}),u.sel.cut)){if(u._toText({sel:u.sel.cut})===e){for(o=(t=u._bound({sel:u.sel.cut})).sc,i=t.ec,r=t.sr,s=t.er,n=r;n<=s;++n)for(l=n,c=o;c<=i;++c)d=c,u.set({row:l,col:d,data:"",src:"user"});navigator.clipboard.writeText("")}return u.sel.cut=null,u.dom["range-cut"].classList.toggle("show",!1)}}),this.dom.textarea.addEventListener("keypress",function(t){var e;return(31!==(e=t.keyCode)&&61!==e&&67!==e&&88!==e||!t.metaKey&&!t.ctrlKey)&&u.les.node&&!u.editing.on&&(u.edit({node:u.les.node,quick:13!==t.keyCode}),13===t.keyCode)?t.preventDefault():void 0}),this.dom.textarea.addEventListener("keydown",function(t){var e,o,i,r,s,n,l,c,d,h,a=t.keyCode;if(86!==t.keyCode||!t.metaKey&&!t.ctrlKey){if(!u.editing.on){if(67===t.keyCode&&(t.metaKey||t.ctrlKey))return u.copy();if(88===t.keyCode&&(t.metaKey||t.ctrlKey))return u.copy({cut:!0})}if(u.eventInScope(t)){if(8===a){if(!u.les.node)return;for(o=(e=u._bound()).sc,i=e.ec,h=e.sr,r=e.er,s=[],n=h;n<=r;++n){for(l=[],c=o;c<=i;++c)l.push("");s.push(l)}d=s,u.set({row:h,col:o,data:d,range:!0,src:"user"}),u.render()}if(189===a&&(t.metaKey||t.ctrlKey)&&u.slice(),187===a&&(t.metaKey||t.ctrlKey)&&u.insert(),h=function(){switch(a){case 37:return{y:0,x:-1};case 38:return{y:-1,x:0};case 39:return{y:0,x:1};case 40:return{y:1,x:0};case 9:return{y:0,x:1};default:return null}}()){if(u.editing.on&&!u.editing.quick)return;u.move((h.select=t.shiftKey,h)),t.stopPropagation(),t.preventDefault(),u.dom.textarea.focus()}if(u.les.node&&!u.editing.on)return 37!==(e=t.keyCode)&&38!==e&&39!==e&&40!==e&&9!==e&&16!==e&&18!==e&&91!==e&&27!==e&&17!==e&&(31!==(e=t.keyCode)&&61!==e&&67!==e&&88!==e||!t.metaKey&&!t.ctrlKey)?(u.edit({node:u.les.node,quick:13!==t.keyCode}),void(13===t.keyCode&&t.preventDefault())):void 0;if(u.editing.on){if(27===t.keyCode)u.edited({cancel:!0});else{if(13!==t.keyCode||t.altKey||t.metaKey)return 13===t.keyCode&&(t.altKey||t.metaKey)?(u.dom.textarea.value+="\n",u.dom.layout.textContent=u.dom.textarea.value+" ",d=u.dom.layout.getBoundingClientRect(),h=u.editing.node.getBoundingClientRect(),(e=u.dom.textarea.style).width=Math.max(d.width,h.width+1)+"px",e.height=Math.max(d.height,h.height+1)+"px",e):void 0;u.move({y:1,x:0})}t.stopPropagation(),t.preventDefault(),u.dom.textarea.focus()}}}}),(s=this)._slider={hc:function(t){var e=t.target.getBoundingClientRect(),e=e[this.t[3]]+e[this.t[4]]/2,t=this.dir*Math.sign(t[this.t[2]]-e);return s[t<0?this.t[1]:this.t[0]](1),s.renderSelection()},hd:function(t){var e=this;return this.on=!0,this.p=t[this.t[2]],document.addEventListener("mouseup",function(t){return e.hu(t)}),document.addEventListener("mousemove",function(t){return e.hm(t)})},hu:function(t){return this.on=!1,document.removeEventListener("mouseup",this.hu),document.removeEventListener("mousemove",this.hm)},hm:function(t){var e;if(this.on)return t=this.p-t[this.t[2]],(e=500<(e=Math.abs(t))?10:300<e?5:150<e?2:100<e?1:.3)<1&&(e=Math.random()<e?1:0),0<(t=Math.sign(t)*this.dir*e)&&s[this.t[1]](t),t<0&&s[this.t[0]](t),s.renderSelection()}},this._slider.y=((n={n:"slide-y",on:!1,p:0,t:["_mu","_md","clientY","y","height"],dir:-1}).hd=(l=this._slider).hd,n.hu=l.hu,n.hm=l.hm,n.hc=l.hc,n),this._slider.x=((l={n:"slide-x",on:!1,p:0,t:["_mr","_ml","clientX","x","width"],dir:1}).hd=(n=this._slider).hd,l.hu=n.hu,l.hm=n.hm,l.hc=n.hc,l),["x","y"].map(function(e){return u.dom[u._slider[e].n].addEventListener("mousedown",function(t){return u._slider[e].hd(t)}),u.dom[u._slider[e].n].addEventListener("click",function(t){return u._slider[e].hc(t)})}),this.scrollbar&&(["x","y"].map(function(n){return u.dom["scroll-"+n].addEventListener("mousedown",function(t){var e,o,i,r,s;return t.preventDefault(),t.stopPropagation(),t.target===u.dom["thumb-"+n]?u._scrollDrag(n,t):(o=(e="y"===n?["row","clientY"]:["col","clientX"])[0],i=e[1],r=u.dom["thumb-"+n].getBoundingClientRect(),s=u._scrollInfo(o),t=t[i]<r["y"===n?"top":"left"]?-1:1,u._scrollTo(o,u.pos[o]+t*(1<(e=s.vis)?e:1),s))})}),null!=window.ResizeObserver)&&(this._ro=new ResizeObserver(function(){return u.renderScrollbar()}),this._ro.observe(this.dom.sheet)),document.addEventListener("wheel",function(t){var e,o,i,r,s=u.eventInScope(t);if(u.enableScrolling)return(null==u.opt.scrollLock||u.opt.scrollLock)&&Math.abs(t.deltaX)>Math.abs(t.deltaY)&&(!s&&t.target!==document.body||t.preventDefault()),!!s&&(s=u.scrollPos,e=(r=[t.deltaX,t.deltaY])[0],o=r[1],t.shiftKey&&Math.abs(o)>Math.abs(e)&&(e=(r=[o,0])[0],o=r[1]),e=(r=Math.abs(e)>Math.abs(o)?[e,0]:[0,o])[0],o=r[1],i=(r=[s.x,s.y])[0],r=r[1],s.x+=e/30,s.y+=o/30,e=Math.round(s.x)-Math.round(i),0<(o=Math.round(s.y)-Math.round(r))?u._md(o):o<0?u._mu(o):0<e?u._mr(e):e<0&&u._ml(e),u.renderSelection(),t.preventDefault())},{passive:!1}),this.renderScrollbar()},select:function(t){var e,o;if(!arguments.length)return this.les.start?((e={}).col=this.les.start.col,e.row=this.les.start.row,this.les.end?(null==this.les.end.col?delete e.col:e.colspan=this.les.end.col-e.col+1,null==this.les.end.row?delete e.row:e.rowspan=this.les.end.row-e.row+1):(e.colspan=1,e.rowspan=1),e):null;this.les={},t&&(this.les={start:{col:0,row:0},end:{}},null!=t.row&&(this.les.start.row=t.row,this.les.end.row=t.row+((o=t.rowspan)&&1<o?o:1)-1),null!=t.col)&&(this.les.start.col=t.col,this.les.end.col=t.col+((o=t.colspan)&&1<o?o:1)-1),this.renderSelection()},_bound:function(t){var e,o,i,r,s=(e=[(e=(t=null==t?{}:t).sel||this.les).start,e.end])[1];return(r=e[0])&&s?(o=(e=r.col<s.col||null==s.col?[r.col,s.col]:[s.col,r.col])[0],i=e[1],s=(e=r.row<s.row||null==s.row?[r.row,s.row]:[s.row,r.row])[0],r=e[1],null!=t.defined&&!t.defined||(null==i&&(i=this._dataSize("col")-1),null!=r)||(r=this._dataSize("row")-1),{sc:o,ec:i,sr:s,er:r}):{sc:0,ec:0,sr:0,er:0}},_toText:function(t){var e,o,i,r,s,n,l,c,d,h,t=t.sel;if(!t||!t.start)return"";for(e=[],i=(o=this._bound({sel:t})).sc,r=o.ec,t=o.sr,s=o.er,n=t;n<=s;++n){for(l=n,c=[],d=i;d<=r;++d)h=d,"object"!=typeof(h=null==(h=((o=this._data)[l]||(o[l]=[]))[h])?"":h)&&c.push('"'+(""+h||"").replace(/"/g,'""')+'"');e.push(c.join("\t"))}return e.join("\n")},copy:function(t){var e;if(null==t&&(t={}),this.les.start)return e=this._toText({sel:this.les}),navigator.clipboard.writeText(e),t.cut?(this.sel.cut={start:this.les.start,end:this.les.end},this.renderSelection(this.sel.cut,{cut:!0})):void 0},eventInScope:function(t){return m(t.target,".sheet",this.dom.sheet)===this.dom.sheet},size:function(t){return null==t?this._size:(this._size={row:(t=n({row:[],col:[]},t)).row,col:t.col},this.regrid())},_template:function(i){var e=this;return[0<this.xif[i][1]?"repeat("+this.xif[i][1]+", max-content)":"",function(){for(var t=[],e=0,o=this.frozen[i];e<o;++e)t.push(e);return t}.call(this).map(function(t){return e._size[i][t]||"max-content"}).join(" "),function(){for(var t=[],e=this.xif[i][2],o=this.dim[i];e<o;++e)t.push(e);return t}.call(this).map(function(t){return e._size[i][t+e.pos[i]-e.xif[i][1]]||"max-content"}).join(" ")].filter(function(t){return t}).join(" ")},regrid:function(){return this.dom.inner.style.gridTemplateColumns=this._template("col"),this.dom.inner.style.gridTemplateRows=this._template("row")},_viewport:function(){for(var t,e,o,i=this.dom.sheet.getBoundingClientRect(),r=this.dom.inner,s={row:0,col:0},n=this.xif.row[2],l=this.dim.row;n<l&&(t=n,e=r.childNodes[t*this.dim.col])&&!(e.getBoundingClientRect().top>=i.bottom);++n)s.row++;for(n=this.xif.col[2],l=this.dim.col;n<l&&(o=n,e=r.childNodes[o])&&!(e.getBoundingClientRect().left>=i.right);++n)s.col++;return s},_dataSize:function(t){var e,o,i,r,s,n;if("col"===t){for(o=e=0,r=(i=this._data).length;o<r;++o)(s=i[o])&&s.length>e&&(e=s.length);return e}for(n=this._data.length;0<n&&!(this._data[n-1]||[]).length;)n--;return n},_scrollInfo:function(t){var e=this._viewport()[t],t=this._dataSize(t);return{vis:e,total:t,extent:t+e,max:t}},_scrollTo:function(t,e,o){var i;if(null==o&&(o=this._scrollInfo(t)),(e=0<(i=(i=Math.round(e))<(o=o.max)?i:o)?i:0)!==this.pos[t])return this.goto("row"===t?{row:e}:{col:e})},_scrollMetric:function(t,e){var o="y"===t?"height":"width",t=this.dom["scroll-"+t].getBoundingClientRect()[o];return 0<t&&0<e.extent?{dim:o,len:t,size:o=(e=20<(o=t*(e.vis/e.extent))?o:20)<t?e:t,span:t-o}:null},_scrollDrag:function(e,t){var o,i,r,s,n,l=this,c="y"===e?["row","clientY"]:["col","clientX"],d=c[0],h=c[1],a=this._scrollInfo(d);if((o=this._scrollMetric(e,a))&&!(o.span<=0||a.max<=0))return c=[t[h],(c=this.pos[d])<(t=a.max)?c:t],i=c[0],r=c[1],s=function(t){return l._scrollTo(d,r+(t[h]-i)/o.span*a.max,a)},n=function(t){return l._scrolling=!1,l.dom["scroll-"+e].classList.remove("active"),document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",n)},this._scrolling=!0,this.dom["scroll-"+e].classList.add("active"),document.addEventListener("mousemove",s),document.addEventListener("mouseup",n)},renderScrollbar:function(){var l=this;if(this.scrollbar)return[["row","y","top"],["col","x","left"]].map(function(t){var e=t[0],o=t[1],t=t[2],i=[l.dom["scroll-"+o],l.dom["thumb-"+o]],r=i[0],s=i[1],n=l._scrollInfo(e);if(o=l._scrollMetric(o,n))return r.classList.toggle("idle",n.max<=0),s.style[o.dim]=o.size+"px",s.style[t]=(n.max<=0?0:o.span*((i=l.pos[e]/n.max)<1?i:1))+"px";r.classList.add("idle")})},addCell:function(t,e){var o=document.createElement("div");return this.dom.inner.insertBefore(o,this.dom.inner.childNodes[e*this.dim.col+t]),this._content({x:t,y:e,n:o})},set:function(t){var e,o,i,r,s,n,l,c,d,h=t.row,a=t.col,u=t.data,f=t.range,m=t.src;if(f)for(e=!1,i=0,r=(u=JSON.parse(JSON.stringify(u))).length;i<r;++i)for(n=0,l=u[s=i].length;n<l;++n)c=n,m&&this._ccfg&&this._ccfg({row:h+s,col:a+c,type:"readonly"})?u[s][c]=((o=this._data)[d=s+h]||(o[d]=[]))[c+a]:(e=!0,((o=this._data)[d=s+h]||(o[d]=[]))[c+a]=u[s][c],this._content({y:s+h-this.pos.row+this.xif.row[1],x:c+a-this.pos.col+this.xif.col[1]}));else{if(m&&this._ccfg&&this._ccfg({row:h,col:a,type:"readonly"}))return;e=!0,((o=this._data)[h]||(o[h]=[]))[a]=u,this._content({y:h-this.pos.row+this.xif.row[1],x:a-this.pos.col+this.xif.col[1]})}if(e)return this.fire("change",{row:h,col:a,data:u,range:!!f})},_coord:function(t,e){var o,i=[t<this.xif.col[2],e<this.xif.row[2]],r=i[0],i=i[1],s={x:t,y:e,col:(r?0:this.pos.col)+t-this.xif.col[1],row:(i?0:this.pos.row)+e-this.xif.row[1],frozen:{col:r,row:i}};return t<this.xif.col[0]||e<this.xif.row[0]?(o=t>=this.xif.col[0]?"col":e>=this.xif.row[0]?"row":null,s.type="idx",s.axis=o,s.className="cell idx",s):t<this.xif.col[1]||e<this.xif.row[1]?(s.type="fixed",s.className="cell fixed",s):n(s,{type:"cell",className:r&&i?"cell frozen fixed":r||i?"cell frozen":"cell"})},_format:function(t,e){var o=e.row,e=e.col;if(this._ccfg&&!i._d3warning&&!isNaN(parseFloat(t))&&(o=this._ccfg({type:"format",row:o,col:e}))){if("undefined"!=typeof d3&&null!==d3&&d3.format)return d3.format(o)(t);console.warn("[@plotdb/sheet] cell format provided yet d3.format not available. skip formatting."),i._d3warning=!0}return t},_display:function(t,e){var o=e.row,e=e.col,t=this._dsp?this._dsp({raw:t,row:o,col:e}):t;return this._format(t,{row:o,col:e})},_content:function(t){var e,o,i=t.x,r=t.y,t=t.n;if(t||(t=this.dom.inner.childNodes[i+r*this.dim.col]))return null==(r="idx"===(e=this._coord(i,r)).type?"row"===e.axis?r<this.xif.row[1]?" ":e.row+1:"col"===e.axis?i<this.xif.col[1]?" ":s(e.col):"":"fixed"===e.type?"":this._display(((r=this._data)[i=e.row]||(r[i]=[]))[e.col],e))&&(r=""),i="idx"===e.type?"":(this.cls.col[e.col]||"")+" "+(this.cls.row[e.row]||""),o=(this._ccfg?this._ccfg({type:"class",row:e.row,col:e.col}):"")||"",t.className=[e.className,i,o].filter(function(t){return t.trim()}).join(" ").trim(),"object"!=typeof r?t.textContent=r:"dom"===r.type?(t.textContent="",t.appendChild(r.node)):void 0},_md:function(t){var e,o,i,r,s,n,l,c,d;for(null==t&&(t=1),e=this.dom.inner,i=o=0<(o=(t=Math.round(Math.abs(t)))-(this.dim.row-this.fix.row))?o:0;i<t;++i)for(r=i,s=0,n=this.dim.col;s<n&&(l=s,c=this.dim.col*this.fix.row,e.childNodes[c]);++s)e.removeChild(e.childNodes[c]);for(i=o;i<t;++i)for(r=i,s=0,n=this.dim.col;s<n;++s)l=s,d=document.createElement("div"),this._content({x:l,y:this.dim.row+r,n:d}),e.appendChild(d);return this.pos.row+=t,this.renderScrollbar()},_mu:function(t){var e,o,i,r,s,n,l,c,d;if(null==t&&(t=1),e=this.dom.inner,!(this.pos.row<=0)){for(r=o=0<(i=(t=(t=Math.round(Math.abs(t)))>=this.pos.row?this.pos.row:t)-(this.dim.row-this.xif.row[2]))?i:0;r<t;++r)for(s=r,n=0,l=this.dim.col;n<l&&(c=n,e.childNodes.length);++n)e.removeChild(e.childNodes[e.childNodes.length-1]);for(this.pos.row-=t,r=o;r<t;++r)for(s=r,n=0,l=this.dim.col;n<l;++n)c=n,d=document.createElement("div"),this._content({x:c,y:s+this.xif.row[2],n:d}),e.insertBefore(d,e.childNodes[c+(s-o)*this.dim.col+this.dim.col*this.xif.row[2]]);return this.renderScrollbar()}},_mr:function(t){var e,o,i,r,s,n,l,c;for(null==t&&(t=1),e=this.dom.inner,i=0<(o=(t=Math.round(Math.abs(t)))-(this.dim.col-this.fix.col))?o:0;i<t;++i)for(r=i,s=0,n=this.dim.row;s<n;++s)l=s,e.removeChild(e.childNodes[l*this.dim.col+this.fix.col]),c=document.createElement("div"),this._content({x:this.dim.col+r,y:l,n:c}),e.insertBefore(c,e.childNodes[(l+1)*this.dim.col-1]);return this.pos.col+=t,this.regrid(),this.renderScrollbar()},_ml:function(t){var e,o,i,r,s,n,l,c,d;if(null==t&&(t=1),e=this.dom.inner,(t=Math.round(Math.abs(t)))>=this.pos.col&&(t=this.pos.col),!(this.pos.col<=0||t<=0)){for(o=0<(i=t-(this.dim.col-this.xif.col[2]))?i:0,this.pos.col-=t,r=o;r<t;++r)for(s=r,n=0,l=this.dim.row;n<l;++n)c=n,e.removeChild(e.childNodes[(c+1)*this.dim.col-1]),d=document.createElement("div"),this._content({x:s+this.xif.col[2],y:c,n:d}),e.insertBefore(d,e.childNodes[c*this.dim.col+this.xif.col[2]+s-o]);return this.regrid(),this.renderScrollbar()}},goto:function(t){return n(this.pos,t=null==t?{row:0,col:0}:t),this.regrid(),this.render()},render:function(){for(var t,e,o,i,r=0,s=this.dim.row;r<s;++r)for(t=r,e=0,o=this.dim.col;e<o;++e)i=e,this._content({x:i,y:t});return this.renderSelection(),this.renderScrollbar()},move:function(t){var e,o,i,r,s;if(null==t&&(t={}),this.editing.on&&this.edited(),(t.node=this.les.node)&&(e=this.cell(t))){if(o=this.index(e),s=e.getBoundingClientRect(),i=this.dom.sheet.getBoundingClientRect(),s.x+s.width>i.x+i.width&&this._mr(1),s.y+s.height>i.y+i.height&&this._md(1),o.x<=this.frozen.col)if(0<this.pos.col)this._ml(1);else if(o.x<=0)return;if(o.y<=this.frozen.row)if(0<this.pos.row)this._mu(1);else if(o.y<=0)return;if((e=this.cell(t))||(e=this.cell({col:o.col,row:o.row})))return this.les.node=e,t.select?(s={col:(r=this.index(e)).col,row:r.row},this.les.end===this.les.start&&(this.les.end=JSON.parse(JSON.stringify(this.les.start))),s.col<this.les.start.col&&(s.col<this.les.end.col||null==this.les.end.col)&&((this.les.start.col>this.les.end.col?this.les.end:this.les.start).col=s.col),s.row<this.les.start.row&&(s.row<this.les.end.row||null==this.les.end.row)&&((this.les.start.row>this.les.end.row?this.les.end:this.les.start).row=s.row),s.col>this.les.start.col&&s.col>this.les.end.col&&((this.les.start.col<this.les.end.col?this.les.end:this.les.start).col=s.col),s.row>this.les.start.row&&s.row>this.les.end.row&&((this.les.start.row<this.les.end.row?this.les.end:this.les.start).row=s.row)):this.les.start=this.les.end={col:(r=this.index(e)).col,row:r.row},this.renderSelection()}},edit:function(t){var e,o,i,r,s,n,l=t.node,t=t.quick;if(this._editing&&!(!(e=this.index(l))||e.col<0||e.row<0||this._ccfg&&this._ccfg({row:e.row,col:e.col,type:"readonly"})))return e=null==(e=(this._data[e.row]||[])[e.col])?"":"object"==typeof e?l.textContent||"":""+e,(o=this.editing).node=l,o.quick=t,o.on=!0,this.dom.layout.textContent=e,i=this.dom.layout.getBoundingClientRect(),l=l.getBoundingClientRect(),r=this.dom.sheet.getBoundingClientRect(),n=(o=[this.dom.sheet.scrollLeft,this.dom.sheet.scrollTop])[0],s=o[1],(o=this.dom.edit.style).left=l.x-r.x+n-2+"px",o.top=l.y-r.y+s-2+"px",o.width="fit-content",o.height="fit-content",this.dom.edit.classList.toggle("show",!0),(o=this.dom.textarea.style).width=Math.max(i.width,l.width+1)+"px",o.height=Math.max(i.height,l.height+1)+"px",this.dom.textarea.value=n=t?"":e,this.dom.textarea.focus(),this.dom.textarea.setSelectionRange(n.length,n.length)},edited:function(t){if(null==t&&(t={}),this.editing.on)return t.cancel||this.set({row:this.les.start.row,col:this.les.start.col,data:this.dom.textarea.value||""}),this.dom.edit.classList.toggle("show",!1),(t=this.editing).node=null,t.on=!1,t},index:function(t){var e,t=Array.from(this.dom.inner.childNodes).indexOf(t);return t<0?null:(e=t%this.dim.col,{x:(t=this._coord(e,(t-e)/this.dim.col)).x,y:t.y,col:t.x<this.xif.col[1]?-1:t.col,row:t.y<this.xif.row[1]?-1:t.row})},cell:function(t){var e,o,i=(t=null==t?{}:t).roughly;if(null!=t.col||null!=t.row){if(t.col<this.frozen.col)e=t.col;else if(t.col-this.pos.col<this.frozen.col){if(!i)return null;e=this.frozen.col}else e=t.col-this.pos.col;if(t.row<this.frozen.row)o=t.row;else if(t.row-this.pos.row<this.frozen.row){if(!i)return null;o=this.frozen.row}else o=t.row-this.pos.row;return o=(i=[e+this.xif.col[1],o+this.xif.row[1]])[1],(e=i[0])<0||o<0||e>=this.dim.col||o>=this.dim.row?null:this.dom.inner.childNodes[o*this.dim.col+e]}if(i=t.node?this.index(t.node):{y:0,x:0})return o=i.y+(t.y||0),e=i.x+(t.x||0),this.dom.inner.childNodes[o*this.dim.col+e]},editing:function(t){return null==t?this._editing:this._editing=!!t},renderSelection:function(t,e){var o,i,r,s,n,l,c,d,h,a,u,f,m,w=this;if(null==e&&(e={}),(t=t||this.les).start)return n=(o=this._bound({defined:!1,sel:t})).sc,i=o.ec,c=o.sr,r=o.er,s=this.dom.inner.getBoundingClientRect(),m=(o=[this.cell({col:this.pos.col+this.frozen.col,row:this.pos.row+this.frozen.row}),this.cell({col:n,row:c,roughly:!0}),this.cell({col:n,row:r,roughly:!0}),this.cell({col:i,row:c,roughly:!0}),this.cell({col:i,row:r,roughly:!0}),this.cell({col:this.pos.col+this.dim.col-2,row:this.pos.row+this.dim.row-2})].map(function(t){return t?t.getBoundingClientRect():null}))[0],l=o[1],a=o[2],h=o[3],u=o[4],f=o[5],m.width=0,m.height=0,n=(l||a||(n>this.pos.col?f:m)).x-s.x,l=(l||h||(c>this.pos.row?f:m)).y-s.y,c=i-this.pos.col<0,d=r-this.pos.row<0,h=(h||u||f||m).x+(c?0:(h||u||f||m).width)-s.x-n+1,a=(a||u||f||m).y+(d?0:(a||u||f||m).height)-s.y-l+1,null==i&&(h=this.root.getBoundingClientRect().width),null==r&&(a=this.root.getBoundingClientRect().height),f=(u=this.les.node)?u.getBoundingClientRect():null,(o=(m=e.cut?this.dom["range-cut"]:this.dom.range).style).left=n+"px",o.top=l+"px",o.width=h+"px",o.height=a+"px",m.classList.toggle("show",!0),e.cut||(f&&((o=this.dom.caret.style).left=f.x-s.x-1+"px",o.top=f.y-s.y-1+"px",o.width=(c?0:f.width)+2+"px",o.height=(d?0:f.height)+2+"px",o.zIndex=t.start.row+this.xif.row[1]<this.xif.row[2]&&t.start.col+this.xif.col[1]<this.xif.col[2]?101:t.start.row+this.xif.row[1]<this.xif.row[2]||t.start.col+this.xif.col[1]<this.xif.col[2]?20:15),this.dom.caret.classList.toggle("show",!!f)),this.dom.textarea===document.activeElement?setTimeout(function(){return w.dom.textarea.focus({preventScroll:!0})},0):void 0;this.dom.caret.classList.toggle("show",!1),this.dom.range.classList.toggle("show",!1)},data:function(t){return null==t?this._data:(this._data=t,this.render())},sort:function(o){var i,t,r=this;return null==o&&(o={}),t=this._bound({defined:!1}),i=t.sc,t.ec,t.sr,t.er,(t=this._data.map(function(t,e){return{d:t,i:e}})).sort(function(t,e){return t.i<r.frozen.row&&e.i>=r.frozen.row?-1:e.i<r.frozen.row&&t.i>=r.frozen.row?1:(t=isNaN(+t.d[i])?t.d[i]:+t.d[i],e=isNaN(+e.d[i])?e.d[i]:+e.d[i],("asc"===o.dir?1:-1)*(e<t?1:t<e?-1:0))}),this._data=t.map(function(t){return t.d}),this.fire("change",{row:0,col:0,data:this._data,range:!0}),this.renderSelection(),this.render()},insert:function(){var t,e=this._bound({defined:!1}),o=e.sc,i=e.ec,r=e.sr,e=e.er;null==i&&(t=this._data.splice(r,0,[])),null==e&&(t=this._data.map(function(t){return t.splice(o,0,"")})),this.fire("change",{row:r,col:o,data:t,range:!0}),this.les.end=this.les.start,this.renderSelection(),this.render()},slice:function(){var t,e=this._bound({defined:!1}),o=e.sc,i=e.ec,r=e.sr,e=e.er;null==i&&(t=this._data.splice(r,e-r+1)),null==e&&(t=this._data.map(function(t){return t.splice(o,i-o+1)})),this.fire("change",{row:r,col:o,data:t,range:!0}),this.les.end=this.les.start,this.renderSelection(),this.render()}}),"undefined"!=typeof module&&null!==module?module.exports=i:"undefined"!=typeof window&&null!==window&&(window.sheet=i)}.call(this);
package/package.json CHANGED
@@ -1 +1 @@
1
- {"author":"zbryikt","name":"@plotdb/sheet","license":"MIT","description":"spreadsheet","version":"0.7.4","style":"index.min.css","browser":"index.min.js","main":"index.min.js","homepage":"https://github.com/plotdb/sheet","repository":{"type":"git","url":"git+https://github.com/plotdb/sheet.git"},"engines":{"node":">=10.14.1","npm":">=6.4.1"},"scripts":{"start":"npx server -r web -o true","deploy":"npx deploy web/static"},"devDependencies":{"@loadingio/bootstrap.ext":"^0.0.12","@loadingio/debounce.js":"1.0.1","@loadingio/ldquery":"^3.0.6","@plotdb/csscope":"^5.0.4","@plotdb/datadom":"^0.2.0","@plotdb/guides":"github:plotdb/guides#master","@plotdb/json0":"^0.0.5","@plotdb/rescope":"^5.0.17","@zbryikt/template":"^2.4.3","body-parser":"^1.19.0","bootstrap":"^4.6.1","bootstrap.native":"^3.0.13","d3-format":"^3.1.0","dompurify":"^3.4.10","fedep":"^1.7.6","jsoneditor":"^9.1.1","ldcover":"^3.6.0","ldiconfont":"^0.3.0","ldview":"^1.7.2","livescript":"^1.6.0","papaparse":"^5.4.1","proxise":"^1.0.1","sharedb-wrapper":"^1.0.0","stylus":"^0.55.0","uglify-js":"^3.13.1","uglifycss":"^0.0.29"},"frontendDependencies":{"root":"web/static/assets/lib","modules":["bootstrap","@loadingio/bootstrap.ext","bootstrap.native","@loadingio/ldquery","@loadingio/debounce.js","d3-format","dompurify","ldview","ldcover","jsoneditor","ldiconfont","proxise","papaparse","@plotdb/datadom","@plotdb/csscope","@plotdb/rescope","sharedb-wrapper","@plotdb/json0"]}}
1
+ {"author":"zbryikt","name":"@plotdb/sheet","license":"MIT","description":"spreadsheet","version":"0.7.6","style":"index.min.css","browser":"index.min.js","main":"index.min.js","homepage":"https://github.com/plotdb/sheet","repository":{"type":"git","url":"git+https://github.com/plotdb/sheet.git"},"engines":{"node":">=10.14.1","npm":">=6.4.1"},"scripts":{"start":"npx server -r web -o true","deploy":"npx deploy web/static"},"devDependencies":{"@loadingio/bootstrap.ext":"^0.0.12","@loadingio/debounce.js":"1.0.1","@loadingio/ldquery":"^3.0.6","@plotdb/csscope":"^5.0.4","@plotdb/datadom":"^0.2.0","@plotdb/guides":"github:plotdb/guides#master","@plotdb/json0":"^0.0.5","@plotdb/rescope":"^5.0.17","@zbryikt/template":"^2.4.3","body-parser":"^1.19.0","bootstrap":"^4.6.1","bootstrap.native":"^3.0.13","d3-format":"^3.1.0","dompurify":"^3.4.10","fedep":"^1.7.6","jsoneditor":"^9.1.1","ldcover":"^3.6.0","ldiconfont":"^0.3.0","ldview":"^1.7.2","livescript":"^1.6.0","papaparse":"^5.4.1","proxise":"^1.0.1","sharedb-wrapper":"^1.0.0","stylus":"^0.55.0","uglify-js":"^3.13.1","uglifycss":"^0.0.29"},"frontendDependencies":{"root":"web/static/assets/lib","modules":["bootstrap","@loadingio/bootstrap.ext","bootstrap.native","@loadingio/ldquery","@loadingio/debounce.js","d3-format","dompurify","ldview","ldcover","jsoneditor","ldiconfont","proxise","papaparse","@plotdb/datadom","@plotdb/csscope","@plotdb/rescope","sharedb-wrapper","@plotdb/json0"]}}