@dxos/lit-grid 0.6.12-main.c4a728f → 0.6.12-main.c974201

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.
@@ -99,14 +99,8 @@ var DxGrid = class extends LitElement {
99
99
  };
100
100
  this.rows = {};
101
101
  this.columns = {};
102
- this.initialCells = {};
103
- this.mode = "browse";
104
- /**
105
- * When this function is defined, it is used first to try to get a value for a cell, and otherwise will fall back
106
- * to `cells`.
107
- */
108
- this.getCells = null;
109
102
  this.cells = {};
103
+ this.mode = "browse";
110
104
  //
111
105
  // `pos`, short for ‘position’, is the position in pixels of the viewport from the origin.
112
106
  //
@@ -335,8 +329,7 @@ var DxGrid = class extends LitElement {
335
329
  return this.rowSizes?.[r] ?? this.rowDefault.size;
336
330
  }
337
331
  cell(c, r) {
338
- const index = `${c}${separator}${r}`;
339
- return this.cells[index] ?? this.initialCells[index];
332
+ return this.cells[`${c}${separator}${r}`];
340
333
  }
341
334
  focusedCellBox() {
342
335
  const cellElement = this.focusedCellElement();
@@ -607,18 +600,6 @@ var DxGrid = class extends LitElement {
607
600
  </div>`;
608
601
  }
609
602
  firstUpdated() {
610
- if (this.getCells) {
611
- this.cells = this.getCells({
612
- start: {
613
- col: this.visColMin,
614
- row: this.visRowMin
615
- },
616
- end: {
617
- col: this.visColMax,
618
- row: this.visRowMax
619
- }
620
- });
621
- }
622
603
  this.observer.observe(this.viewportRef.value);
623
604
  this.colSizes = Object.entries(this.columns).reduce((acc, [colId, colMeta]) => {
624
605
  if (colMeta?.size) {
@@ -633,20 +614,6 @@ var DxGrid = class extends LitElement {
633
614
  return acc;
634
615
  }, {});
635
616
  }
636
- willUpdate(changedProperties) {
637
- if (this.getCells && (changedProperties.has("initialCells") || changedProperties.has("visColMin") || changedProperties.has("visColMax") || changedProperties.has("visRowMin") || changedProperties.has("visRowMax"))) {
638
- this.cells = this.getCells({
639
- start: {
640
- col: this.visColMin,
641
- row: this.visRowMin
642
- },
643
- end: {
644
- col: this.visColMax,
645
- row: this.visRowMax
646
- }
647
- });
648
- }
649
- }
650
617
  updated(changedProperties) {
651
618
  if (this.focusActive && (changedProperties.has("visRowMin") || changedProperties.has("visColMin") || changedProperties.has("focusedCell"))) {
652
619
  this.refocus();
@@ -691,15 +658,12 @@ _ts_decorate([
691
658
  property({
692
659
  type: Object
693
660
  })
694
- ], DxGrid.prototype, "initialCells", void 0);
661
+ ], DxGrid.prototype, "cells", void 0);
695
662
  _ts_decorate([
696
663
  property({
697
664
  type: String
698
665
  })
699
666
  ], DxGrid.prototype, "mode", void 0);
700
- _ts_decorate([
701
- state()
702
- ], DxGrid.prototype, "cells", void 0);
703
667
  _ts_decorate([
704
668
  state()
705
669
  ], DxGrid.prototype, "posInline", void 0);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dx-grid.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\nimport {\n type AxisMeta,\n type CellIndex,\n DxAxisResize,\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 @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 const resizeEvent = new DxAxisResize({\n axis: this.pointer.axis,\n index: this.pointer.index,\n size: this[this.pointer.axis === 'col' ? 'colSize' : 'rowSize'](this.pointer.index),\n });\n this.dispatchEvent(resizeEvent);\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 === 'resizing') {\n const delta = getPage(this.pointer.axis, event) - this.pointer.page;\n if (this.pointer.axis === 'col') {\n const nextSize = Math.max(sizeColMin, Math.min(sizeColMax, this.pointer.size + delta));\n this.colSizes = { ...this.colSizes, [this.pointer.index]: nextSize };\n this.updateVisInline();\n } else {\n const nextSize = Math.max(sizeRowMin, Math.min(sizeRowMax, this.pointer.size + delta));\n this.rowSizes = { ...this.rowSizes, [this.pointer.index]: nextSize };\n this.updateVisBlock();\n }\n } else 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 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 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\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 // 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 @pointerdown=${this.handlePointerDown}\n @pointerup=${this.handlePointerUp}\n @pointermove=${this.handlePointerMove}\n @pointerleave=${this.handlePointerUp}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @keydown=${this.handleKeydown}\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`<button class=\"dx-grid__resize-handle\" data-dx-grid-action=${`resize-col,${c}`}>\n <span class=\"sr-only\">Resize</span>\n </button>`}\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`<button class=\"dx-grid__resize-handle\" data-dx-grid-action=${`resize-row,${r}`}>\n <span class=\"sr-only\">Resize</span>\n </button>`}\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 { 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'>;\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 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", "separator", "toCellIndex", "cellCoords", "col", "row", "DxAxisResize", "Event", "constructor", "props", "axis", "index", "size", "DxEditRequest", "cellIndex", "cellBox", "initialContent", "DxGridCellsSelect", "start", "end", "toCellIndex", "minCol", "Math", "min", "col", "maxCol", "max", "minRow", "row", "maxRow", "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", "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", "resizeEvent", "DxAxisResize", "dispatchEvent", "cell", "DxGridCellsSelect", "start", "end", "handlePointerMove", "delta", "nextSize", "max", "min", "updateVisInline", "updateVisBlock", "observer", "ResizeObserver", "entries", "inlineSize", "blockSize", "contentBoxSize", "abs", "updateVis", "viewportRef", "createRef", "handleWheel", "deltaX", "deltaY", "initialContent", "snapPosToFocusedCell", "queueMicrotask", "DxEditRequest", "cellIndex", "toCellIndex", "cellBox", "focusedCellBox", "handleKeydown", "key", "length", "match", "c", "r", "separator", "focusedCellElement", "cellSize", "insetInlineStart", "NaN", "insetBlockStart", "contentElement", "offsetParent", "_translate3d", "inlineStr", "blockStr", "style", "transform", "contentOffsetInline", "parseFloat", "contentOffsetBlock", "offsetLeft", "offsetTop", "colIndex", "pxInline", "Array", "reduce", "acc", "map", "join", "rowIndex", "pxBlock", "handleFocus", "handleBlur", "relatedTarget", "value", "querySelector", "refocus", "increment", "focus", "preventScroll", "sizeSumCol", "sizeSumRow", "render", "visibleCols", "visibleRows", "offsetInline", "offsetBlock", "selectColMin", "selectColMax", "selectRowMin", "selectRowMax", "selectVisible", "html", "resizeable", "ref", "active", "selected", "className", "nothing", "firstUpdated", "observe", "Object", "colId", "colMeta", "rowId", "rowMeta", "willUpdate", "changedProperties", "has", "updated", "disconnectedCallback", "unobserve", "createRenderRoot", "property", "type", "eventOptions", "capture", "customElement"]
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\nimport {\n type AxisMeta,\n type CellIndex,\n type CellValue,\n DxAxisResize,\n DxEditRequest,\n type DxGridAxis,\n DxGridCellsSelect,\n type DxGridMode,\n type DxGridPointer,\n type DxGridPosition,\n type DxGridPositionNullable,\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 @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: Record<string, AxisMeta> = {};\n\n @property({ type: Object })\n columns: Record<string, AxisMeta> = {};\n\n @property({ type: Object })\n cells: Record<CellIndex, CellValue> = {};\n\n @property({ type: String })\n mode: DxGridMode = 'browse';\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 const resizeEvent = new DxAxisResize({\n axis: this.pointer.axis,\n index: this.pointer.index,\n size: this[this.pointer.axis === 'col' ? 'colSize' : 'rowSize'](this.pointer.index),\n });\n this.dispatchEvent(resizeEvent);\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 === 'resizing') {\n const delta = getPage(this.pointer.axis, event) - this.pointer.page;\n if (this.pointer.axis === 'col') {\n const nextSize = Math.max(sizeColMin, Math.min(sizeColMax, this.pointer.size + delta));\n this.colSizes = { ...this.colSizes, [this.pointer.index]: nextSize };\n this.updateVisInline();\n } else {\n const nextSize = Math.max(sizeRowMin, Math.min(sizeRowMax, this.pointer.size + delta));\n this.rowSizes = { ...this.rowSizes, [this.pointer.index]: nextSize };\n this.updateVisBlock();\n }\n } else 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 return this.cells[`${c}${separator}${r}`];\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 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 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\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 // 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 @pointerdown=${this.handlePointerDown}\n @pointerup=${this.handlePointerUp}\n @pointermove=${this.handlePointerMove}\n @pointerleave=${this.handlePointerUp}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @keydown=${this.handleKeydown}\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`<button class=\"dx-grid__resize-handle\" data-dx-grid-action=${`resize-col,${c}`}>\n <span class=\"sr-only\">Resize</span>\n </button>`}\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`<button class=\"dx-grid__resize-handle\" data-dx-grid-action=${`resize-row,${r}`}>\n <span class=\"sr-only\">Resize</span>\n </button>`}\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 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 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 { 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 DxGridPointer = null | ({ state: 'resizing'; page: number } & DxAxisResizeProps) | { state: 'selecting' };\n\nexport type DxAxisResizeProps = Pick<DxAxisResize, 'axis' | 'index' | 'size'>;\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, 'cells' | '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 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 DxSelectProps = { 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 }: DxSelectProps) {\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", "separator", "toCellIndex", "cellCoords", "col", "row", "DxAxisResize", "Event", "constructor", "props", "axis", "index", "size", "DxEditRequest", "cellIndex", "cellBox", "initialContent", "DxGridCellsSelect", "start", "end", "toCellIndex", "minCol", "Math", "min", "col", "maxCol", "max", "minRow", "row", "maxRow", "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", "gridId", "rowDefault", "size", "columnDefault", "rows", "columns", "cells", "mode", "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", "resizeEvent", "DxAxisResize", "dispatchEvent", "cell", "DxGridCellsSelect", "start", "end", "handlePointerMove", "delta", "nextSize", "max", "min", "updateVisInline", "updateVisBlock", "observer", "ResizeObserver", "entries", "inlineSize", "blockSize", "contentBoxSize", "abs", "updateVis", "viewportRef", "createRef", "handleWheel", "deltaX", "deltaY", "initialContent", "snapPosToFocusedCell", "queueMicrotask", "DxEditRequest", "cellIndex", "toCellIndex", "cellBox", "focusedCellBox", "handleKeydown", "key", "length", "match", "c", "r", "separator", "focusedCellElement", "cellSize", "insetInlineStart", "NaN", "insetBlockStart", "contentElement", "offsetParent", "_translate3d", "inlineStr", "blockStr", "style", "transform", "contentOffsetInline", "parseFloat", "contentOffsetBlock", "offsetLeft", "offsetTop", "colIndex", "pxInline", "Array", "reduce", "acc", "map", "join", "rowIndex", "pxBlock", "handleFocus", "handleBlur", "relatedTarget", "value", "querySelector", "refocus", "increment", "focus", "preventScroll", "sizeSumCol", "sizeSumRow", "render", "visibleCols", "visibleRows", "offsetInline", "offsetBlock", "selectColMin", "selectColMax", "selectRowMin", "selectRowMax", "selectVisible", "html", "resizeable", "ref", "active", "selected", "className", "nothing", "firstUpdated", "observe", "Object", "colId", "colMeta", "rowId", "rowMeta", "updated", "changedProperties", "has", "disconnectedCallback", "unobserve", "createRenderRoot", "property", "type", "eventOptions", "capture", "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":6856,"imports":[{"path":"packages/ui/lit-grid/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/lit-grid/src/dx-grid.ts":{"bytes":94042,"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":"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":48570},"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}],"exports":["DxAxisResize","DxEditRequest","DxGrid","DxGridCellsSelect"],"entryPoint":"packages/ui/lit-grid/src/index.ts","inputs":{"packages/ui/lit-grid/src/dx-grid.ts":{"bytesInOutput":24796},"packages/ui/lit-grid/src/util.ts":{"bytesInOutput":105},"packages/ui/lit-grid/src/types.ts":{"bytesInOutput":790},"packages/ui/lit-grid/src/index.ts":{"bytesInOutput":0}},"bytes":25955}}}
1
+ {"inputs":{"packages/ui/lit-grid/src/util.ts":{"bytes":1219,"imports":[],"format":"esm"},"packages/ui/lit-grid/src/types.ts":{"bytes":6696,"imports":[{"path":"packages/ui/lit-grid/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/lit-grid/src/dx-grid.ts":{"bytes":90202,"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":"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":46689},"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}],"exports":["DxAxisResize","DxEditRequest","DxGrid","DxGridCellsSelect"],"entryPoint":"packages/ui/lit-grid/src/index.ts","inputs":{"packages/ui/lit-grid/src/dx-grid.ts":{"bytesInOutput":23733},"packages/ui/lit-grid/src/util.ts":{"bytesInOutput":105},"packages/ui/lit-grid/src/types.ts":{"bytesInOutput":790},"packages/ui/lit-grid/src/index.ts":{"bytesInOutput":0}},"bytes":24892}}}
@@ -1,19 +1,13 @@
1
1
  import { LitElement } from 'lit';
2
- import { type AxisMeta, type DxGridAxisMeta, type DxGridCells, type DxGridMode, type DxGridRange } from './types';
2
+ import { type AxisMeta, type CellIndex, type CellValue, type DxGridMode } from './types';
3
3
  export declare class DxGrid extends LitElement {
4
4
  gridId: string;
5
5
  rowDefault: AxisMeta;
6
6
  columnDefault: AxisMeta;
7
- rows: DxGridAxisMeta;
8
- columns: DxGridAxisMeta;
9
- initialCells: DxGridCells;
7
+ rows: Record<string, AxisMeta>;
8
+ columns: Record<string, AxisMeta>;
9
+ cells: Record<CellIndex, CellValue>;
10
10
  mode: DxGridMode;
11
- /**
12
- * When this function is defined, it is used first to try to get a value for a cell, and otherwise will fall back
13
- * to `cells`.
14
- */
15
- getCells: ((nextRange: DxGridRange) => DxGridCells) | null;
16
- private cells;
17
11
  private posInline;
18
12
  private posBlock;
19
13
  private sizeInline;
@@ -65,7 +59,6 @@ export declare class DxGrid extends LitElement {
65
59
  snapPosToFocusedCell(): void;
66
60
  render(): import("lit").TemplateResult<1>;
67
61
  firstUpdated(): void;
68
- willUpdate(changedProperties: Map<string, any>): void;
69
62
  updated(changedProperties: Map<string, any>): void;
70
63
  disconnectedCallback(): void;
71
64
  createRenderRoot(): this;
@@ -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;AAIhD,OAAO,EACL,KAAK,QAAQ,EAKb,KAAK,cAAc,EACnB,KAAK,WAAW,EAEhB,KAAK,UAAU,EAIf,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAyEjB,qBACa,MAAO,SAAQ,UAAU;IAEpC,MAAM,EAAE,MAAM,CAAqB;IAGnC,UAAU,EAAE,QAAQ,CAAgB;IAGpC,aAAa,EAAE,QAAQ,CAAiB;IAGxC,IAAI,EAAE,cAAc,CAAM;IAG1B,OAAO,EAAE,cAAc,CAAM;IAG7B,YAAY,EAAE,WAAW,CAAM;IAG/B,IAAI,EAAE,UAAU,CAAY;IAE5B;;;OAGG;IACH,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,KAAK,WAAW,CAAC,GAAG,IAAI,CAAQ;IAGlE,OAAO,CAAC,KAAK,CAAmB;IAOhC,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,QAAQ,CAAK;IAOrB,OAAO,CAAC,UAAU,CAAK;IAGvB,OAAO,CAAC,SAAS,CAAK;IAOtB,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,aAAa,CAAK;IAO1B,OAAO,CAAC,YAAY,CAAK;IAGzB,OAAO,CAAC,YAAY,CAAmB;IAGvC,OAAO,CAAC,WAAW,CAAK;IAGxB,OAAO,CAAC,WAAW,CAAmB;IAQtC,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,SAAS,CAAK;IAMtB,OAAO,CAAC,eAAe,CAA0B;IAGjD,OAAO,CAAC,YAAY,CAA0B;IAO9C,OAAO,CAAC,OAAO,CAAuB;IAGtC,OAAO,CAAC,QAAQ,CAA8B;IAG9C,OAAO,CAAC,QAAQ,CAA8B;IAG9C,OAAO,CAAC,WAAW,CAAkB;IAGrC,OAAO,CAAC,WAAW,CAAsC;IAGzD,OAAO,CAAC,cAAc,CAAsC;IAG5D,OAAO,CAAC,YAAY,CAAsC;IAM1D,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,iBAAiB,CA8BvB;IAEF,OAAO,CAAC,eAAe,CAqBrB;IAEF,OAAO,CAAC,iBAAiB,CAkBvB;IAEF,OAAO,CAAC,aAAa;IA6CrB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,QAAQ,CAcb;IAEH,OAAO,CAAC,WAAW,CAAoC;IAEvD,OAAO,CAAC,WAAW,CAqBjB;IAEF,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAE,CAAC,GAAG,CAAC,CAAK;IAoBpD;;OAEG;IACH,oBAAoB;IAmDX,MAAM;IAgHN,YAAY;IAsBZ,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAgB9C,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAU3C,oBAAoB;IASpB,gBAAgB;CAG1B"}
1
+ {"version":3,"file":"dx-grid.d.ts","sourceRoot":"","sources":["../../../src/dx-grid.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAIhD,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,SAAS,EAKd,KAAK,UAAU,EAIhB,MAAM,SAAS,CAAC;AAyEjB,qBACa,MAAO,SAAQ,UAAU;IAEpC,MAAM,EAAE,MAAM,CAAqB;IAGnC,UAAU,EAAE,QAAQ,CAAgB;IAGpC,aAAa,EAAE,QAAQ,CAAiB;IAGxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAM;IAGpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAM;IAGvC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAM;IAGzC,IAAI,EAAE,UAAU,CAAY;IAO5B,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,QAAQ,CAAK;IAOrB,OAAO,CAAC,UAAU,CAAK;IAGvB,OAAO,CAAC,SAAS,CAAK;IAOtB,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,aAAa,CAAK;IAO1B,OAAO,CAAC,YAAY,CAAK;IAGzB,OAAO,CAAC,YAAY,CAAmB;IAGvC,OAAO,CAAC,WAAW,CAAK;IAGxB,OAAO,CAAC,WAAW,CAAmB;IAQtC,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,SAAS,CAAK;IAMtB,OAAO,CAAC,eAAe,CAA0B;IAGjD,OAAO,CAAC,YAAY,CAA0B;IAO9C,OAAO,CAAC,OAAO,CAAuB;IAGtC,OAAO,CAAC,QAAQ,CAA8B;IAG9C,OAAO,CAAC,QAAQ,CAA8B;IAG9C,OAAO,CAAC,WAAW,CAAkB;IAGrC,OAAO,CAAC,WAAW,CAAsC;IAGzD,OAAO,CAAC,cAAc,CAAsC;IAG5D,OAAO,CAAC,YAAY,CAAsC;IAM1D,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,iBAAiB,CA8BvB;IAEF,OAAO,CAAC,eAAe,CAqBrB;IAEF,OAAO,CAAC,iBAAiB,CAkBvB;IAEF,OAAO,CAAC,aAAa;IA6CrB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,QAAQ,CAcb;IAEH,OAAO,CAAC,WAAW,CAAoC;IAEvD,OAAO,CAAC,WAAW,CAqBjB;IAEF,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAE,CAAC,GAAG,CAAC,CAAK;IAoBpD;;OAEG;IACH,oBAAoB;IAmDX,MAAM;IAgHN,YAAY;IAgBZ,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAU3C,oBAAoB;IASpB,gBAAgB;CAG1B"}
@@ -3,8 +3,6 @@ export type CellIndex = `${string},${string}`;
3
3
  export type DxGridAxis = 'row' | 'col';
4
4
  export type DxGridPosition = Record<DxGridAxis, number>;
5
5
  export type DxGridPositionNullable = DxGridPosition | null;
6
- export type DxGridCells = Record<CellIndex, CellValue>;
7
- export type DxGridAxisMeta = Record<string, AxisMeta>;
8
6
  export type DxGridPointer = null | ({
9
7
  state: 'resizing';
10
8
  page: number;
@@ -32,7 +30,7 @@ export type AxisMeta = {
32
30
  description?: string;
33
31
  resizeable?: boolean;
34
32
  };
35
- export type DxGridProps = Partial<Pick<DxGrid, 'initialCells' | 'rows' | 'columns' | 'rowDefault' | 'columnDefault'>>;
33
+ export type DxGridProps = Partial<Pick<DxGrid, 'cells' | 'rows' | 'columns' | 'rowDefault' | 'columnDefault'>>;
36
34
  export declare class DxAxisResize extends Event {
37
35
  readonly axis: DxGridAxis;
38
36
  readonly index: string;
@@ -46,7 +44,7 @@ export declare class DxEditRequest extends Event {
46
44
  readonly initialContent?: string;
47
45
  constructor(props: DxEditRequestProps);
48
46
  }
49
- export type DxGridRange = {
47
+ export type DxSelectProps = {
50
48
  start: DxGridPosition;
51
49
  end: DxGridPosition;
52
50
  };
@@ -57,6 +55,6 @@ export declare class DxGridCellsSelect extends Event {
57
55
  readonly maxCol: number;
58
56
  readonly minRow: number;
59
57
  readonly maxRow: number;
60
- constructor({ start, end }: DxGridRange);
58
+ constructor({ start, end }: DxSelectProps);
61
59
  }
62
60
  //# sourceMappingURL=types.d.ts.map
@@ -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;AAE9E,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,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC;AAEtH,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,MAAM,CAAC;gBACjB,KAAK,EAAE,iBAAiB;CAMrC;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,SAAS,GAAG,gBAAgB,CAAC,CAAC;AAEjG,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,SAAgB,OAAO,EAAE,MAAM,CAAC,kBAAkB,GAAG,iBAAiB,GAAG,YAAY,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7G,SAAgB,cAAc,CAAC,EAAE,MAAM,CAAC;gBAC5B,KAAK,EAAE,kBAAkB;CAMtC;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,CAAC;AAEzE,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAC;gBACnB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,WAAW;CASxC"}
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,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;AAE9E,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,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC;AAE/G,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,MAAM,CAAC;gBACjB,KAAK,EAAE,iBAAiB;CAMrC;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,SAAS,GAAG,gBAAgB,CAAC,CAAC;AAEjG,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,SAAgB,OAAO,EAAE,MAAM,CAAC,kBAAkB,GAAG,iBAAiB,GAAG,YAAY,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7G,SAAgB,cAAc,CAAC,EAAE,MAAM,CAAC;gBAC5B,KAAK,EAAE,kBAAkB;CAMtC;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,CAAC;AAE3E,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAC;gBACnB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,aAAa;CAS1C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/lit-grid",
3
- "version": "0.6.12-main.c4a728f",
3
+ "version": "0.6.12-main.c974201",
4
4
  "description": "A grid Web Component using Lit",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -17,7 +17,7 @@ export default {
17
17
  export const Basic = (props: DxGridProps) => {
18
18
  return html`<div style="position:fixed;inset:0;">
19
19
  <dx-grid
20
- cells=${props.initialCells ?? nothing}
20
+ cells=${props.cells ?? nothing}
21
21
  columnDefault=${props.columnDefault ?? nothing}
22
22
  rowDefault=${props.rowDefault ?? nothing}
23
23
  columns=${props.columns ?? nothing}
@@ -31,7 +31,7 @@ Basic.args = {
31
31
  // end: '8,1',
32
32
  value: 'Weekly sales report',
33
33
  },
34
- } satisfies DxGridProps['initialCells']),
34
+ } satisfies DxGridProps['cells']),
35
35
  columnDefault: JSON.stringify({
36
36
  size: 180,
37
37
  resizeable: true,
package/src/dx-grid.ts CHANGED
@@ -9,17 +9,15 @@ import { ref, createRef, type Ref } from 'lit/directives/ref.js';
9
9
  import {
10
10
  type AxisMeta,
11
11
  type CellIndex,
12
+ type CellValue,
12
13
  DxAxisResize,
13
14
  DxEditRequest,
14
15
  type DxGridAxis,
15
- type DxGridAxisMeta,
16
- type DxGridCells,
17
16
  DxGridCellsSelect,
18
17
  type DxGridMode,
19
18
  type DxGridPointer,
20
19
  type DxGridPosition,
21
20
  type DxGridPositionNullable,
22
- type DxGridRange,
23
21
  } from './types';
24
22
  import { separator, toCellIndex } from './util';
25
23
 
@@ -105,26 +103,17 @@ export class DxGrid extends LitElement {
105
103
  columnDefault: AxisMeta = { size: 180 };
106
104
 
107
105
  @property({ type: Object })
108
- rows: DxGridAxisMeta = {};
106
+ rows: Record<string, AxisMeta> = {};
109
107
 
110
108
  @property({ type: Object })
111
- columns: DxGridAxisMeta = {};
109
+ columns: Record<string, AxisMeta> = {};
112
110
 
113
111
  @property({ type: Object })
114
- initialCells: DxGridCells = {};
112
+ cells: Record<CellIndex, CellValue> = {};
115
113
 
116
114
  @property({ type: String })
117
115
  mode: DxGridMode = 'browse';
118
116
 
119
- /**
120
- * When this function is defined, it is used first to try to get a value for a cell, and otherwise will fall back
121
- * to `cells`.
122
- */
123
- getCells: ((nextRange: DxGridRange) => DxGridCells) | null = null;
124
-
125
- @state()
126
- private cells: DxGridCells = {};
127
-
128
117
  //
129
118
  // `pos`, short for ‘position’, is the position in pixels of the viewport from the origin.
130
119
  //
@@ -369,8 +358,7 @@ export class DxGrid extends LitElement {
369
358
  }
370
359
 
371
360
  private cell(c: number | string, r: number | string) {
372
- const index: CellIndex = `${c}${separator}${r}`;
373
- return this.cells[index] ?? this.initialCells[index];
361
+ return this.cells[`${c}${separator}${r}`];
374
362
  }
375
363
 
376
364
  private focusedCellBox(): DxEditRequest['cellBox'] {
@@ -726,12 +714,6 @@ export class DxGrid extends LitElement {
726
714
  }
727
715
 
728
716
  override firstUpdated() {
729
- if (this.getCells) {
730
- this.cells = this.getCells({
731
- start: { col: this.visColMin, row: this.visRowMin },
732
- end: { col: this.visColMax, row: this.visRowMax },
733
- });
734
- }
735
717
  this.observer.observe(this.viewportRef.value!);
736
718
  this.colSizes = Object.entries(this.columns).reduce((acc: Record<string, number>, [colId, colMeta]) => {
737
719
  if (colMeta?.size) {
@@ -747,22 +729,6 @@ export class DxGrid extends LitElement {
747
729
  }, {});
748
730
  }
749
731
 
750
- override willUpdate(changedProperties: Map<string, any>) {
751
- if (
752
- this.getCells &&
753
- (changedProperties.has('initialCells') ||
754
- changedProperties.has('visColMin') ||
755
- changedProperties.has('visColMax') ||
756
- changedProperties.has('visRowMin') ||
757
- changedProperties.has('visRowMax'))
758
- ) {
759
- this.cells = this.getCells({
760
- start: { col: this.visColMin, row: this.visRowMin },
761
- end: { col: this.visColMax, row: this.visRowMax },
762
- });
763
- }
764
- }
765
-
766
732
  override updated(changedProperties: Map<string, any>) {
767
733
  // Update the focused element if there is a change in bounds (otherwise Lit keeps focus on the relative element).
768
734
  if (
package/src/types.ts CHANGED
@@ -12,10 +12,6 @@ export type DxGridAxis = 'row' | 'col';
12
12
  export type DxGridPosition = Record<DxGridAxis, number>;
13
13
  export type DxGridPositionNullable = DxGridPosition | null;
14
14
 
15
- export type DxGridCells = Record<CellIndex, CellValue>;
16
-
17
- export type DxGridAxisMeta = Record<string, AxisMeta>;
18
-
19
15
  export type DxGridPointer = null | ({ state: 'resizing'; page: number } & DxAxisResizeProps) | { state: 'selecting' };
20
16
 
21
17
  export type DxAxisResizeProps = Pick<DxAxisResize, 'axis' | 'index' | 'size'>;
@@ -43,7 +39,7 @@ export type AxisMeta = {
43
39
  resizeable?: boolean;
44
40
  };
45
41
 
46
- export type DxGridProps = Partial<Pick<DxGrid, 'initialCells' | 'rows' | 'columns' | 'rowDefault' | 'columnDefault'>>;
42
+ export type DxGridProps = Partial<Pick<DxGrid, 'cells' | 'rows' | 'columns' | 'rowDefault' | 'columnDefault'>>;
47
43
 
48
44
  export class DxAxisResize extends Event {
49
45
  public readonly axis: DxGridAxis;
@@ -71,7 +67,7 @@ export class DxEditRequest extends Event {
71
67
  }
72
68
  }
73
69
 
74
- export type DxGridRange = { start: DxGridPosition; end: DxGridPosition };
70
+ export type DxSelectProps = { start: DxGridPosition; end: DxGridPosition };
75
71
 
76
72
  export class DxGridCellsSelect extends Event {
77
73
  public readonly start: string;
@@ -80,7 +76,7 @@ export class DxGridCellsSelect extends Event {
80
76
  public readonly maxCol: number;
81
77
  public readonly minRow: number;
82
78
  public readonly maxRow: number;
83
- constructor({ start, end }: DxGridRange) {
79
+ constructor({ start, end }: DxSelectProps) {
84
80
  super('dx-grid-cells-select');
85
81
  this.start = toCellIndex(start);
86
82
  this.end = toCellIndex(end);