@dxos/lit-grid 0.6.12-main.f9d0246 → 0.6.12-staging.e11e696
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/dist/lib/browser/index.mjs +65 -15
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/dx-grid.d.ts +8 -0
- package/dist/types/src/dx-grid.d.ts.map +1 -1
- package/dist/types/src/dx-grid.lit-stories.d.ts +10 -0
- package/dist/types/src/dx-grid.lit-stories.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +1 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/dx-grid.lit-stories.ts +32 -0
- package/src/dx-grid.pcss +2 -2
- package/src/dx-grid.ts +71 -18
- package/src/types.ts +3 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { LitElement as LitElement2, html as html2, nothing } from "lit";
|
|
3
3
|
import { customElement as customElement2, state, property as property2, eventOptions } from "lit/decorators.js";
|
|
4
4
|
import { ref as ref2, createRef } from "lit/directives/ref.js";
|
|
5
|
+
import { styleMap } from "lit/directives/style-map.js";
|
|
5
6
|
|
|
6
7
|
// packages/ui/lit-grid/src/dx-grid-axis-resize-handle.ts
|
|
7
8
|
import { draggable } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
@@ -148,7 +149,7 @@ function _ts_decorate2(decorators, target, key, desc) {
|
|
|
148
149
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
149
150
|
}
|
|
150
151
|
var gap = 1;
|
|
151
|
-
var resizeTolerance =
|
|
152
|
+
var resizeTolerance = 1;
|
|
152
153
|
var overscanCol = 1;
|
|
153
154
|
var overscanRow = 1;
|
|
154
155
|
var sizeColMin = 32;
|
|
@@ -205,6 +206,8 @@ var DxGrid = class extends LitElement2 {
|
|
|
205
206
|
this.columns = {};
|
|
206
207
|
this.initialCells = {};
|
|
207
208
|
this.mode = "browse";
|
|
209
|
+
this.limitColumns = Infinity;
|
|
210
|
+
this.limitRows = Infinity;
|
|
208
211
|
/**
|
|
209
212
|
* When this function is defined, it is used first to try to get a value for a cell, and otherwise will fall back
|
|
210
213
|
* to `cells`.
|
|
@@ -265,6 +268,11 @@ var DxGrid = class extends LitElement2 {
|
|
|
265
268
|
col: 0,
|
|
266
269
|
row: 0
|
|
267
270
|
};
|
|
271
|
+
//
|
|
272
|
+
// Limits
|
|
273
|
+
//
|
|
274
|
+
this.intrinsicInlineSize = Infinity;
|
|
275
|
+
this.intrinsicBlockSize = Infinity;
|
|
268
276
|
this.handlePointerDown = (event) => {
|
|
269
277
|
if (event.isPrimary) {
|
|
270
278
|
const { action, actionEl } = closestAction(event.target);
|
|
@@ -332,6 +340,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
332
340
|
this.sizeInline = inlineSize;
|
|
333
341
|
this.sizeBlock = blockSize;
|
|
334
342
|
this.updateVis();
|
|
343
|
+
queueMicrotask(() => this.updatePos());
|
|
335
344
|
}
|
|
336
345
|
});
|
|
337
346
|
this.viewportRef = createRef();
|
|
@@ -343,13 +352,13 @@ var DxGrid = class extends LitElement2 {
|
|
|
343
352
|
};
|
|
344
353
|
this.handleWheel = ({ deltaX, deltaY }) => {
|
|
345
354
|
if (this.mode === "browse") {
|
|
346
|
-
this.posInline
|
|
347
|
-
this.posBlock = Math.max(0, this.posBlock + deltaY);
|
|
348
|
-
this.maybeUpdateVis();
|
|
355
|
+
this.updatePos(this.posInline + deltaX, this.posBlock + deltaY);
|
|
349
356
|
}
|
|
350
357
|
};
|
|
351
358
|
this.addEventListener("dx-axis-resize-internal", this.handleAxisResizeInternal);
|
|
352
|
-
this.addEventListener("wheel", this.handleWheel
|
|
359
|
+
this.addEventListener("wheel", this.handleWheel, {
|
|
360
|
+
passive: true
|
|
361
|
+
});
|
|
353
362
|
this.addEventListener("pointerdown", this.handlePointerDown);
|
|
354
363
|
this.addEventListener("pointermove", this.handlePointerMove);
|
|
355
364
|
this.addEventListener("pointerup", this.handlePointerUp);
|
|
@@ -379,7 +388,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
379
388
|
case "ArrowDown":
|
|
380
389
|
this.focusedCell = {
|
|
381
390
|
...this.focusedCell,
|
|
382
|
-
row: this.focusedCell.row + 1
|
|
391
|
+
row: Math.min(this.limitRows - 1, this.focusedCell.row + 1)
|
|
383
392
|
};
|
|
384
393
|
break;
|
|
385
394
|
case "ArrowUp":
|
|
@@ -391,7 +400,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
391
400
|
case "ArrowRight":
|
|
392
401
|
this.focusedCell = {
|
|
393
402
|
...this.focusedCell,
|
|
394
|
-
col: this.focusedCell.col + 1
|
|
403
|
+
col: Math.min(this.limitColumns - 1, this.focusedCell.col + 1)
|
|
395
404
|
};
|
|
396
405
|
break;
|
|
397
406
|
case "ArrowLeft":
|
|
@@ -459,6 +468,11 @@ var DxGrid = class extends LitElement2 {
|
|
|
459
468
|
...cellSize
|
|
460
469
|
};
|
|
461
470
|
}
|
|
471
|
+
updatePos(inline, block) {
|
|
472
|
+
this.posInline = Math.max(0, Math.min(this.intrinsicInlineSize - this.sizeInline, inline ?? this.posInline));
|
|
473
|
+
this.posBlock = Math.max(0, Math.min(this.intrinsicBlockSize - this.sizeBlock, block ?? this.posBlock));
|
|
474
|
+
this.maybeUpdateVis();
|
|
475
|
+
}
|
|
462
476
|
updateVisInline() {
|
|
463
477
|
let colIndex = 0;
|
|
464
478
|
let pxInline = this.colSize(colIndex);
|
|
@@ -479,7 +493,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
479
493
|
colIndex += 1;
|
|
480
494
|
pxInline += this.colSize(colIndex) + gap;
|
|
481
495
|
}
|
|
482
|
-
this.visColMax = colIndex + overscanCol;
|
|
496
|
+
this.visColMax = Math.min(this.limitColumns, colIndex + overscanCol);
|
|
483
497
|
this.templateColumns = [
|
|
484
498
|
...Array(this.visColMax - this.visColMin)
|
|
485
499
|
].map((_, c0) => `${this.colSize(this.visColMin + c0)}px`).join(" ");
|
|
@@ -504,7 +518,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
504
518
|
rowIndex += 1;
|
|
505
519
|
pxBlock += this.rowSize(rowIndex) + gap;
|
|
506
520
|
}
|
|
507
|
-
this.visRowMax = rowIndex + overscanRow;
|
|
521
|
+
this.visRowMax = Math.min(this.limitRows, rowIndex + overscanRow);
|
|
508
522
|
this.templateRows = [
|
|
509
523
|
...Array(this.visRowMax - this.visRowMin)
|
|
510
524
|
].map((_, r0) => `${this.rowSize(this.visRowMin + r0)}px`).join(" ");
|
|
@@ -561,7 +575,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
561
575
|
} else if (this.focusedCell.col > this.visColMin + overscanCol && this.focusedCell.col < this.visColMax - overscanCol - 1 && this.focusedCell.row > this.visRowMin + overscanRow && this.focusedCell.row < this.visRowMax - overscanRow - 1) {
|
|
562
576
|
} else {
|
|
563
577
|
if (this.focusedCell.col <= this.visColMin + overscanCol) {
|
|
564
|
-
this.posInline = this.binInlineMin;
|
|
578
|
+
this.posInline = this.binInlineMin + gap;
|
|
565
579
|
this.updateVisInline();
|
|
566
580
|
} else if (this.focusedCell.col >= this.visColMax - overscanCol - 1) {
|
|
567
581
|
const sizeSumCol = [
|
|
@@ -570,11 +584,11 @@ var DxGrid = class extends LitElement2 {
|
|
|
570
584
|
acc += this.colSize(this.visColMin + overscanCol + c0) + gap;
|
|
571
585
|
return acc;
|
|
572
586
|
}, 0);
|
|
573
|
-
this.posInline = Math.max(0, this.binInlineMin + sizeSumCol + gap * 2 - this.sizeInline);
|
|
587
|
+
this.posInline = Math.max(0, Math.min(this.intrinsicInlineSize - this.sizeInline, this.binInlineMin + sizeSumCol + gap * 2 - this.sizeInline));
|
|
574
588
|
this.updateVisInline();
|
|
575
589
|
}
|
|
576
590
|
if (this.focusedCell.row <= this.visRowMin + overscanRow) {
|
|
577
|
-
this.posBlock = this.binBlockMin;
|
|
591
|
+
this.posBlock = this.binBlockMin + gap;
|
|
578
592
|
this.updateVisBlock();
|
|
579
593
|
} else if (this.focusedCell.row >= this.visRowMax - overscanRow - 1) {
|
|
580
594
|
const sizeSumRow = [
|
|
@@ -583,7 +597,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
583
597
|
acc += this.rowSize(this.visRowMin + overscanRow + r0) + gap;
|
|
584
598
|
return acc;
|
|
585
599
|
}, 0);
|
|
586
|
-
this.posBlock = Math.max(0, this.binBlockMin + sizeSumRow + gap * 2 - this.sizeBlock);
|
|
600
|
+
this.posBlock = Math.max(0, Math.min(this.intrinsicBlockSize - this.sizeBlock, this.binBlockMin + sizeSumRow + gap * 2 - this.sizeBlock));
|
|
587
601
|
this.updateVisBlock();
|
|
588
602
|
}
|
|
589
603
|
}
|
|
@@ -618,6 +632,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
618
632
|
[index]: nextSize
|
|
619
633
|
};
|
|
620
634
|
this.updateVisInline();
|
|
635
|
+
this.updateIntrinsicInlineSize();
|
|
621
636
|
} else {
|
|
622
637
|
const nextSize = Math.max(sizeRowMin, Math.min(sizeRowMax, size + delta));
|
|
623
638
|
this.rowSizes = {
|
|
@@ -625,6 +640,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
625
640
|
[index]: nextSize
|
|
626
641
|
};
|
|
627
642
|
this.updateVisBlock();
|
|
643
|
+
this.updateIntrinsicBlockSize();
|
|
628
644
|
}
|
|
629
645
|
if (type === "dropped") {
|
|
630
646
|
this.dispatchEvent(new DxAxisResize({
|
|
@@ -650,6 +666,10 @@ var DxGrid = class extends LitElement2 {
|
|
|
650
666
|
return html2`<div
|
|
651
667
|
role="none"
|
|
652
668
|
class="dx-grid"
|
|
669
|
+
style=${styleMap({
|
|
670
|
+
"--dx-viewport-inline-size": Number.isFinite(this.limitColumns) ? `${this.intrinsicInlineSize}px` : "1fr",
|
|
671
|
+
"--dx-viewport-block-size": Number.isFinite(this.limitRows) ? `${this.intrinsicBlockSize}px` : "1fr"
|
|
672
|
+
})}
|
|
653
673
|
data-grid=${this.gridId}
|
|
654
674
|
data-grid-mode=${this.mode}
|
|
655
675
|
?data-grid-select=${selectVisible}
|
|
@@ -675,7 +695,6 @@ var DxGrid = class extends LitElement2 {
|
|
|
675
695
|
axis="col"
|
|
676
696
|
index=${c}
|
|
677
697
|
size=${this.colSize(c)}
|
|
678
|
-
@dxaxisresizeinternal=${this.handleAxisResizeInternal}
|
|
679
698
|
></dx-grid-axis-resize-handle>`}
|
|
680
699
|
</div>`;
|
|
681
700
|
})}
|
|
@@ -703,7 +722,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
703
722
|
})}
|
|
704
723
|
</div>
|
|
705
724
|
</div>
|
|
706
|
-
<div role="grid" class="dx-grid__viewport" tabindex="0"
|
|
725
|
+
<div role="grid" class="dx-grid__viewport" tabindex="0" ${ref2(this.viewportRef)}>
|
|
707
726
|
<div
|
|
708
727
|
role="none"
|
|
709
728
|
class="dx-grid__content"
|
|
@@ -747,6 +766,20 @@ var DxGrid = class extends LitElement2 {
|
|
|
747
766
|
<div role="none" class="dx-grid__corner"></div>
|
|
748
767
|
</div>`;
|
|
749
768
|
}
|
|
769
|
+
updateIntrinsicInlineSize() {
|
|
770
|
+
this.intrinsicInlineSize = Number.isFinite(this.limitColumns) ? [
|
|
771
|
+
...Array(this.limitColumns)
|
|
772
|
+
].reduce((acc, _, c0) => acc + this.colSize(c0), 0) + gap * (this.limitColumns - 1) : Infinity;
|
|
773
|
+
}
|
|
774
|
+
updateIntrinsicBlockSize() {
|
|
775
|
+
this.intrinsicBlockSize = Number.isFinite(this.limitRows) ? [
|
|
776
|
+
...Array(this.limitRows)
|
|
777
|
+
].reduce((acc, _, r0) => acc + this.rowSize(r0), 0) + gap * (this.limitRows - 1) : Infinity;
|
|
778
|
+
}
|
|
779
|
+
updateIntrinsicSizes() {
|
|
780
|
+
this.updateIntrinsicInlineSize();
|
|
781
|
+
this.updateIntrinsicBlockSize();
|
|
782
|
+
}
|
|
750
783
|
firstUpdated() {
|
|
751
784
|
if (this.getCells) {
|
|
752
785
|
this.cells = this.getCells({
|
|
@@ -773,6 +806,7 @@ var DxGrid = class extends LitElement2 {
|
|
|
773
806
|
}
|
|
774
807
|
return acc;
|
|
775
808
|
}, {});
|
|
809
|
+
this.updateIntrinsicSizes();
|
|
776
810
|
}
|
|
777
811
|
willUpdate(changedProperties) {
|
|
778
812
|
if (this.getCells && (changedProperties.has("initialCells") || changedProperties.has("visColMin") || changedProperties.has("visColMax") || changedProperties.has("visRowMin") || changedProperties.has("visRowMax"))) {
|
|
@@ -838,6 +872,16 @@ _ts_decorate2([
|
|
|
838
872
|
type: String
|
|
839
873
|
})
|
|
840
874
|
], DxGrid.prototype, "mode", void 0);
|
|
875
|
+
_ts_decorate2([
|
|
876
|
+
property2({
|
|
877
|
+
type: Number
|
|
878
|
+
})
|
|
879
|
+
], DxGrid.prototype, "limitColumns", void 0);
|
|
880
|
+
_ts_decorate2([
|
|
881
|
+
property2({
|
|
882
|
+
type: Number
|
|
883
|
+
})
|
|
884
|
+
], DxGrid.prototype, "limitRows", void 0);
|
|
841
885
|
_ts_decorate2([
|
|
842
886
|
state()
|
|
843
887
|
], DxGrid.prototype, "cells", void 0);
|
|
@@ -910,6 +954,12 @@ _ts_decorate2([
|
|
|
910
954
|
_ts_decorate2([
|
|
911
955
|
state()
|
|
912
956
|
], DxGrid.prototype, "selectionEnd", void 0);
|
|
957
|
+
_ts_decorate2([
|
|
958
|
+
state()
|
|
959
|
+
], DxGrid.prototype, "intrinsicInlineSize", void 0);
|
|
960
|
+
_ts_decorate2([
|
|
961
|
+
state()
|
|
962
|
+
], DxGrid.prototype, "intrinsicBlockSize", void 0);
|
|
913
963
|
_ts_decorate2([
|
|
914
964
|
state()
|
|
915
965
|
], DxGrid.prototype, "observer", void 0);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/dx-grid.ts", "../../../src/dx-grid-axis-resize-handle.ts", "../../../src/util.ts", "../../../src/types.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { LitElement, html, nothing } from 'lit';\nimport { customElement, state, property, eventOptions } from 'lit/decorators.js';\nimport { ref, createRef, type Ref } from 'lit/directives/ref.js';\n\n// eslint-disable-next-line unused-imports/no-unused-imports\nimport './dx-grid-axis-resize-handle';\nimport {\n type AxisMeta,\n type CellIndex,\n DxAxisResize,\n type DxAxisResizeInternal,\n DxEditRequest,\n type DxGridAxis,\n type DxGridAxisMeta,\n type DxGridCells,\n DxGridCellsSelect,\n type DxGridMode,\n type DxGridPointer,\n type DxGridPosition,\n type DxGridPositionNullable,\n type DxGridRange,\n} from './types';\nimport { separator, toCellIndex } from './util';\n\n/**\n * The size in pixels of the gap between cells\n */\nconst gap = 1;\n\n/**\n * This should be about the width of the `1` numeral so resize is triggered as the row header column’s intrinsic size\n * changes when scrolling vertically.\n */\nconst resizeTolerance = 8;\n\n//\n// `overscan` is the number of columns or rows to render outside of the viewport\n//\nconst overscanCol = 1;\nconst overscanRow = 1;\n\n//\n// `size`, when suffixed with ‘row’ or ‘col’, are limits on size applied when resizing\n//\nconst sizeColMin = 32;\nconst sizeColMax = 1024;\nconst sizeRowMin = 16;\nconst sizeRowMax = 1024;\n\n//\n// A1 notation is the fallback for numbering columns and rows.\n//\n\nconst colToA1Notation = (col: number): string => {\n return (\n (col >= 26 ? String.fromCharCode('A'.charCodeAt(0) + Math.floor(col / 26) - 1) : '') +\n String.fromCharCode('A'.charCodeAt(0) + (col % 26))\n );\n};\n\nconst rowToA1Notation = (row: number): string => {\n return `${row + 1}`;\n};\n\nconst closestAction = (target: EventTarget | null): { action: string | null; actionEl: HTMLElement | null } => {\n const actionEl: HTMLElement | null = (target as HTMLElement | null)?.closest('[data-dx-grid-action]') ?? null;\n return { actionEl, action: actionEl?.getAttribute('data-dx-grid-action') ?? null };\n};\n\nconst closestCell = (target: EventTarget | null, actionEl?: HTMLElement | null): DxGridPositionNullable => {\n let cellElement = actionEl;\n if (!cellElement) {\n const { action, actionEl } = closestAction(target);\n if (action === 'cell') {\n cellElement = actionEl as HTMLElement;\n }\n }\n if (cellElement) {\n const col = parseInt(cellElement.getAttribute('aria-colindex') ?? 'never');\n const row = parseInt(cellElement.getAttribute('aria-rowindex') ?? 'never');\n return { col, row };\n } else {\n return null;\n }\n};\n\nconst isSameCell = (a: DxGridPositionNullable, b: DxGridPositionNullable) =>\n a && b && Number.isFinite(a.col) && Number.isFinite(a.row) && a.col === b.col && a.row === b.row;\n\nconst localChId = (c0: number) => `ch--${c0}`;\nconst localRhId = (r0: number) => `rh--${r0}`;\n\nconst getPage = (axis: string, event: PointerEvent) => (axis === 'col' ? event.pageX : event.pageY);\n\n@customElement('dx-grid')\nexport class DxGrid extends LitElement {\n constructor() {\n super();\n this.addEventListener('dx-axis-resize-internal', this.handleAxisResizeInternal as EventListener);\n this.addEventListener('wheel', this.handleWheel);\n this.addEventListener('pointerdown', this.handlePointerDown);\n this.addEventListener('pointermove', this.handlePointerMove);\n this.addEventListener('pointerup', this.handlePointerUp);\n this.addEventListener('pointerleave', this.handlePointerUp);\n this.addEventListener('focus', this.handleFocus, { capture: true });\n this.addEventListener('blur', this.handleBlur, { capture: true });\n this.addEventListener('keydown', this.handleKeydown);\n }\n\n @property({ type: String })\n gridId: string = 'default-grid-id';\n\n @property({ type: Object })\n rowDefault: AxisMeta = { size: 32 };\n\n @property({ type: Object })\n columnDefault: AxisMeta = { size: 180 };\n\n @property({ type: Object })\n rows: DxGridAxisMeta = {};\n\n @property({ type: Object })\n columns: DxGridAxisMeta = {};\n\n @property({ type: Object })\n initialCells: DxGridCells = {};\n\n @property({ type: String })\n mode: DxGridMode = 'browse';\n\n /**\n * When this function is defined, it is used first to try to get a value for a cell, and otherwise will fall back\n * to `cells`.\n */\n getCells: ((nextRange: DxGridRange) => DxGridCells) | null = null;\n\n @state()\n private cells: DxGridCells = {};\n\n //\n // `pos`, short for ‘position’, is the position in pixels of the viewport from the origin.\n //\n\n @state()\n private posInline = 0;\n\n @state()\n private posBlock = 0;\n\n //\n // `size` (when not suffixed with ‘row’ or ‘col’, see above) is the size in pixels of the viewport.\n //\n\n @state()\n private sizeInline = 0;\n\n @state()\n private sizeBlock = 0;\n\n //\n // `overscan` is the amount in pixels to offset the grid content due to the number of overscanned columns or rows.\n //\n\n @state()\n private overscanInline = 0;\n\n @state()\n private overscanBlock = 0;\n\n //\n // `bin`, not short for anything, is the range in pixels within which virtualization does not need to reassess.\n //\n\n @state()\n private binInlineMin = 0;\n\n @state()\n private binInlineMax = this.colSize(0);\n\n @state()\n private binBlockMin = 0;\n\n @state()\n private binBlockMax = this.rowSize(0);\n\n //\n // `vis`, short for ‘visible’, is the range in numeric index of the columns or rows which should be rendered within\n // the viewport. These start with naïve values that are updated before first contentful render.\n //\n\n @state()\n private visColMin = 0;\n\n @state()\n private visColMax = 1;\n\n @state()\n private visRowMin = 0;\n\n @state()\n private visRowMax = 1;\n\n //\n // `template` is the rendered value of `grid-{axis}-template`.\n //\n @state()\n private templateColumns = `${this.colSize(0)}px`;\n\n @state()\n private templateRows = `${this.rowSize(0)}px`;\n\n //\n // Focus, selection, and resize states\n //\n\n @state()\n private pointer: DxGridPointer = null;\n\n @state()\n private colSizes: Record<string, number> = {};\n\n @state()\n private rowSizes: Record<string, number> = {};\n\n @state()\n private focusActive: boolean = false;\n\n @state()\n private focusedCell: DxGridPosition = { col: 0, row: 0 };\n\n @state()\n private selectionStart: DxGridPosition = { col: 0, row: 0 };\n\n @state()\n private selectionEnd: DxGridPosition = { col: 0, row: 0 };\n\n //\n // Primary pointer and keyboard handlers\n //\n\n private dispatchEditRequest(initialContent?: string) {\n this.snapPosToFocusedCell();\n // Without deferring, the event dispatches before `focusedCellBox` can get updated bounds of the cell, hence:\n queueMicrotask(() =>\n this.dispatchEvent(\n new DxEditRequest({\n cellIndex: toCellIndex(this.focusedCell),\n cellBox: this.focusedCellBox(),\n initialContent,\n }),\n ),\n );\n }\n\n private handlePointerDown = (event: PointerEvent) => {\n if (event.isPrimary) {\n const { action, actionEl } = closestAction(event.target);\n if (action) {\n if (action.startsWith('resize') && this.mode === 'browse') {\n const [resize, index] = action.split(',');\n const [_, axis] = resize.split('-');\n this.pointer = {\n state: 'resizing',\n axis: axis as DxGridAxis,\n size: axis === 'col' ? this.colSize(index) : this.rowSize(index),\n page: getPage(axis, event),\n index,\n };\n } else if (action === 'cell') {\n const cellCoords = closestCell(event.target, actionEl);\n if (cellCoords) {\n this.pointer = { state: 'selecting' };\n this.selectionStart = cellCoords;\n }\n if (this.mode === 'edit') {\n event.preventDefault();\n } else {\n if (this.focusActive && isSameCell(this.focusedCell, cellCoords)) {\n this.dispatchEditRequest();\n }\n }\n }\n }\n }\n };\n\n private handlePointerUp = (event: PointerEvent) => {\n if (this.pointer?.state === 'resizing') {\n // do nothing, todo: remove\n } else {\n const cell = closestCell(event.target);\n if (cell) {\n this.selectionEnd = cell;\n this.dispatchEvent(\n new DxGridCellsSelect({\n start: this.selectionStart,\n end: this.selectionEnd,\n }),\n );\n }\n }\n this.pointer = null;\n };\n\n private handlePointerMove = (event: PointerEvent) => {\n if (this.pointer?.state === 'selecting') {\n const cell = closestCell(event.target);\n if (cell && (cell.col !== this.selectionEnd.col || cell.row !== this.selectionEnd.row)) {\n this.selectionEnd = cell;\n }\n }\n };\n\n private handleKeydown(event: KeyboardEvent) {\n if (this.focusActive && this.mode === 'browse') {\n // Adjust state\n switch (event.key) {\n case 'ArrowDown':\n this.focusedCell = { ...this.focusedCell, row: this.focusedCell.row + 1 };\n break;\n case 'ArrowUp':\n this.focusedCell = { ...this.focusedCell, row: Math.max(0, this.focusedCell.row - 1) };\n break;\n case 'ArrowRight':\n this.focusedCell = { ...this.focusedCell, col: this.focusedCell.col + 1 };\n break;\n case 'ArrowLeft':\n this.focusedCell = { ...this.focusedCell, col: Math.max(0, this.focusedCell.col - 1) };\n break;\n }\n // Emit edit request if relevant\n switch (event.key) {\n case 'Enter':\n this.dispatchEditRequest();\n break;\n default:\n if (event.key.length === 1 && event.key.match(/\\P{Cc}/u)) {\n this.dispatchEditRequest(event.key);\n }\n break;\n }\n // Handle virtualization & focus consequences\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowRight':\n case 'ArrowLeft':\n event.preventDefault();\n this.snapPosToFocusedCell();\n break;\n }\n }\n }\n\n //\n // Accessors\n //\n\n private colSize(c: number | string) {\n return this.colSizes?.[c] ?? this.columnDefault.size;\n }\n\n private rowSize(r: number | string) {\n return this.rowSizes?.[r] ?? this.rowDefault.size;\n }\n\n private cell(c: number | string, r: number | string) {\n const index: CellIndex = `${c}${separator}${r}`;\n return this.cells[index] ?? this.initialCells[index];\n }\n\n private focusedCellBox(): DxEditRequest['cellBox'] {\n const cellElement = this.focusedCellElement();\n const cellSize = { inlineSize: this.colSize(this.focusedCell.col), blockSize: this.rowSize(this.focusedCell.row) };\n if (!cellElement) {\n return { insetInlineStart: NaN, insetBlockStart: NaN, ...cellSize };\n }\n const contentElement = cellElement.offsetParent as HTMLElement;\n // Note that storing `offset` in state causes performance issues, so instead the transform is parsed here.\n const [_translate3d, inlineStr, blockStr] = contentElement.style.transform.split(/[()]|px,?\\s?/);\n const contentOffsetInline = parseFloat(inlineStr);\n const contentOffsetBlock = parseFloat(blockStr);\n const offsetParent = contentElement.offsetParent as HTMLElement;\n return {\n insetInlineStart: cellElement.offsetLeft + contentOffsetInline + offsetParent.offsetLeft,\n insetBlockStart: cellElement.offsetTop + contentOffsetBlock + offsetParent.offsetTop,\n ...cellSize,\n };\n }\n\n //\n // Resize & reposition handlers, observer, ref\n //\n\n @state()\n private observer = new ResizeObserver((entries) => {\n const { inlineSize, blockSize } = entries?.[0]?.contentBoxSize?.[0] ?? {\n inlineSize: 0,\n blockSize: 0,\n };\n if (\n Math.abs(inlineSize - this.sizeInline) > resizeTolerance ||\n Math.abs(blockSize - this.sizeBlock) > resizeTolerance\n ) {\n // console.info('[updating bounds]', 'resize', [inlineSize - this.sizeInline, blockSize - this.sizeBlock]);\n this.sizeInline = inlineSize;\n this.sizeBlock = blockSize;\n this.updateVis();\n }\n });\n\n private viewportRef: Ref<HTMLDivElement> = createRef();\n\n private maybeUpdateVis = () => {\n if (\n this.posInline >= this.binInlineMin &&\n this.posInline < this.binInlineMax &&\n this.posBlock >= this.binBlockMin &&\n this.posBlock < this.binBlockMax\n ) {\n // do nothing\n } else {\n // console.info(\n // '[updating bounds]',\n // 'wheel',\n // [this.binInlineMin, this.posInline, this.binInlineMax],\n // [this.binBlockMin, this.posBlock, this.binBlockMax],\n // );\n this.updateVis();\n }\n };\n\n private handleWheel = ({ deltaX, deltaY }: WheelEvent) => {\n if (this.mode === 'browse') {\n this.posInline = Math.max(0, this.posInline + deltaX);\n this.posBlock = Math.max(0, this.posBlock + deltaY);\n this.maybeUpdateVis();\n }\n };\n\n private updateVisInline() {\n // todo: avoid starting from zero\n let colIndex = 0;\n let pxInline = this.colSize(colIndex);\n\n while (pxInline < this.posInline) {\n colIndex += 1;\n pxInline += this.colSize(colIndex) + gap;\n }\n\n this.visColMin = colIndex - overscanCol;\n\n this.binInlineMin = pxInline - this.colSize(colIndex) - gap;\n this.binInlineMax = pxInline + gap;\n\n this.overscanInline =\n [...Array(overscanCol)].reduce((acc, _, c0) => {\n acc += this.colSize(this.visColMin + c0);\n return acc;\n }, 0) +\n gap * (overscanCol - 1);\n\n while (pxInline < this.binInlineMax + this.sizeInline + gap) {\n colIndex += 1;\n pxInline += this.colSize(colIndex) + gap;\n }\n\n this.visColMax = colIndex + overscanCol;\n\n this.templateColumns = [...Array(this.visColMax - this.visColMin)]\n .map((_, c0) => `${this.colSize(this.visColMin + c0)}px`)\n .join(' ');\n }\n\n private updateVisBlock() {\n // todo: avoid starting from zero\n let rowIndex = 0;\n let pxBlock = this.rowSize(rowIndex);\n\n while (pxBlock < this.posBlock) {\n rowIndex += 1;\n pxBlock += this.rowSize(rowIndex) + gap;\n }\n\n this.visRowMin = rowIndex - overscanRow;\n\n this.binBlockMin = pxBlock - this.rowSize(rowIndex) - gap;\n this.binBlockMax = pxBlock + gap;\n\n this.overscanBlock =\n [...Array(overscanRow)].reduce((acc, _, r0) => {\n acc += this.rowSize(this.visRowMin + r0);\n return acc;\n }, 0) +\n gap * (overscanRow - 1);\n\n while (pxBlock < this.binBlockMax + this.sizeBlock) {\n rowIndex += 1;\n pxBlock += this.rowSize(rowIndex) + gap;\n }\n\n this.visRowMax = rowIndex + overscanRow;\n\n this.templateRows = [...Array(this.visRowMax - this.visRowMin)]\n .map((_, r0) => `${this.rowSize(this.visRowMin + r0)}px`)\n .join(' ');\n }\n\n private updateVis() {\n this.updateVisInline();\n this.updateVisBlock();\n }\n\n // Focus handlers\n\n @eventOptions({ capture: true })\n private handleFocus(event: FocusEvent) {\n const cellCoords = closestCell(event.target);\n if (cellCoords) {\n this.focusedCell = cellCoords;\n this.focusActive = true;\n }\n }\n\n @eventOptions({ capture: true })\n private handleBlur(event: FocusEvent) {\n // Only unset `focusActive` if focus is not moving to an element within the grid.\n if (!event.relatedTarget || !(event.relatedTarget as HTMLElement).closest(`[data-grid=\"${this.gridId}\"]`)) {\n this.focusActive = false;\n }\n }\n\n private focusedCellElement() {\n return this.viewportRef.value?.querySelector(\n `[aria-colindex=\"${this.focusedCell.col}\"][aria-rowindex=\"${this.focusedCell.row}\"]`,\n ) as HTMLElement | null;\n }\n\n /**\n * Moves focus to the cell with actual focus, otherwise moves focus to the viewport.\n */\n refocus(increment?: 'col' | 'row', delta: 1 | -1 = 1) {\n switch (increment) {\n case 'row':\n this.focusedCell = { ...this.focusedCell, row: this.focusedCell.row + delta };\n break;\n case 'col':\n this.focusedCell = { ...this.focusedCell, col: this.focusedCell.col + delta };\n }\n (this.focusedCell.row < this.visRowMin ||\n this.focusedCell.row > this.visRowMax ||\n this.focusedCell.col < this.visColMin ||\n this.focusedCell.col > this.visColMax\n ? this.viewportRef.value\n : this.focusedCellElement()\n )?.focus({ preventScroll: true });\n if (increment) {\n this.snapPosToFocusedCell();\n }\n }\n\n /**\n * Updates `pos` so that a cell in focus is fully within the viewport\n */\n snapPosToFocusedCell() {\n if (\n this.focusedCell.col < this.visColMin ||\n this.focusedCell.col > this.visColMax ||\n this.focusedCell.row < this.visRowMin ||\n this.focusedCell.row > this.visRowMax\n ) {\n // console.warn('Snapping position to a focused cell that is not already mounted is unsupported.');\n } else if (\n this.focusedCell.col > this.visColMin + overscanCol &&\n this.focusedCell.col < this.visColMax - overscanCol - 1 &&\n this.focusedCell.row > this.visRowMin + overscanRow &&\n this.focusedCell.row < this.visRowMax - overscanRow - 1\n ) {\n // console.log(\n // '[within bounds]',\n // this.focusedCell,\n // [this.visColMin, this.visColMax, overscanCol],\n // [this.visRowMin, this.visRowMax, overscanRow],\n // );\n } else {\n if (this.focusedCell.col <= this.visColMin + overscanCol) {\n this.posInline = this.binInlineMin;\n this.updateVisInline();\n } else if (this.focusedCell.col >= this.visColMax - overscanCol - 1) {\n const sizeSumCol = [...Array(this.focusedCell.col - this.visColMin)].reduce((acc, _, c0) => {\n acc += this.colSize(this.visColMin + overscanCol + c0) + gap;\n return acc;\n }, 0);\n this.posInline = Math.max(0, this.binInlineMin + sizeSumCol + gap * 2 - this.sizeInline);\n this.updateVisInline();\n }\n\n if (this.focusedCell.row <= this.visRowMin + overscanRow) {\n this.posBlock = this.binBlockMin;\n this.updateVisBlock();\n } else if (this.focusedCell.row >= this.visRowMax - overscanRow - 1) {\n const sizeSumRow = [...Array(this.focusedCell.row - this.visRowMin)].reduce((acc, _, r0) => {\n acc += this.rowSize(this.visRowMin + overscanRow + r0) + gap;\n return acc;\n }, 0);\n this.posBlock = Math.max(0, this.binBlockMin + sizeSumRow + gap * 2 - this.sizeBlock);\n this.updateVisBlock();\n }\n }\n }\n\n //\n // Map scroll DOM methods to virtualized value.\n //\n\n override get scrollLeft() {\n return this.posInline;\n }\n\n override set scrollLeft(nextValue: number) {\n this.posInline = nextValue;\n this.maybeUpdateVis();\n }\n\n override get scrollTop() {\n return this.posBlock;\n }\n\n override set scrollTop(nextValue: number) {\n this.posBlock = nextValue;\n this.maybeUpdateVis();\n }\n\n //\n // Resize handlers\n //\n private handleAxisResizeInternal(event: DxAxisResizeInternal) {\n event.stopPropagation();\n const { axis, delta, size, index, type } = event;\n if (axis === 'col') {\n const nextSize = Math.max(sizeColMin, Math.min(sizeColMax, size + delta));\n this.colSizes = { ...this.colSizes, [index]: nextSize };\n this.updateVisInline();\n } else {\n const nextSize = Math.max(sizeRowMin, Math.min(sizeRowMax, size + delta));\n this.rowSizes = { ...this.rowSizes, [index]: nextSize };\n this.updateVisBlock();\n }\n if (type === 'dropped') {\n this.dispatchEvent(\n new DxAxisResize({\n axis,\n index,\n size: this[axis === 'col' ? 'colSize' : 'rowSize'](index),\n }),\n );\n }\n }\n\n //\n // Render and other lifecycle methods\n //\n\n override render() {\n const visibleCols = this.visColMax - this.visColMin;\n const visibleRows = this.visRowMax - this.visRowMin;\n const offsetInline = this.binInlineMin - this.posInline - this.overscanInline;\n const offsetBlock = this.binBlockMin - this.posBlock - this.overscanBlock;\n\n const selectColMin = Math.min(this.selectionStart.col, this.selectionEnd.col);\n const selectColMax = Math.max(this.selectionStart.col, this.selectionEnd.col);\n const selectRowMin = Math.min(this.selectionStart.row, this.selectionEnd.row);\n const selectRowMax = Math.max(this.selectionStart.row, this.selectionEnd.row);\n const selectVisible = selectColMin !== selectColMax || selectRowMin !== selectRowMax;\n\n return html`<div\n role=\"none\"\n class=\"dx-grid\"\n data-grid=${this.gridId}\n data-grid-mode=${this.mode}\n ?data-grid-select=${selectVisible}\n >\n <div role=\"none\" class=\"dx-grid__corner\"></div>\n <div role=\"none\" class=\"dx-grid__columnheader\">\n <div\n role=\"none\"\n class=\"dx-grid__columnheader__content\"\n style=\"transform:translate3d(${offsetInline}px,0,0);grid-template-columns:${this.templateColumns};\"\n >\n ${[...Array(visibleCols)].map((_, c0) => {\n const c = this.visColMin + c0;\n return html`<div\n role=\"columnheader\"\n ?inert=${c < 0}\n style=\"block-size:${this.rowDefault.size}px;grid-column:${c0 + 1}/${c0 + 2};\"\n >\n <span id=${localChId(c0)}>${colToA1Notation(c)}</span>\n ${(this.columns[c]?.resizeable ?? this.columnDefault.resizeable) &&\n html`<dx-grid-axis-resize-handle\n axis=\"col\"\n index=${c}\n size=${this.colSize(c)}\n @dxaxisresizeinternal=${this.handleAxisResizeInternal}\n ></dx-grid-axis-resize-handle>`}\n </div>`;\n })}\n </div>\n </div>\n <div role=\"none\" class=\"dx-grid__corner\"></div>\n <div role=\"none\" class=\"dx-grid__rowheader\">\n <div\n role=\"none\"\n class=\"dx-grid__rowheader__content\"\n style=\"transform:translate3d(0,${offsetBlock}px,0);grid-template-rows:${this.templateRows};\"\n >\n ${[...Array(visibleRows)].map((_, r0) => {\n const r = this.visRowMin + r0;\n return html`<div role=\"rowheader\" ?inert=${r < 0} style=\"grid-row:${r0 + 1}/${r0 + 2}\">\n <span id=${localRhId(r0)}>${rowToA1Notation(r)}</span>\n ${(this.rows[r]?.resizeable ?? this.rowDefault.resizeable) &&\n html`<dx-grid-axis-resize-handle\n axis=\"row\"\n index=${r}\n size=${this.rowSize(r)}\n ></dx-grid-axis-resize-handle>`}\n </div>`;\n })}\n </div>\n </div>\n <div role=\"grid\" class=\"dx-grid__viewport\" tabindex=\"0\" @wheel=${this.handleWheel} ${ref(this.viewportRef)}>\n <div\n role=\"none\"\n class=\"dx-grid__content\"\n style=\"transform:translate3d(${offsetInline}px,${offsetBlock}px,0);grid-template-columns:${this\n .templateColumns};grid-template-rows:${this.templateRows};\"\n >\n ${[...Array(visibleCols)].map((_, c0) => {\n return [...Array(visibleRows)].map((_, r0) => {\n const c = c0 + this.visColMin;\n const r = r0 + this.visRowMin;\n const cell = this.cell(c, r);\n const active = this.focusActive && this.focusedCell.col === c && this.focusedCell.row === r;\n const selected = c >= selectColMin && c <= selectColMax && r >= selectRowMin && r <= selectRowMax;\n return html`<div\n role=\"gridcell\"\n tabindex=\"0\"\n ?inert=${c < 0 || r < 0}\n ?aria-selected=${selected}\n class=${cell || active\n ? (cell?.className ? cell.className + ' ' : '') + (active ? 'dx-grid__cell--active' : '')\n : nothing}\n aria-rowindex=${r}\n aria-colindex=${c}\n data-dx-grid-action=\"cell\"\n style=\"grid-column:${c0 + 1};grid-row:${r0 + 1}\"\n >\n ${cell?.value}\n </div>`;\n });\n })}\n </div>\n </div>\n <div role=\"none\" class=\"dx-grid__scrollbar\" aria-orientation=\"vertical\">\n <div role=\"none\" class=\"dx-grid__scrollbar__thumb\"></div>\n </div>\n <div role=\"none\" class=\"dx-grid__corner\"></div>\n <div role=\"none\" class=\"dx-grid__scrollbar\" aria-orientation=\"horizontal\">\n <div role=\"none\" class=\"dx-grid__scrollbar__thumb\"></div>\n </div>\n <div role=\"none\" class=\"dx-grid__corner\"></div>\n </div>`;\n }\n\n override firstUpdated() {\n if (this.getCells) {\n this.cells = this.getCells({\n start: { col: this.visColMin, row: this.visRowMin },\n end: { col: this.visColMax, row: this.visRowMax },\n });\n }\n this.observer.observe(this.viewportRef.value!);\n this.colSizes = Object.entries(this.columns).reduce((acc: Record<string, number>, [colId, colMeta]) => {\n if (colMeta?.size) {\n acc[colId] = colMeta.size;\n }\n return acc;\n }, {});\n this.rowSizes = Object.entries(this.rows).reduce((acc: Record<string, number>, [rowId, rowMeta]) => {\n if (rowMeta?.size) {\n acc[rowId] = rowMeta.size;\n }\n return acc;\n }, {});\n }\n\n override willUpdate(changedProperties: Map<string, any>) {\n if (\n this.getCells &&\n (changedProperties.has('initialCells') ||\n changedProperties.has('visColMin') ||\n changedProperties.has('visColMax') ||\n changedProperties.has('visRowMin') ||\n changedProperties.has('visRowMax'))\n ) {\n this.cells = this.getCells({\n start: { col: this.visColMin, row: this.visRowMin },\n end: { col: this.visColMax, row: this.visRowMax },\n });\n }\n }\n\n override updated(changedProperties: Map<string, any>) {\n // Update the focused element if there is a change in bounds (otherwise Lit keeps focus on the relative element).\n if (\n this.focusActive &&\n (changedProperties.has('visRowMin') || changedProperties.has('visColMin') || changedProperties.has('focusedCell'))\n ) {\n this.refocus();\n }\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n // console.log('[disconnected]', this.viewportRef.value);\n // TODO(thure): Will this even work?\n if (this.viewportRef.value) {\n this.observer.unobserve(this.viewportRef.value);\n }\n }\n\n override createRenderRoot() {\n return this;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview';\nimport { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';\nimport { type CleanupFn, type DragLocationHistory } from '@atlaskit/pragmatic-drag-and-drop/types';\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { ref } from 'lit/directives/ref.js';\n\nimport { DxAxisResizeInternal, type DxGridAxis } from './types';\n\n@customElement('dx-grid-axis-resize-handle')\nexport class DxGridAxisResizeHandle extends LitElement {\n @property({ type: String })\n axis: DxGridAxis = 'row';\n\n @property({ type: String })\n index: string = '-1';\n\n @property({ type: Number })\n size: number = 128;\n\n private dragStartSize: number = 128;\n\n override render() {\n return html`<button class=\"dx-grid__resize-handle\" ${ref(this.mount)}>\n <span class=\"sr-only\">Resize</span>\n </button>`;\n }\n\n private cleanup: CleanupFn | null = null;\n\n private dispatchResize(location: DragLocationHistory, state: 'dragging' | 'dropped') {\n const client = this.axis === 'row' ? 'clientY' : 'clientX';\n const event = new DxAxisResizeInternal({\n axis: this.axis,\n size: this.dragStartSize,\n index: this.index,\n delta: location.current.input[client] - location.initial.input[client],\n state,\n });\n this.dispatchEvent(event);\n }\n\n private mount(element?: Element) {\n this.cleanup?.();\n const host = this;\n if (element) {\n this.cleanup = draggable({\n element: element as HTMLButtonElement,\n onGenerateDragPreview: ({ nativeSetDragImage }) => {\n // we will be moving the line to indicate a drag\n // we can disable the native drag preview\n disableNativeDragPreview({ nativeSetDragImage });\n // we don't want any native drop animation for when the user\n // does not drop on a drop target. we want the drag to finish immediately\n preventUnhandled.start();\n },\n onDragStart() {\n host.dragStartSize = host.size;\n },\n onDrag({ location }) {\n host.dispatchResize(location, 'dragging');\n },\n onDrop({ location }) {\n host.dispatchResize(location, 'dropped');\n },\n });\n }\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.cleanup?.();\n }\n\n override createRenderRoot() {\n return this;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type CellIndex, type DxGridPosition } from './types';\n\n/**\n * Separator for serializing cell position vectors\n */\nexport const separator = ',';\n\nexport const toCellIndex = (cellCoords: DxGridPosition): CellIndex => `${cellCoords.col}${separator}${cellCoords.row}`;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type DxGrid } from './dx-grid';\nimport { toCellIndex } from './util';\n\nexport type CellIndex = `${string},${string}`;\n\nexport type DxGridAxis = 'row' | 'col';\n\nexport type DxGridPosition = Record<DxGridAxis, number>;\nexport type DxGridPositionNullable = DxGridPosition | null;\n\nexport type DxGridCells = Record<CellIndex, CellValue>;\n\nexport type DxGridAxisMeta = Record<string, AxisMeta>;\n\nexport type DxGridPointer = null | ({ state: 'resizing'; page: number } & DxAxisResizeProps) | { state: 'selecting' };\n\nexport type DxAxisResizeProps = Pick<DxAxisResize, 'axis' | 'index' | 'size'>;\nexport type DxAxisResizeInternalProps = DxAxisResizeProps & { delta: number; state: 'dragging' | 'dropped' };\n\nexport type DxGridMode = 'browse' | 'edit';\n\nexport type CellValue = {\n /**\n * The content value\n */\n value: string;\n /**\n * If this is a merged cell, the bottomright-most of the range in numeric notation, otherwise undefined.\n */\n end?: string;\n /**\n * `class` attribute value to apply to the gridcell element\n */\n className?: string;\n};\n\nexport type AxisMeta = {\n size: number;\n description?: string;\n resizeable?: boolean;\n};\n\nexport type DxGridProps = Partial<Pick<DxGrid, 'initialCells' | 'rows' | 'columns' | 'rowDefault' | 'columnDefault'>>;\n\nexport class DxAxisResize extends Event {\n public readonly axis: DxGridAxis;\n public readonly index: string;\n public readonly size: number;\n constructor(props: DxAxisResizeProps) {\n super('dx-axis-resize');\n this.axis = props.axis;\n this.index = props.index;\n this.size = props.size;\n }\n}\n\nexport class DxAxisResizeInternal extends Event {\n public readonly axis: DxGridAxis;\n public readonly index: string;\n public readonly size: number;\n public readonly delta: number;\n public readonly state: 'dragging' | 'dropped';\n constructor(props: DxAxisResizeInternalProps) {\n super('dx-axis-resize-internal', { composed: true, bubbles: true });\n this.axis = props.axis;\n this.index = props.index;\n this.size = props.size;\n this.delta = props.delta;\n this.state = props.state;\n }\n}\n\nexport type DxEditRequestProps = Pick<DxEditRequest, 'cellIndex' | 'cellBox' | 'initialContent'>;\n\nexport class DxEditRequest extends Event {\n public readonly cellIndex: CellIndex;\n public readonly cellBox: Record<'insetInlineStart' | 'insetBlockStart' | 'inlineSize' | 'blockSize', number>;\n public readonly initialContent?: string;\n constructor(props: DxEditRequestProps) {\n super('dx-edit-request');\n this.cellIndex = props.cellIndex;\n this.cellBox = props.cellBox;\n this.initialContent = props.initialContent;\n }\n}\n\nexport type DxGridRange = { start: DxGridPosition; end: DxGridPosition };\n\nexport class DxGridCellsSelect extends Event {\n public readonly start: string;\n public readonly end: string;\n public readonly minCol: number;\n public readonly maxCol: number;\n public readonly minRow: number;\n public readonly maxRow: number;\n constructor({ start, end }: DxGridRange) {\n super('dx-grid-cells-select');\n this.start = toCellIndex(start);\n this.end = toCellIndex(end);\n this.minCol = Math.min(start.col, end.col);\n this.maxCol = Math.max(start.col, end.col);\n this.minRow = Math.min(start.row, end.row);\n this.maxRow = Math.max(start.row, end.row);\n }\n}\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,cAAAA,aAAYC,QAAAA,OAAMC,eAAe;AAC1C,SAASC,iBAAAA,gBAAeC,OAAOC,YAAAA,WAAUC,oBAAoB;AAC7D,SAASC,OAAAA,MAAKC,iBAA2B;;;ACFzC,SAASC,iBAAiB;AAC1B,SAASC,gCAAgC;AACzC,SAASC,wBAAwB;AAEjC,SAASC,MAAMC,kBAAkB;AACjC,SAASC,eAAeC,gBAAgB;AACxC,SAASC,WAAW;;;ACDb,IAAMC,YAAY;AAElB,IAAMC,cAAc,CAACC,eAA0C,GAAGA,WAAWC,GAAG,GAAGH,SAAAA,GAAYE,WAAWE,GAAG;;;ACqC7G,IAAMC,eAAN,cAA2BC,MAAAA;EAIhCC,YAAYC,OAA0B;AACpC,UAAM,gBAAA;AACN,SAAKC,OAAOD,MAAMC;AAClB,SAAKC,QAAQF,MAAME;AACnB,SAAKC,OAAOH,MAAMG;EACpB;AACF;AAEO,IAAMC,uBAAN,cAAmCN,MAAAA;EAMxCC,YAAYC,OAAkC;AAC5C,UAAM,2BAA2B;MAAEK,UAAU;MAAMC,SAAS;IAAK,CAAA;AACjE,SAAKL,OAAOD,MAAMC;AAClB,SAAKC,QAAQF,MAAME;AACnB,SAAKC,OAAOH,MAAMG;AAClB,SAAKI,QAAQP,MAAMO;AACnB,SAAKC,QAAQR,MAAMQ;EACrB;AACF;AAIO,IAAMC,gBAAN,cAA4BX,MAAAA;EAIjCC,YAAYC,OAA2B;AACrC,UAAM,iBAAA;AACN,SAAKU,YAAYV,MAAMU;AACvB,SAAKC,UAAUX,MAAMW;AACrB,SAAKC,iBAAiBZ,MAAMY;EAC9B;AACF;AAIO,IAAMC,oBAAN,cAAgCf,MAAAA;EAOrCC,YAAY,EAAEe,OAAOC,IAAG,GAAiB;AACvC,UAAM,sBAAA;AACN,SAAKD,QAAQE,YAAYF,KAAAA;AACzB,SAAKC,MAAMC,YAAYD,GAAAA;AACvB,SAAKE,SAASC,KAAKC,IAAIL,MAAMM,KAAKL,IAAIK,GAAG;AACzC,SAAKC,SAASH,KAAKI,IAAIR,MAAMM,KAAKL,IAAIK,GAAG;AACzC,SAAKG,SAASL,KAAKC,IAAIL,MAAMU,KAAKT,IAAIS,GAAG;AACzC,SAAKC,SAASP,KAAKI,IAAIR,MAAMU,KAAKT,IAAIS,GAAG;EAC3C;AACF;;;;;;;;;AF7FO,IAAME,yBAAN,cAAqCC,WAAAA;EAArC;;AAELC,gBAAmB;AAGnBC,iBAAgB;AAGhBC,gBAAe;AAEPC,yBAAwB;AAQxBC,mBAA4B;;EAN3BC,SAAS;AAChB,WAAOC,8CAA8CC,IAAI,KAAKC,KAAK,CAAA;;;EAGrE;EAIQC,eAAeC,UAA+BC,QAA+B;AACnF,UAAMC,SAAS,KAAKZ,SAAS,QAAQ,YAAY;AACjD,UAAMa,QAAQ,IAAIC,qBAAqB;MACrCd,MAAM,KAAKA;MACXE,MAAM,KAAKC;MACXF,OAAO,KAAKA;MACZc,OAAOL,SAASM,QAAQC,MAAML,MAAAA,IAAUF,SAASQ,QAAQD,MAAML,MAAAA;MAC/DD,OAAAA;IACF,CAAA;AACA,SAAKQ,cAAcN,KAAAA;EACrB;EAEQL,MAAMY,SAAmB;AAC/B,SAAKhB,UAAO;AACZ,UAAMiB,OAAO;AACb,QAAID,SAAS;AACX,WAAKhB,UAAUkB,UAAU;QACvBF;QACAG,uBAAuB,CAAC,EAAEC,mBAAkB,MAAE;AAG5CC,mCAAyB;YAAED;UAAmB,CAAA;AAG9CE,2BAAiBC,MAAK;QACxB;QACAC,cAAAA;AACEP,eAAKlB,gBAAgBkB,KAAKnB;QAC5B;QACA2B,OAAO,EAAEnB,SAAQ,GAAE;AACjBW,eAAKZ,eAAeC,UAAU,UAAA;QAChC;QACAoB,OAAO,EAAEpB,SAAQ,GAAE;AACjBW,eAAKZ,eAAeC,UAAU,SAAA;QAChC;MACF,CAAA;IACF;EACF;EAESqB,uBAAuB;AAC9B,UAAMA,qBAAAA;AACN,SAAK3B,UAAO;EACd;EAES4B,mBAAmB;AAC1B,WAAO;EACT;AACF;;EAlEGC,SAAS;IAAEC,MAAMC;EAAO,CAAA;GADdrC,uBAAAA,WAAAA,QAAAA,MAAAA;;EAIVmC,SAAS;IAAEC,MAAMC;EAAO,CAAA;GAJdrC,uBAAAA,WAAAA,SAAAA,MAAAA;;EAOVmC,SAAS;IAAEC,MAAME;EAAO,CAAA;GAPdtC,uBAAAA,WAAAA,QAAAA,MAAAA;AAAAA,yBAAAA,aAAAA;EADZuC,cAAc,4BAAA;GACFvC,sBAAAA;;;;;;;;;ADgBb,IAAMwC,MAAM;AAMZ,IAAMC,kBAAkB;AAKxB,IAAMC,cAAc;AACpB,IAAMC,cAAc;AAKpB,IAAMC,aAAa;AACnB,IAAMC,aAAa;AACnB,IAAMC,aAAa;AACnB,IAAMC,aAAa;AAMnB,IAAMC,kBAAkB,CAACC,QAAAA;AACvB,UACGA,OAAO,KAAKC,OAAOC,aAAa,IAAIC,WAAW,CAAA,IAAKC,KAAKC,MAAML,MAAM,EAAA,IAAM,CAAA,IAAK,MACjFC,OAAOC,aAAa,IAAIC,WAAW,CAAA,IAAMH,MAAM,EAAA;AAEnD;AAEA,IAAMM,kBAAkB,CAACC,QAAAA;AACvB,SAAO,GAAGA,MAAM,CAAA;AAClB;AAEA,IAAMC,gBAAgB,CAACC,WAAAA;AACrB,QAAMC,WAAgCD,QAA+BE,QAAQ,uBAAA,KAA4B;AACzG,SAAO;IAAED;IAAUE,QAAQF,UAAUG,aAAa,qBAAA,KAA0B;EAAK;AACnF;AAEA,IAAMC,cAAc,CAACL,QAA4BC,aAAAA;AAC/C,MAAIK,cAAcL;AAClB,MAAI,CAACK,aAAa;AAChB,UAAM,EAAEH,QAAQF,UAAAA,UAAQ,IAAKF,cAAcC,MAAAA;AAC3C,QAAIG,WAAW,QAAQ;AACrBG,oBAAcL;IAChB;EACF;AACA,MAAIK,aAAa;AACf,UAAMf,MAAMgB,SAASD,YAAYF,aAAa,eAAA,KAAoB,OAAA;AAClE,UAAMN,MAAMS,SAASD,YAAYF,aAAa,eAAA,KAAoB,OAAA;AAClE,WAAO;MAAEb;MAAKO;IAAI;EACpB,OAAO;AACL,WAAO;EACT;AACF;AAEA,IAAMU,aAAa,CAACC,GAA2BC,MAC7CD,KAAKC,KAAKC,OAAOC,SAASH,EAAElB,GAAG,KAAKoB,OAAOC,SAASH,EAAEX,GAAG,KAAKW,EAAElB,QAAQmB,EAAEnB,OAAOkB,EAAEX,QAAQY,EAAEZ;AAE/F,IAAMe,YAAY,CAACC,OAAe,OAAOA,EAAAA;AACzC,IAAMC,YAAY,CAACC,OAAe,OAAOA,EAAAA;AAEzC,IAAMC,UAAU,CAACC,MAAcC,UAAyBD,SAAS,QAAQC,MAAMC,QAAQD,MAAME;AAGtF,IAAMC,SAAN,cAAqBC,YAAAA;EAC1BC,cAAc;AACZ,UAAK;AAaPC,kBAAiB;AAGjBC,sBAAuB;MAAEC,MAAM;IAAG;AAGlCC,yBAA0B;MAAED,MAAM;IAAI;AAGtCE,gBAAuB,CAAC;AAGxBC,mBAA0B,CAAC;AAG3BC,wBAA4B,CAAC;AAG7BC,gBAAmB;AAMnBC;;;;oBAA6D;AAGrDC,iBAAqB,CAAC;AAOtBC;;;qBAAY;AAGZC,oBAAW;AAOXC;;;sBAAa;AAGbC,qBAAY;AAOZC;;;0BAAiB;AAGjBC,yBAAgB;AAOhBC;;;wBAAe;AAGfC,wBAAe,KAAKC,QAAQ,CAAA;AAG5BC,uBAAc;AAGdC,uBAAc,KAAKC,QAAQ,CAAA;AAQ3BC;;;;qBAAY;AAGZC,qBAAY;AAGZC,qBAAY;AAGZC,qBAAY;AAMZC;;;2BAAkB,GAAG,KAAKR,QAAQ,CAAA,CAAA;AAGlCS,wBAAe,GAAG,KAAKN,QAAQ,CAAA,CAAA;AAO/BO;;;mBAAyB;AAGzBC,oBAAmC,CAAC;AAGpCC,oBAAmC,CAAC;AAGpCC,uBAAuB;AAGvBC,uBAA8B;MAAElE,KAAK;MAAGO,KAAK;IAAE;AAG/C4D,0BAAiC;MAAEnE,KAAK;MAAGO,KAAK;IAAE;AAGlD6D,wBAA+B;MAAEpE,KAAK;MAAGO,KAAK;IAAE;AAoBhD8D,6BAAoB,CAACzC,UAAAA;AAC3B,UAAIA,MAAM0C,WAAW;AACnB,cAAM,EAAE1D,QAAQF,SAAQ,IAAKF,cAAcoB,MAAMnB,MAAM;AACvD,YAAIG,QAAQ;AACV,cAAIA,OAAO2D,WAAW,QAAA,KAAa,KAAK9B,SAAS,UAAU;AACzD,kBAAM,CAAC+B,QAAQC,KAAAA,IAAS7D,OAAO8D,MAAM,GAAA;AACrC,kBAAM,CAACC,GAAGhD,IAAAA,IAAQ6C,OAAOE,MAAM,GAAA;AAC/B,iBAAKZ,UAAU;cACbc,OAAO;cACPjD;cACAS,MAAMT,SAAS,QAAQ,KAAKyB,QAAQqB,KAAAA,IAAS,KAAKlB,QAAQkB,KAAAA;cAC1DI,MAAMnD,QAAQC,MAAMC,KAAAA;cACpB6C;YACF;UACF,WAAW7D,WAAW,QAAQ;AAC5B,kBAAMkE,aAAahE,YAAYc,MAAMnB,QAAQC,QAAAA;AAC7C,gBAAIoE,YAAY;AACd,mBAAKhB,UAAU;gBAAEc,OAAO;cAAY;AACpC,mBAAKT,iBAAiBW;YACxB;AACA,gBAAI,KAAKrC,SAAS,QAAQ;AACxBb,oBAAMmD,eAAc;YACtB,OAAO;AACL,kBAAI,KAAKd,eAAehD,WAAW,KAAKiD,aAAaY,UAAAA,GAAa;AAChE,qBAAKE,oBAAmB;cAC1B;YACF;UACF;QACF;MACF;IACF;AAEQC,2BAAkB,CAACrD,UAAAA;AACzB,UAAI,KAAKkC,SAASc,UAAU,YAAY;MAExC,OAAO;AACL,cAAMM,OAAOpE,YAAYc,MAAMnB,MAAM;AACrC,YAAIyE,MAAM;AACR,eAAKd,eAAec;AACpB,eAAKC,cACH,IAAIC,kBAAkB;YACpBC,OAAO,KAAKlB;YACZmB,KAAK,KAAKlB;UACZ,CAAA,CAAA;QAEJ;MACF;AACA,WAAKN,UAAU;IACjB;AAEQyB,6BAAoB,CAAC3D,UAAAA;AAC3B,UAAI,KAAKkC,SAASc,UAAU,aAAa;AACvC,cAAMM,OAAOpE,YAAYc,MAAMnB,MAAM;AACrC,YAAIyE,SAASA,KAAKlF,QAAQ,KAAKoE,aAAapE,OAAOkF,KAAK3E,QAAQ,KAAK6D,aAAa7D,MAAM;AACtF,eAAK6D,eAAec;QACtB;MACF;IACF;AAoFQM;;;oBAAW,IAAIC,eAAe,CAACC,YAAAA;AACrC,YAAM,EAAEC,YAAYC,UAAS,IAAKF,UAAU,CAAA,GAAIG,iBAAiB,CAAA,KAAM;QACrEF,YAAY;QACZC,WAAW;MACb;AACA,UACExF,KAAK0F,IAAIH,aAAa,KAAK7C,UAAU,IAAItD,mBACzCY,KAAK0F,IAAIF,YAAY,KAAK7C,SAAS,IAAIvD,iBACvC;AAEA,aAAKsD,aAAa6C;AAClB,aAAK5C,YAAY6C;AACjB,aAAKG,UAAS;MAChB;IACF,CAAA;AAEQC,uBAAmCC,UAAAA;AAEnCC,0BAAiB,MAAA;AACvB,UACE,KAAKtD,aAAa,KAAKM,gBACvB,KAAKN,YAAY,KAAKO,gBACtB,KAAKN,YAAY,KAAKQ,eACtB,KAAKR,WAAW,KAAKS,aACrB;MAEF,OAAO;AAOL,aAAKyC,UAAS;MAChB;IACF;AAEQI,uBAAc,CAAC,EAAEC,QAAQC,OAAM,MAAc;AACnD,UAAI,KAAK5D,SAAS,UAAU;AAC1B,aAAKG,YAAYxC,KAAKkG,IAAI,GAAG,KAAK1D,YAAYwD,MAAAA;AAC9C,aAAKvD,WAAWzC,KAAKkG,IAAI,GAAG,KAAKzD,WAAWwD,MAAAA;AAC5C,aAAKH,eAAc;MACrB;IACF;AApVE,SAAKK,iBAAiB,2BAA2B,KAAKC,wBAAwB;AAC9E,SAAKD,iBAAiB,SAAS,KAAKJ,WAAW;AAC/C,SAAKI,iBAAiB,eAAe,KAAKlC,iBAAiB;AAC3D,SAAKkC,iBAAiB,eAAe,KAAKhB,iBAAiB;AAC3D,SAAKgB,iBAAiB,aAAa,KAAKtB,eAAe;AACvD,SAAKsB,iBAAiB,gBAAgB,KAAKtB,eAAe;AAC1D,SAAKsB,iBAAiB,SAAS,KAAKE,aAAa;MAAEC,SAAS;IAAK,CAAA;AACjE,SAAKH,iBAAiB,QAAQ,KAAKI,YAAY;MAAED,SAAS;IAAK,CAAA;AAC/D,SAAKH,iBAAiB,WAAW,KAAKK,aAAa;EACrD;;;;EAqIQ5B,oBAAoB6B,gBAAyB;AACnD,SAAKC,qBAAoB;AAEzBC,mBAAe,MACb,KAAK5B,cACH,IAAI6B,cAAc;MAChBC,WAAWC,YAAY,KAAKhD,WAAW;MACvCiD,SAAS,KAAKC,eAAc;MAC5BP;IACF,CAAA,CAAA,CAAA;EAGN;EA6DQD,cAAchF,OAAsB;AAC1C,QAAI,KAAKqC,eAAe,KAAKxB,SAAS,UAAU;AAE9C,cAAQb,MAAMyF,KAAG;QACf,KAAK;AACH,eAAKnD,cAAc;YAAE,GAAG,KAAKA;YAAa3D,KAAK,KAAK2D,YAAY3D,MAAM;UAAE;AACxE;QACF,KAAK;AACH,eAAK2D,cAAc;YAAE,GAAG,KAAKA;YAAa3D,KAAKH,KAAKkG,IAAI,GAAG,KAAKpC,YAAY3D,MAAM,CAAA;UAAG;AACrF;QACF,KAAK;AACH,eAAK2D,cAAc;YAAE,GAAG,KAAKA;YAAalE,KAAK,KAAKkE,YAAYlE,MAAM;UAAE;AACxE;QACF,KAAK;AACH,eAAKkE,cAAc;YAAE,GAAG,KAAKA;YAAalE,KAAKI,KAAKkG,IAAI,GAAG,KAAKpC,YAAYlE,MAAM,CAAA;UAAG;AACrF;MACJ;AAEA,cAAQ4B,MAAMyF,KAAG;QACf,KAAK;AACH,eAAKrC,oBAAmB;AACxB;QACF;AACE,cAAIpD,MAAMyF,IAAIC,WAAW,KAAK1F,MAAMyF,IAAIE,MAAM,SAAA,GAAY;AACxD,iBAAKvC,oBAAoBpD,MAAMyF,GAAG;UACpC;AACA;MACJ;AAEA,cAAQzF,MAAMyF,KAAG;QACf,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;AACHzF,gBAAMmD,eAAc;AACpB,eAAK+B,qBAAoB;AACzB;MACJ;IACF;EACF;;;;EAMQ1D,QAAQoE,GAAoB;AAClC,WAAO,KAAKzD,WAAWyD,CAAAA,KAAM,KAAKnF,cAAcD;EAClD;EAEQmB,QAAQkE,GAAoB;AAClC,WAAO,KAAKzD,WAAWyD,CAAAA,KAAM,KAAKtF,WAAWC;EAC/C;EAEQ8C,KAAKsC,GAAoBC,GAAoB;AACnD,UAAMhD,QAAmB,GAAG+C,CAAAA,GAAIE,SAAAA,GAAYD,CAAAA;AAC5C,WAAO,KAAK9E,MAAM8B,KAAAA,KAAU,KAAKjC,aAAaiC,KAAAA;EAChD;EAEQ2C,iBAA2C;AACjD,UAAMrG,cAAc,KAAK4G,mBAAkB;AAC3C,UAAMC,WAAW;MAAEjC,YAAY,KAAKvC,QAAQ,KAAKc,YAAYlE,GAAG;MAAG4F,WAAW,KAAKrC,QAAQ,KAAKW,YAAY3D,GAAG;IAAE;AACjH,QAAI,CAACQ,aAAa;AAChB,aAAO;QAAE8G,kBAAkBC;QAAKC,iBAAiBD;QAAK,GAAGF;MAAS;IACpE;AACA,UAAMI,iBAAiBjH,YAAYkH;AAEnC,UAAM,CAACC,cAAcC,WAAWC,QAAAA,IAAYJ,eAAeK,MAAMC,UAAU5D,MAAM,cAAA;AACjF,UAAM6D,sBAAsBC,WAAWL,SAAAA;AACvC,UAAMM,qBAAqBD,WAAWJ,QAAAA;AACtC,UAAMH,eAAeD,eAAeC;AACpC,WAAO;MACLJ,kBAAkB9G,YAAY2H,aAAaH,sBAAsBN,aAAaS;MAC9EX,iBAAiBhH,YAAY4H,YAAYF,qBAAqBR,aAAaU;MAC3E,GAAGf;IACL;EACF;EAoDQgB,kBAAkB;AAExB,QAAIC,WAAW;AACf,QAAIC,WAAW,KAAK1F,QAAQyF,QAAAA;AAE5B,WAAOC,WAAW,KAAKlG,WAAW;AAChCiG,kBAAY;AACZC,kBAAY,KAAK1F,QAAQyF,QAAAA,IAAYtJ;IACvC;AAEA,SAAKiE,YAAYqF,WAAWpJ;AAE5B,SAAKyD,eAAe4F,WAAW,KAAK1F,QAAQyF,QAAAA,IAAYtJ;AACxD,SAAK4D,eAAe2F,WAAWvJ;AAE/B,SAAKyD,iBACH;SAAI+F,MAAMtJ,WAAAA;MAAcuJ,OAAO,CAACC,KAAKtE,GAAGpD,OAAAA;AACtC0H,aAAO,KAAK7F,QAAQ,KAAKI,YAAYjC,EAAAA;AACrC,aAAO0H;IACT,GAAG,CAAA,IACH1J,OAAOE,cAAc;AAEvB,WAAOqJ,WAAW,KAAK3F,eAAe,KAAKL,aAAavD,KAAK;AAC3DsJ,kBAAY;AACZC,kBAAY,KAAK1F,QAAQyF,QAAAA,IAAYtJ;IACvC;AAEA,SAAKkE,YAAYoF,WAAWpJ;AAE5B,SAAKmE,kBAAkB;SAAImF,MAAM,KAAKtF,YAAY,KAAKD,SAAS;MAC7D0F,IAAI,CAACvE,GAAGpD,OAAO,GAAG,KAAK6B,QAAQ,KAAKI,YAAYjC,EAAAA,CAAAA,IAAO,EACvD4H,KAAK,GAAA;EACV;EAEQC,iBAAiB;AAEvB,QAAIC,WAAW;AACf,QAAIC,UAAU,KAAK/F,QAAQ8F,QAAAA;AAE3B,WAAOC,UAAU,KAAKzG,UAAU;AAC9BwG,kBAAY;AACZC,iBAAW,KAAK/F,QAAQ8F,QAAAA,IAAY9J;IACtC;AAEA,SAAKmE,YAAY2F,WAAW3J;AAE5B,SAAK2D,cAAciG,UAAU,KAAK/F,QAAQ8F,QAAAA,IAAY9J;AACtD,SAAK+D,cAAcgG,UAAU/J;AAE7B,SAAK0D,gBACH;SAAI8F,MAAMrJ,WAAAA;MAAcsJ,OAAO,CAACC,KAAKtE,GAAGlD,OAAAA;AACtCwH,aAAO,KAAK1F,QAAQ,KAAKG,YAAYjC,EAAAA;AACrC,aAAOwH;IACT,GAAG,CAAA,IACH1J,OAAOG,cAAc;AAEvB,WAAO4J,UAAU,KAAKhG,cAAc,KAAKP,WAAW;AAClDsG,kBAAY;AACZC,iBAAW,KAAK/F,QAAQ8F,QAAAA,IAAY9J;IACtC;AAEA,SAAKoE,YAAY0F,WAAW3J;AAE5B,SAAKmE,eAAe;SAAIkF,MAAM,KAAKpF,YAAY,KAAKD,SAAS;MAC1DwF,IAAI,CAACvE,GAAGlD,OAAO,GAAG,KAAK8B,QAAQ,KAAKG,YAAYjC,EAAAA,CAAAA,IAAO,EACvD0H,KAAK,GAAA;EACV;EAEQpD,YAAY;AAClB,SAAK6C,gBAAe;AACpB,SAAKQ,eAAc;EACrB;;EAKQ3C,YAAY7E,OAAmB;AACrC,UAAMkD,aAAahE,YAAYc,MAAMnB,MAAM;AAC3C,QAAIqE,YAAY;AACd,WAAKZ,cAAcY;AACnB,WAAKb,cAAc;IACrB;EACF;EAGQ0C,WAAW/E,OAAmB;AAEpC,QAAI,CAACA,MAAM2H,iBAAiB,CAAE3H,MAAM2H,cAA8B5I,QAAQ,eAAe,KAAKuB,MAAM,IAAI,GAAG;AACzG,WAAK+B,cAAc;IACrB;EACF;EAEQ0D,qBAAqB;AAC3B,WAAO,KAAK3B,YAAYwD,OAAOC,cAC7B,mBAAmB,KAAKvF,YAAYlE,GAAG,qBAAqB,KAAKkE,YAAY3D,GAAG,IAAI;EAExF;;;;EAKAmJ,QAAQC,WAA2BC,QAAgB,GAAG;AACpD,YAAQD,WAAAA;MACN,KAAK;AACH,aAAKzF,cAAc;UAAE,GAAG,KAAKA;UAAa3D,KAAK,KAAK2D,YAAY3D,MAAMqJ;QAAM;AAC5E;MACF,KAAK;AACH,aAAK1F,cAAc;UAAE,GAAG,KAAKA;UAAalE,KAAK,KAAKkE,YAAYlE,MAAM4J;QAAM;IAChF;AACC,KAAA,KAAK1F,YAAY3D,MAAM,KAAKmD,aAC7B,KAAKQ,YAAY3D,MAAM,KAAKoD,aAC5B,KAAKO,YAAYlE,MAAM,KAAKwD,aAC5B,KAAKU,YAAYlE,MAAM,KAAKyD,YACxB,KAAKuC,YAAYwD,QACjB,KAAK7B,mBAAkB,IACxBkC,MAAM;MAAEC,eAAe;IAAK,CAAA;AAC/B,QAAIH,WAAW;AACb,WAAK7C,qBAAoB;IAC3B;EACF;;;;EAKAA,uBAAuB;AACrB,QACE,KAAK5C,YAAYlE,MAAM,KAAKwD,aAC5B,KAAKU,YAAYlE,MAAM,KAAKyD,aAC5B,KAAKS,YAAY3D,MAAM,KAAKmD,aAC5B,KAAKQ,YAAY3D,MAAM,KAAKoD,WAC5B;IAEF,WACE,KAAKO,YAAYlE,MAAM,KAAKwD,YAAY/D,eACxC,KAAKyE,YAAYlE,MAAM,KAAKyD,YAAYhE,cAAc,KACtD,KAAKyE,YAAY3D,MAAM,KAAKmD,YAAYhE,eACxC,KAAKwE,YAAY3D,MAAM,KAAKoD,YAAYjE,cAAc,GACtD;IAOF,OAAO;AACL,UAAI,KAAKwE,YAAYlE,OAAO,KAAKwD,YAAY/D,aAAa;AACxD,aAAKmD,YAAY,KAAKM;AACtB,aAAK0F,gBAAe;MACtB,WAAW,KAAK1E,YAAYlE,OAAO,KAAKyD,YAAYhE,cAAc,GAAG;AACnE,cAAMsK,aAAa;aAAIhB,MAAM,KAAK7E,YAAYlE,MAAM,KAAKwD,SAAS;UAAGwF,OAAO,CAACC,KAAKtE,GAAGpD,OAAAA;AACnF0H,iBAAO,KAAK7F,QAAQ,KAAKI,YAAY/D,cAAc8B,EAAAA,IAAMhC;AACzD,iBAAO0J;QACT,GAAG,CAAA;AACH,aAAKrG,YAAYxC,KAAKkG,IAAI,GAAG,KAAKpD,eAAe6G,aAAaxK,MAAM,IAAI,KAAKuD,UAAU;AACvF,aAAK8F,gBAAe;MACtB;AAEA,UAAI,KAAK1E,YAAY3D,OAAO,KAAKmD,YAAYhE,aAAa;AACxD,aAAKmD,WAAW,KAAKQ;AACrB,aAAK+F,eAAc;MACrB,WAAW,KAAKlF,YAAY3D,OAAO,KAAKoD,YAAYjE,cAAc,GAAG;AACnE,cAAMsK,aAAa;aAAIjB,MAAM,KAAK7E,YAAY3D,MAAM,KAAKmD,SAAS;UAAGsF,OAAO,CAACC,KAAKtE,GAAGlD,OAAAA;AACnFwH,iBAAO,KAAK1F,QAAQ,KAAKG,YAAYhE,cAAc+B,EAAAA,IAAMlC;AACzD,iBAAO0J;QACT,GAAG,CAAA;AACH,aAAKpG,WAAWzC,KAAKkG,IAAI,GAAG,KAAKjD,cAAc2G,aAAazK,MAAM,IAAI,KAAKwD,SAAS;AACpF,aAAKqG,eAAc;MACrB;IACF;EACF;;;;EAMA,IAAaa,aAAa;AACxB,WAAO,KAAKrH;EACd;EAEA,IAAaqH,WAAWC,WAAmB;AACzC,SAAKtH,YAAYsH;AACjB,SAAKhE,eAAc;EACrB;EAEA,IAAaiE,YAAY;AACvB,WAAO,KAAKtH;EACd;EAEA,IAAasH,UAAUD,WAAmB;AACxC,SAAKrH,WAAWqH;AAChB,SAAKhE,eAAc;EACrB;;;;EAKQM,yBAAyB5E,OAA6B;AAC5DA,UAAMwI,gBAAe;AACrB,UAAM,EAAEzI,MAAMiI,OAAOxH,MAAMqC,OAAO4F,KAAI,IAAKzI;AAC3C,QAAID,SAAS,OAAO;AAClB,YAAM2I,WAAWlK,KAAKkG,IAAI3G,YAAYS,KAAKmK,IAAI3K,YAAYwC,OAAOwH,KAAAA,CAAAA;AAClE,WAAK7F,WAAW;QAAE,GAAG,KAAKA;QAAU,CAACU,KAAAA,GAAQ6F;MAAS;AACtD,WAAK1B,gBAAe;IACtB,OAAO;AACL,YAAM0B,WAAWlK,KAAKkG,IAAIzG,YAAYO,KAAKmK,IAAIzK,YAAYsC,OAAOwH,KAAAA,CAAAA;AAClE,WAAK5F,WAAW;QAAE,GAAG,KAAKA;QAAU,CAACS,KAAAA,GAAQ6F;MAAS;AACtD,WAAKlB,eAAc;IACrB;AACA,QAAIiB,SAAS,WAAW;AACtB,WAAKlF,cACH,IAAIqF,aAAa;QACf7I;QACA8C;QACArC,MAAM,KAAKT,SAAS,QAAQ,YAAY,SAAA,EAAW8C,KAAAA;MACrD,CAAA,CAAA;IAEJ;EACF;;;;EAMSgG,SAAS;AAChB,UAAMC,cAAc,KAAKjH,YAAY,KAAKD;AAC1C,UAAMmH,cAAc,KAAKhH,YAAY,KAAKD;AAC1C,UAAMkH,eAAe,KAAK1H,eAAe,KAAKN,YAAY,KAAKI;AAC/D,UAAM6H,cAAc,KAAKxH,cAAc,KAAKR,WAAW,KAAKI;AAE5D,UAAM6H,eAAe1K,KAAKmK,IAAI,KAAKpG,eAAenE,KAAK,KAAKoE,aAAapE,GAAG;AAC5E,UAAM+K,eAAe3K,KAAKkG,IAAI,KAAKnC,eAAenE,KAAK,KAAKoE,aAAapE,GAAG;AAC5E,UAAMgL,eAAe5K,KAAKmK,IAAI,KAAKpG,eAAe5D,KAAK,KAAK6D,aAAa7D,GAAG;AAC5E,UAAM0K,eAAe7K,KAAKkG,IAAI,KAAKnC,eAAe5D,KAAK,KAAK6D,aAAa7D,GAAG;AAC5E,UAAM2K,gBAAgBJ,iBAAiBC,gBAAgBC,iBAAiBC;AAExE,WAAOE;;;kBAGO,KAAKjJ,MAAM;uBACN,KAAKO,IAAI;0BACNyI,aAAAA;;;;;;;yCAOeN,YAAAA,iCAA6C,KAAKhH,eAAe;;YAE9F;SAAImF,MAAM2B,WAAAA;MAAcxB,IAAI,CAACvE,GAAGpD,OAAAA;AAChC,YAAMiG,IAAI,KAAKhE,YAAYjC;AAC3B,aAAO4J;;uBAEI3D,IAAI,CAAA;kCACO,KAAKrF,WAAWC,IAAI,kBAAkBb,KAAK,CAAA,IAAKA,KAAK,CAAA;;yBAE9DD,UAAUC,EAAAA,CAAAA,IAAOxB,gBAAgByH,CAAAA,CAAAA;iBACzC,KAAKjF,QAAQiF,CAAAA,GAAI4D,cAAc,KAAK/I,cAAc+I,eACrDD;;wBAEU3D,CAAAA;uBACD,KAAKpE,QAAQoE,CAAAA,CAAAA;wCACI,KAAKhB,wBAAwB;6CACxB;;IAEnC,CAAA,CAAA;;;;;;;;2CAQiCqE,WAAAA,4BAAuC,KAAKhH,YAAY;;YAEvF;SAAIkF,MAAM4B,WAAAA;MAAczB,IAAI,CAACvE,GAAGlD,OAAAA;AAChC,YAAMgG,IAAI,KAAK/D,YAAYjC;AAC3B,aAAO0J,qCAAoC1D,IAAI,CAAA,oBAAqBhG,KAAK,CAAA,IAAKA,KAAK,CAAA;yBACtED,UAAUC,EAAAA,CAAAA,IAAOnB,gBAAgBmH,CAAAA,CAAAA;iBACzC,KAAKnF,KAAKmF,CAAAA,GAAI2D,cAAc,KAAKjJ,WAAWiJ,eAC/CD;;wBAEU1D,CAAAA;uBACD,KAAKlE,QAAQkE,CAAAA,CAAAA;6CACS;;IAEnC,CAAA,CAAA;;;uEAG6D,KAAKtB,WAAW,IAAIkF,KAAI,KAAKrF,WAAW,CAAA;;;;yCAItE4E,YAAAA,MAAkBC,WAAAA,+BAA0C,KACxFjH,eAAe,uBAAuB,KAAKC,YAAY;;YAExD;SAAIkF,MAAM2B,WAAAA;MAAcxB,IAAI,CAACvE,GAAGpD,OAAAA;AAChC,aAAO;WAAIwH,MAAM4B,WAAAA;QAAczB,IAAI,CAACvE,IAAGlD,OAAAA;AACrC,cAAM+F,IAAIjG,KAAK,KAAKiC;AACpB,cAAMiE,IAAIhG,KAAK,KAAKiC;AACpB,cAAMwB,OAAO,KAAKA,KAAKsC,GAAGC,CAAAA;AAC1B,cAAM6D,SAAS,KAAKrH,eAAe,KAAKC,YAAYlE,QAAQwH,KAAK,KAAKtD,YAAY3D,QAAQkH;AAC1F,cAAM8D,WAAW/D,KAAKsD,gBAAgBtD,KAAKuD,gBAAgBtD,KAAKuD,gBAAgBvD,KAAKwD;AACrF,eAAOE;;;yBAGI3D,IAAI,KAAKC,IAAI,CAAA;iCACL8D,QAAAA;wBACTrG,QAAQoG,UACXpG,MAAMsG,YAAYtG,KAAKsG,YAAY,MAAM,OAAOF,SAAS,0BAA0B,MACpFG,OAAAA;gCACYhE,CAAAA;gCACAD,CAAAA;;qCAEKjG,KAAK,CAAA,aAAcE,KAAK,CAAA;;kBAE3CyD,MAAMsE,KAAAA;;MAEZ,CAAA;IACF,CAAA,CAAA;;;;;;;;;;;;EAYR;EAESkC,eAAe;AACtB,QAAI,KAAKhJ,UAAU;AACjB,WAAKC,QAAQ,KAAKD,SAAS;QACzB2C,OAAO;UAAErF,KAAK,KAAKwD;UAAWjD,KAAK,KAAKmD;QAAU;QAClD4B,KAAK;UAAEtF,KAAK,KAAKyD;UAAWlD,KAAK,KAAKoD;QAAU;MAClD,CAAA;IACF;AACA,SAAK6B,SAASmG,QAAQ,KAAK3F,YAAYwD,KAAK;AAC5C,SAAKzF,WAAW6H,OAAOlG,QAAQ,KAAKnD,OAAO,EAAEyG,OAAO,CAACC,KAA6B,CAAC4C,OAAOC,OAAAA,MAAQ;AAChG,UAAIA,SAAS1J,MAAM;AACjB6G,YAAI4C,KAAAA,IAASC,QAAQ1J;MACvB;AACA,aAAO6G;IACT,GAAG,CAAC,CAAA;AACJ,SAAKjF,WAAW4H,OAAOlG,QAAQ,KAAKpD,IAAI,EAAE0G,OAAO,CAACC,KAA6B,CAAC8C,OAAOC,OAAAA,MAAQ;AAC7F,UAAIA,SAAS5J,MAAM;AACjB6G,YAAI8C,KAAAA,IAASC,QAAQ5J;MACvB;AACA,aAAO6G;IACT,GAAG,CAAC,CAAA;EACN;EAESgD,WAAWC,mBAAqC;AACvD,QACE,KAAKxJ,aACJwJ,kBAAkBC,IAAI,cAAA,KACrBD,kBAAkBC,IAAI,WAAA,KACtBD,kBAAkBC,IAAI,WAAA,KACtBD,kBAAkBC,IAAI,WAAA,KACtBD,kBAAkBC,IAAI,WAAA,IACxB;AACA,WAAKxJ,QAAQ,KAAKD,SAAS;QACzB2C,OAAO;UAAErF,KAAK,KAAKwD;UAAWjD,KAAK,KAAKmD;QAAU;QAClD4B,KAAK;UAAEtF,KAAK,KAAKyD;UAAWlD,KAAK,KAAKoD;QAAU;MAClD,CAAA;IACF;EACF;EAESyI,QAAQF,mBAAqC;AAEpD,QACE,KAAKjI,gBACJiI,kBAAkBC,IAAI,WAAA,KAAgBD,kBAAkBC,IAAI,WAAA,KAAgBD,kBAAkBC,IAAI,aAAA,IACnG;AACA,WAAKzC,QAAO;IACd;EACF;EAES2C,uBAAuB;AAC9B,UAAMA,qBAAAA;AAGN,QAAI,KAAKrG,YAAYwD,OAAO;AAC1B,WAAKhE,SAAS8G,UAAU,KAAKtG,YAAYwD,KAAK;IAChD;EACF;EAES+C,mBAAmB;AAC1B,WAAO;EACT;AACF;;EAptBGC,UAAS;IAAEnC,MAAMpK;EAAO,CAAA;GAdd8B,OAAAA,WAAAA,UAAAA,MAAAA;;EAiBVyK,UAAS;IAAEnC,MAAMuB;EAAO,CAAA;GAjBd7J,OAAAA,WAAAA,cAAAA,MAAAA;;EAoBVyK,UAAS;IAAEnC,MAAMuB;EAAO,CAAA;GApBd7J,OAAAA,WAAAA,iBAAAA,MAAAA;;EAuBVyK,UAAS;IAAEnC,MAAMuB;EAAO,CAAA;GAvBd7J,OAAAA,WAAAA,QAAAA,MAAAA;;EA0BVyK,UAAS;IAAEnC,MAAMuB;EAAO,CAAA;GA1Bd7J,OAAAA,WAAAA,WAAAA,MAAAA;;EA6BVyK,UAAS;IAAEnC,MAAMuB;EAAO,CAAA;GA7Bd7J,OAAAA,WAAAA,gBAAAA,MAAAA;;EAgCVyK,UAAS;IAAEnC,MAAMpK;EAAO,CAAA;GAhCd8B,OAAAA,WAAAA,QAAAA,MAAAA;;EAyCV6C,MAAAA;GAzCU7C,OAAAA,WAAAA,SAAAA,MAAAA;;EAgDV6C,MAAAA;GAhDU7C,OAAAA,WAAAA,aAAAA,MAAAA;;EAmDV6C,MAAAA;GAnDU7C,OAAAA,WAAAA,YAAAA,MAAAA;;EA0DV6C,MAAAA;GA1DU7C,OAAAA,WAAAA,cAAAA,MAAAA;;EA6DV6C,MAAAA;GA7DU7C,OAAAA,WAAAA,aAAAA,MAAAA;;EAoEV6C,MAAAA;GApEU7C,OAAAA,WAAAA,kBAAAA,MAAAA;;EAuEV6C,MAAAA;GAvEU7C,OAAAA,WAAAA,iBAAAA,MAAAA;;EA8EV6C,MAAAA;GA9EU7C,OAAAA,WAAAA,gBAAAA,MAAAA;;EAiFV6C,MAAAA;GAjFU7C,OAAAA,WAAAA,gBAAAA,MAAAA;;EAoFV6C,MAAAA;GApFU7C,OAAAA,WAAAA,eAAAA,MAAAA;;EAuFV6C,MAAAA;GAvFU7C,OAAAA,WAAAA,eAAAA,MAAAA;;EA+FV6C,MAAAA;GA/FU7C,OAAAA,WAAAA,aAAAA,MAAAA;;EAkGV6C,MAAAA;GAlGU7C,OAAAA,WAAAA,aAAAA,MAAAA;;EAqGV6C,MAAAA;GArGU7C,OAAAA,WAAAA,aAAAA,MAAAA;;EAwGV6C,MAAAA;GAxGU7C,OAAAA,WAAAA,aAAAA,MAAAA;;EA8GV6C,MAAAA;GA9GU7C,OAAAA,WAAAA,mBAAAA,MAAAA;;EAiHV6C,MAAAA;GAjHU7C,OAAAA,WAAAA,gBAAAA,MAAAA;;EAwHV6C,MAAAA;GAxHU7C,OAAAA,WAAAA,WAAAA,MAAAA;;EA2HV6C,MAAAA;GA3HU7C,OAAAA,WAAAA,YAAAA,MAAAA;;EA8HV6C,MAAAA;GA9HU7C,OAAAA,WAAAA,YAAAA,MAAAA;;EAiIV6C,MAAAA;GAjIU7C,OAAAA,WAAAA,eAAAA,MAAAA;;EAoIV6C,MAAAA;GApIU7C,OAAAA,WAAAA,eAAAA,MAAAA;;EAuIV6C,MAAAA;GAvIU7C,OAAAA,WAAAA,kBAAAA,MAAAA;;EA0IV6C,MAAAA;GA1IU7C,OAAAA,WAAAA,gBAAAA,MAAAA;;EA2SV6C,MAAAA;GA3SU7C,OAAAA,WAAAA,YAAAA,MAAAA;;EAoaV0K,aAAa;IAAE/F,SAAS;EAAK,CAAA;GApanB3E,OAAAA,WAAAA,eAAAA,IAAAA;;EA6aV0K,aAAa;IAAE/F,SAAS;EAAK,CAAA;GA7anB3E,OAAAA,WAAAA,cAAAA,IAAAA;AAAAA,SAAAA,cAAAA;EADZ2K,eAAc,SAAA;GACF3K,MAAAA;",
|
|
6
|
-
"names": ["LitElement", "html", "nothing", "customElement", "state", "property", "eventOptions", "ref", "createRef", "draggable", "disableNativeDragPreview", "preventUnhandled", "html", "LitElement", "customElement", "property", "ref", "separator", "toCellIndex", "cellCoords", "col", "row", "DxAxisResize", "Event", "constructor", "props", "axis", "index", "size", "DxAxisResizeInternal", "composed", "bubbles", "delta", "state", "DxEditRequest", "cellIndex", "cellBox", "initialContent", "DxGridCellsSelect", "start", "end", "toCellIndex", "minCol", "Math", "min", "col", "maxCol", "max", "minRow", "row", "maxRow", "DxGridAxisResizeHandle", "LitElement", "axis", "index", "size", "dragStartSize", "cleanup", "render", "html", "ref", "mount", "dispatchResize", "location", "state", "client", "event", "DxAxisResizeInternal", "delta", "current", "input", "initial", "dispatchEvent", "element", "host", "draggable", "onGenerateDragPreview", "nativeSetDragImage", "disableNativeDragPreview", "preventUnhandled", "start", "onDragStart", "onDrag", "onDrop", "disconnectedCallback", "createRenderRoot", "property", "type", "String", "Number", "customElement", "gap", "resizeTolerance", "overscanCol", "overscanRow", "sizeColMin", "sizeColMax", "sizeRowMin", "sizeRowMax", "colToA1Notation", "col", "String", "fromCharCode", "charCodeAt", "Math", "floor", "rowToA1Notation", "row", "closestAction", "target", "actionEl", "closest", "action", "getAttribute", "closestCell", "cellElement", "parseInt", "isSameCell", "a", "b", "Number", "isFinite", "localChId", "c0", "localRhId", "r0", "getPage", "axis", "event", "pageX", "pageY", "DxGrid", "LitElement", "constructor", "gridId", "rowDefault", "size", "columnDefault", "rows", "columns", "initialCells", "mode", "getCells", "cells", "posInline", "posBlock", "sizeInline", "sizeBlock", "overscanInline", "overscanBlock", "binInlineMin", "binInlineMax", "colSize", "binBlockMin", "binBlockMax", "rowSize", "visColMin", "visColMax", "visRowMin", "visRowMax", "templateColumns", "templateRows", "pointer", "colSizes", "rowSizes", "focusActive", "focusedCell", "selectionStart", "selectionEnd", "handlePointerDown", "isPrimary", "startsWith", "resize", "index", "split", "_", "state", "page", "cellCoords", "preventDefault", "dispatchEditRequest", "handlePointerUp", "cell", "dispatchEvent", "DxGridCellsSelect", "start", "end", "handlePointerMove", "observer", "ResizeObserver", "entries", "inlineSize", "blockSize", "contentBoxSize", "abs", "updateVis", "viewportRef", "createRef", "maybeUpdateVis", "handleWheel", "deltaX", "deltaY", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { LitElement, html, nothing } from 'lit';\nimport { customElement, state, property, eventOptions } from 'lit/decorators.js';\nimport { ref, createRef, type Ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\n// eslint-disable-next-line unused-imports/no-unused-imports\nimport './dx-grid-axis-resize-handle';\nimport {\n type AxisMeta,\n type CellIndex,\n DxAxisResize,\n type DxAxisResizeInternal,\n DxEditRequest,\n type DxGridAxis,\n type DxGridAxisMeta,\n type DxGridCells,\n DxGridCellsSelect,\n type DxGridMode,\n type DxGridPointer,\n type DxGridPosition,\n type DxGridPositionNullable,\n type DxGridRange,\n} from './types';\nimport { separator, toCellIndex } from './util';\n\n/**\n * The size in pixels of the gap between cells\n */\nconst gap = 1;\n\n/**\n * ResizeObserver notices even subpixel changes, only respond to changes of at least 1px.\n */\nconst resizeTolerance = 1;\n\n//\n// `overscan` is the number of columns or rows to render outside of the viewport\n//\nconst overscanCol = 1;\nconst overscanRow = 1;\n\n//\n// `size`, when suffixed with ‘row’ or ‘col’, are limits on size applied when resizing\n//\nconst sizeColMin = 32;\nconst sizeColMax = 1024;\nconst sizeRowMin = 16;\nconst sizeRowMax = 1024;\n\n//\n// A1 notation is the fallback for numbering columns and rows.\n//\n\nconst colToA1Notation = (col: number): string => {\n return (\n (col >= 26 ? String.fromCharCode('A'.charCodeAt(0) + Math.floor(col / 26) - 1) : '') +\n String.fromCharCode('A'.charCodeAt(0) + (col % 26))\n );\n};\n\nconst rowToA1Notation = (row: number): string => {\n return `${row + 1}`;\n};\n\nconst closestAction = (target: EventTarget | null): { action: string | null; actionEl: HTMLElement | null } => {\n const actionEl: HTMLElement | null = (target as HTMLElement | null)?.closest('[data-dx-grid-action]') ?? null;\n return { actionEl, action: actionEl?.getAttribute('data-dx-grid-action') ?? null };\n};\n\nconst closestCell = (target: EventTarget | null, actionEl?: HTMLElement | null): DxGridPositionNullable => {\n let cellElement = actionEl;\n if (!cellElement) {\n const { action, actionEl } = closestAction(target);\n if (action === 'cell') {\n cellElement = actionEl as HTMLElement;\n }\n }\n if (cellElement) {\n const col = parseInt(cellElement.getAttribute('aria-colindex') ?? 'never');\n const row = parseInt(cellElement.getAttribute('aria-rowindex') ?? 'never');\n return { col, row };\n } else {\n return null;\n }\n};\n\nconst isSameCell = (a: DxGridPositionNullable, b: DxGridPositionNullable) =>\n a && b && Number.isFinite(a.col) && Number.isFinite(a.row) && a.col === b.col && a.row === b.row;\n\nconst localChId = (c0: number) => `ch--${c0}`;\nconst localRhId = (r0: number) => `rh--${r0}`;\n\nconst getPage = (axis: string, event: PointerEvent) => (axis === 'col' ? event.pageX : event.pageY);\n\n@customElement('dx-grid')\nexport class DxGrid extends LitElement {\n constructor() {\n super();\n this.addEventListener('dx-axis-resize-internal', this.handleAxisResizeInternal as EventListener);\n this.addEventListener('wheel', this.handleWheel, { passive: true });\n this.addEventListener('pointerdown', this.handlePointerDown);\n this.addEventListener('pointermove', this.handlePointerMove);\n this.addEventListener('pointerup', this.handlePointerUp);\n this.addEventListener('pointerleave', this.handlePointerUp);\n this.addEventListener('focus', this.handleFocus, { capture: true });\n this.addEventListener('blur', this.handleBlur, { capture: true });\n this.addEventListener('keydown', this.handleKeydown);\n }\n\n @property({ type: String })\n gridId: string = 'default-grid-id';\n\n @property({ type: Object })\n rowDefault: AxisMeta = { size: 32 };\n\n @property({ type: Object })\n columnDefault: AxisMeta = { size: 180 };\n\n @property({ type: Object })\n rows: DxGridAxisMeta = {};\n\n @property({ type: Object })\n columns: DxGridAxisMeta = {};\n\n @property({ type: Object })\n initialCells: DxGridCells = {};\n\n @property({ type: String })\n mode: DxGridMode = 'browse';\n\n @property({ type: Number })\n limitColumns: number = Infinity;\n\n @property({ type: Number })\n limitRows: number = Infinity;\n\n /**\n * When this function is defined, it is used first to try to get a value for a cell, and otherwise will fall back\n * to `cells`.\n */\n getCells: ((nextRange: DxGridRange) => DxGridCells) | null = null;\n\n @state()\n private cells: DxGridCells = {};\n\n //\n // `pos`, short for ‘position’, is the position in pixels of the viewport from the origin.\n //\n\n @state()\n private posInline = 0;\n\n @state()\n private posBlock = 0;\n\n //\n // `size` (when not suffixed with ‘row’ or ‘col’, see above) is the size in pixels of the viewport.\n //\n\n @state()\n private sizeInline = 0;\n\n @state()\n private sizeBlock = 0;\n\n //\n // `overscan` is the amount in pixels to offset the grid content due to the number of overscanned columns or rows.\n //\n\n @state()\n private overscanInline = 0;\n\n @state()\n private overscanBlock = 0;\n\n //\n // `bin`, not short for anything, is the range in pixels within which virtualization does not need to reassess.\n //\n\n @state()\n private binInlineMin = 0;\n\n @state()\n private binInlineMax = this.colSize(0);\n\n @state()\n private binBlockMin = 0;\n\n @state()\n private binBlockMax = this.rowSize(0);\n\n //\n // `vis`, short for ‘visible’, is the range in numeric index of the columns or rows which should be rendered within\n // the viewport. These start with naïve values that are updated before first contentful render.\n //\n\n @state()\n private visColMin = 0;\n\n @state()\n private visColMax = 1;\n\n @state()\n private visRowMin = 0;\n\n @state()\n private visRowMax = 1;\n\n //\n // `template` is the rendered value of `grid-{axis}-template`.\n //\n @state()\n private templateColumns = `${this.colSize(0)}px`;\n\n @state()\n private templateRows = `${this.rowSize(0)}px`;\n\n //\n // Focus, selection, and resize states\n //\n\n @state()\n private pointer: DxGridPointer = null;\n\n @state()\n private colSizes: Record<string, number> = {};\n\n @state()\n private rowSizes: Record<string, number> = {};\n\n @state()\n private focusActive: boolean = false;\n\n @state()\n private focusedCell: DxGridPosition = { col: 0, row: 0 };\n\n @state()\n private selectionStart: DxGridPosition = { col: 0, row: 0 };\n\n @state()\n private selectionEnd: DxGridPosition = { col: 0, row: 0 };\n\n //\n // Limits\n //\n\n @state()\n private intrinsicInlineSize: number = Infinity;\n\n @state()\n private intrinsicBlockSize: number = Infinity;\n\n //\n // Primary pointer and keyboard handlers\n //\n\n private dispatchEditRequest(initialContent?: string) {\n this.snapPosToFocusedCell();\n // Without deferring, the event dispatches before `focusedCellBox` can get updated bounds of the cell, hence:\n queueMicrotask(() =>\n this.dispatchEvent(\n new DxEditRequest({\n cellIndex: toCellIndex(this.focusedCell),\n cellBox: this.focusedCellBox(),\n initialContent,\n }),\n ),\n );\n }\n\n private handlePointerDown = (event: PointerEvent) => {\n if (event.isPrimary) {\n const { action, actionEl } = closestAction(event.target);\n if (action) {\n if (action.startsWith('resize') && this.mode === 'browse') {\n const [resize, index] = action.split(',');\n const [_, axis] = resize.split('-');\n this.pointer = {\n state: 'resizing',\n axis: axis as DxGridAxis,\n size: axis === 'col' ? this.colSize(index) : this.rowSize(index),\n page: getPage(axis, event),\n index,\n };\n } else if (action === 'cell') {\n const cellCoords = closestCell(event.target, actionEl);\n if (cellCoords) {\n this.pointer = { state: 'selecting' };\n this.selectionStart = cellCoords;\n }\n if (this.mode === 'edit') {\n event.preventDefault();\n } else {\n if (this.focusActive && isSameCell(this.focusedCell, cellCoords)) {\n this.dispatchEditRequest();\n }\n }\n }\n }\n }\n };\n\n private handlePointerUp = (event: PointerEvent) => {\n if (this.pointer?.state === 'resizing') {\n // do nothing, todo: remove\n } else {\n const cell = closestCell(event.target);\n if (cell) {\n this.selectionEnd = cell;\n this.dispatchEvent(\n new DxGridCellsSelect({\n start: this.selectionStart,\n end: this.selectionEnd,\n }),\n );\n }\n }\n this.pointer = null;\n };\n\n private handlePointerMove = (event: PointerEvent) => {\n if (this.pointer?.state === 'selecting') {\n const cell = closestCell(event.target);\n if (cell && (cell.col !== this.selectionEnd.col || cell.row !== this.selectionEnd.row)) {\n this.selectionEnd = cell;\n }\n }\n };\n\n private handleKeydown(event: KeyboardEvent) {\n if (this.focusActive && this.mode === 'browse') {\n // Adjust state\n switch (event.key) {\n case 'ArrowDown':\n this.focusedCell = { ...this.focusedCell, row: Math.min(this.limitRows - 1, this.focusedCell.row + 1) };\n break;\n case 'ArrowUp':\n this.focusedCell = { ...this.focusedCell, row: Math.max(0, this.focusedCell.row - 1) };\n break;\n case 'ArrowRight':\n this.focusedCell = { ...this.focusedCell, col: Math.min(this.limitColumns - 1, this.focusedCell.col + 1) };\n break;\n case 'ArrowLeft':\n this.focusedCell = { ...this.focusedCell, col: Math.max(0, this.focusedCell.col - 1) };\n break;\n }\n // Emit edit request if relevant\n switch (event.key) {\n case 'Enter':\n this.dispatchEditRequest();\n break;\n default:\n if (event.key.length === 1 && event.key.match(/\\P{Cc}/u)) {\n this.dispatchEditRequest(event.key);\n }\n break;\n }\n // Handle virtualization & focus consequences\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowRight':\n case 'ArrowLeft':\n event.preventDefault();\n this.snapPosToFocusedCell();\n break;\n }\n }\n }\n\n //\n // Accessors\n //\n\n private colSize(c: number | string) {\n return this.colSizes?.[c] ?? this.columnDefault.size;\n }\n\n private rowSize(r: number | string) {\n return this.rowSizes?.[r] ?? this.rowDefault.size;\n }\n\n private cell(c: number | string, r: number | string) {\n const index: CellIndex = `${c}${separator}${r}`;\n return this.cells[index] ?? this.initialCells[index];\n }\n\n private focusedCellBox(): DxEditRequest['cellBox'] {\n const cellElement = this.focusedCellElement();\n const cellSize = { inlineSize: this.colSize(this.focusedCell.col), blockSize: this.rowSize(this.focusedCell.row) };\n if (!cellElement) {\n return { insetInlineStart: NaN, insetBlockStart: NaN, ...cellSize };\n }\n const contentElement = cellElement.offsetParent as HTMLElement;\n // Note that storing `offset` in state causes performance issues, so instead the transform is parsed here.\n const [_translate3d, inlineStr, blockStr] = contentElement.style.transform.split(/[()]|px,?\\s?/);\n const contentOffsetInline = parseFloat(inlineStr);\n const contentOffsetBlock = parseFloat(blockStr);\n const offsetParent = contentElement.offsetParent as HTMLElement;\n return {\n insetInlineStart: cellElement.offsetLeft + contentOffsetInline + offsetParent.offsetLeft,\n insetBlockStart: cellElement.offsetTop + contentOffsetBlock + offsetParent.offsetTop,\n ...cellSize,\n };\n }\n\n //\n // Resize & reposition handlers, observer, ref\n //\n\n @state()\n private observer = new ResizeObserver((entries) => {\n const { inlineSize, blockSize } = entries?.[0]?.contentBoxSize?.[0] ?? {\n inlineSize: 0,\n blockSize: 0,\n };\n if (\n Math.abs(inlineSize - this.sizeInline) > resizeTolerance ||\n Math.abs(blockSize - this.sizeBlock) > resizeTolerance\n ) {\n // console.info('[updating bounds]', 'resize', [inlineSize - this.sizeInline, blockSize - this.sizeBlock]);\n this.sizeInline = inlineSize;\n this.sizeBlock = blockSize;\n this.updateVis();\n queueMicrotask(() => this.updatePos());\n }\n });\n\n private viewportRef: Ref<HTMLDivElement> = createRef();\n\n private maybeUpdateVis = () => {\n if (\n this.posInline >= this.binInlineMin &&\n this.posInline < this.binInlineMax &&\n this.posBlock >= this.binBlockMin &&\n this.posBlock < this.binBlockMax\n ) {\n // do nothing\n } else {\n // console.info(\n // '[updating bounds]',\n // 'wheel',\n // [this.binInlineMin, this.posInline, this.binInlineMax],\n // [this.binBlockMin, this.posBlock, this.binBlockMax],\n // );\n this.updateVis();\n }\n };\n\n private updatePos(inline?: number, block?: number) {\n this.posInline = Math.max(0, Math.min(this.intrinsicInlineSize - this.sizeInline, inline ?? this.posInline));\n this.posBlock = Math.max(0, Math.min(this.intrinsicBlockSize - this.sizeBlock, block ?? this.posBlock));\n this.maybeUpdateVis();\n }\n\n private handleWheel = ({ deltaX, deltaY }: Pick<WheelEvent, 'deltaX' | 'deltaY'>) => {\n if (this.mode === 'browse') {\n this.updatePos(this.posInline + deltaX, this.posBlock + deltaY);\n }\n };\n\n private updateVisInline() {\n // todo: avoid starting from zero\n let colIndex = 0;\n let pxInline = this.colSize(colIndex);\n\n while (pxInline < this.posInline) {\n colIndex += 1;\n pxInline += this.colSize(colIndex) + gap;\n }\n\n this.visColMin = colIndex - overscanCol;\n\n this.binInlineMin = pxInline - this.colSize(colIndex) - gap;\n this.binInlineMax = pxInline + gap;\n\n this.overscanInline =\n [...Array(overscanCol)].reduce((acc, _, c0) => {\n acc += this.colSize(this.visColMin + c0);\n return acc;\n }, 0) +\n gap * (overscanCol - 1);\n\n while (pxInline < this.binInlineMax + this.sizeInline + gap) {\n colIndex += 1;\n pxInline += this.colSize(colIndex) + gap;\n }\n\n this.visColMax = Math.min(this.limitColumns, colIndex + overscanCol);\n\n this.templateColumns = [...Array(this.visColMax - this.visColMin)]\n .map((_, c0) => `${this.colSize(this.visColMin + c0)}px`)\n .join(' ');\n }\n\n private updateVisBlock() {\n // todo: avoid starting from zero\n let rowIndex = 0;\n let pxBlock = this.rowSize(rowIndex);\n\n while (pxBlock < this.posBlock) {\n rowIndex += 1;\n pxBlock += this.rowSize(rowIndex) + gap;\n }\n\n this.visRowMin = rowIndex - overscanRow;\n\n this.binBlockMin = pxBlock - this.rowSize(rowIndex) - gap;\n this.binBlockMax = pxBlock + gap;\n\n this.overscanBlock =\n [...Array(overscanRow)].reduce((acc, _, r0) => {\n acc += this.rowSize(this.visRowMin + r0);\n return acc;\n }, 0) +\n gap * (overscanRow - 1);\n\n while (pxBlock < this.binBlockMax + this.sizeBlock) {\n rowIndex += 1;\n pxBlock += this.rowSize(rowIndex) + gap;\n }\n\n this.visRowMax = Math.min(this.limitRows, rowIndex + overscanRow);\n\n this.templateRows = [...Array(this.visRowMax - this.visRowMin)]\n .map((_, r0) => `${this.rowSize(this.visRowMin + r0)}px`)\n .join(' ');\n }\n\n private updateVis() {\n this.updateVisInline();\n this.updateVisBlock();\n }\n\n // Focus handlers\n\n @eventOptions({ capture: true })\n private handleFocus(event: FocusEvent) {\n const cellCoords = closestCell(event.target);\n if (cellCoords) {\n this.focusedCell = cellCoords;\n this.focusActive = true;\n }\n }\n\n @eventOptions({ capture: true })\n private handleBlur(event: FocusEvent) {\n // Only unset `focusActive` if focus is not moving to an element within the grid.\n if (!event.relatedTarget || !(event.relatedTarget as HTMLElement).closest(`[data-grid=\"${this.gridId}\"]`)) {\n this.focusActive = false;\n }\n }\n\n private focusedCellElement() {\n return this.viewportRef.value?.querySelector(\n `[aria-colindex=\"${this.focusedCell.col}\"][aria-rowindex=\"${this.focusedCell.row}\"]`,\n ) as HTMLElement | null;\n }\n\n /**\n * Moves focus to the cell with actual focus, otherwise moves focus to the viewport.\n */\n refocus(increment?: 'col' | 'row', delta: 1 | -1 = 1) {\n switch (increment) {\n case 'row':\n this.focusedCell = { ...this.focusedCell, row: this.focusedCell.row + delta };\n break;\n case 'col':\n this.focusedCell = { ...this.focusedCell, col: this.focusedCell.col + delta };\n }\n (this.focusedCell.row < this.visRowMin ||\n this.focusedCell.row > this.visRowMax ||\n this.focusedCell.col < this.visColMin ||\n this.focusedCell.col > this.visColMax\n ? this.viewportRef.value\n : this.focusedCellElement()\n )?.focus({ preventScroll: true });\n if (increment) {\n this.snapPosToFocusedCell();\n }\n }\n\n /**\n * Updates `pos` so that a cell in focus is fully within the viewport\n */\n snapPosToFocusedCell() {\n if (\n this.focusedCell.col < this.visColMin ||\n this.focusedCell.col > this.visColMax ||\n this.focusedCell.row < this.visRowMin ||\n this.focusedCell.row > this.visRowMax\n ) {\n // console.warn('Snapping position to a focused cell that is not already mounted is unsupported.');\n } else if (\n this.focusedCell.col > this.visColMin + overscanCol &&\n this.focusedCell.col < this.visColMax - overscanCol - 1 &&\n this.focusedCell.row > this.visRowMin + overscanRow &&\n this.focusedCell.row < this.visRowMax - overscanRow - 1\n ) {\n // console.log(\n // '[within bounds]',\n // this.focusedCell,\n // [this.visColMin, this.visColMax, overscanCol],\n // [this.visRowMin, this.visRowMax, overscanRow],\n // );\n } else {\n if (this.focusedCell.col <= this.visColMin + overscanCol) {\n this.posInline = this.binInlineMin + gap;\n this.updateVisInline();\n } else if (this.focusedCell.col >= this.visColMax - overscanCol - 1) {\n const sizeSumCol = [...Array(this.focusedCell.col - this.visColMin)].reduce((acc, _, c0) => {\n acc += this.colSize(this.visColMin + overscanCol + c0) + gap;\n return acc;\n }, 0);\n this.posInline = Math.max(\n 0,\n Math.min(\n this.intrinsicInlineSize - this.sizeInline,\n this.binInlineMin + sizeSumCol + gap * 2 - this.sizeInline,\n ),\n );\n this.updateVisInline();\n }\n\n if (this.focusedCell.row <= this.visRowMin + overscanRow) {\n this.posBlock = this.binBlockMin + gap;\n this.updateVisBlock();\n } else if (this.focusedCell.row >= this.visRowMax - overscanRow - 1) {\n const sizeSumRow = [...Array(this.focusedCell.row - this.visRowMin)].reduce((acc, _, r0) => {\n acc += this.rowSize(this.visRowMin + overscanRow + r0) + gap;\n return acc;\n }, 0);\n this.posBlock = Math.max(\n 0,\n Math.min(this.intrinsicBlockSize - this.sizeBlock, this.binBlockMin + sizeSumRow + gap * 2 - this.sizeBlock),\n );\n this.updateVisBlock();\n }\n }\n }\n\n //\n // Map scroll DOM methods to virtualized value.\n //\n\n override get scrollLeft() {\n return this.posInline;\n }\n\n override set scrollLeft(nextValue: number) {\n this.posInline = nextValue;\n this.maybeUpdateVis();\n }\n\n override get scrollTop() {\n return this.posBlock;\n }\n\n override set scrollTop(nextValue: number) {\n this.posBlock = nextValue;\n this.maybeUpdateVis();\n }\n\n //\n // Resize handlers\n //\n private handleAxisResizeInternal(event: DxAxisResizeInternal) {\n event.stopPropagation();\n const { axis, delta, size, index, type } = event;\n if (axis === 'col') {\n const nextSize = Math.max(sizeColMin, Math.min(sizeColMax, size + delta));\n this.colSizes = { ...this.colSizes, [index]: nextSize };\n this.updateVisInline();\n this.updateIntrinsicInlineSize();\n } else {\n const nextSize = Math.max(sizeRowMin, Math.min(sizeRowMax, size + delta));\n this.rowSizes = { ...this.rowSizes, [index]: nextSize };\n this.updateVisBlock();\n this.updateIntrinsicBlockSize();\n }\n if (type === 'dropped') {\n this.dispatchEvent(\n new DxAxisResize({\n axis,\n index,\n size: this[axis === 'col' ? 'colSize' : 'rowSize'](index),\n }),\n );\n }\n }\n\n //\n // Render and other lifecycle methods\n //\n\n override render() {\n const visibleCols = this.visColMax - this.visColMin;\n const visibleRows = this.visRowMax - this.visRowMin;\n const offsetInline = this.binInlineMin - this.posInline - this.overscanInline;\n const offsetBlock = this.binBlockMin - this.posBlock - this.overscanBlock;\n\n const selectColMin = Math.min(this.selectionStart.col, this.selectionEnd.col);\n const selectColMax = Math.max(this.selectionStart.col, this.selectionEnd.col);\n const selectRowMin = Math.min(this.selectionStart.row, this.selectionEnd.row);\n const selectRowMax = Math.max(this.selectionStart.row, this.selectionEnd.row);\n const selectVisible = selectColMin !== selectColMax || selectRowMin !== selectRowMax;\n\n return html`<div\n role=\"none\"\n class=\"dx-grid\"\n style=${styleMap({\n '--dx-viewport-inline-size': Number.isFinite(this.limitColumns) ? `${this.intrinsicInlineSize}px` : '1fr',\n '--dx-viewport-block-size': Number.isFinite(this.limitRows) ? `${this.intrinsicBlockSize}px` : '1fr',\n })}\n data-grid=${this.gridId}\n data-grid-mode=${this.mode}\n ?data-grid-select=${selectVisible}\n >\n <div role=\"none\" class=\"dx-grid__corner\"></div>\n <div role=\"none\" class=\"dx-grid__columnheader\">\n <div\n role=\"none\"\n class=\"dx-grid__columnheader__content\"\n style=\"transform:translate3d(${offsetInline}px,0,0);grid-template-columns:${this.templateColumns};\"\n >\n ${[...Array(visibleCols)].map((_, c0) => {\n const c = this.visColMin + c0;\n return html`<div\n role=\"columnheader\"\n ?inert=${c < 0}\n style=\"block-size:${this.rowDefault.size}px;grid-column:${c0 + 1}/${c0 + 2};\"\n >\n <span id=${localChId(c0)}>${colToA1Notation(c)}</span>\n ${(this.columns[c]?.resizeable ?? this.columnDefault.resizeable) &&\n html`<dx-grid-axis-resize-handle\n axis=\"col\"\n index=${c}\n size=${this.colSize(c)}\n ></dx-grid-axis-resize-handle>`}\n </div>`;\n })}\n </div>\n </div>\n <div role=\"none\" class=\"dx-grid__corner\"></div>\n <div role=\"none\" class=\"dx-grid__rowheader\">\n <div\n role=\"none\"\n class=\"dx-grid__rowheader__content\"\n style=\"transform:translate3d(0,${offsetBlock}px,0);grid-template-rows:${this.templateRows};\"\n >\n ${[...Array(visibleRows)].map((_, r0) => {\n const r = this.visRowMin + r0;\n return html`<div role=\"rowheader\" ?inert=${r < 0} style=\"grid-row:${r0 + 1}/${r0 + 2}\">\n <span id=${localRhId(r0)}>${rowToA1Notation(r)}</span>\n ${(this.rows[r]?.resizeable ?? this.rowDefault.resizeable) &&\n html`<dx-grid-axis-resize-handle\n axis=\"row\"\n index=${r}\n size=${this.rowSize(r)}\n ></dx-grid-axis-resize-handle>`}\n </div>`;\n })}\n </div>\n </div>\n <div role=\"grid\" class=\"dx-grid__viewport\" tabindex=\"0\" ${ref(this.viewportRef)}>\n <div\n role=\"none\"\n class=\"dx-grid__content\"\n style=\"transform:translate3d(${offsetInline}px,${offsetBlock}px,0);grid-template-columns:${this\n .templateColumns};grid-template-rows:${this.templateRows};\"\n >\n ${[...Array(visibleCols)].map((_, c0) => {\n return [...Array(visibleRows)].map((_, r0) => {\n const c = c0 + this.visColMin;\n const r = r0 + this.visRowMin;\n const cell = this.cell(c, r);\n const active = this.focusActive && this.focusedCell.col === c && this.focusedCell.row === r;\n const selected = c >= selectColMin && c <= selectColMax && r >= selectRowMin && r <= selectRowMax;\n return html`<div\n role=\"gridcell\"\n tabindex=\"0\"\n ?inert=${c < 0 || r < 0}\n ?aria-selected=${selected}\n class=${cell || active\n ? (cell?.className ? cell.className + ' ' : '') + (active ? 'dx-grid__cell--active' : '')\n : nothing}\n aria-rowindex=${r}\n aria-colindex=${c}\n data-dx-grid-action=\"cell\"\n style=\"grid-column:${c0 + 1};grid-row:${r0 + 1}\"\n >\n ${cell?.value}\n </div>`;\n });\n })}\n </div>\n </div>\n <div role=\"none\" class=\"dx-grid__scrollbar\" aria-orientation=\"vertical\">\n <div role=\"none\" class=\"dx-grid__scrollbar__thumb\"></div>\n </div>\n <div role=\"none\" class=\"dx-grid__corner\"></div>\n <div role=\"none\" class=\"dx-grid__scrollbar\" aria-orientation=\"horizontal\">\n <div role=\"none\" class=\"dx-grid__scrollbar__thumb\"></div>\n </div>\n <div role=\"none\" class=\"dx-grid__corner\"></div>\n </div>`;\n }\n\n private updateIntrinsicInlineSize() {\n this.intrinsicInlineSize = Number.isFinite(this.limitColumns)\n ? [...Array(this.limitColumns)].reduce((acc, _, c0) => acc + this.colSize(c0), 0) + gap * (this.limitColumns - 1)\n : Infinity;\n }\n\n private updateIntrinsicBlockSize() {\n this.intrinsicBlockSize = Number.isFinite(this.limitRows)\n ? [...Array(this.limitRows)].reduce((acc, _, r0) => acc + this.rowSize(r0), 0) + gap * (this.limitRows - 1)\n : Infinity;\n }\n\n private updateIntrinsicSizes() {\n this.updateIntrinsicInlineSize();\n this.updateIntrinsicBlockSize();\n }\n\n override firstUpdated() {\n if (this.getCells) {\n this.cells = this.getCells({\n start: { col: this.visColMin, row: this.visRowMin },\n end: { col: this.visColMax, row: this.visRowMax },\n });\n }\n this.observer.observe(this.viewportRef.value!);\n this.colSizes = Object.entries(this.columns).reduce((acc: Record<string, number>, [colId, colMeta]) => {\n if (colMeta?.size) {\n acc[colId] = colMeta.size;\n }\n return acc;\n }, {});\n this.rowSizes = Object.entries(this.rows).reduce((acc: Record<string, number>, [rowId, rowMeta]) => {\n if (rowMeta?.size) {\n acc[rowId] = rowMeta.size;\n }\n return acc;\n }, {});\n this.updateIntrinsicSizes();\n }\n\n override willUpdate(changedProperties: Map<string, any>) {\n if (\n this.getCells &&\n (changedProperties.has('initialCells') ||\n changedProperties.has('visColMin') ||\n changedProperties.has('visColMax') ||\n changedProperties.has('visRowMin') ||\n changedProperties.has('visRowMax'))\n ) {\n this.cells = this.getCells({\n start: { col: this.visColMin, row: this.visRowMin },\n end: { col: this.visColMax, row: this.visRowMax },\n });\n }\n }\n\n override updated(changedProperties: Map<string, any>) {\n // Update the focused element if there is a change in bounds (otherwise Lit keeps focus on the relative element).\n if (\n this.focusActive &&\n (changedProperties.has('visRowMin') || changedProperties.has('visColMin') || changedProperties.has('focusedCell'))\n ) {\n this.refocus();\n }\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n // console.log('[disconnected]', this.viewportRef.value);\n // TODO(thure): Will this even work?\n if (this.viewportRef.value) {\n this.observer.unobserve(this.viewportRef.value);\n }\n }\n\n override createRenderRoot() {\n return this;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview';\nimport { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';\nimport { type CleanupFn, type DragLocationHistory } from '@atlaskit/pragmatic-drag-and-drop/types';\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { ref } from 'lit/directives/ref.js';\n\nimport { DxAxisResizeInternal, type DxGridAxis } from './types';\n\n@customElement('dx-grid-axis-resize-handle')\nexport class DxGridAxisResizeHandle extends LitElement {\n @property({ type: String })\n axis: DxGridAxis = 'row';\n\n @property({ type: String })\n index: string = '-1';\n\n @property({ type: Number })\n size: number = 128;\n\n private dragStartSize: number = 128;\n\n override render() {\n return html`<button class=\"dx-grid__resize-handle\" ${ref(this.mount)}>\n <span class=\"sr-only\">Resize</span>\n </button>`;\n }\n\n private cleanup: CleanupFn | null = null;\n\n private dispatchResize(location: DragLocationHistory, state: 'dragging' | 'dropped') {\n const client = this.axis === 'row' ? 'clientY' : 'clientX';\n const event = new DxAxisResizeInternal({\n axis: this.axis,\n size: this.dragStartSize,\n index: this.index,\n delta: location.current.input[client] - location.initial.input[client],\n state,\n });\n this.dispatchEvent(event);\n }\n\n private mount(element?: Element) {\n this.cleanup?.();\n const host = this;\n if (element) {\n this.cleanup = draggable({\n element: element as HTMLButtonElement,\n onGenerateDragPreview: ({ nativeSetDragImage }) => {\n // we will be moving the line to indicate a drag\n // we can disable the native drag preview\n disableNativeDragPreview({ nativeSetDragImage });\n // we don't want any native drop animation for when the user\n // does not drop on a drop target. we want the drag to finish immediately\n preventUnhandled.start();\n },\n onDragStart() {\n host.dragStartSize = host.size;\n },\n onDrag({ location }) {\n host.dispatchResize(location, 'dragging');\n },\n onDrop({ location }) {\n host.dispatchResize(location, 'dropped');\n },\n });\n }\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.cleanup?.();\n }\n\n override createRenderRoot() {\n return this;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type CellIndex, type DxGridPosition } from './types';\n\n/**\n * Separator for serializing cell position vectors\n */\nexport const separator = ',';\n\nexport const toCellIndex = (cellCoords: DxGridPosition): CellIndex => `${cellCoords.col}${separator}${cellCoords.row}`;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type DxGrid } from './dx-grid';\nimport { toCellIndex } from './util';\n\nexport type CellIndex = `${string},${string}`;\n\nexport type DxGridAxis = 'row' | 'col';\n\nexport type DxGridPosition = Record<DxGridAxis, number>;\nexport type DxGridPositionNullable = DxGridPosition | null;\n\nexport type DxGridCells = Record<CellIndex, CellValue>;\n\nexport type DxGridAxisMeta = Record<string, AxisMeta>;\n\nexport type DxGridPointer = null | ({ state: 'resizing'; page: number } & DxAxisResizeProps) | { state: 'selecting' };\n\nexport type DxAxisResizeProps = Pick<DxAxisResize, 'axis' | 'index' | 'size'>;\nexport type DxAxisResizeInternalProps = DxAxisResizeProps & { delta: number; state: 'dragging' | 'dropped' };\n\nexport type DxGridMode = 'browse' | 'edit';\n\nexport type CellValue = {\n /**\n * The content value\n */\n value: string;\n /**\n * If this is a merged cell, the bottomright-most of the range in numeric notation, otherwise undefined.\n */\n end?: string;\n /**\n * `class` attribute value to apply to the gridcell element\n */\n className?: string;\n};\n\nexport type AxisMeta = {\n size: number;\n description?: string;\n resizeable?: boolean;\n};\n\nexport type DxGridProps = Partial<\n Pick<DxGrid, 'initialCells' | 'rows' | 'columns' | 'rowDefault' | 'columnDefault' | 'limitRows' | 'limitColumns'>\n>;\n\nexport class DxAxisResize extends Event {\n public readonly axis: DxGridAxis;\n public readonly index: string;\n public readonly size: number;\n constructor(props: DxAxisResizeProps) {\n super('dx-axis-resize');\n this.axis = props.axis;\n this.index = props.index;\n this.size = props.size;\n }\n}\n\nexport class DxAxisResizeInternal extends Event {\n public readonly axis: DxGridAxis;\n public readonly index: string;\n public readonly size: number;\n public readonly delta: number;\n public readonly state: 'dragging' | 'dropped';\n constructor(props: DxAxisResizeInternalProps) {\n super('dx-axis-resize-internal', { composed: true, bubbles: true });\n this.axis = props.axis;\n this.index = props.index;\n this.size = props.size;\n this.delta = props.delta;\n this.state = props.state;\n }\n}\n\nexport type DxEditRequestProps = Pick<DxEditRequest, 'cellIndex' | 'cellBox' | 'initialContent'>;\n\nexport class DxEditRequest extends Event {\n public readonly cellIndex: CellIndex;\n public readonly cellBox: Record<'insetInlineStart' | 'insetBlockStart' | 'inlineSize' | 'blockSize', number>;\n public readonly initialContent?: string;\n constructor(props: DxEditRequestProps) {\n super('dx-edit-request');\n this.cellIndex = props.cellIndex;\n this.cellBox = props.cellBox;\n this.initialContent = props.initialContent;\n }\n}\n\nexport type DxGridRange = { start: DxGridPosition; end: DxGridPosition };\n\nexport class DxGridCellsSelect extends Event {\n public readonly start: string;\n public readonly end: string;\n public readonly minCol: number;\n public readonly maxCol: number;\n public readonly minRow: number;\n public readonly maxRow: number;\n constructor({ start, end }: DxGridRange) {\n super('dx-grid-cells-select');\n this.start = toCellIndex(start);\n this.end = toCellIndex(end);\n this.minCol = Math.min(start.col, end.col);\n this.maxCol = Math.max(start.col, end.col);\n this.minRow = Math.min(start.row, end.row);\n this.maxRow = Math.max(start.row, end.row);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["LitElement", "html", "nothing", "customElement", "state", "property", "eventOptions", "ref", "createRef", "styleMap", "draggable", "disableNativeDragPreview", "preventUnhandled", "html", "LitElement", "customElement", "property", "ref", "separator", "toCellIndex", "cellCoords", "col", "row", "DxAxisResize", "Event", "constructor", "props", "axis", "index", "size", "DxAxisResizeInternal", "composed", "bubbles", "delta", "state", "DxEditRequest", "cellIndex", "cellBox", "initialContent", "DxGridCellsSelect", "start", "end", "toCellIndex", "minCol", "Math", "min", "col", "maxCol", "max", "minRow", "row", "maxRow", "DxGridAxisResizeHandle", "LitElement", "axis", "index", "size", "dragStartSize", "cleanup", "render", "html", "ref", "mount", "dispatchResize", "location", "state", "client", "event", "DxAxisResizeInternal", "delta", "current", "input", "initial", "dispatchEvent", "element", "host", "draggable", "onGenerateDragPreview", "nativeSetDragImage", "disableNativeDragPreview", "preventUnhandled", "start", "onDragStart", "onDrag", "onDrop", "disconnectedCallback", "createRenderRoot", "property", "type", "String", "Number", "customElement", "gap", "resizeTolerance", "overscanCol", "overscanRow", "sizeColMin", "sizeColMax", "sizeRowMin", "sizeRowMax", "colToA1Notation", "col", "String", "fromCharCode", "charCodeAt", "Math", "floor", "rowToA1Notation", "row", "closestAction", "target", "actionEl", "closest", "action", "getAttribute", "closestCell", "cellElement", "parseInt", "isSameCell", "a", "b", "Number", "isFinite", "localChId", "c0", "localRhId", "r0", "getPage", "axis", "event", "pageX", "pageY", "DxGrid", "LitElement", "constructor", "gridId", "rowDefault", "size", "columnDefault", "rows", "columns", "initialCells", "mode", "limitColumns", "Infinity", "limitRows", "getCells", "cells", "posInline", "posBlock", "sizeInline", "sizeBlock", "overscanInline", "overscanBlock", "binInlineMin", "binInlineMax", "colSize", "binBlockMin", "binBlockMax", "rowSize", "visColMin", "visColMax", "visRowMin", "visRowMax", "templateColumns", "templateRows", "pointer", "colSizes", "rowSizes", "focusActive", "focusedCell", "selectionStart", "selectionEnd", "intrinsicInlineSize", "intrinsicBlockSize", "handlePointerDown", "isPrimary", "startsWith", "resize", "index", "split", "_", "state", "page", "cellCoords", "preventDefault", "dispatchEditRequest", "handlePointerUp", "cell", "dispatchEvent", "DxGridCellsSelect", "start", "end", "handlePointerMove", "observer", "ResizeObserver", "entries", "inlineSize", "blockSize", "contentBoxSize", "abs", "updateVis", "queueMicrotask", "updatePos", "viewportRef", "createRef", "maybeUpdateVis", "handleWheel", "deltaX", "deltaY", "addEventListener", "handleAxisResizeInternal", "passive", "handleFocus", "capture", "handleBlur", "handleKeydown", "initialContent", "snapPosToFocusedCell", "DxEditRequest", "cellIndex", "toCellIndex", "cellBox", "focusedCellBox", "key", "min", "max", "length", "match", "c", "r", "separator", "focusedCellElement", "cellSize", "insetInlineStart", "NaN", "insetBlockStart", "contentElement", "offsetParent", "_translate3d", "inlineStr", "blockStr", "style", "transform", "contentOffsetInline", "parseFloat", "contentOffsetBlock", "offsetLeft", "offsetTop", "inline", "block", "updateVisInline", "colIndex", "pxInline", "Array", "reduce", "acc", "map", "join", "updateVisBlock", "rowIndex", "pxBlock", "relatedTarget", "value", "querySelector", "refocus", "increment", "delta", "focus", "preventScroll", "sizeSumCol", "sizeSumRow", "scrollLeft", "nextValue", "scrollTop", "stopPropagation", "type", "nextSize", "updateIntrinsicInlineSize", "updateIntrinsicBlockSize", "DxAxisResize", "render", "visibleCols", "visibleRows", "offsetInline", "offsetBlock", "selectColMin", "selectColMax", "selectRowMin", "selectRowMax", "selectVisible", "html", "styleMap", "resizeable", "ref", "active", "selected", "className", "nothing", "updateIntrinsicSizes", "firstUpdated", "observe", "Object", "colId", "colMeta", "rowId", "rowMeta", "willUpdate", "changedProperties", "has", "updated", "disconnectedCallback", "unobserve", "createRenderRoot", "property", "eventOptions", "customElement"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/ui/lit-grid/src/util.ts":{"bytes":1219,"imports":[],"format":"esm"},"packages/ui/lit-grid/src/types.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/ui/lit-grid/src/util.ts":{"bytes":1219,"imports":[],"format":"esm"},"packages/ui/lit-grid/src/types.ts":{"bytes":8758,"imports":[{"path":"packages/ui/lit-grid/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/lit-grid/src/dx-grid-axis-resize-handle.ts":{"bytes":10189,"imports":[{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/prevent-unhandled","kind":"import-statement","external":true},{"path":"lit","kind":"import-statement","external":true},{"path":"lit/decorators.js","kind":"import-statement","external":true},{"path":"lit/directives/ref.js","kind":"import-statement","external":true},{"path":"packages/ui/lit-grid/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/ui/lit-grid/src/dx-grid.ts":{"bytes":104305,"imports":[{"path":"lit","kind":"import-statement","external":true},{"path":"lit/decorators.js","kind":"import-statement","external":true},{"path":"lit/directives/ref.js","kind":"import-statement","external":true},{"path":"lit/directives/style-map.js","kind":"import-statement","external":true},{"path":"packages/ui/lit-grid/src/dx-grid-axis-resize-handle.ts","kind":"import-statement","original":"./dx-grid-axis-resize-handle"},{"path":"packages/ui/lit-grid/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/ui/lit-grid/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/lit-grid/src/index.ts":{"bytes":572,"imports":[{"path":"packages/ui/lit-grid/src/dx-grid.ts","kind":"import-statement","original":"./dx-grid"},{"path":"packages/ui/lit-grid/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"}},"outputs":{"packages/ui/lit-grid/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":59464},"packages/ui/lit-grid/dist/lib/browser/index.mjs":{"imports":[{"path":"lit","kind":"import-statement","external":true},{"path":"lit/decorators.js","kind":"import-statement","external":true},{"path":"lit/directives/ref.js","kind":"import-statement","external":true},{"path":"lit/directives/style-map.js","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/prevent-unhandled","kind":"import-statement","external":true},{"path":"lit","kind":"import-statement","external":true},{"path":"lit/decorators.js","kind":"import-statement","external":true},{"path":"lit/directives/ref.js","kind":"import-statement","external":true}],"exports":["DxAxisResize","DxAxisResizeInternal","DxEditRequest","DxGrid","DxGridCellsSelect"],"entryPoint":"packages/ui/lit-grid/src/index.ts","inputs":{"packages/ui/lit-grid/src/dx-grid.ts":{"bytesInOutput":27497},"packages/ui/lit-grid/src/dx-grid-axis-resize-handle.ts":{"bytesInOutput":2867},"packages/ui/lit-grid/src/util.ts":{"bytesInOutput":105},"packages/ui/lit-grid/src/types.ts":{"bytesInOutput":1104},"packages/ui/lit-grid/src/index.ts":{"bytesInOutput":0}},"bytes":31979}}}
|
|
@@ -10,6 +10,8 @@ export declare class DxGrid extends LitElement {
|
|
|
10
10
|
columns: DxGridAxisMeta;
|
|
11
11
|
initialCells: DxGridCells;
|
|
12
12
|
mode: DxGridMode;
|
|
13
|
+
limitColumns: number;
|
|
14
|
+
limitRows: number;
|
|
13
15
|
/**
|
|
14
16
|
* When this function is defined, it is used first to try to get a value for a cell, and otherwise will fall back
|
|
15
17
|
* to `cells`.
|
|
@@ -39,6 +41,8 @@ export declare class DxGrid extends LitElement {
|
|
|
39
41
|
private focusedCell;
|
|
40
42
|
private selectionStart;
|
|
41
43
|
private selectionEnd;
|
|
44
|
+
private intrinsicInlineSize;
|
|
45
|
+
private intrinsicBlockSize;
|
|
42
46
|
private dispatchEditRequest;
|
|
43
47
|
private handlePointerDown;
|
|
44
48
|
private handlePointerUp;
|
|
@@ -51,6 +55,7 @@ export declare class DxGrid extends LitElement {
|
|
|
51
55
|
private observer;
|
|
52
56
|
private viewportRef;
|
|
53
57
|
private maybeUpdateVis;
|
|
58
|
+
private updatePos;
|
|
54
59
|
private handleWheel;
|
|
55
60
|
private updateVisInline;
|
|
56
61
|
private updateVisBlock;
|
|
@@ -72,6 +77,9 @@ export declare class DxGrid extends LitElement {
|
|
|
72
77
|
set scrollTop(nextValue: number);
|
|
73
78
|
private handleAxisResizeInternal;
|
|
74
79
|
render(): import("lit").TemplateResult<1>;
|
|
80
|
+
private updateIntrinsicInlineSize;
|
|
81
|
+
private updateIntrinsicBlockSize;
|
|
82
|
+
private updateIntrinsicSizes;
|
|
75
83
|
firstUpdated(): void;
|
|
76
84
|
willUpdate(changedProperties: Map<string, any>): void;
|
|
77
85
|
updated(changedProperties: Map<string, any>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dx-grid.d.ts","sourceRoot":"","sources":["../../../src/dx-grid.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"dx-grid.d.ts","sourceRoot":"","sources":["../../../src/dx-grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,4 +17,14 @@ export declare const Basic: {
|
|
|
17
17
|
columns: string;
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
|
+
export declare const Limits: {
|
|
21
|
+
(props: DxGridProps): import("lit").TemplateResult<1>;
|
|
22
|
+
args: {
|
|
23
|
+
limitRows: string;
|
|
24
|
+
limitColumns: string;
|
|
25
|
+
columnDefault: string;
|
|
26
|
+
rowDefault: string;
|
|
27
|
+
columns: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
20
30
|
//# sourceMappingURL=dx-grid.lit-stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dx-grid.lit-stories.d.ts","sourceRoot":"","sources":["../../../src/dx-grid.lit-stories.ts"],"names":[],"mappings":"AAIA,OAAO,cAAc,CAAC;AACtB,OAAO,gBAAgB,CAAC;AAIxB,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;;;;;;;AAE3C,wBAGE;AAEF,eAAO,MAAM,KAAK;YAAW,WAAW;;;;;;;CASvC,CAAC"}
|
|
1
|
+
{"version":3,"file":"dx-grid.lit-stories.d.ts","sourceRoot":"","sources":["../../../src/dx-grid.lit-stories.ts"],"names":[],"mappings":"AAIA,OAAO,cAAc,CAAC;AACtB,OAAO,gBAAgB,CAAC;AAIxB,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;;;;;;;AAE3C,wBAGE;AAEF,eAAO,MAAM,KAAK;YAAW,WAAW;;;;;;;CASvC,CAAC;AA0BF,eAAO,MAAM,MAAM;YAAW,WAAW;;;;;;;;CAUxC,CAAC"}
|
|
@@ -36,7 +36,7 @@ export type AxisMeta = {
|
|
|
36
36
|
description?: string;
|
|
37
37
|
resizeable?: boolean;
|
|
38
38
|
};
|
|
39
|
-
export type DxGridProps = Partial<Pick<DxGrid, 'initialCells' | 'rows' | 'columns' | 'rowDefault' | 'columnDefault'>>;
|
|
39
|
+
export type DxGridProps = Partial<Pick<DxGrid, 'initialCells' | 'rows' | 'columns' | 'rowDefault' | 'columnDefault' | 'limitRows' | 'limitColumns'>>;
|
|
40
40
|
export declare class DxAxisResize extends Event {
|
|
41
41
|
readonly axis: DxGridAxis;
|
|
42
42
|
readonly index: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAGxC,MAAM,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;AAEvC,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACxD,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,IAAI,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,iBAAiB,CAAC,GAAG;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;AAEtH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAC9E,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAA;CAAE,CAAC;AAE7G,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG;IACtB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -48,3 +48,35 @@ Basic.args = {
|
|
|
48
48
|
4: { size: 270 },
|
|
49
49
|
} satisfies DxGridProps['columns']),
|
|
50
50
|
};
|
|
51
|
+
|
|
52
|
+
export const Limits = (props: DxGridProps) => {
|
|
53
|
+
return html`<div style="position:fixed;inset:0;">
|
|
54
|
+
<dx-grid
|
|
55
|
+
limitRows=${props.limitRows ?? nothing}
|
|
56
|
+
limitColumns=${props.limitColumns ?? nothing}
|
|
57
|
+
columnDefault=${props.columnDefault ?? nothing}
|
|
58
|
+
rowDefault=${props.rowDefault ?? nothing}
|
|
59
|
+
columns=${props.columns ?? nothing}
|
|
60
|
+
></dx-grid>
|
|
61
|
+
</div>`;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
Limits.args = {
|
|
65
|
+
limitRows: JSON.stringify(10 satisfies DxGridProps['limitRows']),
|
|
66
|
+
limitColumns: JSON.stringify(3 satisfies DxGridProps['limitColumns']),
|
|
67
|
+
columnDefault: JSON.stringify({
|
|
68
|
+
size: 180,
|
|
69
|
+
resizeable: true,
|
|
70
|
+
} satisfies DxGridProps['columnDefault']),
|
|
71
|
+
rowDefault: JSON.stringify({
|
|
72
|
+
size: 32,
|
|
73
|
+
resizeable: true,
|
|
74
|
+
} satisfies DxGridProps['rowDefault']),
|
|
75
|
+
columns: JSON.stringify({
|
|
76
|
+
0: { size: 200 },
|
|
77
|
+
1: { size: 210 },
|
|
78
|
+
2: { size: 230 },
|
|
79
|
+
3: { size: 250 },
|
|
80
|
+
4: { size: 270 },
|
|
81
|
+
} satisfies DxGridProps['columns']),
|
|
82
|
+
};
|
package/src/dx-grid.pcss
CHANGED
|
@@ -16,8 +16,8 @@ dx-grid, dx-grid-axis-resize-handle {
|
|
|
16
16
|
|
|
17
17
|
.dx-grid {
|
|
18
18
|
display: grid;
|
|
19
|
-
grid-template-columns: min-content
|
|
20
|
-
grid-template-rows: min-content
|
|
19
|
+
grid-template-columns: min-content minmax(0, var(--dx-viewport-inline-size)) min-content;
|
|
20
|
+
grid-template-rows: min-content minmax(0, var(--dx-viewport-block-size)) min-content;
|
|
21
21
|
font-variant-numeric: tabular-nums;
|
|
22
22
|
--dx-grid-gap: 1px;
|
|
23
23
|
|
package/src/dx-grid.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { LitElement, html, nothing } from 'lit';
|
|
6
6
|
import { customElement, state, property, eventOptions } from 'lit/decorators.js';
|
|
7
7
|
import { ref, createRef, type Ref } from 'lit/directives/ref.js';
|
|
8
|
+
import { styleMap } from 'lit/directives/style-map.js';
|
|
8
9
|
|
|
9
10
|
// eslint-disable-next-line unused-imports/no-unused-imports
|
|
10
11
|
import './dx-grid-axis-resize-handle';
|
|
@@ -32,10 +33,9 @@ import { separator, toCellIndex } from './util';
|
|
|
32
33
|
const gap = 1;
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
|
-
*
|
|
36
|
-
* changes when scrolling vertically.
|
|
36
|
+
* ResizeObserver notices even subpixel changes, only respond to changes of at least 1px.
|
|
37
37
|
*/
|
|
38
|
-
const resizeTolerance =
|
|
38
|
+
const resizeTolerance = 1;
|
|
39
39
|
|
|
40
40
|
//
|
|
41
41
|
// `overscan` is the number of columns or rows to render outside of the viewport
|
|
@@ -101,7 +101,7 @@ export class DxGrid extends LitElement {
|
|
|
101
101
|
constructor() {
|
|
102
102
|
super();
|
|
103
103
|
this.addEventListener('dx-axis-resize-internal', this.handleAxisResizeInternal as EventListener);
|
|
104
|
-
this.addEventListener('wheel', this.handleWheel);
|
|
104
|
+
this.addEventListener('wheel', this.handleWheel, { passive: true });
|
|
105
105
|
this.addEventListener('pointerdown', this.handlePointerDown);
|
|
106
106
|
this.addEventListener('pointermove', this.handlePointerMove);
|
|
107
107
|
this.addEventListener('pointerup', this.handlePointerUp);
|
|
@@ -132,6 +132,12 @@ export class DxGrid extends LitElement {
|
|
|
132
132
|
@property({ type: String })
|
|
133
133
|
mode: DxGridMode = 'browse';
|
|
134
134
|
|
|
135
|
+
@property({ type: Number })
|
|
136
|
+
limitColumns: number = Infinity;
|
|
137
|
+
|
|
138
|
+
@property({ type: Number })
|
|
139
|
+
limitRows: number = Infinity;
|
|
140
|
+
|
|
135
141
|
/**
|
|
136
142
|
* When this function is defined, it is used first to try to get a value for a cell, and otherwise will fall back
|
|
137
143
|
* to `cells`.
|
|
@@ -238,6 +244,16 @@ export class DxGrid extends LitElement {
|
|
|
238
244
|
@state()
|
|
239
245
|
private selectionEnd: DxGridPosition = { col: 0, row: 0 };
|
|
240
246
|
|
|
247
|
+
//
|
|
248
|
+
// Limits
|
|
249
|
+
//
|
|
250
|
+
|
|
251
|
+
@state()
|
|
252
|
+
private intrinsicInlineSize: number = Infinity;
|
|
253
|
+
|
|
254
|
+
@state()
|
|
255
|
+
private intrinsicBlockSize: number = Infinity;
|
|
256
|
+
|
|
241
257
|
//
|
|
242
258
|
// Primary pointer and keyboard handlers
|
|
243
259
|
//
|
|
@@ -320,13 +336,13 @@ export class DxGrid extends LitElement {
|
|
|
320
336
|
// Adjust state
|
|
321
337
|
switch (event.key) {
|
|
322
338
|
case 'ArrowDown':
|
|
323
|
-
this.focusedCell = { ...this.focusedCell, row: this.focusedCell.row + 1 };
|
|
339
|
+
this.focusedCell = { ...this.focusedCell, row: Math.min(this.limitRows - 1, this.focusedCell.row + 1) };
|
|
324
340
|
break;
|
|
325
341
|
case 'ArrowUp':
|
|
326
342
|
this.focusedCell = { ...this.focusedCell, row: Math.max(0, this.focusedCell.row - 1) };
|
|
327
343
|
break;
|
|
328
344
|
case 'ArrowRight':
|
|
329
|
-
this.focusedCell = { ...this.focusedCell, col: this.focusedCell.col + 1 };
|
|
345
|
+
this.focusedCell = { ...this.focusedCell, col: Math.min(this.limitColumns - 1, this.focusedCell.col + 1) };
|
|
330
346
|
break;
|
|
331
347
|
case 'ArrowLeft':
|
|
332
348
|
this.focusedCell = { ...this.focusedCell, col: Math.max(0, this.focusedCell.col - 1) };
|
|
@@ -410,6 +426,7 @@ export class DxGrid extends LitElement {
|
|
|
410
426
|
this.sizeInline = inlineSize;
|
|
411
427
|
this.sizeBlock = blockSize;
|
|
412
428
|
this.updateVis();
|
|
429
|
+
queueMicrotask(() => this.updatePos());
|
|
413
430
|
}
|
|
414
431
|
});
|
|
415
432
|
|
|
@@ -434,11 +451,15 @@ export class DxGrid extends LitElement {
|
|
|
434
451
|
}
|
|
435
452
|
};
|
|
436
453
|
|
|
437
|
-
private
|
|
454
|
+
private updatePos(inline?: number, block?: number) {
|
|
455
|
+
this.posInline = Math.max(0, Math.min(this.intrinsicInlineSize - this.sizeInline, inline ?? this.posInline));
|
|
456
|
+
this.posBlock = Math.max(0, Math.min(this.intrinsicBlockSize - this.sizeBlock, block ?? this.posBlock));
|
|
457
|
+
this.maybeUpdateVis();
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
private handleWheel = ({ deltaX, deltaY }: Pick<WheelEvent, 'deltaX' | 'deltaY'>) => {
|
|
438
461
|
if (this.mode === 'browse') {
|
|
439
|
-
this.posInline
|
|
440
|
-
this.posBlock = Math.max(0, this.posBlock + deltaY);
|
|
441
|
-
this.maybeUpdateVis();
|
|
462
|
+
this.updatePos(this.posInline + deltaX, this.posBlock + deltaY);
|
|
442
463
|
}
|
|
443
464
|
};
|
|
444
465
|
|
|
@@ -469,7 +490,7 @@ export class DxGrid extends LitElement {
|
|
|
469
490
|
pxInline += this.colSize(colIndex) + gap;
|
|
470
491
|
}
|
|
471
492
|
|
|
472
|
-
this.visColMax = colIndex + overscanCol;
|
|
493
|
+
this.visColMax = Math.min(this.limitColumns, colIndex + overscanCol);
|
|
473
494
|
|
|
474
495
|
this.templateColumns = [...Array(this.visColMax - this.visColMin)]
|
|
475
496
|
.map((_, c0) => `${this.colSize(this.visColMin + c0)}px`)
|
|
@@ -503,7 +524,7 @@ export class DxGrid extends LitElement {
|
|
|
503
524
|
pxBlock += this.rowSize(rowIndex) + gap;
|
|
504
525
|
}
|
|
505
526
|
|
|
506
|
-
this.visRowMax = rowIndex + overscanRow;
|
|
527
|
+
this.visRowMax = Math.min(this.limitRows, rowIndex + overscanRow);
|
|
507
528
|
|
|
508
529
|
this.templateRows = [...Array(this.visRowMax - this.visRowMin)]
|
|
509
530
|
.map((_, r0) => `${this.rowSize(this.visRowMin + r0)}px`)
|
|
@@ -588,26 +609,35 @@ export class DxGrid extends LitElement {
|
|
|
588
609
|
// );
|
|
589
610
|
} else {
|
|
590
611
|
if (this.focusedCell.col <= this.visColMin + overscanCol) {
|
|
591
|
-
this.posInline = this.binInlineMin;
|
|
612
|
+
this.posInline = this.binInlineMin + gap;
|
|
592
613
|
this.updateVisInline();
|
|
593
614
|
} else if (this.focusedCell.col >= this.visColMax - overscanCol - 1) {
|
|
594
615
|
const sizeSumCol = [...Array(this.focusedCell.col - this.visColMin)].reduce((acc, _, c0) => {
|
|
595
616
|
acc += this.colSize(this.visColMin + overscanCol + c0) + gap;
|
|
596
617
|
return acc;
|
|
597
618
|
}, 0);
|
|
598
|
-
this.posInline = Math.max(
|
|
619
|
+
this.posInline = Math.max(
|
|
620
|
+
0,
|
|
621
|
+
Math.min(
|
|
622
|
+
this.intrinsicInlineSize - this.sizeInline,
|
|
623
|
+
this.binInlineMin + sizeSumCol + gap * 2 - this.sizeInline,
|
|
624
|
+
),
|
|
625
|
+
);
|
|
599
626
|
this.updateVisInline();
|
|
600
627
|
}
|
|
601
628
|
|
|
602
629
|
if (this.focusedCell.row <= this.visRowMin + overscanRow) {
|
|
603
|
-
this.posBlock = this.binBlockMin;
|
|
630
|
+
this.posBlock = this.binBlockMin + gap;
|
|
604
631
|
this.updateVisBlock();
|
|
605
632
|
} else if (this.focusedCell.row >= this.visRowMax - overscanRow - 1) {
|
|
606
633
|
const sizeSumRow = [...Array(this.focusedCell.row - this.visRowMin)].reduce((acc, _, r0) => {
|
|
607
634
|
acc += this.rowSize(this.visRowMin + overscanRow + r0) + gap;
|
|
608
635
|
return acc;
|
|
609
636
|
}, 0);
|
|
610
|
-
this.posBlock = Math.max(
|
|
637
|
+
this.posBlock = Math.max(
|
|
638
|
+
0,
|
|
639
|
+
Math.min(this.intrinsicBlockSize - this.sizeBlock, this.binBlockMin + sizeSumRow + gap * 2 - this.sizeBlock),
|
|
640
|
+
);
|
|
611
641
|
this.updateVisBlock();
|
|
612
642
|
}
|
|
613
643
|
}
|
|
@@ -645,10 +675,12 @@ export class DxGrid extends LitElement {
|
|
|
645
675
|
const nextSize = Math.max(sizeColMin, Math.min(sizeColMax, size + delta));
|
|
646
676
|
this.colSizes = { ...this.colSizes, [index]: nextSize };
|
|
647
677
|
this.updateVisInline();
|
|
678
|
+
this.updateIntrinsicInlineSize();
|
|
648
679
|
} else {
|
|
649
680
|
const nextSize = Math.max(sizeRowMin, Math.min(sizeRowMax, size + delta));
|
|
650
681
|
this.rowSizes = { ...this.rowSizes, [index]: nextSize };
|
|
651
682
|
this.updateVisBlock();
|
|
683
|
+
this.updateIntrinsicBlockSize();
|
|
652
684
|
}
|
|
653
685
|
if (type === 'dropped') {
|
|
654
686
|
this.dispatchEvent(
|
|
@@ -680,6 +712,10 @@ export class DxGrid extends LitElement {
|
|
|
680
712
|
return html`<div
|
|
681
713
|
role="none"
|
|
682
714
|
class="dx-grid"
|
|
715
|
+
style=${styleMap({
|
|
716
|
+
'--dx-viewport-inline-size': Number.isFinite(this.limitColumns) ? `${this.intrinsicInlineSize}px` : '1fr',
|
|
717
|
+
'--dx-viewport-block-size': Number.isFinite(this.limitRows) ? `${this.intrinsicBlockSize}px` : '1fr',
|
|
718
|
+
})}
|
|
683
719
|
data-grid=${this.gridId}
|
|
684
720
|
data-grid-mode=${this.mode}
|
|
685
721
|
?data-grid-select=${selectVisible}
|
|
@@ -704,7 +740,6 @@ export class DxGrid extends LitElement {
|
|
|
704
740
|
axis="col"
|
|
705
741
|
index=${c}
|
|
706
742
|
size=${this.colSize(c)}
|
|
707
|
-
@dxaxisresizeinternal=${this.handleAxisResizeInternal}
|
|
708
743
|
></dx-grid-axis-resize-handle>`}
|
|
709
744
|
</div>`;
|
|
710
745
|
})}
|
|
@@ -731,7 +766,7 @@ export class DxGrid extends LitElement {
|
|
|
731
766
|
})}
|
|
732
767
|
</div>
|
|
733
768
|
</div>
|
|
734
|
-
<div role="grid" class="dx-grid__viewport" tabindex="0"
|
|
769
|
+
<div role="grid" class="dx-grid__viewport" tabindex="0" ${ref(this.viewportRef)}>
|
|
735
770
|
<div
|
|
736
771
|
role="none"
|
|
737
772
|
class="dx-grid__content"
|
|
@@ -775,6 +810,23 @@ export class DxGrid extends LitElement {
|
|
|
775
810
|
</div>`;
|
|
776
811
|
}
|
|
777
812
|
|
|
813
|
+
private updateIntrinsicInlineSize() {
|
|
814
|
+
this.intrinsicInlineSize = Number.isFinite(this.limitColumns)
|
|
815
|
+
? [...Array(this.limitColumns)].reduce((acc, _, c0) => acc + this.colSize(c0), 0) + gap * (this.limitColumns - 1)
|
|
816
|
+
: Infinity;
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
private updateIntrinsicBlockSize() {
|
|
820
|
+
this.intrinsicBlockSize = Number.isFinite(this.limitRows)
|
|
821
|
+
? [...Array(this.limitRows)].reduce((acc, _, r0) => acc + this.rowSize(r0), 0) + gap * (this.limitRows - 1)
|
|
822
|
+
: Infinity;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
private updateIntrinsicSizes() {
|
|
826
|
+
this.updateIntrinsicInlineSize();
|
|
827
|
+
this.updateIntrinsicBlockSize();
|
|
828
|
+
}
|
|
829
|
+
|
|
778
830
|
override firstUpdated() {
|
|
779
831
|
if (this.getCells) {
|
|
780
832
|
this.cells = this.getCells({
|
|
@@ -795,6 +847,7 @@ export class DxGrid extends LitElement {
|
|
|
795
847
|
}
|
|
796
848
|
return acc;
|
|
797
849
|
}, {});
|
|
850
|
+
this.updateIntrinsicSizes();
|
|
798
851
|
}
|
|
799
852
|
|
|
800
853
|
override willUpdate(changedProperties: Map<string, any>) {
|
package/src/types.ts
CHANGED
|
@@ -44,7 +44,9 @@ export type AxisMeta = {
|
|
|
44
44
|
resizeable?: boolean;
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
-
export type DxGridProps = Partial<
|
|
47
|
+
export type DxGridProps = Partial<
|
|
48
|
+
Pick<DxGrid, 'initialCells' | 'rows' | 'columns' | 'rowDefault' | 'columnDefault' | 'limitRows' | 'limitColumns'>
|
|
49
|
+
>;
|
|
48
50
|
|
|
49
51
|
export class DxAxisResize extends Event {
|
|
50
52
|
public readonly axis: DxGridAxis;
|