1 line
50 KiB
Plaintext
1 line
50 KiB
Plaintext
{"version":3,"file":"main.cjs","sources":["../src/modules/renderBox.ts","../src/components/editor.ts","../src/components/header.ts","../src/components/scroller.ts","../src/modules/cell.ts","../src/components/sheet.ts","../src/components/table.ts","../src/components/toolbar.ts","../src/modules/config.ts","../src/modules/selection.ts","../src/modules/styles.ts","../src/modules/viewport.ts","../src/modules/column.ts","../src/modules/row.ts","../src/utils/createData.ts","../src/modules/cache.ts","../src/main.ts"],"sourcesContent":["export class RenderBox {\n x;\n y;\n width;\n height;\n constructor(config, cellPosition) {\n this.x = this.getXCoord(cellPosition.column, config);\n this.y = this.getYCoord(cellPosition.row, config);\n this.width = config.columns[cellPosition.column].width;\n this.height = config.rows[cellPosition.row].height;\n }\n getXCoord(column, config) {\n let x = 0;\n for (let i = 0; i < column; i++) {\n x += config.columns[i].width;\n }\n return x;\n }\n getYCoord(row, config) {\n let y = 0;\n for (let i = 0; i < row; i++) {\n y += config.rows[i].height;\n }\n return y;\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nimport { RenderBox } from \"../modules/renderBox\";\nexport class Editor {\n element;\n root;\n constructor(root) {\n this.root = root;\n const element = document.createElement('input');\n element.classList.add(CSS_PREFIX + 'editor');\n this.element = element;\n this.hide();\n }\n hide() {\n this.element.style.display = 'none';\n this.element.classList.add('hide');\n this.element.blur();\n window.removeEventListener('click', this.handleClickOutside);\n this.element.removeEventListener('keydown', this.handleKeydown);\n this.root.focusTable();\n }\n show(position, initialString) {\n const { height, width, x, y } = new RenderBox(this.root.config, position);\n const cell = this.root.getCell(position);\n this.element.classList.remove('hide');\n this.element.style.top = (y - this.root.viewport.top) + 'px';\n this.element.style.left = (x - this.root.viewport.left) + 'px';\n this.element.style.width = width + 'px';\n this.element.style.height = height + 'px';\n this.element.style.display = 'block';\n window.addEventListener('click', this.handleClickOutside);\n this.element.addEventListener('keydown', this.handleKeydown);\n this.element.value = initialString ? initialString : cell.value;\n this.element.focus();\n if (!initialString)\n this.element.select();\n }\n handleKeydown = (event) => {\n const { key } = event;\n switch (key) {\n case 'Escape': {\n this.hide();\n break;\n }\n case 'Enter': {\n this.root.changeCellValues(this.root.selection.selectedCell, {\n value: this.element.value,\n displayValue: this.element.value\n });\n this.hide();\n }\n }\n };\n handleClickOutside = (event) => {\n const target = event.target;\n if (!this.element.contains(target)) {\n this.hide();\n }\n };\n}\n","export class Header {\n element;\n root;\n constructor(root) {\n this.root = root;\n const headerElement = document.createElement('header');\n headerElement.classList.add();\n this.element = headerElement;\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nexport class Scroller {\n element;\n verticalScroller;\n horizontalScroller;\n root;\n isSelecting = false;\n constructor(root) {\n this.root = root;\n const { horizontalScroller, scroller, verticalScroller } = this.buildComponent();\n this.element = scroller;\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n this.element.style.height = this.root.config.view.height + 'px';\n this.element.style.width = this.root.config.view.width + 'px';\n this.element.tabIndex = -1;\n this.updateScrollerSize(); //* Init size set\n this.element.addEventListener('scroll', this.handleScroll);\n this.element.addEventListener('mousedown', this.handleClick);\n this.element.addEventListener('mousemove', this.handleMouseMove);\n this.element.addEventListener('mouseup', this.handleMouseUp);\n this.element.addEventListener('dblclick', this.handleDoubleClick);\n this.element.addEventListener('keydown', this.handleKeydown);\n }\n handleMouseMove = (event) => {\n if (!this.isSelecting)\n return;\n const { offsetX, offsetY } = event;\n const lastSelectedCell = this.root.getCellByCoords(offsetX, offsetY);\n if (this.root.selection.selectedRange) {\n this.root.selection.selectedRange.to = lastSelectedCell;\n }\n this.root.renderSheet();\n };\n handleMouseUp = () => {\n this.isSelecting = false;\n if (this.root.selection.selectedRange) {\n if ((this.root.selection.selectedRange.from.row === this.root.selection.selectedRange.to.row) &&\n (this.root.selection.selectedRange.from.column === this.root.selection.selectedRange.to.column)) {\n this.root.selection.selectedRange = null;\n }\n }\n this.root.renderSheet();\n };\n handleDoubleClick = (event) => {\n event.preventDefault();\n const position = this.root.getCellByCoords(event.offsetX, event.offsetY);\n this.root.showEditor(position);\n };\n handleKeydown = (event) => {\n console.log(event);\n //* Navigation\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(event.key)) {\n event.preventDefault();\n this.root.selection.selectedRange = null;\n switch (event.key) {\n case 'ArrowLeft': {\n if (this.root.selection.selectedCell && this.root.selection.selectedCell.column > 0) {\n console.log('tick');\n this.root.selection.selectedCell.column -= 1;\n this.root.renderSheet();\n }\n break;\n }\n case 'ArrowRight': {\n if (this.root.selection.selectedCell && this.root.selection.selectedCell.column < this.root.config.columns.length - 1) {\n this.root.selection.selectedCell.column += 1;\n this.root.renderSheet();\n }\n break;\n }\n case 'ArrowUp': {\n if (this.root.selection.selectedCell && this.root.selection.selectedCell.row > 0) {\n this.root.selection.selectedCell.row -= 1;\n this.root.renderSheet();\n }\n break;\n }\n case 'ArrowDown': {\n if (this.root.selection.selectedCell && this.root.selection.selectedCell.row < this.root.config.rows.length - 1) {\n this.root.selection.selectedCell.row += 1;\n this.root.renderSheet();\n }\n break;\n }\n }\n }\n const keysRegex = /^([a-z]|[а-я])$/;\n if (!event.metaKey && !event.ctrlKey) { //* Prevent handle shortcutrs\n const isPressedLetterKey = keysRegex.test(event.key.toLowerCase());\n if (event.key === 'F2' || isPressedLetterKey) { //* English and Russian keyboard. Or F2 button\n event.preventDefault();\n if (!this.root.selection.selectedCell)\n return;\n this.root.showEditor(this.root.selection.selectedCell, isPressedLetterKey ? event.key : undefined);\n }\n }\n if (event.key === 'Delete') {\n event.preventDefault();\n this.root.deleteSelectedCellsValues();\n this.root.renderSheet();\n }\n };\n handleClick = (event) => {\n if (event.button !== 0)\n return; // Left mouse button\n const { offsetX, offsetY } = event;\n const clickedCell = this.root.getCellByCoords(offsetX, offsetY);\n this.isSelecting = true;\n this.root.selection.selectedRange = {\n from: clickedCell,\n to: clickedCell\n };\n this.root.selection.selectedCell = clickedCell;\n this.root.renderSheet();\n };\n handleScroll = () => {\n const rect = this.getViewportBoundlingRect();\n this.root.viewport.updateValues(rect);\n this.root.renderSheet();\n };\n getViewportBoundlingRect() {\n const { scrollTop, scrollLeft } = this.element;\n const { height, width } = this.element.getBoundingClientRect();\n const bottom = scrollTop + height;\n const right = scrollLeft + width;\n return {\n top: scrollTop,\n left: scrollLeft,\n bottom,\n right\n };\n }\n buildComponent() {\n const scroller = document.createElement('div');\n const verticalScroller = document.createElement('div');\n const horizontalScroller = document.createElement('div');\n const groupScrollers = document.createElement('div');\n const stack = document.createElement('div');\n verticalScroller.style.width = '0px';\n verticalScroller.style.pointerEvents = 'none';\n horizontalScroller.style.pointerEvents = 'none';\n groupScrollers.style.display = 'flex';\n stack.appendChild(verticalScroller);\n stack.appendChild(horizontalScroller);\n groupScrollers.appendChild(stack);\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n scroller.appendChild(groupScrollers);\n scroller.classList.add(CSS_PREFIX + 'scroller');\n return { scroller, verticalScroller, horizontalScroller };\n }\n getActualHeight() {\n return this.root.config.rows.reduce((acc, curr) => {\n acc += curr.height;\n return acc;\n }, 0);\n }\n getActualWidth() {\n return this.root.config.columns.reduce((acc, curr) => {\n acc += curr.width;\n return acc;\n }, 0);\n }\n updateScrollerSize() {\n const totalHeight = this.getActualHeight();\n const totalWidth = this.getActualWidth();\n this.setScrollerHeight(totalHeight);\n this.setScrollerWidth(totalWidth);\n }\n setScrollerHeight(height) {\n this.verticalScroller.style.height = height + 'px';\n }\n setScrollerWidth(width) {\n this.horizontalScroller.style.width = width + 'px';\n }\n}\n","import { RenderBox } from \"./renderBox\";\nexport class CellStyles {\n fontSize = 16;\n fontColor = 'black';\n background = 'white';\n borderColor = 'black';\n selectedBackground = '#4287f5';\n selectedFontColor = '#ffffff';\n constructor(props) {\n if (props) {\n Object.assign(this, props); // Override default styles\n }\n }\n}\nexport class Position {\n row;\n column;\n constructor(row, column) {\n this.row = row;\n this.column = column;\n }\n}\nexport class SerializableCell {\n value;\n displayValue;\n resultValue;\n position;\n style;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n}\nexport class Cell {\n /** True value (data) */\n value;\n /** Value to render */\n displayValue;\n /** This refers to the values that were obtained by calculations, for example, after calculating the formula */\n resultValue;\n position;\n style = null;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n getSerializableCell() {\n const cell = new SerializableCell({\n displayValue: this.displayValue,\n position: this.position,\n resultValue: this.resultValue,\n style: this.style,\n value: this.value\n });\n return cell;\n }\n changeStyles(styles) {\n this.style = styles;\n }\n changeValues(values) {\n Object.assign(this, values);\n }\n isCellInRange(root) {\n const { column, row } = this.position;\n const { selectedRange } = root.selection;\n if (!selectedRange)\n return false;\n const isCellInRow = row >= Math.min(selectedRange.from.row, selectedRange.to.row) && row <= Math.max(selectedRange.to.row, selectedRange.from.row);\n const isCellInCol = column >= Math.min(selectedRange.from.column, selectedRange.to.column) && column <= Math.max(selectedRange.to.column, selectedRange.from.column);\n return isCellInCol && isCellInRow;\n }\n render(root) {\n let { height, width, x, y } = new RenderBox(root.config, this.position);\n const { ctx } = root;\n const isCellSelected = (root.selection.selectedCell?.row === this.position.row && root.selection.selectedCell.column === this.position.column);\n const isCellInRange = this.isCellInRange(root);\n y -= root.viewport.top;\n x -= root.viewport.left;\n const styles = this.style ?? root.styles.cells;\n ctx.clearRect(x, y, width, height);\n ctx.fillStyle = isCellSelected || isCellInRange ? styles.selectedBackground : styles.background;\n ctx.strokeStyle = 'black';\n ctx.fillRect(x, y, width - 1, height - 1);\n ctx.strokeRect(x, y, width, height);\n ctx.fillStyle = isCellSelected || isCellInRange ? styles.selectedFontColor : styles.fontColor;\n ctx.textAlign = 'left';\n ctx.font = `${styles.fontSize}px Arial`;\n ctx.textBaseline = 'middle';\n ctx.fillText(this.displayValue, x + 2, y + height / 2);\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nimport { Position } from \"../modules/cell\";\n/**\n * Display (CANVAS) element where cells render\n */\nexport class Sheet {\n element;\n ctx;\n root;\n constructor(root) {\n this.root = root;\n const canvas = document.createElement('canvas');\n canvas.classList.add(CSS_PREFIX + 'sheet');\n //* Set up canvas sizes based on provided root config\n canvas.height = this.root.config.view.height;\n canvas.width = this.root.config.view.width;\n canvas.style.width = this.root.config.view.width + 'px';\n canvas.style.height = this.root.config.view.height + 'px';\n this.element = canvas;\n const ctx = this.element.getContext('2d');\n if (!ctx)\n throw new Error('Enable hardware acceleration');\n this.ctx = ctx;\n }\n getCellByCoords(x, y) {\n let row = 0;\n let height = 0;\n while (height <= y) {\n height += this.root.config.rows[row].height;\n if (height >= y)\n break;\n row++;\n }\n let col = 0;\n let width = 0;\n while (width <= x) {\n width += this.root.config.columns[col].width;\n if (width >= x)\n break;\n col++;\n }\n return new Position(row, col);\n }\n renderCell(position) {\n const { column, row } = position;\n this.root.data[row][column].render(this.root);\n }\n renderSheet() {\n const firstRowIdx = this.root.viewport.firstRow;\n const lastColIdx = this.root.viewport.lastCol + 3;\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstColIdx = this.root.viewport.firstCol;\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col] || !this.root.config.rows[row])\n break; //* Prevent read undefined\n this.renderCell({ column: col, row });\n }\n }\n }\n}\n","import { CSS_PREFIX } from \"../main\";\n/** Base (root) component */\nexport class Table {\n element;\n root;\n constructor(root) {\n this.root = root;\n const container = document.createElement('div');\n container.classList.add(CSS_PREFIX + 'spreadsheet_container');\n this.element = container;\n this.changeElementSizes(this.root.viewProps);\n }\n changeElementSizes(sizes) {\n const { height, width } = sizes;\n this.element.style.width = width + 'px';\n this.element.style.height = height + 'px';\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nexport class Toolbar {\n element;\n root;\n constructor(root) {\n this.root = root;\n const toolbarElement = document.createElement('div');\n toolbarElement.classList.add(CSS_PREFIX + 'toolbar');\n this.element = toolbarElement;\n }\n}\n","export class Config {\n rows;\n columns;\n view = {\n width: 800,\n height: 600,\n };\n constructor(props) {\n this.columns = props.columns;\n this.rows = props.rows;\n this.view = props.view;\n }\n}\n","export class Selection {\n selectedCell = null;\n selectedRange = null;\n}\n","import { CellStyles } from \"./cell\";\nexport class Styles {\n cells;\n constructor() {\n this.cells = new CellStyles();\n }\n}\n","export class Viewport {\n root;\n top;\n left;\n right;\n bottom;\n firstRow;\n lastRow;\n firstCol;\n lastCol;\n constructor(root, props) {\n this.root = root;\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastCol = this.getFirstRow(); //!Temp\n this.firstCol = this.getFirstRow(); //!Temp\n this.lastRow = this.getLastRow();\n this.updateValues({\n top: 0,\n left: 0,\n right: this.root.viewProps.width,\n bottom: this.root.viewProps.height\n });\n }\n updateValues(props) {\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastRow = this.getLastRow();\n this.firstCol = this.getFirstCol();\n this.lastCol = this.getLastCol();\n }\n /** Get index of first row in viewport */\n getFirstRow() {\n let rowIdx = this.root.cache.getRowByYCoord(this.top);\n return rowIdx;\n }\n getLastRow() {\n let rowIdx = this.root.cache.getRowByYCoord(this.bottom);\n return rowIdx;\n }\n getFirstCol() {\n let colIdx = this.root.cache.getColumnByXCoord(this.left);\n return colIdx;\n }\n getLastCol() {\n let colIdx = this.root.cache.getColumnByXCoord(this.right);\n return colIdx;\n }\n}\n","export class Column {\n width;\n title;\n constructor(props) {\n this.width = props.width;\n this.title = props.title;\n }\n}\n","export class Row {\n height;\n title;\n constructor(props) {\n this.height = props.height;\n this.title = props.title;\n }\n}\n","import { Cell } from \"../modules/cell\";\nimport { Column } from \"../modules/column\";\nimport { Config } from \"../modules/config\";\nimport { Row } from \"../modules/row\";\nexport function createSampleData(rows, columns, fillCellsByCoords = false) {\n const data = [];\n for (let row = 0; row <= rows; row++) {\n const innerRow = [];\n for (let col = 0; col <= columns; col++) {\n const value = fillCellsByCoords ? `${row}:${col}` : '';\n const cell = new Cell({\n displayValue: value,\n resultValue: value,\n value,\n position: {\n column: col,\n row: row\n },\n style: null\n });\n innerRow.push(cell);\n }\n data.push(innerRow);\n }\n return data;\n}\nexport function createSampleConfig(rows, columns) {\n const rowsArr = [];\n for (let i = 0; i <= rows; i++) {\n const rowItem = new Row({\n height: 40,\n title: String(i)\n });\n rowsArr.push(rowItem);\n }\n const colsArr = [];\n for (let i = 0; i <= columns; i++) {\n const colItem = new Column({\n title: String(i),\n width: 150\n });\n colsArr.push(colItem);\n }\n const config = new Config({\n columns: colsArr,\n rows: rowsArr,\n view: {\n height: 600,\n width: 800\n }\n });\n return config;\n}\nexport function makeSpreadsheetConfigAndData(rows, columns) {\n const data = createSampleData(rows, columns);\n const config = createSampleConfig(rows, columns);\n return { data, config };\n}\n","export class CachedColumn {\n xPos;\n colIdx;\n constructor(props) {\n this.xPos = props.xPos;\n this.colIdx = props.colIdx;\n }\n}\nexport class CachedRow {\n yPos;\n rowIdx;\n constructor(props) {\n this.yPos = props.yPos;\n this.rowIdx = props.rowIdx;\n }\n}\nexport class Cache {\n columns;\n rows;\n constructor(initial) {\n this.columns = initial.columns;\n this.rows = initial.rows;\n }\n getRowByYCoord(y) {\n let rowIdx = 0;\n for (let i = 0; i < this.rows.length; i++) {\n if (y <= this.rows[i].yPos) { //* Intersection detect\n rowIdx = i;\n break;\n }\n }\n return rowIdx;\n }\n getColumnByXCoord(x) {\n let colIdx = 0;\n for (let i = 0; i < this.columns.length; i++) {\n if (x <= this.columns[i].xPos) { //* Intersection detect\n colIdx = i;\n break;\n }\n }\n return colIdx;\n }\n}\n","import { Editor } from \"./components/editor\";\nimport { Header } from \"./components/header\";\nimport { Scroller } from \"./components/scroller\";\nimport { Sheet } from \"./components/sheet\";\nimport { Table } from \"./components/table\";\nimport { Toolbar } from \"./components/toolbar\";\nimport { Cell } from \"./modules/cell\";\nimport { Config } from \"./modules/config\";\nimport { Selection } from \"./modules/selection\";\nimport { Styles } from \"./modules/styles\";\nimport { Viewport } from \"./modules/viewport\";\nimport './scss/main.scss';\nimport { createSampleData } from \"./utils/createData\";\nimport { Cache, CachedColumn, CachedRow } from \"./modules/cache\";\nimport { Row } from \"./modules/row\";\nimport { Column } from \"./modules/column\";\nexport const CSS_PREFIX = \"modern_sc_\";\nexport default class Spreadsheet {\n table;\n scroller;\n toolbar;\n header;\n sheet;\n editor;\n styles;\n config;\n data;\n viewport;\n selection;\n cache;\n constructor(target, props) {\n const data = createSampleData(40, 40);\n const config = this.makeConfigFromData(data, props?.view ?? { height: 600, width: 800 });\n if (props?.view) {\n config.view = props.view;\n }\n this.config = new Config(config);\n this.sheet = new Sheet(this);\n this.table = new Table(this);\n this.scroller = new Scroller(this);\n this.toolbar = new Toolbar(this);\n this.header = new Header(this);\n this.editor = new Editor(this);\n this.cache = this.getInitialCache();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.selection = new Selection();\n this.data = data;\n this.styles = new Styles();\n this.buildComponent();\n this.appendTableToTarget(target);\n this.renderSheet();\n }\n getInitialCache() {\n const cachedCols = [];\n let currentWidth = 0;\n for (let i = 0; i <= this.config.columns.length - 1; i++) {\n const col = this.config.columns[i];\n currentWidth += col.width;\n const cacheCol = new CachedColumn({\n xPos: currentWidth,\n colIdx: i\n });\n cachedCols.push(cacheCol);\n }\n const cachedRows = [];\n let currentHeight = 0;\n for (let i = 0; i <= this.config.rows.length - 1; i++) {\n const row = this.config.rows[i];\n currentHeight += row.height;\n const cacheRow = new CachedRow({\n yPos: currentHeight,\n rowIdx: i\n });\n cachedRows.push(cacheRow);\n }\n const cache = new Cache({\n columns: cachedCols,\n rows: cachedRows\n });\n console.log(\"CACHE: \", cache);\n console.log(\"CONFIG: \", this.config);\n return cache;\n }\n buildComponent() {\n const content = document.createElement('div'); //* Abstract\n content.appendChild(this.header.element);\n content.appendChild(this.sheet.element);\n content.classList.add(CSS_PREFIX + 'content');\n this.table.element.appendChild(this.toolbar.element);\n this.table.element.appendChild(content);\n this.table.element.appendChild(this.scroller.element);\n this.table.element.append(this.editor.element);\n }\n /**Destroy spreadsheet DOM element.\n *\n * May be usefull when need to rerender component.\n */\n destroy() {\n this.table.element.remove();\n }\n appendTableToTarget(target) {\n if (typeof target === 'string') {\n const element = document.querySelector(target);\n if (!element)\n throw new Error(`Element with selector ${target} is not finded in DOM.\\n Make sure it exists.`);\n element?.appendChild(this.table.element);\n }\n if (target instanceof HTMLElement) {\n target.append(this.table.element);\n }\n }\n /** Canvas rendering context 2D.\n *\n * Abble to draw on canvas with default CanvasAPI methods\n */\n get ctx() {\n return this.sheet.ctx;\n }\n get viewProps() {\n return this.config.view;\n }\n /** Focusing on interactive part of spreadsheet */\n focusTable() {\n this.scroller.element.focus();\n }\n getCellByCoords(x, y) {\n return this.sheet.getCellByCoords(x, y);\n }\n getCell(position) {\n const { column, row } = position;\n return this.data[row][column];\n }\n changeCellValues(position, values) {\n const { column, row } = position;\n this.data[row][column].changeValues(values);\n this.renderCell(row, column);\n }\n changeCellStyles(position, styles) {\n const { column, row } = position;\n this.data[row][column].changeStyles(styles);\n this.renderCell(row, column);\n }\n applyActionToRange(range, callback) {\n const fromRow = Math.min(range.from.row, range.to.row);\n const toRow = Math.max(range.from.row, range.to.row);\n const fromCol = Math.min(range.from.column, range.to.column);\n const toCol = Math.max(range.from.column, range.to.column);\n for (let row = fromRow; row <= toRow; row++) {\n for (let col = fromCol; col <= toCol; col++) {\n const cell = this.data[row][col];\n callback(cell);\n }\n }\n }\n deleteSelectedCellsValues() {\n if (this.selection.selectedRange !== null) {\n this.applyActionToRange(this.selection.selectedRange, cell => {\n this.changeCellValues(cell.position, {\n displayValue: '',\n resultValue: '',\n value: ''\n });\n });\n }\n else {\n if (!this.selection.selectedCell)\n return;\n this.changeCellValues(this.selection.selectedCell, {\n displayValue: '',\n resultValue: '',\n value: ''\n });\n }\n }\n showEditor(position, initialString) {\n this.editor.show(position, initialString);\n }\n renderSheet() {\n this.sheet.renderSheet();\n }\n renderCell(row, col) {\n this.data[row][col].render(this);\n }\n loadData(data) {\n const rowsLength = data.length;\n const colsLength = data[0] ? this.data[0].length : 0;\n this.data = [];\n const formattedData = [];\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n const cell = data[row][col];\n innerRow.push(new Cell({\n displayValue: cell.displayValue,\n position: cell.position,\n resultValue: cell.resultValue,\n value: cell.value,\n style: cell.style\n }));\n }\n formattedData.push(innerRow);\n }\n this.data = formattedData;\n this.selection.selectedCell = null;\n this.selection.selectedRange = null;\n this.config = this.makeConfigFromData(formattedData, this.config.view);\n this.cache = this.getInitialCache();\n this.scroller.updateScrollerSize();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.renderSheet();\n return this;\n }\n makeConfigFromData(data, view) {\n const lastRowIdx = data.length - 1;\n const lastColIdx = data[0] ? data[0].length : 0;\n const rows = [];\n for (let row = 0; row < lastRowIdx; row++) {\n rows.push(new Row({\n height: 40,\n title: String(row)\n }));\n }\n const columns = [];\n for (let col = 0; col < lastColIdx; col++) {\n columns.push(new Column({\n width: 150,\n title: String(col)\n }));\n }\n const config = new Config({\n view,\n rows,\n columns\n });\n return config;\n }\n serializeData() {\n const rowsLength = this.data.length;\n const colsLength = this.data[0] ? this.data[0].length : 0;\n const cellsArray = [];\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n innerRow.push(this.data[row][col].getSerializableCell());\n }\n cellsArray.push(innerRow);\n }\n return cellsArray;\n }\n}\nexport * from './modules/cache';\nexport * from './modules/cell';\nexport * from './modules/column';\nexport * from './modules/config';\nexport * from './modules/renderBox';\nexport * from './modules/row';\nexport * from './modules/selection';\nexport * from './modules/styles';\nexport * from './modules/viewport';\nexport * from './utils/createData';\n"],"names":["RenderBox","config","cellPosition","__publicField","column","x","i","row","y","Editor","root","event","key","target","element","CSS_PREFIX","position","initialString","height","width","cell","Header","headerElement","Scroller","offsetX","offsetY","lastSelectedCell","keysRegex","isPressedLetterKey","clickedCell","rect","horizontalScroller","scroller","verticalScroller","scrollTop","scrollLeft","bottom","right","groupScrollers","stack","acc","curr","totalHeight","totalWidth","CellStyles","props","Position","SerializableCell","Cell","styles","values","selectedRange","isCellInRow","ctx","isCellSelected","_a","isCellInRange","Sheet","canvas","col","firstRowIdx","lastColIdx","lastRowIdx","firstColIdx","Table","container","sizes","Toolbar","toolbarElement","Config","Selection","Styles","Viewport","Column","Row","createSampleData","rows","columns","fillCellsByCoords","data","innerRow","value","createSampleConfig","rowsArr","rowItem","colsArr","colItem","makeSpreadsheetConfigAndData","CachedColumn","CachedRow","Cache","initial","rowIdx","colIdx","Spreadsheet","cachedCols","currentWidth","cacheCol","cachedRows","currentHeight","cacheRow","cache","content","range","callback","fromRow","toRow","fromCol","toCol","rowsLength","colsLength","formattedData","view","cellsArray"],"mappings":"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"} |