modern_spreadsheet/dist/main.cjs.map

1 line
82 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"main.cjs","sources":["../src/modules/events.ts","../src/modules/renderBox.ts","../src/components/editor.ts","../src/utils/position.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/components/columnsBar.ts","../src/components/rowsBar.ts","../src/modules/clipboard.ts","../src/main.ts"],"sourcesContent":["import { Selection } from \"../main\";\nexport var EventTypes;\n(function (EventTypes) {\n EventTypes[\"CELL_CLICK\"] = \"CELL_CLICK\";\n EventTypes[\"SELECTION_CHANGE\"] = \"CHANGE_SELECTION\";\n EventTypes[\"CELL_CHANGE\"] = \"CELL_CHANGE\";\n EventTypes[\"COPY_CELLS\"] = \"COPY_CELLS\";\n})(EventTypes || (EventTypes = {}));\nexport class Events {\n root;\n constructor(root) {\n this.root = root;\n }\n dispatch(action) {\n switch (action.type) {\n case EventTypes.CELL_CLICK: {\n const { event, scroller } = action;\n //\n //* Here may be side effects\n //\n this.cellClick(event, scroller);\n break;\n }\n case EventTypes.SELECTION_CHANGE: {\n const { selection, enableCallback } = action;\n //\n //* Here may be side effects\n //\n this.changeSelection(selection, enableCallback);\n break;\n }\n case EventTypes.CELL_CHANGE: {\n const { cell, enableCallback } = action;\n //\n //* Here may be side effects\n //\n this.changeCellValues(cell, enableCallback);\n break;\n }\n case EventTypes.COPY_CELLS: {\n const { data, dataAsString, range } = action;\n this.copy(range, data, dataAsString);\n break;\n }\n default: {\n break;\n }\n }\n }\n cellClick = (event, scroller) => {\n if (event.button !== 0)\n return; // Left mouse button\n const { offsetX, offsetY } = event;\n const clickedCell = this.root.getCellByCoords(offsetX, offsetY);\n const cell = this.root.getCell(clickedCell);\n const selection = new Selection();\n selection.selectedCell = clickedCell;\n selection.selectedRange = {\n from: clickedCell,\n to: clickedCell,\n };\n scroller.setSelectingMode(true);\n this.changeSelection(selection, true);\n this.root.config.onCellClick?.(event, cell);\n };\n changeSelection = (selection, enableCallback = false) => {\n this.root.selection = selection;\n if (enableCallback)\n this.root.config.onSelectonChange?.(selection);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n changeCellValues(cell, enableCallback = true) {\n if (enableCallback)\n this.root.config.onCellChange?.(cell);\n }\n copy = (range, data, dataAsString) => {\n this.root.config.onCopy?.(range, data, dataAsString);\n };\n}\n","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 { EventTypes } from \"../modules/events\";\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 =\n y - this.root.viewport.top + this.root.columnsBarHeight + \"px\";\n this.element.style.left =\n x - this.root.viewport.left + this.root.rowsBarWidth + \"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 if (!this.root.selection.selectedCell)\n return;\n this.root.changeCellValues(this.root.selection.selectedCell, {\n value: this.element.value,\n displayValue: this.element.value,\n });\n this.root.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.root.getCell(this.root.selection.selectedCell),\n });\n this.hide();\n this.root.renderSelection();\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 function checkEqualRanges(range1, range2) {\n const equalRows = range1.from.row === range2.to.row;\n const equalColumns = range1.from.column === range2.to.column;\n return equalRows && equalColumns;\n}\nexport function checkEqualCellSelections(selection1, selection2) {\n return (selection1.column === selection2.column && selection1.row === selection2.row);\n}\n","import { CSS_PREFIX, Selection } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { checkEqualCellSelections } from \"../utils/position\";\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.style.top = this.root.columnsBarHeight + \"px\";\n this.element.style.left = this.root.rowsBarWidth + \"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 this.element.addEventListener(\"paste\", (event) => {\n if (!this.root.selection.selectedCell)\n return;\n this.root.clipboard.paste(this.root, this.root.selection.selectedCell, event);\n });\n }\n setSelectingMode(mode) {\n this.isSelecting = mode;\n }\n handleMouseMove = (event) => {\n if (!this.isSelecting)\n return;\n const { offsetX, offsetY } = event;\n const lastSelectedCell = this.root.getCellByCoords(offsetX, offsetY);\n let isRangeChanged = false;\n if (this.root.selection.selectedRange) {\n isRangeChanged = !checkEqualCellSelections(this.root.selection.selectedRange.to, lastSelectedCell);\n if (isRangeChanged) {\n this.root.selection.selectedRange.to = lastSelectedCell;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n }\n };\n handleMouseUp = () => {\n this.isSelecting = false;\n const newSelection = { ...this.root.selection };\n if (this.root.selection.selectedRange) {\n if (checkEqualCellSelections(this.root.selection.selectedRange.from, this.root.selection.selectedRange.to)) {\n newSelection.selectedRange = null;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: newSelection,\n enableCallback: false,\n });\n }\n }\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\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 //* 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 &&\n this.root.selection.selectedCell.column > 0) {\n this.root.selection.selectedCell.column -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowRight\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column <\n 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 &&\n 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 &&\n this.root.selection.selectedCell.row <\n this.root.config.rows.length - 1) {\n this.root.selection.selectedCell.row += 1;\n // this.root.renderSheet();\n }\n break;\n }\n }\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n //* Start typings\n const keysRegex = /^([a-z]|[а-я]|[0-9])$/;\n if (!event.metaKey && !event.ctrlKey) {\n //* Prevent handle shortcutrs\n const isPressedLetterKey = keysRegex.test(event.key.toLowerCase());\n if (event.key === \"F2\" || isPressedLetterKey) {\n //* 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 if (event.metaKey || event.ctrlKey) {\n if (event.code === \"KeyC\") {\n let cells = undefined;\n const selection = new Selection();\n if (this.root.selection.selectedRange) {\n const { from, to } = this.root.selection.selectedRange;\n selection.selectedRange = this.root.selection.selectedRange;\n const subArrByRows = this.root.data.slice(from.row, to.row + 1);\n const subArrByCols = subArrByRows.map((row) => {\n return row.slice(from.column, to.column + 1);\n });\n cells = [...subArrByCols];\n }\n else if (this.root.selection.selectedCell) {\n const { column, row } = this.root.selection.selectedCell;\n cells = [[this.root.data[row][column]]];\n selection.selectedRange = {\n from: this.root.selection.selectedCell,\n to: this.root.selection.selectedCell,\n };\n }\n else {\n return;\n }\n this.root.clipboard.copy(cells, selection.selectedRange);\n return;\n }\n if (event.code === \"KeyV\") {\n // if (!this.root.selection.selectedCell) return;\n // this.root.clipboard.paste(this.root, this.root.selection.selectedCell);\n }\n }\n };\n handleClick = (event) => {\n this.root.events.dispatch({\n type: EventTypes.CELL_CLICK,\n event,\n scroller: this,\n });\n };\n handleScroll = () => {\n const rect = this.getViewportBoundlingRect();\n this.root.viewport.updateValues(rect);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\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.contentEditable = \"false\";\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 // private isCellInRange(root: Spreadsheet): boolean {\n // const { column, row } = this.position;\n // const { selectedRange } = root.selection;\n // if (!selectedRange) return false;\n // const isCellInRow =\n // row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n // row <= Math.max(selectedRange.to.row, selectedRange.from.row);\n // const isCellInCol =\n // column >= Math.min(selectedRange.from.column, selectedRange.to.column) &&\n // column <= Math.max(selectedRange.to.column, selectedRange.from.column);\n // return isCellInCol && isCellInRow;\n // }\n render(root) {\n const renderBox = new RenderBox(root.config, this.position);\n let { x, y } = renderBox;\n const { height, width } = renderBox;\n const { ctx } = root;\n // const isCellSelected =\n // root.selection.selectedCell?.row === this.position.row &&\n // 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 = 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 = 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, RenderBox } 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 canvas.style.left = \"0px\";\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 getSelectionRange() {\n const { selectedCell, selectedRange } = this.root.selection;\n if (!selectedCell && !selectedRange)\n return;\n if (selectedRange) {\n const startRow = Math.min(selectedRange.from.row, selectedRange.to.row);\n const startCol = Math.min(selectedRange.from.column, selectedRange.to.column);\n const lastRow = Math.max(selectedRange.from.row, selectedRange.to.row);\n const lastCol = Math.max(selectedRange.from.column, selectedRange.to.column);\n const startCellBox = new RenderBox(this.root.config, {\n row: startRow,\n column: startCol,\n });\n let width = 0;\n for (let col = startCol; col <= lastCol; col++) {\n width += this.root.config.columns[col].width;\n }\n let height = 0;\n for (let row = startRow; row <= lastRow; row++) {\n height += this.root.config.rows[row].height;\n }\n const x = startCellBox.x - this.root.viewport.left;\n const y = startCellBox.y - this.root.viewport.top;\n return { x, y, height, width };\n }\n if (!selectedRange && selectedCell) {\n const box = new RenderBox(this.root.config, selectedCell);\n box.x -= this.root.viewport.left;\n box.y -= this.root.viewport.top;\n return box;\n }\n }\n renderSelectionRange(x, y, width, height) {\n this.ctx.save();\n this.ctx.strokeStyle = \"#7da8ff\";\n this.ctx.lineWidth = 3;\n this.ctx.strokeRect(x, y, width, height);\n this.ctx.fillStyle = \"#7da8ff35\";\n this.ctx.fillRect(x, y, width, height);\n this.ctx.restore();\n }\n renderSelection() {\n const box = this.getSelectionRange();\n if (!box)\n return;\n const { height, width, x, y } = box;\n this.renderSelectionRange(x, y, width, height);\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 this.renderSelection();\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 + this.root.rowsBarWidth + \"px\";\n this.element.style.height = height + this.root.columnsBarHeight + \"px\";\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nexport class Toolbar {\n element;\n root;\n height = 0;\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 onCellClick = null;\n onSelectonChange = null;\n onCellChange = null;\n onCopy;\n constructor(props) {\n this.columns = props.columns;\n this.rows = props.rows;\n this.view = props.view;\n this.onCellClick = props.onCellClick ?? null;\n this.onSelectonChange = props.onSelectionChange ?? null;\n this.onCellChange = props.onCellChange ?? null;\n this.onCopy = props.onCopy ?? null;\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 const rowIdx = this.root.cache.getRowByYCoord(this.top);\n return rowIdx;\n }\n getLastRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.bottom);\n return rowIdx;\n }\n getFirstCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.left);\n return colIdx;\n }\n getLastCol() {\n const 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 rowIdx = i;\n if (y <= this.rows[i].yPos) { //* Intersection detect\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 colIdx = i;\n if (x <= this.columns[i].xPos) { //* Intersection detect\n break;\n }\n }\n return colIdx;\n }\n}\n","import { RenderBox } from \"../main\";\nexport class ColumnsBar {\n element;\n root;\n height = 35;\n width;\n // private resizerWidth = 1;\n ctx;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.width = this.root.viewProps.width;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.height + \"px\";\n element.style.width = this.root.viewProps.width + \"px\";\n element.style.display = \"block\";\n element.style.borderLeft = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.root.viewProps.width;\n element.height = this.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isColumnSelected(column) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.column === column)\n return true;\n if (selectedRange) {\n const inRange = column >=\n Math.min(selectedRange.from.column, selectedRange.to.column) &&\n column <= Math.max(selectedRange.from.column, selectedRange.to.column);\n return inRange;\n }\n return false;\n }\n // private getYCoordWithOffset(renderBox: RenderBox): number {\n // const {y} = renderBox\n // return y + this.root.toolbarHeight\n // }\n // private getXCoordWithOffset(renderBox: RenderBox): number {\n // const {x} = renderBox\n // return x\n // }\n renderText(column, renderBox) {\n const { width, x } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.columns[column].title, x + width / 2 - this.root.viewport.left, 0 + this.height / 2);\n }\n renderRect(column, renderBox) {\n const { width, x } = renderBox;\n const isColSelected = this.isColumnSelected(column);\n this.ctx.fillStyle = isColSelected ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n const specialX = x - this.root.viewport.left;\n this.ctx.fillRect(specialX - 1, 0, width, this.height);\n this.ctx.strokeRect(specialX - 1, 0, width, this.height);\n }\n renderSingleColumn(column) {\n const renderBox = new RenderBox(this.root.config, {\n row: 0,\n column: column,\n });\n this.renderRect(column, renderBox);\n this.renderText(column, renderBox);\n }\n renderBar() {\n const lastColIdx = this.root.viewport.lastCol + 3;\n const firstColIdx = this.root.viewport.firstCol;\n this.ctx.beginPath();\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(0, this.height);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col])\n break;\n this.renderSingleColumn(col);\n }\n }\n}\n","import { RenderBox } from \"../main\";\nexport class RowsBar {\n element;\n ctx;\n root;\n width = 35;\n height;\n resizerHeight = 1;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.height = this.root.viewProps.height;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.root.viewProps.height + \"px\";\n element.style.width = this.width + \"px\";\n element.style.display = \"block\";\n element.style.borderTop = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.width;\n element.height = this.root.viewProps.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isRowSelected(row) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.row === row)\n return true;\n if (selectedRange) {\n const inRange = row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n row <= Math.max(selectedRange.from.row, selectedRange.to.row);\n return inRange;\n }\n return false;\n }\n renderText(row, renderBox) {\n const { y, height } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.rows[row].title, this.width / 2, y - this.root.viewport.top + height / 2);\n }\n renderRect(column, renderBox) {\n const { y, height } = renderBox;\n const isRowSeleted = this.isRowSelected(column);\n this.ctx.fillStyle = isRowSeleted ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = this.resizerHeight;\n const specialY = y - this.root.viewport.top;\n this.ctx.fillRect(0, specialY - 1, this.width, height);\n this.ctx.strokeRect(0, specialY - 1, this.width, height);\n }\n renderSingleRow(row) {\n const renderBox = new RenderBox(this.root.config, {\n column: 0,\n row: row,\n });\n this.renderRect(row, renderBox);\n this.renderText(row, renderBox);\n }\n renderBar() {\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstRowIdx = this.root.viewport.firstRow;\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 16;\n this.ctx.lineTo(35, 0);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n if (!this.root.config.rows[row])\n break;\n this.renderSingleRow(row);\n }\n }\n}\n","import { Cell, CellStyles } from \"./cell\";\nimport { EventTypes } from \"./events\";\nexport class Clipboard {\n saved = null;\n root;\n constructor(root) {\n this.root = root;\n }\n copy(data, range) {\n const mapedData = data\n .map((row) => {\n return row\n .map((item) => {\n return item.displayValue;\n })\n .join(\"\\t\");\n })\n .join(\"\\n\");\n this.saved = data;\n navigator.clipboard.writeText(mapedData);\n this.root.events.dispatch({\n type: EventTypes.COPY_CELLS,\n data,\n dataAsString: mapedData,\n range,\n });\n }\n paste(root, { column, row }, event) {\n if (!this.saved) {\n if (!event.clipboardData)\n return;\n const data = event.clipboardData.getData(\"text\");\n try {\n const arr = data.split(\"\\n\").map((item) => item.split(\"\\t\"));\n const arrayOfCells = arr.map((innerRow) => {\n return innerRow.map((item) => {\n const cellProps = {\n displayValue: item,\n position: {\n column,\n row,\n },\n resultValue: item,\n style: new CellStyles(),\n value: item,\n };\n return new Cell(cellProps);\n });\n });\n const rowsLength = arrayOfCells.length;\n const colsLength = arrayOfCells[0] ? arrayOfCells[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = arrayOfCells[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n catch (err) {\n console.error(\"Cannot read clipboard. \", err);\n }\n root.renderSheet();\n return;\n }\n const rowsLength = this.saved.length;\n const colsLength = this.saved[0] ? this.saved[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = this.saved[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n}\n","import { Editor } from \"./components/editor\";\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\";\nimport { ColumnsBar } from \"./components/columnsBar\";\nimport { RowsBar } from \"./components/rowsBar\";\nimport { EventTypes, Events } from \"./modules/events\";\nimport { Clipboard } from \"./modules/clipboard\";\nexport const CSS_PREFIX = \"modern_sc_\";\nexport default class Spreadsheet {\n table;\n scroller;\n toolbar;\n rowsBar;\n columnsBar;\n sheet;\n editor;\n styles;\n config;\n data;\n viewport;\n selection;\n cache;\n events;\n clipboard;\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.config.onCellClick = props?.onCellClick ?? null;\n this.config.onSelectonChange = props?.onSelectionChange ?? null;\n this.config.onCellChange = props?.onCellChange ?? null;\n this.config.onCopy = props?.onCopy ?? null;\n this.rowsBar = new RowsBar(this);\n this.columnsBar = new ColumnsBar(this);\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.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.events = new Events(this);\n this.clipboard = new Clipboard(this);\n this.data = data;\n this.styles = new Styles();\n this.buildComponent();\n this.setElementsPositions();\n this.appendTableToTarget(target);\n this.renderSheet();\n this.renderColumnsBar();\n this.renderRowsBar();\n }\n setRowsBarPosition() {\n const top = this.columnsBar.height + this.toolbar.height;\n const left = 0;\n this.rowsBar.setElementPosition(top, left);\n }\n setColumnsBarPosition() {\n const top = this.toolbar.height;\n const left = this.rowsBar.width;\n this.columnsBar.setElementPosition(top, left);\n }\n setElementsPositions() {\n this.setRowsBarPosition();\n this.setColumnsBarPosition();\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 return cache;\n }\n buildComponent() {\n const content = document.createElement(\"div\"); //* Abstract\n content.style.top = this.columnsBarHeight + \"px\";\n content.style.left = this.rowsBarWidth + \"px\";\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(this.rowsBar.element);\n this.table.element.appendChild(this.columnsBar.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 get columnsBarHeight() {\n return this.columnsBar.height;\n }\n get rowsBarWidth() {\n return this.rowsBar.width;\n }\n get toolbarHeight() {\n return this.toolbar.height;\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, enableCallback = true) {\n const { column, row } = position;\n this.data[row][column].changeValues(values);\n this.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.data[row][column],\n enableCallback: enableCallback\n });\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 renderSelection() {\n this.sheet.renderSelection();\n }\n renderColumnsBar() {\n this.columnsBar.renderBar();\n }\n renderRowsBar() {\n this.rowsBar.renderBar();\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] ? data[0].length : 0;\n this.data = [];\n const formattedData = [];\n // Transform serialized objects to Cells\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 const config = this.makeConfigFromData(formattedData, this.config.view);\n config.onCellChange = this.config.onCellChange;\n config.onCellClick = this.config.onCellClick;\n config.onCopy = this.config.onCopy;\n config.onSelectonChange = this.config.onSelectonChange;\n this.data = formattedData;\n this.selection.selectedCell = null;\n this.selection.selectedRange = null;\n this.config = config;\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 onCellClick: null,\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":["EventTypes","Events","root","__publicField","event","scroller","offsetX","offsetY","clickedCell","cell","selection","Selection","_b","_a","enableCallback","range","data","dataAsString","action","RenderBox","config","cellPosition","column","x","i","row","y","Editor","key","target","element","CSS_PREFIX","position","initialString","height","width","checkEqualCellSelections","selection1","selection2","Scroller","lastSelectedCell","isRangeChanged","newSelection","keysRegex","isPressedLetterKey","cells","from","to","rect","horizontalScroller","verticalScroller","mode","scrollTop","scrollLeft","bottom","right","groupScrollers","stack","acc","curr","totalHeight","totalWidth","CellStyles","props","Position","SerializableCell","Cell","styles","values","renderBox","ctx","Sheet","canvas","col","selectedCell","selectedRange","startRow","startCol","lastRow","lastCol","startCellBox","box","firstRowIdx","lastColIdx","lastRowIdx","firstColIdx","Table","container","sizes","Toolbar","toolbarElement","Config","Styles","Viewport","Column","Row","createSampleData","rows","columns","fillCellsByCoords","innerRow","value","createSampleConfig","rowsArr","rowItem","colsArr","colItem","makeSpreadsheetConfigAndData","CachedColumn","CachedRow","Cache","initial","rowIdx","colIdx","ColumnsBar","top","left","isColSelected","specialX","RowsBar","isRowSeleted","specialY","Clipboard","mapedData","item","arrayOfCells","cellProps","rowsLength","colsLength","j","savedCell","err","Spreadsheet","cachedCols","currentWidth","cacheCol","cachedRows","currentHeight","cacheRow","content","callback","fromRow","toRow","fromCol","toCol","formattedData","view","cellsArray"],"mappings":"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"}