@apia/table2-controller 4.0.47 → 4.0.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/data/primitive/Element.ts","../src/data/primitive/Cell.ts","../src/data/primitive/Row.ts","../src/data/primitive/AdditionalRow.ts","../src/data/primitive/AdditionalRowContent.ts","../src/data/primitive/AdditionalCell.ts","../src/data/primitive/RowsGroup.ts","../src/data/body/TableBody.ts","../src/data/head/Column.ts","../src/data/head/Columns.ts","../src/data/head/Filter.ts","../src/data/head/Filters.ts","../src/data/head/TableHead.ts","../src/data/plugins/TablePlugin.tsx","../src/data/TableController.ts","../src/data/plugins/FocusControllerPlugin/useFocusByClick.ts","../src/data/plugins/FocusControllerPlugin/useFocusByKey.ts","../src/data/plugins/FocusControllerPlugin/index.tsx","../src/data/plugins/WaiAriaPlugin.ts"],"sourcesContent":["import { action, makeObservable, observable } from 'mobx';\r\nimport type { TableController } from '../TableController';\r\n\r\nconst voidTable = {} as TableController;\r\n\r\nexport type ElementBaseState = {\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport abstract class Element<T extends ElementBaseState> {\r\n protected table: TableController = voidTable;\r\n\r\n constructor(protected state: T) {\r\n makeObservable<Element<T>, 'state'>(this, {\r\n state: observable,\r\n setState: action,\r\n });\r\n }\r\n\r\n public getTable() {\r\n return this.table;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n this.table = table || voidTable;\r\n return this;\r\n }\r\n\r\n public getState<K extends keyof T>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n public setState(cb: (s: T) => T): this;\r\n public setState<K extends keyof T>(prop: K, value: T[K]): this;\r\n public setState<K extends keyof T>(prop: K | ((s: T) => T), value?: T[K]) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n}\r\n","import type { ThHTMLAttributes, ReactNode, FC } from 'react';\r\nimport { Element } from './Element';\r\nimport type { Row } from './Row';\r\n\r\nexport type CellState<T extends CellState<any> = CellState<any>> = {\r\n colName: string;\r\n\r\n content?: ReactNode;\r\n className?: string;\r\n isFocused?: boolean;\r\n isHidden?: boolean;\r\n tag?: 'td' | 'th;';\r\n\r\n Renderer?: FC<{ cell: Cell<T> }>;\r\n domProperties?: ThHTMLAttributes<HTMLTableCellElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class Cell<\r\n State extends CellState<any> = CellState<any>,\r\n> extends Element<State> {\r\n protected parentRow: Row | null = null;\r\n\r\n getColumnName() {\r\n return this.getState('colName');\r\n }\r\n\r\n getIndex() {\r\n return this.getRow()!.getCellIndex(this);\r\n }\r\n\r\n getRow() {\r\n return this.parentRow;\r\n }\r\n\r\n setRow(row: Row | null) {\r\n this.parentRow = row;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param doFocus - If true, the cell will be focused after being set as the focused cell.\r\n * If false, the cell will contain the tabIndex = 0 but will not be focused.\r\n */\r\n focus(doFocus: boolean = true) {\r\n this.table.setFocusedCell(this, doFocus);\r\n }\r\n\r\n updateState(state: Partial<State>) {\r\n this.state = { ...this.state, ...state };\r\n }\r\n}\r\n","import { Element } from './Element';\r\nimport { Cell, type CellState } from './Cell';\r\nimport { TableController } from '../TableController';\r\nimport { computed, makeObservable } from 'mobx';\r\nimport type { RowsGroup, RowsGroupBaseState } from './RowsGroup';\r\nimport type { HTMLAttributes } from 'react';\r\nimport { AdditionalCell } from './AdditionalCell';\r\n\r\nexport type RowProperties = {\r\n id: string;\r\n cells: Cell[];\r\n\r\n isExpandible?: boolean;\r\n isExpanded?: boolean;\r\n isHidden?: boolean;\r\n isSelectable?: boolean;\r\n isSelected?: boolean;\r\n\r\n domProperties?: HTMLAttributes<HTMLTableRowElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport type TBuildRow = Omit<RowProperties, 'cells'> & {\r\n cells: (Omit<CellState, 'colName'> & { colName?: string })[];\r\n};\r\n\r\nexport type RowState = Omit<RowProperties, 'isSelected'>;\r\n\r\nexport class Row extends Element<RowState> {\r\n protected container: null | RowsGroup<RowsGroupBaseState> =\r\n {} as RowsGroup<RowsGroupBaseState>;\r\n\r\n hiddenCells: Map<string, Cell> = new Map();\r\n\r\n addCell(cell: Cell) {\r\n this.state.cells.push(cell);\r\n this.attachCell(cell);\r\n return this;\r\n }\r\n\r\n addCellAfter(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor) + 1;\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n addCellBefore(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor);\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n build(data: TBuildRow) {\r\n this.hiddenCells.clear();\r\n\r\n for (let i = 0; i < data.cells.length; i++) {\r\n const cell = data.cells[i];\r\n\r\n const col = cell.colName\r\n ? this.table.head.getHeaderRow()!.getColumn(cell.colName)!\r\n : this.table.head.getHeaderRow()!.getColumns()[i]!;\r\n\r\n const cellInstance = new Cell({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n\r\n if (col?.isVisible()) {\r\n const currentCell = this.state.cells[i - this.hiddenCells.size];\r\n\r\n if (!currentCell) {\r\n this.addCell(cellInstance);\r\n } else {\r\n currentCell.updateState({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n }\r\n } else {\r\n this.hiddenCells.set(col?.getColumnName(), cellInstance);\r\n }\r\n }\r\n this.cells.splice(data.cells.length - this.hiddenCells.size);\r\n }\r\n\r\n constructor(\r\n id: string,\r\n protected properties?: Omit<RowProperties, 'id'>,\r\n ) {\r\n const { cells, isSelected, ...state } = properties || {};\r\n super({ id, ...state, cells: cells || [] });\r\n makeObservable(this, {\r\n isSelected: computed,\r\n });\r\n }\r\n\r\n get cells(): Cell[] {\r\n const hasAdditionalColumn: boolean =\r\n !!this.table.getState('onRowExpand') ||\r\n (this.table.head.getFiltersRow()?.getFiltersInTable()?.length || 0) > 0;\r\n\r\n let additionalCell: Cell | null = null;\r\n if (hasAdditionalColumn) {\r\n additionalCell = new AdditionalCell();\r\n additionalCell.setRow(this);\r\n additionalCell.setTable(this.table);\r\n }\r\n\r\n return [additionalCell, ...this.state.cells].filter((f): f is Cell =>\r\n Boolean(f),\r\n );\r\n }\r\n\r\n get isSelected() {\r\n return this.table.isSelected(this);\r\n }\r\n\r\n getCellByColumnName(colName: string) {\r\n return this.cells.find((c) => c.getState('colName') === colName);\r\n }\r\n\r\n getCellByIndex(index: number) {\r\n return this.cells[index];\r\n }\r\n\r\n getCellIndex(cell: Cell) {\r\n return this.cells.indexOf(cell);\r\n }\r\n\r\n getContainer() {\r\n return this.container;\r\n }\r\n\r\n getFollowingRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index + 1] || null;\r\n }\r\n\r\n getHiddenCell(colName: string) {\r\n return this.hiddenCells.get(colName);\r\n }\r\n\r\n getIndex() {\r\n return this.getContainer()!.getRowIndex(this);\r\n }\r\n\r\n getPreviousRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index - 1] || null;\r\n }\r\n\r\n insertAfter(row: Row) {\r\n this.getContainer()?.insertAfter(this, row);\r\n }\r\n\r\n insertBefore(row: Row) {\r\n this.getContainer()?.insertBefore(this, row);\r\n }\r\n\r\n remove() {\r\n this.getContainer()?.removeRow(this);\r\n }\r\n\r\n replaceCellOnIndex(index: number, newCell: Cell) {\r\n const current = this.cells[index];\r\n if (!current) {\r\n throw new Error('IndexOutOfBounds - The provided index is out of bounds');\r\n }\r\n\r\n this.cells[index] = newCell;\r\n this.attachCell(newCell);\r\n\r\n this.detachCell(current);\r\n }\r\n\r\n public scrollIntoView() {\r\n this.table.scrollRowIntoView(this);\r\n }\r\n\r\n public setContainer(container: null | RowsGroup<RowsGroupBaseState>) {\r\n this.container = container;\r\n return this;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n super.setTable(table);\r\n\r\n this.state.cells.forEach((c) => c.setTable(table));\r\n\r\n if (table && this.properties?.isSelected) {\r\n table.toggleRowSelection(this, true);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public swap(withRow: Row) {\r\n this.getContainer()?.swapRows(this, withRow);\r\n }\r\n\r\n public toggleSelection(forceState?: boolean) {\r\n this.table.toggleRowSelection(this, forceState);\r\n }\r\n\r\n protected attachCell(cell: Cell) {\r\n cell.setTable(this.table);\r\n cell.setRow(this);\r\n }\r\n\r\n protected detachCell(cell: Cell) {\r\n cell.setTable(null);\r\n cell.setRow(null);\r\n }\r\n}\r\n","import { Cell, CellState } from './Cell';\r\nimport { Row } from './Row';\r\n\r\nexport class AdditionalRow extends Row {\r\n constructor(id: string) {\r\n super(id);\r\n this.setState('isSelectable', false);\r\n }\r\n\r\n get cells(): Cell<CellState<any>>[] {\r\n return this.state.cells;\r\n }\r\n}\r\n","import { ReactNode } from 'react';\r\nimport { Cell, CellState } from './Cell';\r\n\r\nexport class AdditionalRowContent extends Cell<\r\n CellState & { expanded: boolean }\r\n> {\r\n constructor(content: ReactNode) {\r\n super({\r\n expanded: false,\r\n colName: '__additional',\r\n content,\r\n });\r\n }\r\n\r\n public getState<K extends keyof CellState | 'expanded'>(\r\n prop: K,\r\n ): (CellState & { expanded: boolean })[K] {\r\n if (prop === 'domProperties') {\r\n return {\r\n colSpan: this.table.head.getHeaderRow()?.getShownColumns().length || 0,\r\n } as any;\r\n }\r\n\r\n return super.getState(prop);\r\n }\r\n}\r\n","import { AdditionalRow } from './AdditionalRow';\r\nimport { AdditionalRowContent } from './AdditionalRowContent';\r\nimport { Cell, CellState } from './Cell';\r\n\r\nexport class AdditionalCell extends Cell<CellState & { expanded: boolean }> {\r\n constructor() {\r\n super({\r\n expanded: false,\r\n colName: '__additional',\r\n domProperties: {\r\n style: {\r\n width: '50px',\r\n },\r\n },\r\n });\r\n }\r\n\r\n async onToggle() {\r\n const currentIndex = this.getRow()!.getIndex()!;\r\n if (\r\n !(\r\n this.getTable().body.getRowByIndex(currentIndex + 1) instanceof\r\n AdditionalRow\r\n )\r\n ) {\r\n const res = await this.table.onRowExpand(this.getRow()!);\r\n\r\n if (res !== false) {\r\n const newRow = new AdditionalRow(\r\n `${this.getRow()?.getState('id')}__additional`,\r\n );\r\n\r\n this.getTable().body.insertAfter(this.getRow()!, newRow);\r\n\r\n newRow.addCell(new AdditionalRowContent(res));\r\n\r\n this.state.expanded = true;\r\n }\r\n } else {\r\n this.getTable()\r\n .body.getRowByIndex(currentIndex + 1)\r\n .remove();\r\n this.state.expanded = false;\r\n }\r\n }\r\n}\r\n","import { action, computed, makeObservable } from 'mobx';\r\nimport type { Row } from './Row';\r\nimport type { TableController } from '../TableController';\r\nimport { Element, type ElementBaseState } from './Element';\r\nimport type { HTMLAttributes } from 'react';\r\n\r\nexport type RowsGroupBaseState = ElementBaseState & {\r\n rows: Row[];\r\n domProperties?: HTMLAttributes<HTMLTableSectionElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class RowsGroup<U extends RowsGroupBaseState> extends Element<\r\n U & RowsGroupBaseState\r\n> {\r\n constructor(\r\n public table: TableController,\r\n state: U,\r\n ) {\r\n super({ ...state, rows: [] });\r\n makeObservable(this, { swapRows: action, rows: computed });\r\n }\r\n\r\n get rows() {\r\n return this.state.rows;\r\n }\r\n\r\n addRow(row: Row) {\r\n this.state.rows.push(row);\r\n row.setTable(this.table);\r\n row.setContainer(this);\r\n\r\n this.runAddRowPlugin(row);\r\n\r\n return this;\r\n }\r\n\r\n addRows(rows: Row[]) {\r\n rows.forEach(this.addRow.bind(this));\r\n return this;\r\n }\r\n\r\n clear() {\r\n this.state.rows.forEach((row) => {\r\n row.setContainer(null);\r\n row.setTable(null);\r\n });\r\n return this.rows.splice(0, this.rows.length);\r\n }\r\n\r\n getRowById(id: string | number) {\r\n return this.state.rows.find((c) => c.getState('id') === id);\r\n }\r\n\r\n getRowByIndex(index: number) {\r\n return this.state.rows[index];\r\n }\r\n\r\n getRowIndex(row: Row) {\r\n return this.state.rows.indexOf(row);\r\n }\r\n\r\n insertAfter(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index + 1, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n insertBefore(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getContainer() === this) {\r\n row.setContainer(null);\r\n this.state.rows = this.state.rows.filter((r) => r !== row);\r\n this.table.removeRow(row);\r\n }\r\n }\r\n\r\n swapRows(a: Row, b: Row) {\r\n if (a?.getContainer() === this && b?.getContainer() === this) {\r\n const aIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === a.getState?.('id'),\r\n );\r\n const bIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === b.getState?.('id'),\r\n );\r\n if (aIndex !== -1 && bIndex !== -1) {\r\n this.state.rows[aIndex] = b;\r\n this.state.rows[bIndex] = a;\r\n }\r\n }\r\n }\r\n\r\n protected runAddRowPlugin(newRow: Row) {\r\n const plugins = this.getTable().getApplicablePlugins('onAddRow');\r\n plugins.forEach((c) => c(this, newRow));\r\n }\r\n}\r\n","import type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport { Row, type TBuildRow } from '../primitive/Row';\r\nimport type { TableController } from '../TableController';\r\nimport { AdditionalRow } from '../primitive/AdditionalRow';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableBodyState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildBody = {\r\n rows: TBuildRow[];\r\n};\r\n\r\nexport class TableBody extends RowsGroup<TableBodyState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n build(data: TBuildBody) {\r\n let i = 0;\r\n for (const row of data.rows) {\r\n let currentRow: Row | undefined = this.rows[i++];\r\n if (currentRow instanceof AdditionalRow) {\r\n currentRow.remove();\r\n currentRow = undefined;\r\n }\r\n const bodyRow = currentRow ?? new Row(row.id);\r\n\r\n if (!currentRow) {\r\n this.addRow(bodyRow);\r\n }\r\n bodyRow.build(row);\r\n }\r\n this.rows.splice(data.rows.length);\r\n }\r\n}\r\n","import { Cell, CellState } from '../primitive/Cell';\r\n\r\nexport type ColumnState<T extends ColumnState<any> = ColumnState<any>> =\r\n CellState<T> & {\r\n asAdditional?: boolean;\r\n sortable?: boolean;\r\n };\r\n\r\nexport class Column extends Cell<ColumnState> {\r\n public asAdditional() {\r\n return !!this.state.asAdditional;\r\n }\r\n\r\n public isHidden() {\r\n return !!this.state.isHidden;\r\n }\r\n\r\n /**\r\n * A visible column is that which is not additional nor hidden.\r\n */\r\n public isVisible() {\r\n return !this.asAdditional() && !this.isHidden();\r\n }\r\n}\r\n","import { Row } from '../primitive/Row';\r\nimport { Column, ColumnState } from './Column';\r\n\r\nexport class Columns extends Row {\r\n columns: Map<string, Column> = new Map();\r\n\r\n buildColumnsRow(columns: ColumnState[]) {\r\n let i = 0;\r\n for (const column of columns) {\r\n const headerCell = new Column(column);\r\n this.columns.set(column.colName, headerCell);\r\n\r\n if (headerCell.isVisible()) {\r\n const currentCell = this.cells[i++];\r\n\r\n /**\r\n * We try to maximize rendering optimization here.\r\n *\r\n * If the cell already exists, we just update its state\r\n * in order to prevent dom rebuilding.\r\n */\r\n if (!currentCell) {\r\n this.addCell(headerCell);\r\n } else {\r\n currentCell.updateState(column);\r\n }\r\n }\r\n }\r\n }\r\n\r\n getColumn(name: string) {\r\n return this.getCellByColumnName(name) as Column;\r\n }\r\n\r\n getColumns() {\r\n return Array.from(this.columns.values());\r\n }\r\n\r\n getAdditionalColumns() {\r\n return this.getColumns().filter((c) => c.asAdditional());\r\n }\r\n\r\n getShownColumns() {\r\n return (this.cells ?? []) as Column[];\r\n }\r\n}\r\n","import { Cell, CellState } from '../primitive/Cell';\r\nimport { FC } from 'react';\r\nimport type { Filters } from './Filters';\r\nimport { TableEvents } from '../TableController';\r\nimport { reaction } from 'mobx';\r\n\r\nexport type FilterRenderer = FC<{ cell: Filter }>;\r\n\r\nexport type FilterState<\r\n ValueType = string,\r\n T extends FilterState<any> = FilterState<ValueType, any>,\r\n> = CellState<T> & {\r\n asAdditional?: boolean;\r\n name: string;\r\n columnName?: string;\r\n isRequired?: boolean;\r\n Renderer?: FilterRenderer;\r\n runAutomatically?: boolean;\r\n title: string;\r\n tooltip: string;\r\n value: ValueType;\r\n type:\r\n | 'DATE'\r\n | 'INPUT'\r\n | 'COMBO'\r\n | 'DATERANGE'\r\n | 'SIZE'\r\n | 'SIZERANGE'\r\n | 'DATEHOUR'\r\n | 'DATEHOURRANGE';\r\n};\r\n\r\nexport type FilterEvents = Pick<\r\n TableEvents,\r\n 'filterBlur' | 'filterChange' | 'filterPressEnter'\r\n>;\r\n\r\nexport class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {\r\n public asAdditional() {\r\n return !!this.state.asAdditional || !this.getCorrespondingColumn();\r\n }\r\n\r\n constructor(state: FilterState<ValueType>) {\r\n super(state);\r\n\r\n reaction(\r\n () => this.state.value,\r\n () => {\r\n console.log(this.state.value);\r\n },\r\n );\r\n }\r\n\r\n clear() {\r\n this.setValue('' as ValueType);\r\n }\r\n\r\n getCorrespondingColumn() {\r\n return this.getRow()\r\n .getContainer()\r\n .getHeaderRow()\r\n ?.getShownColumns()\r\n .find((c) => c.getState('colName') === this.getState('colName'));\r\n }\r\n\r\n fire(ev: keyof FilterEvents) {\r\n this.table.emit(ev, this);\r\n }\r\n\r\n getRow() {\r\n return super.getRow() as Filters;\r\n }\r\n\r\n getValue() {\r\n return this.state.value;\r\n }\r\n\r\n hasValue() {\r\n return !!this.getValue();\r\n }\r\n\r\n setValue(val: ValueType) {\r\n this.state.value = val;\r\n this.table.emit('filterChange', this);\r\n }\r\n\r\n validate() {\r\n return this.state.isRequired ? this.hasValue() : true;\r\n }\r\n}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { Row } from '../primitive/Row';\r\nimport { Filter, FilterState } from './Filter';\r\nimport type { TableHead } from './TableHead';\r\nimport { Cell } from '../primitive/Cell';\r\n\r\nexport class Filters extends Row {\r\n filters: Map<string, Filter> = new Map();\r\n\r\n buildFilters(filters: Omit<FilterState, 'colName'>[]) {\r\n this.filters.clear();\r\n\r\n let hasFiltersInRow = false;\r\n\r\n const columns = arrayOrArray(\r\n this.getContainer().getHeaderRow()?.getShownColumns(),\r\n );\r\n for (let i = 0; i < columns.length; i++) {\r\n const column = columns[i];\r\n\r\n const filter = filters.find(\r\n (c) => c.columnName === column.getState('colName') && !c.asAdditional,\r\n );\r\n if (filter) {\r\n const currentFilterCell = this.getCellByIndex(i) as Filter;\r\n\r\n const filterCell = new Filter({\r\n ...filter,\r\n colName: filter.columnName!,\r\n });\r\n this.filters.set(filter.name, filterCell);\r\n\r\n if (!currentFilterCell) {\r\n this.addCell(filterCell);\r\n } else {\r\n const { value, ...filterState } = filter;\r\n currentFilterCell.updateState(filterState);\r\n }\r\n\r\n hasFiltersInRow = true;\r\n (filter as any).added = true;\r\n } else {\r\n if (!this.getCellByIndex(i)) {\r\n this.addCell(new Cell({ colName: column.getColumnName() }));\r\n }\r\n }\r\n for (const filter of filters) {\r\n if (!(filter as any).added) {\r\n const filterCell = new Filter({\r\n ...filter,\r\n colName: filter.columnName!,\r\n });\r\n this.filters.set(filter.name, filterCell);\r\n }\r\n }\r\n }\r\n\r\n return hasFiltersInRow;\r\n }\r\n\r\n getAdditionalFilters() {\r\n return this.getFilters().filter(\r\n (c) =>\r\n c.getState('asAdditional') ||\r\n this.getContainer()\r\n .getHeaderRow()\r\n ?.columns.get(c.getState('colName'))\r\n ?.asAdditional(),\r\n );\r\n }\r\n\r\n getCells() {\r\n return this.cells.map((c) => c as Filter);\r\n }\r\n\r\n getContainer() {\r\n return this.container as TableHead;\r\n }\r\n\r\n getFilter(name: string) {\r\n return this.filters.get(name);\r\n }\r\n\r\n getFilters() {\r\n return Array.from(this.filters.values());\r\n }\r\n\r\n getFiltersInTable() {\r\n return this.getFilters().filter((f) => {\r\n return !(\r\n f.getState('asAdditional') ||\r\n this.getContainer()\r\n .getHeaderRow()\r\n ?.columns.get(f.getState('colName'))\r\n ?.isVisible() === false\r\n );\r\n });\r\n }\r\n}\r\n","import { ColumnState } from './Column';\r\nimport { FilterState } from './Filter';\r\nimport type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport type { TableController } from '../TableController';\r\nimport { Columns } from './Columns';\r\nimport { Filters } from './Filters';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableHeadState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildHead = {\r\n columns: ColumnState[];\r\n filters: Omit<FilterState, 'colName'>[];\r\n};\r\n\r\nexport class TableHead extends RowsGroup<TableHeadState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n columnsRow: Columns | null = null;\r\n filtersRow: Filters | null = null;\r\n\r\n getHeaderRow(): Columns | undefined {\r\n return this.rows[0] instanceof Columns ? this.rows[0] : undefined;\r\n }\r\n\r\n getFiltersRow(): Filters | undefined {\r\n return this.rows[1] instanceof Filters ? this.rows[1] : undefined;\r\n }\r\n\r\n build(data: TBuildHead) {\r\n this.state.rows = [];\r\n\r\n if (data.columns.length) {\r\n /**\r\n * Generate main header row\r\n */\r\n\r\n const currentHeaderRow = this.rows[0];\r\n\r\n if (currentHeaderRow && !(currentHeaderRow instanceof Columns)) {\r\n currentHeaderRow.remove();\r\n }\r\n\r\n this.columnsRow = (currentHeaderRow ?? new Columns('header')) as Columns;\r\n this.columnsRow.setTable(this.table);\r\n this.columnsRow.setContainer(this);\r\n\r\n if (!currentHeaderRow) {\r\n this.addRow(this.columnsRow);\r\n }\r\n\r\n this.columnsRow.buildColumnsRow(data.columns);\r\n }\r\n\r\n if (data.filters.length) {\r\n /**\r\n * Generate filters row\r\n */\r\n\r\n const currentFiltersRow = this.getFiltersRow();\r\n this.filtersRow = currentFiltersRow ?? new Filters('filters');\r\n this.filtersRow.setTable(this.table);\r\n this.filtersRow.setContainer(this);\r\n\r\n const hasFilter = this.filtersRow.buildFilters(data.filters);\r\n if (hasFilter && !currentFiltersRow) {\r\n this.addRow(this.filtersRow);\r\n }\r\n }\r\n }\r\n}\r\n","import type { HTMLAttributes } from 'react';\r\nimport {\r\n FocusControllerPlugin,\r\n WaiAriaPlugin,\r\n type TableController,\r\n type Row,\r\n type Cell,\r\n} from '..';\r\nimport type { Element } from '../primitive/Element';\r\nimport { RowsGroup } from '../primitive/RowsGroup';\r\n\r\nexport type TDistinctorProperties = HTMLAttributes<HTMLElement>;\r\n\r\n/**\r\n * This class is the default way to customize the table behavior.\r\n */\r\nexport interface TablePlugin {\r\n getRenderers?: () => {\r\n cell?: React.FC<{\r\n cell: Cell;\r\n }>;\r\n };\r\n\r\n onAddRow?: (\r\n controller: TableController,\r\n target: RowsGroup<any>,\r\n newRow: Row,\r\n ) => void;\r\n\r\n onResize?: (\r\n controller: TableController,\r\n colName: string,\r\n newSize: number,\r\n ) => void;\r\n\r\n /**\r\n * This hook is called when the table is renderized.\r\n * The elements returned by this hook will be added to the dom of the element.\r\n */\r\n useElementDomProps?: (\r\n controller: TableController,\r\n _element: TableController | Element<any>,\r\n _context: any,\r\n ) => HTMLAttributes<HTMLElement>;\r\n}\r\n\r\nexport const defaultPlugins = () => [\r\n new WaiAriaPlugin(),\r\n new FocusControllerPlugin(),\r\n];\r\n","import { arrayOrArray, EventEmitter, TLoadStructure } from '@apia/util';\r\nimport { Cell } from './primitive/Cell';\r\nimport { Row } from './primitive/Row';\r\nimport { TableBody, TBuildBody } from './body/TableBody';\r\nimport { TableHead, type TBuildHead } from './head/TableHead';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport { defaultPlugins, TablePlugin } from './plugins/TablePlugin';\r\nimport type { Column } from './head/Column';\r\nimport type { Filter } from './head/Filter';\r\nimport { ReactNode } from 'react';\r\n\r\nexport type TableState = {\r\n allowEdition: boolean;\r\n allowResize: boolean;\r\n allowSelection: boolean;\r\n editionMode: boolean;\r\n focusedCell: Cell | null;\r\n isSelectionMultiple: boolean;\r\n onRowExpand?: (row: Row) => Promise<false | ReactNode>;\r\n plugins: TablePlugin[];\r\n selection: Set<Row>;\r\n};\r\n\r\nexport type TBuildTable = TBuildHead & TBuildBody;\r\n\r\nexport type TableEvents = {\r\n cellFocus: { cell: Cell; doFocus: boolean };\r\n columnClick: Column;\r\n editionMode: boolean;\r\n filterChange: Filter<any>;\r\n filterPressEnter: Filter<any>;\r\n filterBlur: Filter<any>;\r\n keyEnter: null;\r\n rowDelete: Row;\r\n scrollIntoRow: Row;\r\n selectionChange: Row[];\r\n};\r\n\r\nexport class TableController extends EventEmitter<TableEvents> {\r\n protected state: TableState = {\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n editionMode: false,\r\n focusedCell: null,\r\n plugins: [],\r\n isSelectionMultiple: true,\r\n selection: new Set(),\r\n };\r\n\r\n constructor(props?: Partial<Omit<TableState, 'selection'>>) {\r\n super();\r\n Object.assign(this.state, props || {});\r\n if (!props?.plugins) {\r\n this.state.plugins.push(...defaultPlugins());\r\n }\r\n\r\n makeObservable<TableController, 'state'>(this, {\r\n build: action,\r\n clearSelection: action,\r\n isEditionMode: computed,\r\n setFocusedCell: action,\r\n state: observable,\r\n toggleRowSelection: action,\r\n toggleEditionMode: action,\r\n });\r\n }\r\n\r\n public body = new TableBody(this);\r\n public head = new TableHead(this);\r\n\r\n /**\r\n * Clears all data in the table, except for the events\r\n * listeners and recreates the structure based on the passed data.\r\n */\r\n public build(data: TBuildTable) {\r\n this.head.build(data);\r\n this.body.build(data);\r\n\r\n this.restoreFocus();\r\n }\r\n\r\n public fromGenericTable(table: TLoadStructure) {\r\n /**\r\n * Parse structure\r\n */\r\n this.setState('allowEdition', table.behavior.allowEdition);\r\n this.setState('allowSelection', table.behavior.allowSelection);\r\n this.setState('isSelectionMultiple', table.behavior.isMultipleSelection);\r\n\r\n const columns = arrayOrArray(table.columns);\r\n\r\n this.build({\r\n columns: columns.map((c) => {\r\n console.log({ c });\r\n return {\r\n colName: c.name,\r\n asAdditional: c.showAsAdditional,\r\n sortable: c.isSortable,\r\n isHidden: c.isHidden,\r\n properties: c,\r\n content: c.title,\r\n className: c.className,\r\n };\r\n }),\r\n filters: arrayOrArray(table.filters).map((f) => {\r\n console.log({ f });\r\n return {\r\n name: f.name,\r\n title: f.title,\r\n tooltip: 'no tooltip',\r\n type: f.type,\r\n isRequired: f.isRequired,\r\n properties: f,\r\n runAutomatically: f.runAutomatically,\r\n columnName: f.columnName,\r\n value: f.initialValue,\r\n asAdditional: f.asAdditional,\r\n };\r\n }),\r\n rows: arrayOrArray(table.rows).map((row) => {\r\n console.log({ row });\r\n const returnValue: TBuildTable['rows'][0] = {\r\n id: row.id,\r\n cells: arrayOrArray(row.cells).map((cell) => {\r\n const returnValue: TBuildTable['rows'][0]['cells'][0] = {\r\n content: cell.text,\r\n };\r\n return returnValue;\r\n }),\r\n isExpandible: false,\r\n isSelectable: !row.isDisabled,\r\n isSelected: row.isSelected,\r\n domProperties: {},\r\n properties: row,\r\n };\r\n return returnValue;\r\n }),\r\n });\r\n }\r\n\r\n public getColumn(name: string) {\r\n return this.head.getHeaderRow()?.getColumn(name);\r\n }\r\n\r\n public getColumns() {\r\n return this.head.getHeaderRow()?.getColumns() || [];\r\n }\r\n\r\n public getFilter(name: string) {\r\n return this.head.getFiltersRow()?.getFilter(name);\r\n }\r\n\r\n public getFilters() {\r\n return this.head.getFiltersRow()?.getFilters() || [];\r\n }\r\n\r\n public getRowById(id: string | number) {\r\n return this.head.getRowById(id) || this.body.getRowById(id);\r\n }\r\n\r\n public hasAdditionalContent() {\r\n return (\r\n !!this.head\r\n .getHeaderRow()\r\n ?.getColumns()\r\n .find((c) => c.asAdditional()) || this.getState('onRowExpand')\r\n );\r\n }\r\n\r\n public onRowExpand(row: Row) {\r\n return (\r\n this.getState('onRowExpand')?.(row) ||\r\n this.head\r\n .getHeaderRow()\r\n ?.getAdditionalColumns()\r\n .map(\r\n (column) =>\r\n `${column.getState('content')}: ${row.getHiddenCell(column.getColumnName())?.getState('content')}`,\r\n )\r\n .join(', ')\r\n );\r\n }\r\n\r\n /**\r\n * EDITION MODE\r\n */\r\n\r\n public get isEditionMode() {\r\n return this.state.editionMode;\r\n }\r\n\r\n toggleEditionMode(force?: boolean) {\r\n if (this.state.allowEdition) {\r\n this.state.editionMode = force ?? !this.state.editionMode;\r\n this.emit('editionMode', this.state.editionMode);\r\n }\r\n }\r\n\r\n /**\r\n * SELECTION\r\n */\r\n\r\n clearSelection() {\r\n this.state.selection.clear();\r\n }\r\n\r\n /**\r\n * Returns the selected rows.\r\n */\r\n public getSelectedRows() {\r\n return [...this.state.selection];\r\n }\r\n\r\n public isSelected(row: Row): boolean {\r\n return this.state.selection.has(row);\r\n }\r\n\r\n public toggleColumnVisibility(colName: string, isVisible?: boolean) {\r\n isVisible =\r\n isVisible ??\r\n this.head.getHeaderRow()?.getColumn(colName).getState('isHidden');\r\n\r\n if (this.head.getHeaderRow()) {\r\n this.head\r\n .getHeaderRow()\r\n ?.getColumn(colName)\r\n .setState('isHidden', isVisible);\r\n } else {\r\n this.head.rows[0]?.cells\r\n ?.find((c) => c.getState('colName') === colName)\r\n ?.setState('isHidden', !isVisible);\r\n }\r\n }\r\n\r\n /**\r\n * Toggles the selection state of a given row.\r\n *\r\n * If the `isSelected` parameter is provided, it explicitly sets the selection\r\n * state of the row to the given value (`true` for selected, `false` for deselected).\r\n * If `isSelected` is not provided, the method will toggle the current selection state\r\n * of the row (i.e., select it if it's currently not selected, or deselect it if it is).\r\n *\r\n * @param row - The row to toggle selection for.\r\n * @param isSelected - Optional. A boolean indicating whether the row should be selected (`true`)\r\n * or deselected (`false`). If not provided, the selection state will be toggled.\r\n */\r\n public toggleRowSelection(row: Row, isSelected?: boolean) {\r\n if (this.state.allowSelection) {\r\n isSelected = isSelected ?? !this.state.selection.has(row);\r\n\r\n if (isSelected) {\r\n if (row.getState('isSelectable') !== false) {\r\n this.state.selection.add(row);\r\n }\r\n } else {\r\n this.state.selection.delete(row);\r\n }\r\n\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n }\r\n\r\n protected restoreFocus() {\r\n if (!this.state.focusedCell || this.state.focusedCell.getTable() !== this) {\r\n this.state.focusedCell =\r\n this.body.getState('rows').values().next().value?.cells[0] ||\r\n this.head.getState('rows').values().next().value?.cells[0] ||\r\n null;\r\n }\r\n if (this.state.focusedCell) {\r\n this.emit('cellFocus', { cell: this.state.focusedCell, doFocus: false });\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getTable() === this) {\r\n row.setTable(null);\r\n\r\n this.head.removeRow(row);\r\n this.body.removeRow(row);\r\n\r\n if (this.state.selection.has(row)) {\r\n this.state.selection.delete(row);\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n\r\n if (this.state.focusedCell?.getRow() === row) {\r\n this.restoreFocus();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * FOCUS\r\n */\r\n\r\n /**\r\n * @returns The currently focused cell in the table.\r\n */\r\n public getFocusedCell() {\r\n return this.state.focusedCell;\r\n }\r\n\r\n public setFocusedCell(cell: Cell, doFocus: boolean = true) {\r\n this.state.focusedCell = cell;\r\n this.emit('cellFocus', { cell, doFocus });\r\n }\r\n\r\n public setSelection(indices: number[]) {\r\n this.clearSelection();\r\n indices.forEach((index) => {\r\n const row = this.body.getRowByIndex(index);\r\n if (row) {\r\n this.toggleRowSelection(row, true);\r\n }\r\n });\r\n }\r\n\r\n public scrollRowIntoView(row: Row) {\r\n this.emit('scrollIntoRow', row);\r\n }\r\n\r\n /**\r\n * STATE\r\n */\r\n\r\n /**\r\n * Returns the current state of the `TableController` instance.\r\n *\r\n * @param prop - The property of the state to retrieve.\r\n */\r\n public getState<K extends keyof TableState>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n /**\r\n * Updates the state of the `TableController` instance.\r\n *\r\n * This method provides two overloads:\r\n * 1. A callback function that takes the current state and returns a new state.\r\n * 2. A key-value pair where the key is a property of the state, and the value is the new value for that property.\r\n *\r\n * @param prop - Either a callback function to update the state or the key of the state property to update.\r\n * @param value - (Optional) The new value for the specified state property. This is required if `prop` is a key.\r\n *\r\n * @returns The `TableController` instance for method chaining.\r\n *\r\n * ### Usage:\r\n *\r\n * **Using a callback function:**\r\n * ```tsx\r\n * tableController.setState((state) => ({\r\n * ...state,\r\n * allowEdition: false,\r\n * }));\r\n * ```\r\n *\r\n * **Using a key-value pair:**\r\n * ```tsx\r\n * tableController.setState('allowEdition', false);\r\n * ```\r\n */\r\n public setState(cb: (s: TableState) => TableState): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K,\r\n value: TableState[K],\r\n ): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K | ((s: TableState) => TableState),\r\n value?: TableState[K],\r\n ) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * PLUGINS\r\n */\r\n\r\n getPluginOfType<T extends TablePlugin>(\r\n clazz: new (...args: any[]) => T,\r\n ): T | undefined {\r\n return this.state.plugins.find((plugin) => plugin instanceof clazz) as\r\n | T\r\n | undefined;\r\n }\r\n\r\n /**\r\n * Sets the plugins for the table.\r\n */\r\n public setPlugins(cb: (currentPlugins: TablePlugin[]) => TablePlugin[]) {\r\n this.state.plugins = cb(this.state.plugins);\r\n }\r\n\r\n public getApplicablePlugins<K extends keyof TablePlugin>(\r\n method: K,\r\n ): ((\r\n ...args: Parameters<NonNullable<TablePlugin[K]>> extends [\r\n any,\r\n ...infer Rest,\r\n ]\r\n ? Rest\r\n : void[]\r\n ) => ReturnType<NonNullable<TablePlugin[K]>>)[] {\r\n return this.state.plugins\r\n .filter((c) => c[method] !== undefined)\r\n .map((c) => (c[method]! as any).bind(c, this)) as any;\r\n }\r\n}\r\n","import { MouseEvent, useRef } from 'react';\r\nimport { TableController } from '../..';\r\n\r\nexport function getRow(\r\n controller: TableController,\r\n rowElement: HTMLTableRowElement,\r\n) {\r\n const rowId = rowElement.dataset.rowid!;\r\n const row = controller.getRowById(rowId);\r\n return row;\r\n}\r\n\r\nexport function selectBetweenRows(\r\n controller: TableController,\r\n rowA: HTMLTableRowElement,\r\n rowB: HTMLTableRowElement,\r\n) {\r\n const relativePosition = rowA.compareDocumentPosition(rowB);\r\n let finished = false;\r\n if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING) {\r\n let current = rowA;\r\n if (rowA.closest('thead') && !rowB.closest('thead')) {\r\n current = rowA.closest('table')?.querySelector('tbody')\r\n ?.firstElementChild as HTMLTableRowElement;\r\n }\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.nextElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n } else if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING) {\r\n let current = rowA;\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.previousElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByClick(controller: TableController) {\r\n const lastRow = useRef<HTMLTableRowElement | null>(null);\r\n\r\n return (ev: MouseEvent) => {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n const row = getRow(controller, rowElement);\r\n\r\n if (row) {\r\n if (ev.shiftKey) {\r\n if (lastRow.current) {\r\n selectBetweenRows(controller, lastRow.current, rowElement);\r\n }\r\n } else if (ev.ctrlKey) {\r\n row?.toggleSelection();\r\n } else {\r\n controller.clearSelection();\r\n row?.toggleSelection(true);\r\n }\r\n\r\n lastRow.current = rowElement;\r\n\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n const cell = row?.getCellByColumnName(colName);\r\n\r\n if (cell) {\r\n if (target.closest('thead')) {\r\n controller.emit('columnClick', cell);\r\n }\r\n\r\n cell?.focus(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}\r\n","import { KeyboardEvent } from 'react';\r\nimport { TableController } from '../..';\r\nimport { getRow, selectBetweenRows } from './useFocusByClick';\r\n\r\nconst pageSize = 6;\r\n\r\nfunction handleArrowKey(controller: TableController, ev: KeyboardEvent) {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n\r\n let nextFocusedRow: HTMLTableRowElement = rowElement;\r\n let nextFocusedCell: HTMLTableCellElement = cellElement;\r\n switch (ev.code) {\r\n case 'ArrowUp': {\r\n const test =\r\n rowElement?.previousElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!.lastElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowDown': {\r\n const test = rowElement?.nextElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!.firstElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowLeft':\r\n nextFocusedCell =\r\n cellElement.previousElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'ArrowRight':\r\n nextFocusedCell =\r\n cellElement.nextElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'PageUp': {\r\n let i = 0;\r\n do {\r\n const test = nextFocusedRow.previousElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!\r\n .lastElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'PageDown': {\r\n let i = 0;\r\n\r\n do {\r\n const test = nextFocusedRow.nextElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!\r\n .firstElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'Home': {\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = rowElement\r\n .closest<HTMLElement>('table')\r\n ?.querySelector('thead tr') as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell =\r\n rowElement.firstElementChild as HTMLTableCellElement;\r\n }\r\n break;\r\n }\r\n case 'End':\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = (\r\n rowElement\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody') as HTMLElement\r\n ).lastElementChild as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell = rowElement.lastChild! as HTMLTableCellElement;\r\n }\r\n }\r\n\r\n if (nextFocusedCell !== cellElement && nextFocusedCell) {\r\n getRow(controller, rowElement)!\r\n .getCellByColumnName(nextFocusedCell.dataset.colname!)!\r\n .focus();\r\n } else if (nextFocusedRow !== rowElement && nextFocusedRow) {\r\n if (ev.shiftKey) {\r\n selectBetweenRows(controller, rowElement, nextFocusedRow);\r\n } else {\r\n controller.clearSelection();\r\n getRow(controller, nextFocusedRow)?.toggleSelection(true);\r\n }\r\n\r\n const cell =\r\n getRow(controller, nextFocusedRow)!.getCellByColumnName(colName) ||\r\n getRow(controller, nextFocusedRow)!.getCellByIndex(0);\r\n cell?.focus();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByKey(controller: TableController) {\r\n return (ev: KeyboardEvent) => {\r\n if (controller.isEditionMode) {\r\n if (['Enter', 'Escape'].includes(ev.code)) {\r\n ev.preventDefault();\r\n }\r\n\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n break;\r\n // eslint-disable-next-line no-fallthrough\r\n case 'Escape':\r\n controller.toggleEditionMode(false);\r\n }\r\n } else {\r\n if (\r\n [\r\n 'Escape',\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'PageUp',\r\n 'PageDown',\r\n 'Home',\r\n 'End',\r\n ].includes(ev.code) ||\r\n (ev.code === 'Enter' && controller.getState('allowEdition')) ||\r\n (ev.code === 'Space' && ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n }\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n controller.toggleEditionMode();\r\n break;\r\n case 'Space':\r\n {\r\n if (ev.ctrlKey) {\r\n const row = (ev.target as HTMLElement)?.closest('tr');\r\n if (row instanceof HTMLElement) {\r\n getRow(controller, row)!.toggleSelection();\r\n }\r\n }\r\n }\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n case 'ArrowLeft':\r\n case 'ArrowRight':\r\n case 'Home':\r\n case 'End':\r\n case 'PageUp':\r\n case 'PageDown':\r\n handleArrowKey(controller, ev);\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport {\r\n disableChildrenFocus,\r\n getFocusSelector,\r\n scrollParentIntoElement,\r\n useMount,\r\n} from '@apia/util';\r\nimport { FocusEvent, useRef } from 'react';\r\nimport { Element } from '../../primitive/Element';\r\nimport { TableController } from '../../TableController';\r\nimport type { TablePlugin } from '../TablePlugin';\r\nimport { useFocusByClick } from './useFocusByClick';\r\nimport { useFocusByKey } from './useFocusByKey';\r\nimport type { Cell } from '../../primitive/Cell';\r\n\r\nfunction getCellElement(focusControllerRef: HTMLElement, cell: Cell) {\r\n return focusControllerRef.querySelector<HTMLTableCellElement>(\r\n `tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] td[data-colname=\"${cell.getState('colName')}\"], tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] th[data-colname=\"${cell.getState('colName')}\"]`,\r\n );\r\n}\r\n\r\nfunction isVisible(el: HTMLElement | null) {\r\n if (!(el instanceof HTMLElement)) return false;\r\n\r\n // Traverse up the DOM tree\r\n while (el) {\r\n const style = getComputedStyle(el);\r\n\r\n if (\r\n style.display === 'none' ||\r\n style.visibility === 'hidden' ||\r\n style.opacity === '0'\r\n ) {\r\n return false;\r\n }\r\n\r\n el = el.parentElement;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction scrollIntoRow(row: HTMLTableCaptionElement) {\r\n if (row) {\r\n scrollParentIntoElement(row, 150, 0, 0);\r\n }\r\n}\r\n\r\nexport function restoreFocus(\r\n controller: TableController,\r\n tableElement: HTMLElement,\r\n doFocus: boolean,\r\n) {\r\n const cell = controller.getFocusedCell();\r\n\r\n if (cell) {\r\n const cellElement = getCellElement(tableElement, cell);\r\n\r\n if (cellElement) {\r\n disableChildrenFocus(tableElement);\r\n const widgets =\r\n cellElement.querySelectorAll<HTMLElement>(getFocusSelector());\r\n const widget = [...widgets].find((c) => isVisible(c));\r\n const focusableElement = widget || cellElement;\r\n\r\n focusableElement.setAttribute('tabindex', '0');\r\n restoreEditionMode(tableElement, cell.getTable().isEditionMode);\r\n if (doFocus) {\r\n focusableElement.focus();\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction restoreEditionMode(\r\n focusController: HTMLElement,\r\n editionMode: boolean,\r\n) {\r\n const focusable = focusController?.querySelector(\r\n '[tabindex=\"0\"]',\r\n ) as HTMLElement;\r\n const cell = focusable?.closest('td, th');\r\n if (cell instanceof HTMLElement) {\r\n const widgets = cell.querySelectorAll<HTMLElement>(getFocusSelector());\r\n widgets.forEach((widget) => {\r\n widget.setAttribute('tabindex', editionMode ? '0' : '-1');\r\n });\r\n const firstFocusable = [...widgets].find((c) => isVisible(c)) || cell;\r\n firstFocusable.setAttribute('tabindex', '0');\r\n }\r\n}\r\n\r\nexport class FocusControllerPlugin implements TablePlugin {\r\n rootElement: HTMLElement | null = null;\r\n\r\n scrollIntoView(rowId: string) {\r\n const row = this.rootElement?.querySelector(\r\n `tr[data-rowid=\"${rowId}\"]`,\r\n ) as HTMLTableRowElement;\r\n\r\n if (row) {\r\n scrollIntoRow(row);\r\n }\r\n }\r\n\r\n useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n _context: any,\r\n ) {\r\n if (element instanceof TableController) {\r\n const disconnect = useRef(() => {});\r\n\r\n useMount(() => {\r\n const uns1 = controller.on('cellFocus', (ev) => {\r\n if (this.rootElement) {\r\n restoreFocus(controller, this.rootElement, ev.doFocus);\r\n }\r\n });\r\n const uns2 = controller.on('editionMode', (editionMode) => {\r\n if (this.rootElement) {\r\n restoreEditionMode(this.rootElement!, editionMode);\r\n }\r\n });\r\n const uns3 = controller.on('scrollIntoRow', (row) => {\r\n this.scrollIntoView(row.getState('id'));\r\n });\r\n\r\n return () => {\r\n uns1();\r\n uns2();\r\n uns3();\r\n };\r\n });\r\n\r\n return {\r\n className: 'table__focus_controller',\r\n onClick: useFocusByClick(controller),\r\n onKeyDown: useFocusByKey(controller),\r\n onBlur: (ev: FocusEvent) => {\r\n if (\r\n ev.relatedTarget instanceof HTMLElement &&\r\n ev.relatedTarget.closest('.table__focus_controller') !==\r\n this.rootElement\r\n ) {\r\n controller.toggleEditionMode(false);\r\n }\r\n },\r\n ref: (el: HTMLElement | null) => {\r\n this.rootElement = el;\r\n if (el) {\r\n const observer = new MutationObserver(() => {\r\n restoreFocus(controller, this.rootElement!, false);\r\n });\r\n disconnect.current?.();\r\n observer.observe(el, { subtree: true, childList: true });\r\n disconnect.current = () => {\r\n observer.disconnect();\r\n };\r\n }\r\n },\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n","import { Cell } from '../primitive/Cell';\r\nimport type { Element } from '../primitive/Element';\r\nimport { Row } from '../primitive/Row';\r\nimport { TableController } from '../TableController';\r\nimport type { TablePlugin } from './TablePlugin';\r\n\r\nexport class WaiAriaPlugin implements TablePlugin {\r\n public useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n context: any,\r\n ) {\r\n if (element instanceof Row) {\r\n const base =\r\n element.getContainer() === controller.head\r\n ? 0\r\n : controller.head.rows.length;\r\n return {\r\n 'aria-selected': element.isSelected,\r\n 'aria-rowindex': context + base + 1,\r\n };\r\n } else if (element instanceof Cell) {\r\n return {\r\n 'aria-colindex': context + 1,\r\n };\r\n } else if (element instanceof TableController) {\r\n return {\r\n role: 'treegrid',\r\n 'aria-multiselectable':\r\n controller.getState('allowSelection') &&\r\n controller.getState('isSelectionMultiple')\r\n ? true\r\n : undefined,\r\n 'aria-colcount': controller.head.rows[0]?.cells.length || 0,\r\n 'aria-rowcount':\r\n controller.head.rows.length + controller.body.rows.length,\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n"],"names":["__publicField","filter","returnValue"],"mappings":";;;;;;;;;;AAGA,MAAM,YAAY,EAAC;AAMZ,MAAe,OAAA,CAAoC;AAAA,EAGxD,YAAsB,KAAA,EAAU;AAAV,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAFtB,IAAAA,eAAA,CAAA,IAAA,EAAU,OAAA,EAAyB,SAAA,CAAA;AAGjC,IAAA,cAAA,CAAoC,IAAA,EAAM;AAAA,MACxC,KAAA,EAAO,UAAA;AAAA,MACP,QAAA,EAAU;AAAA,KACX,CAAA;AAAA;AACH,EAEO,QAAA,GAAW;AAChB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA;AACd,EAEO,SAAS,KAAA,EAA+B;AAC7C,IAAA,IAAA,CAAK,QAAQ,KAAA,IAAS,SAAA;AACtB,IAAA,OAAO,IAAA;AAAA;AACT,EAEO,SAA4B,IAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA;AACxB,EAIO,QAAA,CAA4B,MAAyB,KAAA,EAAc;AACxE,IAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAAA,KAC9B,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAA;AAErB,IAAA,OAAO,IAAA;AAAA;AAEX;;;;;;;;ACxBO,MAAM,aAEH,OAAA,CAAe;AAAA,EAFlB,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAGL,IAAAA,eAAA,CAAA,IAAA,EAAU,WAAA,EAAwB,IAAA,CAAA;AAAA;AAAA,EAElC,aAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,SAAS,SAAS,CAAA;AAAA;AAChC,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,IAAA,CAAK,MAAA,EAAO,CAAG,YAAA,CAAa,IAAI,CAAA;AAAA;AACzC,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA;AACd,EAEA,OAAO,GAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,GAAA;AACjB,IAAA,OAAO,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAA,CAAM,UAAmB,IAAA,EAAM;AAC7B,IAAA,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,IAAA,EAAM,OAAO,CAAA;AAAA;AACzC,EAEA,YAAY,KAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,QAAQ,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA;AAE3C;;;;;;;;ACxBO,MAAM,YAAY,OAAA,CAAkB;AAAA,EA+DzC,WAAA,CACE,IACU,UAAA,EACV;AACA,IAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,GAAG,KAAA,EAAM,GAAI,cAAc,EAAC;AACvD,IAAA,KAAA,CAAM,EAAE,IAAI,GAAG,KAAA,EAAO,OAAO,KAAA,IAAS,IAAI,CAAA;AAHhC,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAhEZ,IAAAA,eAAA,CAAA,IAAA,EAAU,aACR,EAAC,CAAA;AAEH,IAAAA,eAAA,CAAA,IAAA,EAAA,aAAA,sBAAqC,GAAA,EAAI,CAAA;AAiEvC,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,UAAA,EAAY;AAAA,KACb,CAAA;AAAA;AACH,EAlEA,QAAQ,IAAA,EAAY;AAClB,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAC1B,IAAA,IAAA,CAAK,WAAW,IAAI,CAAA;AACpB,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,YAAA,CAAa,QAAc,UAAA,EAAkB;AAC3C,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,CAAA;AAEjD,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,IAAA,CAAK,WAAW,UAAU,CAAA;AAC1B,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,GAAG,UAAU,CAAA;AAAA;AAC9C;AACF,EAEA,aAAA,CAAc,QAAc,UAAA,EAAkB;AAC5C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,MAAM,CAAA;AAE7C,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,IAAA,CAAK,WAAW,UAAU,CAAA;AAC1B,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,GAAG,UAAU,CAAA;AAAA;AAC9C;AACF,EAEA,MAAM,IAAA,EAAiB;AACrB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AAEvB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAEzB,MAAA,MAAM,MAAM,IAAA,CAAK,OAAA,GACb,KAAK,KAAA,CAAM,IAAA,CAAK,cAAa,CAAG,SAAA,CAAU,KAAK,OAAO,CAAA,GACtD,KAAK,KAAA,CAAM,IAAA,CAAK,cAAa,CAAG,UAAA,GAAa,CAAC,CAAA;AAElD,MAAA,MAAM,YAAA,GAAe,IAAI,IAAA,CAAK;AAAA,QAC5B,GAAG,IAAA;AAAA,QACH,OAAA,EAAS,GAAA,EAAK,QAAA,CAAS,SAAS;AAAA,OACjC,CAAA;AAED,MAAA,IAAI,GAAA,EAAK,WAAU,EAAG;AACpB,QAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,GAAI,IAAA,CAAK,YAAY,IAAI,CAAA;AAE9D,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,IAAA,CAAK,QAAQ,YAAY,CAAA;AAAA,SAC3B,MAAO;AACL,UAAA,WAAA,CAAY,WAAA,CAAY;AAAA,YACtB,GAAG,IAAA;AAAA,YACH,OAAA,EAAS,GAAA,EAAK,QAAA,CAAS,SAAS;AAAA,WACjC,CAAA;AAAA;AACH,OACF,MAAO;AACL,QAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAA,EAAK,aAAA,IAAiB,YAAY,CAAA;AAAA;AACzD;AAEF,IAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,MAAM,MAAA,GAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA;AAC7D,EAaA,IAAI,KAAA,GAAgB;AAClB,IAAA,MAAM,sBACJ,CAAC,CAAC,IAAA,CAAK,KAAA,CAAM,SAAS,aAAa,CAAA,IAAA,CAClC,IAAA,CAAK,KAAA,CAAM,KAAK,aAAA,EAAc,EAAG,iBAAA,EAAkB,EAAG,UAAU,CAAA,IAAK,CAAA;AAExE,IAAA,IAAI,cAAA,GAA8B,IAAA;AAClC,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,cAAA,GAAiB,IAAI,cAAA,EAAe;AACpC,MAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAC1B,MAAA,cAAA,CAAe,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA;AAGpC,IAAA,OAAO,CAAC,cAAA,EAAgB,GAAG,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA;AAAA,MAAO,CAAC,CAAA,KACnD,OAAA,CAAQ,CAAC;AAAA,KACX;AAAA;AACF,EAEA,IAAI,UAAA,GAAa;AACf,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAAA;AACnC,EAEA,oBAAoB,OAAA,EAAiB;AACnC,IAAA,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,KAAM,OAAO,CAAA;AAAA;AACjE,EAEA,eAAe,KAAA,EAAe;AAC5B,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA;AACzB,EAEA,aAAa,IAAA,EAAY;AACvB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA;AAChC,EAEA,YAAA,GAAe;AACb,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA;AACd,EAEA,eAAA,GAAkB;AAChB,IAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,IAAA,CAAK,UAAW,QAAA,CAAS,MAAM,CAAA,CAAE,MAAA,EAAQ,CAAA;AACnE,IAAA,MAAM,QAAQ,aAAA,CAAc,SAAA;AAAA,MAC1B,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA,KAAM,KAAK,KAAA,CAAM;AAAA,KACzC;AACA,IAAA,OAAO,aAAA,CAAc,KAAA,GAAQ,CAAC,CAAA,IAAK,IAAA;AAAA;AACrC,EAEA,cAAc,OAAA,EAAiB;AAC7B,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA;AAAA;AACrC,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,IAAA,CAAK,YAAA,EAAa,CAAG,WAAA,CAAY,IAAI,CAAA;AAAA;AAC9C,EAEA,cAAA,GAAiB;AACf,IAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,IAAA,CAAK,UAAW,QAAA,CAAS,MAAM,CAAA,CAAE,MAAA,EAAQ,CAAA;AACnE,IAAA,MAAM,QAAQ,aAAA,CAAc,SAAA;AAAA,MAC1B,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA,KAAM,KAAK,KAAA,CAAM;AAAA,KACzC;AACA,IAAA,OAAO,aAAA,CAAc,KAAA,GAAQ,CAAC,CAAA,IAAK,IAAA;AAAA;AACrC,EAEA,YAAY,GAAA,EAAU;AACpB,IAAA,IAAA,CAAK,YAAA,EAAa,EAAG,WAAA,CAAY,IAAA,EAAM,GAAG,CAAA;AAAA;AAC5C,EAEA,aAAa,GAAA,EAAU;AACrB,IAAA,IAAA,CAAK,YAAA,EAAa,EAAG,YAAA,CAAa,IAAA,EAAM,GAAG,CAAA;AAAA;AAC7C,EAEA,MAAA,GAAS;AACP,IAAA,IAAA,CAAK,YAAA,EAAa,EAAG,SAAA,CAAU,IAAI,CAAA;AAAA;AACrC,EAEA,kBAAA,CAAmB,OAAe,OAAA,EAAe;AAC/C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAChC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA;AAG1E,IAAA,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,GAAI,OAAA;AACpB,IAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAEvB,IAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA;AACzB,EAEO,cAAA,GAAiB;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAAA;AACnC,EAEO,aAAa,SAAA,EAAiD;AACnE,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,OAAO,IAAA;AAAA;AACT,EAEO,SAAS,KAAA,EAA+B;AAC7C,IAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AAEpB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,OAAA,CAAQ,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA;AAEjD,IAAA,IAAI,KAAA,IAAS,IAAA,CAAK,UAAA,EAAY,UAAA,EAAY;AACxC,MAAA,KAAA,CAAM,kBAAA,CAAmB,MAAM,IAAI,CAAA;AAAA;AAGrC,IAAA,OAAO,IAAA;AAAA;AACT,EAEO,KAAK,OAAA,EAAc;AACxB,IAAA,IAAA,CAAK,YAAA,EAAa,EAAG,QAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AAAA;AAC7C,EAEO,gBAAgB,UAAA,EAAsB;AAC3C,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAA,CAAmB,IAAA,EAAM,UAAU,CAAA;AAAA;AAChD,EAEU,WAAW,IAAA,EAAY;AAC/B,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,KAAK,CAAA;AACxB,IAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA;AAClB,EAEU,WAAW,IAAA,EAAY;AAC/B,IAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,IAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA;AAEpB;;AC9NO,MAAM,sBAAsB,GAAA,CAAI;AAAA,EACrC,YAAY,EAAA,EAAY;AACtB,IAAA,KAAA,CAAM,EAAE,CAAA;AACR,IAAA,IAAA,CAAK,QAAA,CAAS,gBAAgB,KAAK,CAAA;AAAA;AACrC,EAEA,IAAI,KAAA,GAAgC;AAClC,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA;AAEtB;;ACTO,MAAM,6BAA6B,IAAA,CAExC;AAAA,EACA,YAAY,OAAA,EAAoB;AAC9B,IAAA,KAAA,CAAM;AAAA,MACJ,QAAA,EAAU,KAAA;AAAA,MACV,OAAA,EAAS,cAAA;AAAA,MACT;AAAA,KACD,CAAA;AAAA;AACH,EAEO,SACL,IAAA,EACwC;AACxC,IAAA,IAAI,SAAS,eAAA,EAAiB;AAC5B,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAK,KAAA,CAAM,IAAA,CAAK,cAAa,EAAG,eAAA,GAAkB,MAAA,IAAU;AAAA,OACvE;AAAA;AAGF,IAAA,OAAO,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA;AAE9B;;ACrBO,MAAM,uBAAuB,IAAA,CAAwC;AAAA,EAC1E,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM;AAAA,MACJ,QAAA,EAAU,KAAA;AAAA,MACV,OAAA,EAAS,cAAA;AAAA,MACT,aAAA,EAAe;AAAA,QACb,KAAA,EAAO;AAAA,UACL,KAAA,EAAO;AAAA;AACT;AACF,KACD,CAAA;AAAA;AACH,EAEA,MAAM,QAAA,GAAW;AACf,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,EAAO,CAAG,QAAA,EAAS;AAC7C,IAAA,IACE,EACE,KAAK,QAAA,EAAS,CAAE,KAAK,aAAA,CAAc,YAAA,GAAe,CAAC,CAAA,YACnD,aAAA,CAAA,EAEF;AACA,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,MAAM,WAAA,CAAY,IAAA,CAAK,QAAS,CAAA;AAEvD,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,MAAM,SAAS,IAAI,aAAA;AAAA,UACjB,GAAG,IAAA,CAAK,MAAA,EAAO,EAAG,QAAA,CAAS,IAAI,CAAC,CAAA,YAAA;AAAA,SAClC;AAEA,QAAA,IAAA,CAAK,UAAS,CAAE,IAAA,CAAK,YAAY,IAAA,CAAK,MAAA,IAAW,MAAM,CAAA;AAEvD,QAAA,MAAA,CAAO,OAAA,CAAQ,IAAI,oBAAA,CAAqB,GAAG,CAAC,CAAA;AAE5C,QAAA,IAAA,CAAK,MAAM,QAAA,GAAW,IAAA;AAAA;AACxB,KACF,MAAO;AACL,MAAA,IAAA,CAAK,UAAS,CACX,IAAA,CAAK,cAAc,YAAA,GAAe,CAAC,EACnC,MAAA,EAAO;AACV,MAAA,IAAA,CAAK,MAAM,QAAA,GAAW,KAAA;AAAA;AACxB;AAEJ;;ACjCO,MAAM,kBAAgD,OAAA,CAE3D;AAAA,EACA,WAAA,CACS,OACP,KAAA,EACA;AACA,IAAA,KAAA,CAAM,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA;AAHrB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAIP,IAAA,cAAA,CAAe,MAAM,EAAE,QAAA,EAAU,MAAA,EAAQ,IAAA,EAAM,UAAU,CAAA;AAAA;AAC3D,EAEA,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA;AACpB,EAEA,OAAO,GAAA,EAAU;AACf,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AACxB,IAAA,GAAA,CAAI,QAAA,CAAS,KAAK,KAAK,CAAA;AACvB,IAAA,GAAA,CAAI,aAAa,IAAI,CAAA;AAErB,IAAA,IAAA,CAAK,gBAAgB,GAAG,CAAA;AAExB,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,QAAQ,IAAA,EAAa;AACnB,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AACnC,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,KAAA,GAAQ;AACN,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC/B,MAAA,GAAA,CAAI,aAAa,IAAI,CAAA;AACrB,MAAA,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,KAClB,CAAA;AACD,IAAA,OAAO,KAAK,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA;AAC7C,EAEA,WAAW,EAAA,EAAqB;AAC9B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,KAAM,EAAE,CAAA;AAAA;AAC5D,EAEA,cAAc,KAAA,EAAe;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAAA;AAC9B,EAEA,YAAY,GAAA,EAAU;AACpB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAAA;AACpC,EAEA,WAAA,CAAY,QAAa,UAAA,EAAiB;AACxC,IAAA,IAAI,MAAA,CAAO,YAAA,EAAa,KAAM,IAAA,EAAM;AAClC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,MAAM,CAAA;AAC5C,MAAA,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAG,GAAG,UAAU,CAAA;AAC/C,MAAA,UAAA,CAAW,QAAA,CAAS,KAAK,KAAK,CAAA;AAC9B,MAAA,UAAA,CAAW,aAAa,IAAI,CAAA;AAC5B,MAAA,IAAA,CAAK,gBAAgB,UAAU,CAAA;AAAA;AACjC;AACF,EAEA,YAAA,CAAa,QAAa,UAAA,EAAiB;AACzC,IAAA,IAAI,MAAA,CAAO,YAAA,EAAa,KAAM,IAAA,EAAM;AAClC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,MAAM,CAAA;AAC5C,MAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,GAAG,UAAU,CAAA;AAC3C,MAAA,UAAA,CAAW,QAAA,CAAS,KAAK,KAAK,CAAA;AAC9B,MAAA,UAAA,CAAW,aAAa,IAAI,CAAA;AAC5B,MAAA,IAAA,CAAK,gBAAgB,UAAU,CAAA;AAAA;AACjC;AACF,EAEA,UAAU,GAAA,EAAU;AAClB,IAAA,IAAI,GAAA,CAAI,YAAA,EAAa,KAAM,IAAA,EAAM;AAC/B,MAAA,GAAA,CAAI,aAAa,IAAI,CAAA;AACrB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,GAAG,CAAA;AACzD,MAAA,IAAA,CAAK,KAAA,CAAM,UAAU,GAAG,CAAA;AAAA;AAC1B;AACF,EAEA,QAAA,CAAS,GAAQ,CAAA,EAAQ;AACvB,IAAA,IAAI,GAAG,YAAA,EAAa,KAAM,QAAQ,CAAA,EAAG,YAAA,OAAmB,IAAA,EAAM;AAC5D,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA;AAAA,QAC7B,CAAC,MAAM,CAAA,CAAE,QAAA,GAAW,IAAI,CAAA,KAAM,CAAA,CAAE,WAAW,IAAI;AAAA,OACjD;AACA,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA;AAAA,QAC7B,CAAC,MAAM,CAAA,CAAE,QAAA,GAAW,IAAI,CAAA,KAAM,CAAA,CAAE,WAAW,IAAI;AAAA,OACjD;AACA,MAAA,IAAI,MAAA,KAAW,EAAA,IAAM,MAAA,KAAW,EAAA,EAAI;AAClC,QAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,CAAA;AAC1B,QAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,CAAA;AAAA;AAC5B;AACF;AACF,EAEU,gBAAgB,MAAA,EAAa;AACrC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,EAAS,CAAE,qBAAqB,UAAU,CAAA;AAC/D,IAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA;AAE1C;;AChGO,MAAM,kBAAkB,SAAA,CAA0B;AAAA,EACvD,YAAY,KAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,KAAA,EAAO,EAAE,IAAA,EAAM,IAAI,CAAA;AAAA;AAC3B,EAEA,MAAM,IAAA,EAAkB;AACtB,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,MAAA,IAAI,UAAA,GAA8B,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,CAAA;AAC/C,MAAA,IAAI,sBAAsB,aAAA,EAAe;AACvC,QAAA,UAAA,CAAW,MAAA,EAAO;AAClB,QAAA,UAAA,GAAa,MAAA;AAAA;AAEf,MAAA,MAAM,OAAA,GAAU,UAAA,IAAc,IAAI,GAAA,CAAI,IAAI,EAAE,CAAA;AAE5C,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA;AAErB,MAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA;AAEnB,IAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA;AAErC;;AC3BO,MAAM,eAAe,IAAA,CAAkB;AAAA,EACrC,YAAA,GAAe;AACpB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,KAAA,CAAM,YAAA;AAAA;AACtB,EAEO,QAAA,GAAW;AAChB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,KAAA,CAAM,QAAA;AAAA;AACtB;AAAA;AAAA;AAAA,EAKO,SAAA,GAAY;AACjB,IAAA,OAAO,CAAC,IAAA,CAAK,YAAA,EAAa,IAAK,CAAC,KAAK,QAAA,EAAS;AAAA;AAElD;;;;;;;;ACpBO,MAAM,gBAAgB,GAAA,CAAI;AAAA,EAA1B,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACL,IAAAA,eAAA,CAAA,IAAA,EAAA,SAAA,sBAAmC,GAAA,EAAI,CAAA;AAAA;AAAA,EAEvC,gBAAgB,OAAA,EAAwB;AACtC,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,MAAM,UAAA,GAAa,IAAI,MAAA,CAAO,MAAM,CAAA;AACpC,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS,UAAU,CAAA;AAE3C,MAAA,IAAI,UAAA,CAAW,WAAU,EAAG;AAC1B,QAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAA;AAQlC,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,SACzB,MAAO;AACL,UAAA,WAAA,CAAY,YAAY,MAAM,CAAA;AAAA;AAChC;AACF;AACF;AACF,EAEA,UAAU,IAAA,EAAc;AACtB,IAAA,OAAO,IAAA,CAAK,oBAAoB,IAAI,CAAA;AAAA;AACtC,EAEA,UAAA,GAAa;AACX,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAAA;AACzC,EAEA,oBAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,YAAW,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,CAAA;AAAA;AACzD,EAEA,eAAA,GAAkB;AAChB,IAAA,OAAQ,IAAA,CAAK,SAAS,EAAC;AAAA;AAE3B;;ACRO,MAAM,eAAmC,IAAA,CAA6B;AAAA,EACpE,YAAA,GAAe;AACpB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,MAAM,YAAA,IAAgB,CAAC,KAAK,sBAAA,EAAuB;AAAA;AACnE,EAEA,YAAY,KAAA,EAA+B;AACzC,IAAA,KAAA,CAAM,KAAK,CAAA;AAEX,IAAA,QAAA;AAAA,MACE,MAAM,KAAK,KAAA,CAAM,KAAA;AAAA,MACjB,MAAM;AACJ,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA;AAC9B,KACF;AAAA;AACF,EAEA,KAAA,GAAQ;AACN,IAAA,IAAA,CAAK,SAAS,EAAe,CAAA;AAAA;AAC/B,EAEA,sBAAA,GAAyB;AACvB,IAAA,OAAO,KAAK,MAAA,EAAO,CAChB,cAAa,CACb,YAAA,IACC,eAAA,EAAgB,CACjB,KAAK,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,SAAS,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA;AACnE,EAEA,KAAK,EAAA,EAAwB;AAC3B,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA;AAC1B,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,MAAM,MAAA,EAAO;AAAA;AACtB,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA;AACpB,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,QAAA,EAAS;AAAA;AACzB,EAEA,SAAS,GAAA,EAAgB;AACvB,IAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,cAAA,EAAgB,IAAI,CAAA;AAAA;AACtC,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAA,CAAK,UAAS,GAAI,IAAA;AAAA;AAErD;;;;;;;;ACnFO,MAAM,gBAAgB,GAAA,CAAI;AAAA,EAA1B,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACL,IAAAA,eAAA,CAAA,IAAA,EAAA,SAAA,sBAAmC,GAAA,EAAI,CAAA;AAAA;AAAA,EAEvC,aAAa,OAAA,EAAyC;AACpD,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAEnB,IAAA,IAAI,eAAA,GAAkB,KAAA;AAEtB,IAAA,MAAM,OAAA,GAAU,YAAA;AAAA,MACd,IAAA,CAAK,YAAA,EAAa,CAAE,YAAA,IAAgB,eAAA;AAAgB,KACtD;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AAExB,MAAA,MAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,QACrB,CAAC,MAAM,CAAA,CAAE,UAAA,KAAe,OAAO,QAAA,CAAS,SAAS,CAAA,IAAK,CAAC,CAAA,CAAE;AAAA,OAC3D;AACA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,cAAA,CAAe,CAAC,CAAA;AAE/C,QAAA,MAAM,UAAA,GAAa,IAAI,MAAA,CAAO;AAAA,UAC5B,GAAG,MAAA;AAAA,UACH,SAAS,MAAA,CAAO;AAAA,SACjB,CAAA;AACD,QAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,UAAU,CAAA;AAExC,QAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,UAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,SACzB,MAAO;AACL,UAAA,MAAM,EAAE,KAAA,EAAO,GAAG,WAAA,EAAY,GAAI,MAAA;AAClC,UAAA,iBAAA,CAAkB,YAAY,WAAW,CAAA;AAAA;AAG3C,QAAA,eAAA,GAAkB,IAAA;AAClB,QAAC,OAAe,KAAA,GAAQ,IAAA;AAAA,OAC1B,MAAO;AACL,QAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,CAAC,CAAA,EAAG;AAC3B,UAAA,IAAA,CAAK,OAAA,CAAQ,IAAI,IAAA,CAAK,EAAE,SAAS,MAAA,CAAO,aAAA,EAAc,EAAG,CAAC,CAAA;AAAA;AAC5D;AAEF,MAAA,KAAA,MAAWC,WAAU,OAAA,EAAS;AAC5B,QAAA,IAAI,CAAEA,QAAe,KAAA,EAAO;AAC1B,UAAA,MAAM,UAAA,GAAa,IAAI,MAAA,CAAO;AAAA,YAC5B,GAAGA,OAAAA;AAAA,YACH,SAASA,OAAAA,CAAO;AAAA,WACjB,CAAA;AACD,UAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,OAAAA,CAAO,IAAA,EAAM,UAAU,CAAA;AAAA;AAC1C;AACF;AAGF,IAAA,OAAO,eAAA;AAAA;AACT,EAEA,oBAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,YAAW,CAAE,MAAA;AAAA,MACvB,CAAC,CAAA,KACC,CAAA,CAAE,SAAS,cAAc,CAAA,IACzB,KAAK,YAAA,EAAa,CACf,YAAA,EAAa,EACZ,QAAQ,GAAA,CAAI,CAAA,CAAE,SAAS,SAAS,CAAC,GACjC,YAAA;AAAa,KACrB;AAAA;AACF,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAW,CAAA;AAAA;AAC1C,EAEA,YAAA,GAAe;AACb,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA;AACd,EAEA,UAAU,IAAA,EAAc;AACtB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA;AAC9B,EAEA,UAAA,GAAa;AACX,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAAA;AACzC,EAEA,iBAAA,GAAoB;AAClB,IAAA,OAAO,IAAA,CAAK,UAAA,EAAW,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM;AACrC,MAAA,OAAO,EACL,CAAA,CAAE,QAAA,CAAS,cAAc,CAAA,IACzB,IAAA,CAAK,cAAa,CACf,YAAA,EAAa,EACZ,OAAA,CAAQ,IAAI,CAAA,CAAE,QAAA,CAAS,SAAS,CAAC,CAAA,EACjC,WAAU,KAAM,KAAA,CAAA;AAAA,KAEvB,CAAA;AAAA;AAEL;;;;;;;;AClFO,MAAM,kBAAkB,SAAA,CAA0B;AAAA,EACvD,YAAY,KAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,KAAA,EAAO,EAAE,IAAA,EAAM,IAAI,CAAA;AAG3B,IAAAD,eAAA,CAAA,IAAA,EAAA,YAAA,EAA6B,IAAA,CAAA;AAC7B,IAAAA,eAAA,CAAA,IAAA,EAAA,YAAA,EAA6B,IAAA,CAAA;AAAA;AAH7B,EAKA,YAAA,GAAoC;AAClC,IAAA,OAAO,IAAA,CAAK,KAAK,CAAC,CAAA,YAAa,UAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA;AAAA;AAC1D,EAEA,aAAA,GAAqC;AACnC,IAAA,OAAO,IAAA,CAAK,KAAK,CAAC,CAAA,YAAa,UAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA;AAAA;AAC1D,EAEA,MAAM,IAAA,EAAkB;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,EAAC;AAEnB,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AAKvB,MAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAEpC,MAAA,IAAI,gBAAA,IAAoB,EAAE,gBAAA,YAA4B,OAAA,CAAA,EAAU;AAC9D,QAAA,gBAAA,CAAiB,MAAA,EAAO;AAAA;AAG1B,MAAA,IAAA,CAAK,UAAA,GAAc,gBAAA,IAAoB,IAAI,OAAA,CAAQ,QAAQ,CAAA;AAC3D,MAAA,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACnC,MAAA,IAAA,CAAK,UAAA,CAAW,aAAa,IAAI,CAAA;AAEjC,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,UAAU,CAAA;AAAA;AAG7B,MAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,IAAA,CAAK,OAAO,CAAA;AAAA;AAG9C,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AAKvB,MAAA,MAAM,iBAAA,GAAoB,KAAK,aAAA,EAAc;AAC7C,MAAA,IAAA,CAAK,UAAA,GAAa,iBAAA,IAAqB,IAAI,OAAA,CAAQ,SAAS,CAAA;AAC5D,MAAA,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACnC,MAAA,IAAA,CAAK,UAAA,CAAW,aAAa,IAAI,CAAA;AAEjC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,KAAK,OAAO,CAAA;AAC3D,MAAA,IAAI,SAAA,IAAa,CAAC,iBAAA,EAAmB;AACnC,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,UAAU,CAAA;AAAA;AAC7B;AACF;AAEJ;;AC3BO,MAAM,iBAAiB,MAAM;AAAA,EAClC,IAAI,aAAA,EAAc;AAAA,EAClB,IAAI,qBAAA;AACN;;;;;;;;ACXO,MAAM,wBAAwB,YAAA,CAA0B;AAAA,EAY7D,YAAY,KAAA,EAAgD;AAC1D,IAAA,KAAA,EAAM;AAZR,IAAAA,eAAA,CAAA,IAAA,EAAU,OAAA,EAAoB;AAAA,MAC5B,YAAA,EAAc,IAAA;AAAA,MACd,WAAA,EAAa,IAAA;AAAA,MACb,cAAA,EAAgB,IAAA;AAAA,MAChB,WAAA,EAAa,KAAA;AAAA,MACb,WAAA,EAAa,IAAA;AAAA,MACb,SAAS,EAAC;AAAA,MACV,mBAAA,EAAqB,IAAA;AAAA,MACrB,SAAA,sBAAe,GAAA;AAAI,KACrB,CAAA;AAoBA,IAAAA,eAAA,CAAA,IAAA,EAAO,MAAA,EAAO,IAAI,SAAA,CAAU,IAAI,CAAA,CAAA;AAChC,IAAAA,eAAA,CAAA,IAAA,EAAO,MAAA,EAAO,IAAI,SAAA,CAAU,IAAI,CAAA,CAAA;AAjB9B,IAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,KAAA,IAAS,EAAE,CAAA;AACrC,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,gBAAgB,CAAA;AAAA;AAG7C,IAAA,cAAA,CAAyC,IAAA,EAAM;AAAA,MAC7C,KAAA,EAAO,MAAA;AAAA,MACP,cAAA,EAAgB,MAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,cAAA,EAAgB,MAAA;AAAA,MAChB,KAAA,EAAO,UAAA;AAAA,MACP,kBAAA,EAAoB,MAAA;AAAA,MACpB,iBAAA,EAAmB;AAAA,KACpB,CAAA;AAAA;AACH;AAAA;AAAA;AAAA;AAAA,EASO,MAAM,IAAA,EAAmB;AAC9B,IAAA,IAAA,CAAK,IAAA,CAAK,MAAM,IAAI,CAAA;AACpB,IAAA,IAAA,CAAK,IAAA,CAAK,MAAM,IAAI,CAAA;AAEpB,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA;AACpB,EAEO,iBAAiB,KAAA,EAAuB;AAI7C,IAAA,IAAA,CAAK,QAAA,CAAS,cAAA,EAAgB,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA;AACzD,IAAA,IAAA,CAAK,QAAA,CAAS,gBAAA,EAAkB,KAAA,CAAM,QAAA,CAAS,cAAc,CAAA;AAC7D,IAAA,IAAA,CAAK,QAAA,CAAS,qBAAA,EAAuB,KAAA,CAAM,QAAA,CAAS,mBAAmB,CAAA;AAEvE,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA;AAE1C,IAAA,IAAA,CAAK,KAAA,CAAM;AAAA,MACT,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAC1B,QAAA,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,EAAG,CAAA;AACjB,QAAA,OAAO;AAAA,UACL,SAAS,CAAA,CAAE,IAAA;AAAA,UACX,cAAc,CAAA,CAAE,gBAAA;AAAA,UAChB,UAAU,CAAA,CAAE,UAAA;AAAA,UACZ,UAAU,CAAA,CAAE,QAAA;AAAA,UACZ,UAAA,EAAY,CAAA;AAAA,UACZ,SAAS,CAAA,CAAE,KAAA;AAAA,UACX,WAAW,CAAA,CAAE;AAAA,SACf;AAAA,OACD,CAAA;AAAA,MACD,SAAS,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC9C,QAAA,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,EAAG,CAAA;AACjB,QAAA,OAAO;AAAA,UACL,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,OAAA,EAAS,YAAA;AAAA,UACT,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,UAAA,EAAY,CAAA;AAAA,UACZ,kBAAkB,CAAA,CAAE,gBAAA;AAAA,UACpB,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,OAAO,CAAA,CAAE,YAAA;AAAA,UACT,cAAc,CAAA,CAAE;AAAA,SAClB;AAAA,OACD,CAAA;AAAA,MACD,MAAM,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC1C,QAAA,OAAA,CAAQ,GAAA,CAAI,EAAE,GAAA,EAAK,CAAA;AACnB,QAAA,MAAM,WAAA,GAAsC;AAAA,UAC1C,IAAI,GAAA,CAAI,EAAA;AAAA,UACR,OAAO,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AAC3C,YAAA,MAAME,YAAAA,GAAkD;AAAA,cACtD,SAAS,IAAA,CAAK;AAAA,aAChB;AACA,YAAA,OAAOA,YAAAA;AAAA,WACR,CAAA;AAAA,UACD,YAAA,EAAc,KAAA;AAAA,UACd,YAAA,EAAc,CAAC,GAAA,CAAI,UAAA;AAAA,UACnB,YAAY,GAAA,CAAI,UAAA;AAAA,UAChB,eAAe,EAAC;AAAA,UAChB,UAAA,EAAY;AAAA,SACd;AACA,QAAA,OAAO,WAAA;AAAA,OACR;AAAA,KACF,CAAA;AAAA;AACH,EAEO,UAAU,IAAA,EAAc;AAC7B,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,YAAA,EAAa,EAAG,UAAU,IAAI,CAAA;AAAA;AACjD,EAEO,UAAA,GAAa;AAClB,IAAA,OAAO,KAAK,IAAA,CAAK,YAAA,EAAa,EAAG,UAAA,MAAgB,EAAC;AAAA;AACpD,EAEO,UAAU,IAAA,EAAc;AAC7B,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,aAAA,EAAc,EAAG,UAAU,IAAI,CAAA;AAAA;AAClD,EAEO,UAAA,GAAa;AAClB,IAAA,OAAO,KAAK,IAAA,CAAK,aAAA,EAAc,EAAG,UAAA,MAAgB,EAAC;AAAA;AACrD,EAEO,WAAW,EAAA,EAAqB;AACrC,IAAA,OAAO,IAAA,CAAK,KAAK,UAAA,CAAW,EAAE,KAAK,IAAA,CAAK,IAAA,CAAK,WAAW,EAAE,CAAA;AAAA;AAC5D,EAEO,oBAAA,GAAuB;AAC5B,IAAA,OACE,CAAC,CAAC,IAAA,CAAK,IAAA,CACJ,YAAA,IACC,UAAA,EAAW,CACZ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,YAAA,EAAc,CAAA,IAAK,IAAA,CAAK,SAAS,aAAa,CAAA;AAAA;AAEnE,EAEO,YAAY,GAAA,EAAU;AAC3B,IAAA,OACE,IAAA,CAAK,QAAA,CAAS,aAAa,CAAA,GAAI,GAAG,CAAA,IAClC,IAAA,CAAK,IAAA,CACF,YAAA,EAAa,EACZ,oBAAA,EAAqB,CACtB,GAAA;AAAA,MACC,CAAC,MAAA,KACC,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,SAAS,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,aAAA,CAAc,OAAO,aAAA,EAAe,CAAA,EAAG,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,KACpG,CACC,KAAK,IAAI,CAAA;AAAA;AAEhB;AAAA;AAAA;AAAA,EAMA,IAAW,aAAA,GAAgB;AACzB,IAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAAA;AACpB,EAEA,kBAAkB,KAAA,EAAiB;AACjC,IAAA,IAAI,IAAA,CAAK,MAAM,YAAA,EAAc;AAC3B,MAAA,IAAA,CAAK,KAAA,CAAM,WAAA,GAAc,KAAA,IAAS,CAAC,KAAK,KAAA,CAAM,WAAA;AAC9C,MAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AAAA;AACjD;AACF;AAAA;AAAA;AAAA,EAMA,cAAA,GAAiB;AACf,IAAA,IAAA,CAAK,KAAA,CAAM,UAAU,KAAA,EAAM;AAAA;AAC7B;AAAA;AAAA;AAAA,EAKO,eAAA,GAAkB;AACvB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAAA;AACjC,EAEO,WAAW,GAAA,EAAmB;AACnC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAAA;AACrC,EAEO,sBAAA,CAAuB,SAAiB,SAAA,EAAqB;AAClE,IAAA,SAAA,GACE,SAAA,IACA,KAAK,IAAA,CAAK,YAAA,IAAgB,SAAA,CAAU,OAAO,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA;AAElE,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,YAAA,EAAa,EAAG;AAC5B,MAAA,IAAA,CAAK,IAAA,CACF,cAAa,EACZ,SAAA,CAAU,OAAO,CAAA,CAClB,QAAA,CAAS,YAAY,SAAS,CAAA;AAAA,KACnC,MAAO;AACL,MAAA,IAAA,CAAK,KAAK,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA,EACf,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,KAAM,OAAO,GAC7C,QAAA,CAAS,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA;AACrC;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcO,kBAAA,CAAmB,KAAU,UAAA,EAAsB;AACxD,IAAA,IAAI,IAAA,CAAK,MAAM,cAAA,EAAgB;AAC7B,MAAA,UAAA,GAAa,cAAc,CAAC,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,IAAI,GAAG,CAAA;AAExD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAI,GAAA,CAAI,QAAA,CAAS,cAAc,CAAA,KAAM,KAAA,EAAO;AAC1C,UAAA,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAAA;AAC9B,OACF,MAAO;AACL,QAAA,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,GAAG,CAAA;AAAA;AAGjC,MAAA,IAAA,CAAK,IAAA,CAAK,mBAAmB,CAAC,GAAG,KAAK,KAAA,CAAM,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAA;AAAA;AACjE;AACF,EAEU,YAAA,GAAe;AACvB,IAAA,IAAI,CAAC,KAAK,KAAA,CAAM,WAAA,IAAe,KAAK,KAAA,CAAM,WAAA,CAAY,QAAA,EAAS,KAAM,IAAA,EAAM;AACzE,MAAA,IAAA,CAAK,KAAA,CAAM,WAAA,GACT,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK,CAAE,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,IACzD,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK,CAAE,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,IACzD,IAAA;AAAA;AAEJ,IAAA,IAAI,IAAA,CAAK,MAAM,WAAA,EAAa;AAC1B,MAAA,IAAA,CAAK,IAAA,CAAK,aAAa,EAAE,IAAA,EAAM,KAAK,KAAA,CAAM,WAAA,EAAa,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA;AACzE;AACF,EAEA,UAAU,GAAA,EAAU;AAClB,IAAA,IAAI,GAAA,CAAI,QAAA,EAAS,KAAM,IAAA,EAAM;AAC3B,MAAA,GAAA,CAAI,SAAS,IAAI,CAAA;AAEjB,MAAA,IAAA,CAAK,IAAA,CAAK,UAAU,GAAG,CAAA;AACvB,MAAA,IAAA,CAAK,IAAA,CAAK,UAAU,GAAG,CAAA;AAEvB,MAAA,IAAI,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG;AACjC,QAAA,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,GAAG,CAAA;AAC/B,QAAA,IAAA,CAAK,IAAA,CAAK,mBAAmB,CAAC,GAAG,KAAK,KAAA,CAAM,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAA;AAAA;AAGjE,MAAA,IAAI,IAAA,CAAK,KAAA,CAAM,WAAA,EAAa,MAAA,OAAa,GAAA,EAAK;AAC5C,QAAA,IAAA,CAAK,YAAA,EAAa;AAAA;AACpB;AACF;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,cAAA,GAAiB;AACtB,IAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAAA;AACpB,EAEO,cAAA,CAAe,IAAA,EAAY,OAAA,GAAmB,IAAA,EAAM;AACzD,IAAA,IAAA,CAAK,MAAM,WAAA,GAAc,IAAA;AACzB,IAAA,IAAA,CAAK,IAAA,CAAK,WAAA,EAAa,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA;AAC1C,EAEO,aAAa,OAAA,EAAmB;AACrC,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAU;AACzB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA;AACzC,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,IAAA,CAAK,kBAAA,CAAmB,KAAK,IAAI,CAAA;AAAA;AACnC,KACD,CAAA;AAAA;AACH,EAEO,kBAAkB,GAAA,EAAU;AACjC,IAAA,IAAA,CAAK,IAAA,CAAK,iBAAiB,GAAG,CAAA;AAAA;AAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,SAAqC,IAAA,EAAS;AACnD,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA;AACxB,EAkCO,QAAA,CACL,MACA,KAAA,EACA;AACA,IAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAAA,KAC9B,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAA;AAErB,IAAA,OAAO,IAAA;AAAA;AACT;AAAA;AAAA;AAAA,EAMA,gBACE,KAAA,EACe;AACf,IAAA,OAAO,KAAK,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAC,MAAA,KAAW,kBAAkB,KAAK,CAAA;AAAA;AAGpE;AAAA;AAAA;AAAA,EAKO,WAAW,EAAA,EAAsD;AACtE,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAA,CAAG,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA;AAC5C,EAEO,qBACL,MAAA,EAQ8C;AAC9C,IAAA,OAAO,IAAA,CAAK,MAAM,OAAA,CACf,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,KAAM,MAAS,EACrC,GAAA,CAAI,CAAC,MAAO,CAAA,CAAE,MAAM,EAAW,IAAA,CAAK,CAAA,EAAG,IAAI,CAAC,CAAA;AAAA;AAEnD;;AC1ZO,SAAS,MAAA,CACd,YACA,UAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAQ,WAAW,OAAA,CAAQ,KAAA;AACjC,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,UAAA,CAAW,KAAK,CAAA;AACvC,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,iBAAA,CACd,UAAA,EACA,IAAA,EACA,IAAA,EACA;AACA,EAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,uBAAA,CAAwB,IAAI,CAAA;AAC1D,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,gBAAA,GAAmB,KAAK,2BAAA,EAA6B;AACvD,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,IAAI,IAAA,CAAK,QAAQ,OAAO,CAAA,IAAK,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,EAAG;AACnD,MAAA,OAAA,GAAU,KAAK,OAAA,CAAQ,OAAO,CAAA,EAAG,aAAA,CAAc,OAAO,CAAA,EAClD,iBAAA;AAAA;AAEN,IAAA,OAAO,CAAC,QAAA,EAAU;AAChB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAA,CAAO,UAAA,EAAY,OAAO,CAAA,EAAG,eAAA,CAAgB,IAAI,CAAA;AACjD,QAAA,QAAA,GAAW,OAAA,KAAY,IAAA;AACvB,QAAA,OAAA,GAAU,OAAA,CAAQ,kBAAA;AAAA,OACpB,MAAO;AACL,QAAA,QAAA,GAAW,IAAA;AAAA;AACb;AACF,GACF,MAAA,IAAW,gBAAA,GAAmB,IAAA,CAAK,2BAAA,EAA6B;AAC9D,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,OAAO,CAAC,QAAA,EAAU;AAChB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAA,CAAO,UAAA,EAAY,OAAO,CAAA,EAAG,eAAA,CAAgB,IAAI,CAAA;AACjD,QAAA,QAAA,GAAW,OAAA,KAAY,IAAA;AACvB,QAAA,OAAA,GAAU,OAAA,CAAQ,sBAAA;AAAA,OACpB,MAAO;AACL,QAAA,QAAA,GAAW,IAAA;AAAA;AACb;AACF;AAEJ;AAEO,SAAS,gBAAgB,UAAA,EAA6B;AAC3D,EAAA,MAAM,OAAA,GAAU,OAAmC,IAAI,CAAA;AAEvD,EAAA,OAAO,CAAC,EAAA,KAAmB;AACzB,IAAA,MAAM,EAAE,QAAO,GAAI,EAAA;AACnB,IAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,mCAAmC,CAAA;AACtE,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAA;AAElD,MAAA,IAAI,sBAAsB,mBAAA,EAAqB;AAC7C,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,EAAY,UAAU,CAAA;AAEzC,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,IAAI,GAAG,QAAA,EAAU;AACf,YAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,cAAA,iBAAA,CAAkB,UAAA,EAAY,OAAA,CAAQ,OAAA,EAAS,UAAU,CAAA;AAAA;AAC3D,WACF,MAAA,IAAW,GAAG,OAAA,EAAS;AACrB,YAAA,GAAA,EAAK,eAAA,EAAgB;AAAA,WACvB,MAAO;AACL,YAAA,UAAA,CAAW,cAAA,EAAe;AAC1B,YAAA,GAAA,EAAK,gBAAgB,IAAI,CAAA;AAAA;AAG3B,UAAA,OAAA,CAAQ,OAAA,GAAU,UAAA;AAElB,UAAA,IAAI,uBAAuB,oBAAA,EAAsB;AAC/C,YAAA,MAAM,OAAA,GAAU,YAAY,OAAA,CAAQ,OAAA;AACpC,YAAA,MAAM,IAAA,GAAO,GAAA,EAAK,mBAAA,CAAoB,OAAO,CAAA;AAE7C,YAAA,IAAI,IAAA,EAAM;AACR,cAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC3B,gBAAA,UAAA,CAAW,IAAA,CAAK,eAAe,IAAI,CAAA;AAAA;AAGrC,cAAA,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA;AAClB;AACF;AACF;AACF;AACF,GACF;AACF;;ACtFA,MAAM,QAAA,GAAW,CAAA;AAEjB,SAAS,cAAA,CAAe,YAA6B,EAAA,EAAmB;AACtE,EAAA,MAAM,EAAE,QAAO,GAAI,EAAA;AACnB,EAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,mCAAmC,CAAA;AACtE,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAA;AAElD,IAAA,IAAI,sBAAsB,mBAAA,EAAqB;AAC7C,MAAA,IAAI,uBAAuB,oBAAA,EAAsB;AAC/C,QAAA,MAAM,OAAA,GAAU,YAAY,OAAA,CAAQ,OAAA;AAEpC,QAAA,IAAI,cAAA,GAAsC,UAAA;AAC1C,QAAA,IAAI,eAAA,GAAwC,WAAA;AAC5C,QAAA,QAAQ,GAAG,IAAA;AAAM,UACf,KAAK,SAAA,EAAW;AACd,YAAA,MAAM,OACJ,UAAA,EAAY,sBAAA;AACd,YAAA,IAAI,IAAA,EAAM;AACR,cAAA,cAAA,GAAiB,IAAA;AAAA,aACnB,MAAA,IAAW,cAAA,CAAe,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1C,cAAA,MAAM,QAAQ,cAAA,CACX,OAAA,CAAqB,OAAO,CAAA,CAC5B,cAAc,OAAO,CAAA;AACxB,cAAA,cAAA,GAAiB,KAAA,CAAO,gBAAA;AAAA;AAE1B,YAAA;AAAA;AACF,UACA,KAAK,WAAA,EAAa;AAChB,YAAA,MAAM,OAAO,UAAA,EAAY,kBAAA;AACzB,YAAA,IAAI,IAAA,EAAM;AACR,cAAA,cAAA,GAAiB,IAAA;AAAA,aACnB,MAAA,IAAW,cAAA,CAAe,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1C,cAAA,MAAM,QAAQ,cAAA,CACX,OAAA,CAAqB,OAAO,CAAA,CAC5B,cAAc,OAAO,CAAA;AACxB,cAAA,cAAA,GAAiB,KAAA,CAAO,iBAAA;AAAA;AAE1B,YAAA;AAAA;AACF,UACA,KAAK,WAAA;AACH,YAAA,eAAA,GACE,WAAA,CAAY,sBAAA;AACd,YAAA;AAAA,UACF,KAAK,YAAA;AACH,YAAA,eAAA,GACE,WAAA,CAAY,kBAAA;AACd,YAAA;AAAA,UACF,KAAK,QAAA,EAAU;AACb,YAAA,IAAI,CAAA,GAAI,CAAA;AACR,YAAA,GAAG;AACD,cAAA,MAAM,OAAO,cAAA,CAAe,sBAAA;AAC5B,cAAA,IAAI,CAAC,IAAA,IAAQ,cAAA,CAAe,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC5C,gBAAA,MAAM,QAAQ,cAAA,CACX,OAAA,CAAqB,OAAO,CAAA,CAC5B,cAAc,OAAO,CAAA;AACxB,gBAAA,cAAA,GAAiB,KAAA,CACd,gBAAA;AAAA,yBACM,IAAA,EAAM;AACf,gBAAA,cAAA,GAAiB,IAAA;AAAA;AACnB,aACF,QACE,cAAA,YAA0B,mBAAA,IAC1B,EAAE,CAAA,GAAI,QAAA;AAER,YAAA;AAAA;AACF,UACA,KAAK,UAAA,EAAY;AACf,YAAA,IAAI,CAAA,GAAI,CAAA;AAER,YAAA,GAAG;AACD,cAAA,MAAM,OAAO,cAAA,CAAe,kBAAA;AAC5B,cAAA,IAAI,CAAC,IAAA,IAAQ,cAAA,CAAe,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC5C,gBAAA,MAAM,QAAQ,cAAA,CACX,OAAA,CAAqB,OAAO,CAAA,CAC5B,cAAc,OAAO,CAAA;AACxB,gBAAA,cAAA,GAAiB,KAAA,CACd,iBAAA;AAAA,yBACM,IAAA,EAAM;AACf,gBAAA,cAAA,GAAiB,IAAA;AAAA;AACnB,aACF,QACE,cAAA,YAA0B,mBAAA,IAC1B,EAAE,CAAA,GAAI,QAAA;AAER,YAAA;AAAA;AACF,UACA,KAAK,MAAA,EAAQ;AACX,YAAA,IAAI,GAAG,OAAA,EAAS;AACd,cAAA,cAAA,GAAiB,UAAA,CACd,OAAA,CAAqB,OAAO,CAAA,EAC3B,cAAc,UAAU,CAAA;AAAA,aAC9B,MAAO;AACL,cAAA,eAAA,GACE,UAAA,CAAW,iBAAA;AAAA;AAEf,YAAA;AAAA;AACF,UACA,KAAK,KAAA;AACH,YAAA,IAAI,GAAG,OAAA,EAAS;AACd,cAAA,cAAA,GACE,WACG,OAAA,CAAqB,OAAO,CAAA,CAC5B,aAAA,CAAc,OAAO,CAAA,CACxB,gBAAA;AAAA,aACJ,MAAO;AACL,cAAA,eAAA,GAAkB,UAAA,CAAW,SAAA;AAAA;AAC/B;AAGJ,QAAA,IAAI,eAAA,KAAoB,eAAe,eAAA,EAAiB;AACtD,UAAA,MAAA,CAAO,UAAA,EAAY,UAAU,CAAA,CAC1B,mBAAA,CAAoB,gBAAgB,OAAA,CAAQ,OAAQ,EACpD,KAAA,EAAM;AAAA,SACX,MAAA,IAAW,cAAA,KAAmB,UAAA,IAAc,cAAA,EAAgB;AAC1D,UAAA,IAAI,GAAG,QAAA,EAAU;AACf,YAAA,iBAAA,CAAkB,UAAA,EAAY,YAAY,cAAc,CAAA;AAAA,WAC1D,MAAO;AACL,YAAA,UAAA,CAAW,cAAA,EAAe;AAC1B,YAAA,MAAA,CAAO,UAAA,EAAY,cAAc,CAAA,EAAG,eAAA,CAAgB,IAAI,CAAA;AAAA;AAG1D,UAAA,MAAM,IAAA,GACJ,MAAA,CAAO,UAAA,EAAY,cAAc,CAAA,CAAG,mBAAA,CAAoB,OAAO,CAAA,IAC/D,MAAA,CAAO,UAAA,EAAY,cAAc,CAAA,CAAG,eAAe,CAAC,CAAA;AACtD,UAAA,IAAA,EAAM,KAAA,EAAM;AAAA;AACd;AACF;AACF;AAEJ;AAEO,SAAS,cAAc,UAAA,EAA6B;AACzD,EAAA,OAAO,CAAC,EAAA,KAAsB;AAC5B,IAAA,IAAI,WAAW,aAAA,EAAe;AAC5B,MAAA,IAAI,CAAC,OAAA,EAAS,QAAQ,EAAE,QAAA,CAAS,EAAA,CAAG,IAAI,CAAA,EAAG;AACzC,QAAA,EAAA,CAAG,cAAA,EAAe;AAAA;AAGpB,MAAA,QAAQ,GAAG,IAAA;AAAM,QACf,KAAK,OAAA;AACH,UAAA,UAAA,CAAW,IAAA,CAAK,YAAY,IAAI,CAAA;AAChC,UAAA;AAAA,QAEF,KAAK,QAAA;AACH,UAAA,UAAA,CAAW,kBAAkB,KAAK,CAAA;AAAA;AACtC,KACF,MAAO;AACL,MAAA,IACE;AAAA,QACE,QAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA;AAAA,QACA,WAAA;AAAA,QACA,YAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,QACA,QAAA,CAAS,EAAA,CAAG,IAAI,CAAA,IACjB,GAAG,IAAA,KAAS,OAAA,IAAW,UAAA,CAAW,QAAA,CAAS,cAAc,CAAA,IACzD,EAAA,CAAG,IAAA,KAAS,OAAA,IAAW,GAAG,OAAA,EAC3B;AACA,QAAA,EAAA,CAAG,cAAA,EAAe;AAAA;AAEpB,MAAA,QAAQ,GAAG,IAAA;AAAM,QACf,KAAK,OAAA;AACH,UAAA,UAAA,CAAW,IAAA,CAAK,YAAY,IAAI,CAAA;AAChC,UAAA,UAAA,CAAW,iBAAA,EAAkB;AAC7B,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA;AACE,YAAA,IAAI,GAAG,OAAA,EAAS;AACd,cAAA,MAAM,GAAA,GAAO,EAAA,CAAG,MAAA,EAAwB,OAAA,CAAQ,IAAI,CAAA;AACpD,cAAA,IAAI,eAAe,WAAA,EAAa;AAC9B,gBAAA,MAAA,CAAO,UAAA,EAAY,GAAG,CAAA,CAAG,eAAA,EAAgB;AAAA;AAC3C;AACF;AAEF,UAAA;AAAA,QACF,KAAK,SAAA;AAAA,QACL,KAAK,WAAA;AAAA,QACL,KAAK,WAAA;AAAA,QACL,KAAK,YAAA;AAAA,QACL,KAAK,MAAA;AAAA,QACL,KAAK,KAAA;AAAA,QACL,KAAK,QAAA;AAAA,QACL,KAAK,UAAA;AACH,UAAA,cAAA,CAAe,YAAY,EAAE,CAAA;AAC7B,UAAA;AAAA;AACJ;AACF,GACF;AACF;;;;;;;;ACtLA,SAAS,cAAA,CAAe,oBAAiC,IAAA,EAAY;AACnE,EAAA,OAAO,kBAAA,CAAmB,aAAA;AAAA,IACxB,CAAA,eAAA,EAAkB,KAAK,MAAA,EAAO,CAAG,SAAS,IAAI,CAAC,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAA,CAAS,SAAS,CAAC,CAAA,mBAAA,EAAsB,IAAA,CAAK,MAAA,EAAO,CAAG,QAAA,CAAS,IAAI,CAAC,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAA,CAAS,SAAS,CAAC,CAAA,EAAA;AAAA,GAClM;AACF;AAEA,SAAS,UAAU,EAAA,EAAwB;AACzC,EAAA,IAAI,EAAE,EAAA,YAAc,WAAA,CAAA;AAAc,IAAA,OAAO,KAAA;AAGzC,EAAA,OAAO,EAAA,EAAI;AACT,IAAA,MAAM,KAAA,GAAQ,iBAAiB,EAAE,CAAA;AAEjC,IAAA,IACE,KAAA,CAAM,YAAY,MAAA,IAClB,KAAA,CAAM,eAAe,QAAA,IACrB,KAAA,CAAM,YAAY,GAAA,EAClB;AACA,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,EAAA,GAAK,EAAA,CAAG,aAAA;AAAA;AAGV,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAc,GAAA,EAA8B;AACnD,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,uBAAA,CAAwB,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,CAAC,CAAA;AAAA;AAE1C;AAEO,SAAS,YAAA,CACd,UAAA,EACA,YAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,IAAA,GAAO,WAAW,cAAA,EAAe;AAEvC,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,YAAA,EAAc,IAAI,CAAA;AAErD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,oBAAA,CAAqB,YAAY,CAAA;AACjC,MAAA,MAAM,OAAA,GACJ,WAAA,CAAY,gBAAA,CAA8B,gBAAA,EAAkB,CAAA;AAC9D,MAAA,MAAM,MAAA,GAAS,CAAC,GAAG,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,CAAC,CAAA;AACpD,MAAA,MAAM,mBAAmB,MAAA,IAAU,WAAA;AAEnC,MAAA,gBAAA,CAAiB,YAAA,CAAa,YAAY,GAAG,CAAA;AAC7C,MAAA,kBAAA,CAAmB,YAAA,EAAc,IAAA,CAAK,QAAA,EAAS,CAAE,aAAa,CAAA;AAC9D,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,gBAAA,CAAiB,KAAA,EAAM;AAAA;AACzB;AACF;AAEJ;AAEA,SAAS,kBAAA,CACP,iBACA,WAAA,EACA;AACA,EAAA,MAAM,YAAY,eAAA,EAAiB,aAAA;AAAA,IACjC;AAAA,GACF;AACA,EAAA,MAAM,IAAA,GAAO,SAAA,EAAW,OAAA,CAAQ,QAAQ,CAAA;AACxC,EAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,gBAAA,CAA8B,gBAAA,EAAkB,CAAA;AACrE,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC1B,MAAA,MAAA,CAAO,YAAA,CAAa,UAAA,EAAY,WAAA,GAAc,GAAA,GAAM,IAAI,CAAA;AAAA,KACzD,CAAA;AACD,IAAA,MAAM,cAAA,GAAiB,CAAC,GAAG,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,CAAC,CAAA,IAAK,IAAA;AACjE,IAAA,cAAA,CAAe,YAAA,CAAa,YAAY,GAAG,CAAA;AAAA;AAE/C;AAEO,MAAM,qBAAA,CAA6C;AAAA,EAAnD,WAAA,GAAA;AACL,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,EAAkC,IAAA,CAAA;AAAA;AAAA,EAElC,eAAe,KAAA,EAAe;AAC5B,IAAA,MAAM,GAAA,GAAM,KAAK,WAAA,EAAa,aAAA;AAAA,MAC5B,kBAAkB,KAAK,CAAA,EAAA;AAAA,KACzB;AAEA,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,aAAA,CAAc,GAAG,CAAA;AAAA;AACnB;AACF,EAEA,kBAAA,CACE,UAAA,EACA,OAAA,EACA,QAAA,EACA;AACA,IAAA,IAAI,mBAAmB,eAAA,EAAiB;AACtC,MAAA,MAAM,UAAA,GAAa,OAAO,MAAM;AAAA,OAAE,CAAA;AAElC,MAAA,QAAA,CAAS,MAAM;AACb,QAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,CAAG,WAAA,EAAa,CAAC,EAAA,KAAO;AAC9C,UAAA,IAAI,KAAK,WAAA,EAAa;AACpB,YAAA,YAAA,CAAa,UAAA,EAAY,IAAA,CAAK,WAAA,EAAa,EAAA,CAAG,OAAO,CAAA;AAAA;AACvD,SACD,CAAA;AACD,QAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,CAAG,aAAA,EAAe,CAAC,WAAA,KAAgB;AACzD,UAAA,IAAI,KAAK,WAAA,EAAa;AACpB,YAAA,kBAAA,CAAmB,IAAA,CAAK,aAAc,WAAW,CAAA;AAAA;AACnD,SACD,CAAA;AACD,QAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,CAAG,eAAA,EAAiB,CAAC,GAAA,KAAQ;AACnD,UAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,SACvC,CAAA;AAED,QAAA,OAAO,MAAM;AACX,UAAA,IAAA,EAAK;AACL,UAAA,IAAA,EAAK;AACL,UAAA,IAAA,EAAK;AAAA,SACP;AAAA,OACD,CAAA;AAED,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,yBAAA;AAAA,QACX,OAAA,EAAS,gBAAgB,UAAU,CAAA;AAAA,QACnC,SAAA,EAAW,cAAc,UAAU,CAAA;AAAA,QACnC,MAAA,EAAQ,CAAC,EAAA,KAAmB;AAC1B,UAAA,IACE,EAAA,CAAG,yBAAyB,WAAA,IAC5B,EAAA,CAAG,cAAc,OAAA,CAAQ,0BAA0B,CAAA,KACjD,IAAA,CAAK,WAAA,EACP;AACA,YAAA,UAAA,CAAW,kBAAkB,KAAK,CAAA;AAAA;AACpC,SACF;AAAA,QACA,GAAA,EAAK,CAAC,EAAA,KAA2B;AAC/B,UAAA,IAAA,CAAK,WAAA,GAAc,EAAA;AACnB,UAAA,IAAI,EAAA,EAAI;AACN,YAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,MAAM;AAC1C,cAAA,YAAA,CAAa,UAAA,EAAY,IAAA,CAAK,WAAA,EAAc,KAAK,CAAA;AAAA,aAClD,CAAA;AACD,YAAA,UAAA,CAAW,OAAA,IAAU;AACrB,YAAA,QAAA,CAAS,QAAQ,EAAA,EAAI,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,MAAM,CAAA;AACvD,YAAA,UAAA,CAAW,UAAU,MAAM;AACzB,cAAA,QAAA,CAAS,UAAA,EAAW;AAAA,aACtB;AAAA;AACF;AACF,OACF;AAAA;AAGF,IAAA,OAAO,EAAC;AAAA;AAEZ;;AChKO,MAAM,aAAA,CAAqC;AAAA,EACzC,kBAAA,CACL,UAAA,EACA,OAAA,EACA,OAAA,EACA;AACA,IAAA,IAAI,mBAAmB,GAAA,EAAK;AAC1B,MAAA,MAAM,IAAA,GACJ,QAAQ,YAAA,EAAa,KAAM,WAAW,IAAA,GAClC,CAAA,GACA,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,MAAA;AAC3B,MAAA,OAAO;AAAA,QACL,iBAAiB,OAAA,CAAQ,UAAA;AAAA,QACzB,eAAA,EAAiB,UAAU,IAAA,GAAO;AAAA,OACpC;AAAA,KACF,MAAA,IAAW,mBAAmB,IAAA,EAAM;AAClC,MAAA,OAAO;AAAA,QACL,iBAAiB,OAAA,GAAU;AAAA,OAC7B;AAAA,KACF,MAAA,IAAW,mBAAmB,eAAA,EAAiB;AAC7C,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,UAAA;AAAA,QACN,sBAAA,EACE,WAAW,QAAA,CAAS,gBAAgB,KACpC,UAAA,CAAW,QAAA,CAAS,qBAAqB,CAAA,GACrC,IAAA,GACA,MAAA;AAAA,QACN,iBAAiB,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,MAAM,MAAA,IAAU,CAAA;AAAA,QAC1D,iBACE,UAAA,CAAW,IAAA,CAAK,KAAK,MAAA,GAAS,UAAA,CAAW,KAAK,IAAA,CAAK;AAAA,OACvD;AAAA;AAGF,IAAA,OAAO,EAAC;AAAA;AAEZ;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/data/primitive/Element.ts","../src/data/primitive/Cell.ts","../src/data/primitive/Row.ts","../src/data/primitive/AdditionalRow.ts","../src/data/primitive/AdditionalRowContent.ts","../src/data/primitive/AdditionalCell.ts","../src/data/primitive/RowsGroup.ts","../src/data/body/TableBody.ts","../src/data/head/Column.ts","../src/data/head/Columns.ts","../src/data/head/Filter.ts","../src/data/head/Filters.ts","../src/data/head/TableHead.ts","../src/data/plugins/TablePlugin.tsx","../src/data/TableController.ts","../src/data/plugins/FocusControllerPlugin/useFocusByClick.ts","../src/data/plugins/FocusControllerPlugin/useFocusByKey.ts","../src/data/plugins/FocusControllerPlugin/index.tsx","../src/data/plugins/WaiAriaPlugin.ts"],"sourcesContent":["import { action, makeObservable, observable } from 'mobx';\r\nimport type { TableController } from '../TableController';\r\n\r\nconst voidTable = {} as TableController;\r\n\r\nexport type ElementBaseState = {\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport abstract class Element<T extends ElementBaseState> {\r\n protected table: TableController = voidTable;\r\n\r\n constructor(protected state: T) {\r\n makeObservable<Element<T>, 'state'>(this, {\r\n state: observable,\r\n setState: action,\r\n });\r\n }\r\n\r\n public getTable() {\r\n return this.table;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n this.table = table || voidTable;\r\n return this;\r\n }\r\n\r\n public getState<K extends keyof T>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n public setState(cb: (s: T) => T): this;\r\n public setState<K extends keyof T>(prop: K, value: T[K]): this;\r\n public setState<K extends keyof T>(prop: K | ((s: T) => T), value?: T[K]) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n}\r\n","import type { ThHTMLAttributes, ReactNode, FC } from 'react';\r\nimport { Element } from './Element';\r\nimport type { Row } from './Row';\r\n\r\nexport type CellState<T extends CellState<any> = CellState<any>> = {\r\n colName: string;\r\n\r\n content?: ReactNode;\r\n className?: string;\r\n isFocused?: boolean;\r\n isHidden?: boolean;\r\n tag?: 'td' | 'th;';\r\n\r\n Renderer?: FC<{ cell: Cell<T> }>;\r\n domProperties?: ThHTMLAttributes<HTMLTableCellElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class Cell<\r\n State extends CellState<any> = CellState<any>,\r\n> extends Element<State> {\r\n protected parentRow: Row | null = null;\r\n\r\n getColumnName() {\r\n return this.getState('colName');\r\n }\r\n\r\n getIndex() {\r\n return this.getRow()!.getCellIndex(this);\r\n }\r\n\r\n getRow() {\r\n return this.parentRow;\r\n }\r\n\r\n setRow(row: Row | null) {\r\n this.parentRow = row;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param doFocus - If true, the cell will be focused after being set as the focused cell.\r\n * If false, the cell will contain the tabIndex = 0 but will not be focused.\r\n */\r\n focus(doFocus: boolean = true) {\r\n this.table.setFocusedCell(this, doFocus);\r\n }\r\n\r\n updateState(state: Partial<State>) {\r\n this.state = { ...this.state, ...state };\r\n }\r\n}\r\n","import { Element } from './Element';\r\nimport { Cell, type CellState } from './Cell';\r\nimport { TableController } from '../TableController';\r\nimport { computed, makeObservable } from 'mobx';\r\nimport type { RowsGroup, RowsGroupBaseState } from './RowsGroup';\r\nimport type { HTMLAttributes } from 'react';\r\nimport { AdditionalCell } from './AdditionalCell';\r\n\r\nexport type RowProperties = {\r\n id: string;\r\n cells: Cell[];\r\n\r\n isExpandible?: boolean;\r\n isExpanded?: boolean;\r\n isHidden?: boolean;\r\n isSelectable?: boolean;\r\n isSelected?: boolean;\r\n\r\n domProperties?: HTMLAttributes<HTMLTableRowElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport type TBuildRow = Omit<RowProperties, 'cells'> & {\r\n cells: (Omit<CellState, 'colName'> & { colName?: string })[];\r\n};\r\n\r\nexport type RowState = Omit<RowProperties, 'isSelected'>;\r\n\r\nexport class Row extends Element<RowState> {\r\n protected container: null | RowsGroup<RowsGroupBaseState> =\r\n {} as RowsGroup<RowsGroupBaseState>;\r\n\r\n hiddenCells: Map<string, Cell> = new Map();\r\n\r\n addCell(cell: Cell) {\r\n this.state.cells.push(cell);\r\n this.attachCell(cell);\r\n return this;\r\n }\r\n\r\n addCellAfter(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor) + 1;\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n addCellBefore(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor);\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n build(data: TBuildRow) {\r\n this.hiddenCells.clear();\r\n\r\n for (let i = 0; i < data.cells.length; i++) {\r\n const cell = data.cells[i];\r\n\r\n const col = cell.colName\r\n ? this.table.head.getHeaderRow()!.getColumn(cell.colName)!\r\n : this.table.head.getHeaderRow()!.getColumns()[i]!;\r\n\r\n const cellInstance = new Cell({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n\r\n if (col?.isVisible()) {\r\n const currentCell = this.state.cells[i - this.hiddenCells.size];\r\n\r\n if (!currentCell) {\r\n this.addCell(cellInstance);\r\n } else {\r\n currentCell.updateState({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n }\r\n } else {\r\n this.hiddenCells.set(col?.getColumnName(), cellInstance);\r\n }\r\n }\r\n this.cells.splice(data.cells.length - this.hiddenCells.size);\r\n }\r\n\r\n constructor(\r\n id: string,\r\n protected properties?: Omit<RowProperties, 'id'>,\r\n ) {\r\n const { cells, isSelected, ...state } = properties || {};\r\n super({ id, ...state, cells: cells || [] });\r\n makeObservable(this, {\r\n isSelected: computed,\r\n });\r\n }\r\n\r\n get cells(): Cell[] {\r\n const hasAdditionalColumn: boolean =\r\n !!this.table.getState('onRowExpand') ||\r\n (this.table.head.getFiltersRow()?.getFiltersInTable()?.length || 0) > 0;\r\n\r\n let additionalCell: Cell | null = null;\r\n if (hasAdditionalColumn) {\r\n additionalCell = new AdditionalCell();\r\n additionalCell.setRow(this);\r\n additionalCell.setTable(this.table);\r\n }\r\n\r\n return [additionalCell, ...this.state.cells].filter((f): f is Cell =>\r\n Boolean(f),\r\n );\r\n }\r\n\r\n get isSelected() {\r\n return this.table.isSelected(this);\r\n }\r\n\r\n getCellByColumnName(colName: string) {\r\n return this.cells.find((c) => c.getState('colName') === colName);\r\n }\r\n\r\n getCellByIndex(index: number) {\r\n return this.cells[index];\r\n }\r\n\r\n getCellIndex(cell: Cell) {\r\n return this.cells.indexOf(cell);\r\n }\r\n\r\n getContainer() {\r\n return this.container;\r\n }\r\n\r\n getFollowingRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index + 1] || null;\r\n }\r\n\r\n getHiddenCell(colName: string) {\r\n return this.hiddenCells.get(colName);\r\n }\r\n\r\n getIndex() {\r\n return this.getContainer()!.getRowIndex(this);\r\n }\r\n\r\n getPreviousRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index - 1] || null;\r\n }\r\n\r\n insertAfter(row: Row) {\r\n this.getContainer()?.insertAfter(this, row);\r\n }\r\n\r\n insertBefore(row: Row) {\r\n this.getContainer()?.insertBefore(this, row);\r\n }\r\n\r\n remove() {\r\n this.getContainer()?.removeRow(this);\r\n }\r\n\r\n replaceCellOnIndex(index: number, newCell: Cell) {\r\n const current = this.cells[index];\r\n if (!current) {\r\n throw new Error('IndexOutOfBounds - The provided index is out of bounds');\r\n }\r\n\r\n this.cells[index] = newCell;\r\n this.attachCell(newCell);\r\n\r\n this.detachCell(current);\r\n }\r\n\r\n public scrollIntoView() {\r\n this.table.scrollRowIntoView(this);\r\n }\r\n\r\n public setContainer(container: null | RowsGroup<RowsGroupBaseState>) {\r\n this.container = container;\r\n return this;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n super.setTable(table);\r\n\r\n this.state.cells.forEach((c) => c.setTable(table));\r\n\r\n if (table && this.properties?.isSelected) {\r\n table.toggleRowSelection(this, true);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public swap(withRow: Row) {\r\n this.getContainer()?.swapRows(this, withRow);\r\n }\r\n\r\n public toggleSelection(forceState?: boolean) {\r\n this.table.toggleRowSelection(this, forceState);\r\n }\r\n\r\n protected attachCell(cell: Cell) {\r\n cell.setTable(this.table);\r\n cell.setRow(this);\r\n }\r\n\r\n protected detachCell(cell: Cell) {\r\n cell.setTable(null);\r\n cell.setRow(null);\r\n }\r\n}\r\n","import { Cell, CellState } from './Cell';\nimport { Row } from './Row';\n\nexport class AdditionalRow extends Row {\n constructor(id: string) {\n super(id);\n this.setState('isSelectable', false);\n }\n\n get cells(): Cell<CellState<any>>[] {\n return this.state.cells;\n }\n}\n","import { ReactNode } from 'react';\nimport { Cell, CellState } from './Cell';\n\nexport class AdditionalRowContent extends Cell<\n CellState & { expanded: boolean }\n> {\n constructor(content: ReactNode) {\n super({\n expanded: false,\n colName: '__additional',\n content,\n });\n }\n\n public getState<K extends keyof CellState | 'expanded'>(\n prop: K,\n ): (CellState & { expanded: boolean })[K] {\n if (prop === 'domProperties') {\n return {\n colSpan: this.table.head.getHeaderRow()?.getShownColumns().length || 0,\n } as any;\n }\n\n return super.getState(prop);\n }\n}\n","import { AdditionalRow } from './AdditionalRow';\nimport { AdditionalRowContent } from './AdditionalRowContent';\nimport { Cell, CellState } from './Cell';\n\nexport class AdditionalCell extends Cell<CellState & { expanded: boolean }> {\n constructor() {\n super({\n expanded: false,\n colName: '__additional',\n domProperties: {\n style: {\n width: '50px',\n },\n },\n });\n }\n\n async onToggle() {\n const currentIndex = this.getRow()!.getIndex()!;\n if (\n !(\n this.getTable().body.getRowByIndex(currentIndex + 1) instanceof\n AdditionalRow\n )\n ) {\n const res = await this.table.onRowExpand(this.getRow()!);\n\n if (res !== false) {\n const newRow = new AdditionalRow(\n `${this.getRow()?.getState('id')}__additional`,\n );\n\n this.getTable().body.insertAfter(this.getRow()!, newRow);\n\n newRow.addCell(new AdditionalRowContent(res));\n\n this.state.expanded = true;\n }\n } else {\n this.getTable()\n .body.getRowByIndex(currentIndex + 1)\n .remove();\n this.state.expanded = false;\n }\n }\n}\n","import { action, computed, makeObservable } from 'mobx';\r\nimport type { Row } from './Row';\r\nimport type { TableController } from '../TableController';\r\nimport { Element, type ElementBaseState } from './Element';\r\nimport type { HTMLAttributes } from 'react';\r\n\r\nexport type RowsGroupBaseState = ElementBaseState & {\r\n rows: Row[];\r\n domProperties?: HTMLAttributes<HTMLTableSectionElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class RowsGroup<U extends RowsGroupBaseState> extends Element<\r\n U & RowsGroupBaseState\r\n> {\r\n constructor(\r\n public table: TableController,\r\n state: U,\r\n ) {\r\n super({ ...state, rows: [] });\r\n makeObservable(this, { swapRows: action, rows: computed });\r\n }\r\n\r\n get rows() {\r\n return this.state.rows;\r\n }\r\n\r\n addRow(row: Row) {\r\n this.state.rows.push(row);\r\n row.setTable(this.table);\r\n row.setContainer(this);\r\n\r\n this.runAddRowPlugin(row);\r\n\r\n return this;\r\n }\r\n\r\n addRows(rows: Row[]) {\r\n rows.forEach(this.addRow.bind(this));\r\n return this;\r\n }\r\n\r\n clear() {\r\n this.state.rows.forEach((row) => {\r\n row.setContainer(null);\r\n row.setTable(null);\r\n });\r\n return this.rows.splice(0, this.rows.length);\r\n }\r\n\r\n getRowById(id: string | number) {\r\n return this.state.rows.find((c) => c.getState('id') === id);\r\n }\r\n\r\n getRowByIndex(index: number) {\r\n return this.state.rows[index];\r\n }\r\n\r\n getRowIndex(row: Row) {\r\n return this.state.rows.indexOf(row);\r\n }\r\n\r\n insertAfter(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index + 1, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n insertBefore(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getContainer() === this) {\r\n row.setContainer(null);\r\n this.state.rows = this.state.rows.filter((r) => r !== row);\r\n this.table.removeRow(row);\r\n }\r\n }\r\n\r\n swapRows(a: Row, b: Row) {\r\n if (a?.getContainer() === this && b?.getContainer() === this) {\r\n const aIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === a.getState?.('id'),\r\n );\r\n const bIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === b.getState?.('id'),\r\n );\r\n if (aIndex !== -1 && bIndex !== -1) {\r\n this.state.rows[aIndex] = b;\r\n this.state.rows[bIndex] = a;\r\n }\r\n }\r\n }\r\n\r\n protected runAddRowPlugin(newRow: Row) {\r\n const plugins = this.getTable().getApplicablePlugins('onAddRow');\r\n plugins.forEach((c) => c(this, newRow));\r\n }\r\n}\r\n","import type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport { Row, type TBuildRow } from '../primitive/Row';\r\nimport type { TableController } from '../TableController';\r\nimport { AdditionalRow } from '../primitive/AdditionalRow';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableBodyState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildBody = {\r\n rows: TBuildRow[];\r\n};\r\n\r\nexport class TableBody extends RowsGroup<TableBodyState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n build(data: TBuildBody) {\r\n let i = 0;\r\n for (const row of data.rows) {\r\n let currentRow: Row | undefined = this.rows[i++];\r\n if (currentRow instanceof AdditionalRow) {\r\n currentRow.remove();\r\n currentRow = undefined;\r\n }\r\n const bodyRow = currentRow ?? new Row(row.id);\r\n\r\n if (!currentRow) {\r\n this.addRow(bodyRow);\r\n }\r\n bodyRow.build(row);\r\n }\r\n this.rows.splice(data.rows.length);\r\n }\r\n}\r\n","import { Cell, CellState } from '../primitive/Cell';\n\nexport type ColumnState<T extends ColumnState<any> = ColumnState<any>> =\n CellState<T> & {\n asAdditional?: boolean;\n sortable?: boolean;\n };\n\nexport class Column extends Cell<ColumnState> {\n public asAdditional() {\n return !!this.state.asAdditional;\n }\n\n public isHidden() {\n return !!this.state.isHidden;\n }\n\n /**\n * A visible column is that which is not additional nor hidden.\n */\n public isVisible() {\n return !this.asAdditional() && !this.isHidden();\n }\n}\n","import { Row } from '../primitive/Row';\nimport { Column, ColumnState } from './Column';\n\nexport class Columns extends Row {\n columns: Map<string, Column> = new Map();\n\n buildColumnsRow(columns: ColumnState[]) {\n let i = 0;\n for (const column of columns) {\n const headerCell = new Column(column);\n this.columns.set(column.colName, headerCell);\n\n if (headerCell.isVisible()) {\n const currentCell = this.cells[i++];\n\n /**\n * We try to maximize rendering optimization here.\n *\n * If the cell already exists, we just update its state\n * in order to prevent dom rebuilding.\n */\n if (!currentCell) {\n this.addCell(headerCell);\n } else {\n currentCell.updateState(column);\n }\n }\n }\n }\n\n getColumn(name: string) {\n return this.getCellByColumnName(name) as Column;\n }\n\n getColumns() {\n return Array.from(this.columns.values());\n }\n\n getAdditionalColumns() {\n return this.getColumns().filter((c) => c.asAdditional());\n }\n\n getShownColumns() {\n return (this.cells ?? []) as Column[];\n }\n}\n","import { Cell, CellState } from '../primitive/Cell';\nimport { FC } from 'react';\nimport type { Filters } from './Filters';\nimport { TableEvents } from '../TableController';\nimport { reaction } from 'mobx';\n\nexport type FilterRenderer = FC<{ cell: Filter }>;\n\nexport type FilterState<\n ValueType = string,\n T extends FilterState<any> = FilterState<ValueType, any>,\n> = CellState<T> & {\n asAdditional?: boolean;\n name: string;\n columnName?: string;\n isRequired?: boolean;\n Renderer?: FilterRenderer;\n runAutomatically?: boolean;\n title: string;\n tooltip: string;\n value: ValueType;\n type:\n | 'DATE'\n | 'INPUT'\n | 'COMBO'\n | 'DATERANGE'\n | 'SIZE'\n | 'SIZERANGE'\n | 'DATEHOUR'\n | 'DATEHOURRANGE';\n};\n\nexport type FilterEvents = Pick<\n TableEvents,\n 'filterBlur' | 'filterChange' | 'filterPressEnter'\n>;\n\nexport class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {\n public asAdditional() {\n return !!this.state.asAdditional || !this.getCorrespondingColumn();\n }\n\n constructor(state: FilterState<ValueType>) {\n super(state);\n\n reaction(\n () => this.state.value,\n () => {\n console.log(this.state.value);\n },\n );\n }\n\n clear() {\n this.setValue('' as ValueType);\n }\n\n getCorrespondingColumn() {\n return this.getRow()\n .getContainer()\n .getHeaderRow()\n ?.getShownColumns()\n .find((c) => c.getState('colName') === this.getState('colName'));\n }\n\n fire(ev: keyof FilterEvents) {\n this.table.emit(ev, this);\n }\n\n getRow() {\n return super.getRow() as Filters;\n }\n\n getValue() {\n return this.state.value;\n }\n\n hasValue() {\n return !!this.getValue();\n }\n\n setValue(val: ValueType) {\n this.state.value = val;\n this.table.emit('filterChange', this);\n }\n\n validate() {\n return this.state.isRequired ? this.hasValue() : true;\n }\n}\n","import { arrayOrArray } from '@apia/util';\nimport { Row } from '../primitive/Row';\nimport { Filter, FilterState } from './Filter';\nimport type { TableHead } from './TableHead';\nimport { Cell } from '../primitive/Cell';\n\nexport class Filters extends Row {\n filters: Map<string, Filter> = new Map();\n\n buildFilters(filters: Omit<FilterState, 'colName'>[]) {\n this.filters.clear();\n\n let hasFiltersInRow = false;\n\n const columns = arrayOrArray(\n this.getContainer().getHeaderRow()?.getShownColumns(),\n );\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n\n const filter = filters.find(\n (c) => c.columnName === column.getState('colName') && !c.asAdditional,\n );\n if (filter) {\n const currentFilterCell = this.getCellByIndex(i) as Filter;\n\n const filterCell = new Filter({\n ...filter,\n colName: filter.columnName!,\n });\n this.filters.set(filter.name, filterCell);\n\n if (!currentFilterCell) {\n this.addCell(filterCell);\n } else {\n const { value, ...filterState } = filter;\n currentFilterCell.updateState(filterState);\n }\n\n hasFiltersInRow = true;\n (filter as any).added = true;\n } else {\n if (!this.getCellByIndex(i)) {\n this.addCell(new Cell({ colName: column.getColumnName() }));\n }\n }\n for (const filter of filters) {\n if (!(filter as any).added) {\n const filterCell = new Filter({\n ...filter,\n colName: filter.columnName!,\n });\n this.filters.set(filter.name, filterCell);\n }\n }\n }\n\n return hasFiltersInRow;\n }\n\n getAdditionalFilters() {\n return this.getFilters().filter(\n (c) =>\n c.getState('asAdditional') ||\n this.getContainer()\n .getHeaderRow()\n ?.columns.get(c.getState('colName'))\n ?.asAdditional(),\n );\n }\n\n getCells() {\n return this.cells.map((c) => c as Filter);\n }\n\n getContainer() {\n return this.container as TableHead;\n }\n\n getFilter(name: string) {\n return this.filters.get(name);\n }\n\n getFilters() {\n return Array.from(this.filters.values());\n }\n\n getFiltersInTable() {\n return this.getFilters().filter((f) => {\n return !(\n f.getState('asAdditional') ||\n this.getContainer()\n .getHeaderRow()\n ?.columns.get(f.getState('colName'))\n ?.isVisible() === false\n );\n });\n }\n}\n","import { ColumnState } from './Column';\r\nimport { FilterState } from './Filter';\r\nimport type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport type { TableController } from '../TableController';\r\nimport { Columns } from './Columns';\r\nimport { Filters } from './Filters';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableHeadState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildHead = {\r\n columns: ColumnState[];\r\n filters: Omit<FilterState, 'colName'>[];\r\n};\r\n\r\nexport class TableHead extends RowsGroup<TableHeadState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n columnsRow: Columns | null = null;\r\n filtersRow: Filters | null = null;\r\n\r\n getHeaderRow(): Columns | undefined {\r\n return this.rows[0] instanceof Columns ? this.rows[0] : undefined;\r\n }\r\n\r\n getFiltersRow(): Filters | undefined {\r\n return this.rows[1] instanceof Filters ? this.rows[1] : undefined;\r\n }\r\n\r\n build(data: TBuildHead) {\r\n this.state.rows = [];\r\n\r\n if (data.columns.length) {\r\n /**\r\n * Generate main header row\r\n */\r\n\r\n const currentHeaderRow = this.rows[0];\r\n\r\n if (currentHeaderRow && !(currentHeaderRow instanceof Columns)) {\r\n currentHeaderRow.remove();\r\n }\r\n\r\n this.columnsRow = (currentHeaderRow ?? new Columns('header')) as Columns;\r\n this.columnsRow.setTable(this.table);\r\n this.columnsRow.setContainer(this);\r\n\r\n if (!currentHeaderRow) {\r\n this.addRow(this.columnsRow);\r\n }\r\n\r\n this.columnsRow.buildColumnsRow(data.columns);\r\n }\r\n\r\n if (data.filters.length) {\r\n /**\r\n * Generate filters row\r\n */\r\n\r\n const currentFiltersRow = this.getFiltersRow();\r\n this.filtersRow = currentFiltersRow ?? new Filters('filters');\r\n this.filtersRow.setTable(this.table);\r\n this.filtersRow.setContainer(this);\r\n\r\n const hasFilter = this.filtersRow.buildFilters(data.filters);\r\n if (hasFilter && !currentFiltersRow) {\r\n this.addRow(this.filtersRow);\r\n }\r\n }\r\n }\r\n}\r\n","import type { HTMLAttributes } from 'react';\r\nimport {\r\n FocusControllerPlugin,\r\n WaiAriaPlugin,\r\n type TableController,\r\n type Row,\r\n type Cell,\r\n} from '..';\r\nimport type { Element } from '../primitive/Element';\r\nimport { RowsGroup } from '../primitive/RowsGroup';\r\n\r\nexport type TDistinctorProperties = HTMLAttributes<HTMLElement>;\r\n\r\n/**\r\n * This class is the default way to customize the table behavior.\r\n */\r\nexport interface TablePlugin {\r\n getRenderers?: () => {\r\n cell?: React.FC<{\r\n cell: Cell;\r\n }>;\r\n };\r\n\r\n onAddRow?: (\r\n controller: TableController,\r\n target: RowsGroup<any>,\r\n newRow: Row,\r\n ) => void;\r\n\r\n onResize?: (\r\n controller: TableController,\r\n colName: string,\r\n newSize: number,\r\n ) => void;\r\n\r\n /**\r\n * This hook is called when the table is renderized.\r\n * The elements returned by this hook will be added to the dom of the element.\r\n */\r\n useElementDomProps?: (\r\n controller: TableController,\r\n _element: TableController | Element<any>,\r\n _context: any,\r\n ) => HTMLAttributes<HTMLElement>;\r\n}\r\n\r\nexport const defaultPlugins = () => [\r\n new WaiAriaPlugin(),\r\n new FocusControllerPlugin(),\r\n];\r\n","import { arrayOrArray, EventEmitter, TLoadStructure } from '@apia/util';\r\nimport { Cell } from './primitive/Cell';\r\nimport { Row } from './primitive/Row';\r\nimport { TableBody, TBuildBody } from './body/TableBody';\r\nimport { TableHead, type TBuildHead } from './head/TableHead';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport { defaultPlugins, TablePlugin } from './plugins/TablePlugin';\r\nimport type { Column } from './head/Column';\r\nimport type { Filter } from './head/Filter';\r\nimport { ReactNode } from 'react';\r\n\r\nexport type TableState = {\r\n allowEdition: boolean;\r\n allowResize: boolean;\r\n allowSelection: boolean;\r\n editionMode: boolean;\r\n focusedCell: Cell | null;\r\n isSelectionMultiple: boolean;\r\n onRowExpand?: (row: Row) => Promise<false | ReactNode>;\r\n plugins: TablePlugin[];\r\n selection: Set<Row>;\r\n};\r\n\r\nexport type TBuildTable = TBuildHead & TBuildBody;\r\n\r\nexport type TableEvents = {\r\n cellFocus: { cell: Cell; doFocus: boolean };\r\n columnClick: Column;\r\n editionMode: boolean;\r\n filterChange: Filter<any>;\r\n filterPressEnter: Filter<any>;\r\n filterBlur: Filter<any>;\r\n keyEnter: null;\r\n rowDelete: Row;\r\n scrollIntoRow: Row;\r\n selectionChange: Row[];\r\n};\r\n\r\nexport class TableController extends EventEmitter<TableEvents> {\r\n protected state: TableState = {\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n editionMode: false,\r\n focusedCell: null,\r\n plugins: [],\r\n isSelectionMultiple: true,\r\n selection: new Set(),\r\n };\r\n\r\n constructor(props?: Partial<Omit<TableState, 'selection'>>) {\r\n super();\r\n Object.assign(this.state, props || {});\r\n if (!props?.plugins) {\r\n this.state.plugins.push(...defaultPlugins());\r\n }\r\n\r\n makeObservable<TableController, 'state'>(this, {\r\n build: action,\r\n clearSelection: action,\r\n isEditionMode: computed,\r\n setFocusedCell: action,\r\n state: observable,\r\n toggleRowSelection: action,\r\n toggleEditionMode: action,\r\n });\r\n }\r\n\r\n public body = new TableBody(this);\r\n public head = new TableHead(this);\r\n\r\n /**\r\n * Clears all data in the table, except for the events\r\n * listeners and recreates the structure based on the passed data.\r\n */\r\n public build(data: TBuildTable) {\r\n this.head.build(data);\r\n this.body.build(data);\r\n\r\n this.restoreFocus();\r\n }\r\n\r\n public fromGenericTable(table: TLoadStructure) {\r\n /**\r\n * Parse structure\r\n */\r\n this.setState('allowEdition', table.behavior.allowEdition);\r\n this.setState('allowSelection', table.behavior.allowSelection);\r\n this.setState('isSelectionMultiple', table.behavior.isMultipleSelection);\r\n\r\n const columns = arrayOrArray(table.columns);\r\n\r\n this.build({\r\n columns: columns.map((c) => {\r\n console.log({ c });\r\n return {\r\n colName: c.name,\r\n asAdditional: c.showAsAdditional,\r\n sortable: c.isSortable,\r\n isHidden: c.isHidden,\r\n properties: c,\r\n content: c.title,\r\n className: c.className,\r\n };\r\n }),\r\n filters: arrayOrArray(table.filters).map((f) => {\r\n console.log({ f });\r\n return {\r\n name: f.name,\r\n title: f.title,\r\n tooltip: 'no tooltip',\r\n type: f.type,\r\n isRequired: f.isRequired,\r\n properties: f,\r\n runAutomatically: f.runAutomatically,\r\n columnName: f.columnName,\r\n value: f.initialValue,\r\n asAdditional: f.asAdditional,\r\n };\r\n }),\r\n rows: arrayOrArray(table.rows).map((row) => {\r\n console.log({ row });\r\n const returnValue: TBuildTable['rows'][0] = {\r\n id: row.id,\r\n cells: arrayOrArray(row.cells).map((cell) => {\r\n const returnValue: TBuildTable['rows'][0]['cells'][0] = {\r\n content: cell.text,\r\n };\r\n return returnValue;\r\n }),\r\n isExpandible: false,\r\n isSelectable: !row.isDisabled,\r\n isSelected: row.isSelected,\r\n domProperties: {},\r\n properties: row,\r\n };\r\n return returnValue;\r\n }),\r\n });\r\n }\r\n\r\n public getColumn(name: string) {\r\n return this.head.getHeaderRow()?.getColumn(name);\r\n }\r\n\r\n public getColumns() {\r\n return this.head.getHeaderRow()?.getColumns() || [];\r\n }\r\n\r\n public getFilter(name: string) {\r\n return this.head.getFiltersRow()?.getFilter(name);\r\n }\r\n\r\n public getFilters() {\r\n return this.head.getFiltersRow()?.getFilters() || [];\r\n }\r\n\r\n public getRowById(id: string | number) {\r\n return this.head.getRowById(id) || this.body.getRowById(id);\r\n }\r\n\r\n public hasAdditionalContent() {\r\n return (\r\n !!this.head\r\n .getHeaderRow()\r\n ?.getColumns()\r\n .find((c) => c.asAdditional()) || this.getState('onRowExpand')\r\n );\r\n }\r\n\r\n public onRowExpand(row: Row) {\r\n return (\r\n this.getState('onRowExpand')?.(row) ||\r\n this.head\r\n .getHeaderRow()\r\n ?.getAdditionalColumns()\r\n .map(\r\n (column) =>\r\n `${column.getState('content')}: ${row.getHiddenCell(column.getColumnName())?.getState('content')}`,\r\n )\r\n .join(', ')\r\n );\r\n }\r\n\r\n /**\r\n * EDITION MODE\r\n */\r\n\r\n public get isEditionMode() {\r\n return this.state.editionMode;\r\n }\r\n\r\n toggleEditionMode(force?: boolean) {\r\n if (this.state.allowEdition) {\r\n this.state.editionMode = force ?? !this.state.editionMode;\r\n this.emit('editionMode', this.state.editionMode);\r\n }\r\n }\r\n\r\n /**\r\n * SELECTION\r\n */\r\n\r\n clearSelection() {\r\n this.state.selection.clear();\r\n }\r\n\r\n /**\r\n * Returns the selected rows.\r\n */\r\n public getSelectedRows() {\r\n return [...this.state.selection];\r\n }\r\n\r\n public isSelected(row: Row): boolean {\r\n return this.state.selection.has(row);\r\n }\r\n\r\n public toggleColumnVisibility(colName: string, isVisible?: boolean) {\r\n isVisible =\r\n isVisible ??\r\n this.head.getHeaderRow()?.getColumn(colName).getState('isHidden');\r\n\r\n if (this.head.getHeaderRow()) {\r\n this.head\r\n .getHeaderRow()\r\n ?.getColumn(colName)\r\n .setState('isHidden', isVisible);\r\n } else {\r\n this.head.rows[0]?.cells\r\n ?.find((c) => c.getState('colName') === colName)\r\n ?.setState('isHidden', !isVisible);\r\n }\r\n }\r\n\r\n /**\r\n * Toggles the selection state of a given row.\r\n *\r\n * If the `isSelected` parameter is provided, it explicitly sets the selection\r\n * state of the row to the given value (`true` for selected, `false` for deselected).\r\n * If `isSelected` is not provided, the method will toggle the current selection state\r\n * of the row (i.e., select it if it's currently not selected, or deselect it if it is).\r\n *\r\n * @param row - The row to toggle selection for.\r\n * @param isSelected - Optional. A boolean indicating whether the row should be selected (`true`)\r\n * or deselected (`false`). If not provided, the selection state will be toggled.\r\n */\r\n public toggleRowSelection(row: Row, isSelected?: boolean) {\r\n if (this.state.allowSelection) {\r\n isSelected = isSelected ?? !this.state.selection.has(row);\r\n\r\n if (isSelected) {\r\n if (row.getState('isSelectable') !== false) {\r\n this.state.selection.add(row);\r\n }\r\n } else {\r\n this.state.selection.delete(row);\r\n }\r\n\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n }\r\n\r\n protected restoreFocus() {\r\n if (!this.state.focusedCell || this.state.focusedCell.getTable() !== this) {\r\n this.state.focusedCell =\r\n this.body.getState('rows').values().next().value?.cells[0] ||\r\n this.head.getState('rows').values().next().value?.cells[0] ||\r\n null;\r\n }\r\n if (this.state.focusedCell) {\r\n this.emit('cellFocus', { cell: this.state.focusedCell, doFocus: false });\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getTable() === this) {\r\n row.setTable(null);\r\n\r\n this.head.removeRow(row);\r\n this.body.removeRow(row);\r\n\r\n if (this.state.selection.has(row)) {\r\n this.state.selection.delete(row);\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n\r\n if (this.state.focusedCell?.getRow() === row) {\r\n this.restoreFocus();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * FOCUS\r\n */\r\n\r\n /**\r\n * @returns The currently focused cell in the table.\r\n */\r\n public getFocusedCell() {\r\n return this.state.focusedCell;\r\n }\r\n\r\n public setFocusedCell(cell: Cell, doFocus: boolean = true) {\r\n this.state.focusedCell = cell;\r\n this.emit('cellFocus', { cell, doFocus });\r\n }\r\n\r\n public setSelection(indices: number[]) {\r\n this.clearSelection();\r\n indices.forEach((index) => {\r\n const row = this.body.getRowByIndex(index);\r\n if (row) {\r\n this.toggleRowSelection(row, true);\r\n }\r\n });\r\n }\r\n\r\n public scrollRowIntoView(row: Row) {\r\n this.emit('scrollIntoRow', row);\r\n }\r\n\r\n /**\r\n * STATE\r\n */\r\n\r\n /**\r\n * Returns the current state of the `TableController` instance.\r\n *\r\n * @param prop - The property of the state to retrieve.\r\n */\r\n public getState<K extends keyof TableState>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n /**\r\n * Updates the state of the `TableController` instance.\r\n *\r\n * This method provides two overloads:\r\n * 1. A callback function that takes the current state and returns a new state.\r\n * 2. A key-value pair where the key is a property of the state, and the value is the new value for that property.\r\n *\r\n * @param prop - Either a callback function to update the state or the key of the state property to update.\r\n * @param value - (Optional) The new value for the specified state property. This is required if `prop` is a key.\r\n *\r\n * @returns The `TableController` instance for method chaining.\r\n *\r\n * ### Usage:\r\n *\r\n * **Using a callback function:**\r\n * ```tsx\r\n * tableController.setState((state) => ({\r\n * ...state,\r\n * allowEdition: false,\r\n * }));\r\n * ```\r\n *\r\n * **Using a key-value pair:**\r\n * ```tsx\r\n * tableController.setState('allowEdition', false);\r\n * ```\r\n */\r\n public setState(cb: (s: TableState) => TableState): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K,\r\n value: TableState[K],\r\n ): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K | ((s: TableState) => TableState),\r\n value?: TableState[K],\r\n ) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * PLUGINS\r\n */\r\n\r\n getPluginOfType<T extends TablePlugin>(\r\n clazz: new (...args: any[]) => T,\r\n ): T | undefined {\r\n return this.state.plugins.find((plugin) => plugin instanceof clazz) as\r\n | T\r\n | undefined;\r\n }\r\n\r\n /**\r\n * Sets the plugins for the table.\r\n */\r\n public setPlugins(cb: (currentPlugins: TablePlugin[]) => TablePlugin[]) {\r\n this.state.plugins = cb(this.state.plugins);\r\n }\r\n\r\n public getApplicablePlugins<K extends keyof TablePlugin>(\r\n method: K,\r\n ): ((\r\n ...args: Parameters<NonNullable<TablePlugin[K]>> extends [\r\n any,\r\n ...infer Rest,\r\n ]\r\n ? Rest\r\n : void[]\r\n ) => ReturnType<NonNullable<TablePlugin[K]>>)[] {\r\n return this.state.plugins\r\n .filter((c) => c[method] !== undefined)\r\n .map((c) => (c[method]! as any).bind(c, this)) as any;\r\n }\r\n}\r\n","import { MouseEvent, useRef } from 'react';\r\nimport { TableController } from '../..';\r\n\r\nexport function getRow(\r\n controller: TableController,\r\n rowElement: HTMLTableRowElement,\r\n) {\r\n const rowId = rowElement.dataset.rowid!;\r\n const row = controller.getRowById(rowId);\r\n return row;\r\n}\r\n\r\nexport function selectBetweenRows(\r\n controller: TableController,\r\n rowA: HTMLTableRowElement,\r\n rowB: HTMLTableRowElement,\r\n) {\r\n const relativePosition = rowA.compareDocumentPosition(rowB);\r\n let finished = false;\r\n if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING) {\r\n let current = rowA;\r\n if (rowA.closest('thead') && !rowB.closest('thead')) {\r\n current = rowA.closest('table')?.querySelector('tbody')\r\n ?.firstElementChild as HTMLTableRowElement;\r\n }\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.nextElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n } else if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING) {\r\n let current = rowA;\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.previousElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByClick(controller: TableController) {\r\n const lastRow = useRef<HTMLTableRowElement | null>(null);\r\n\r\n return (ev: MouseEvent) => {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n const row = getRow(controller, rowElement);\r\n\r\n if (row) {\r\n if (ev.shiftKey) {\r\n if (lastRow.current) {\r\n selectBetweenRows(controller, lastRow.current, rowElement);\r\n }\r\n } else if (ev.ctrlKey) {\r\n row?.toggleSelection();\r\n } else {\r\n controller.clearSelection();\r\n row?.toggleSelection(true);\r\n }\r\n\r\n lastRow.current = rowElement;\r\n\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n const cell = row?.getCellByColumnName(colName);\r\n\r\n if (cell) {\r\n if (target.closest('thead')) {\r\n controller.emit('columnClick', cell);\r\n }\r\n\r\n cell?.focus(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}\r\n","import { KeyboardEvent } from 'react';\r\nimport { TableController } from '../..';\r\nimport { getRow, selectBetweenRows } from './useFocusByClick';\r\n\r\nconst pageSize = 6;\r\n\r\nfunction handleArrowKey(controller: TableController, ev: KeyboardEvent) {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n\r\n let nextFocusedRow: HTMLTableRowElement = rowElement;\r\n let nextFocusedCell: HTMLTableCellElement = cellElement;\r\n switch (ev.code) {\r\n case 'ArrowUp': {\r\n const test =\r\n rowElement?.previousElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!.lastElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowDown': {\r\n const test = rowElement?.nextElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!.firstElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowLeft':\r\n nextFocusedCell =\r\n cellElement.previousElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'ArrowRight':\r\n nextFocusedCell =\r\n cellElement.nextElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'PageUp': {\r\n let i = 0;\r\n do {\r\n const test = nextFocusedRow.previousElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!\r\n .lastElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'PageDown': {\r\n let i = 0;\r\n\r\n do {\r\n const test = nextFocusedRow.nextElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!\r\n .firstElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'Home': {\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = rowElement\r\n .closest<HTMLElement>('table')\r\n ?.querySelector('thead tr') as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell =\r\n rowElement.firstElementChild as HTMLTableCellElement;\r\n }\r\n break;\r\n }\r\n case 'End':\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = (\r\n rowElement\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody') as HTMLElement\r\n ).lastElementChild as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell = rowElement.lastChild! as HTMLTableCellElement;\r\n }\r\n }\r\n\r\n if (nextFocusedCell !== cellElement && nextFocusedCell) {\r\n getRow(controller, rowElement)!\r\n .getCellByColumnName(nextFocusedCell.dataset.colname!)!\r\n .focus();\r\n } else if (nextFocusedRow !== rowElement && nextFocusedRow) {\r\n if (ev.shiftKey) {\r\n selectBetweenRows(controller, rowElement, nextFocusedRow);\r\n } else {\r\n controller.clearSelection();\r\n getRow(controller, nextFocusedRow)?.toggleSelection(true);\r\n }\r\n\r\n const cell =\r\n getRow(controller, nextFocusedRow)!.getCellByColumnName(colName) ||\r\n getRow(controller, nextFocusedRow)!.getCellByIndex(0);\r\n cell?.focus();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByKey(controller: TableController) {\r\n return (ev: KeyboardEvent) => {\r\n if (controller.isEditionMode) {\r\n if (['Enter', 'Escape'].includes(ev.code)) {\r\n ev.preventDefault();\r\n }\r\n\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n break;\r\n // eslint-disable-next-line no-fallthrough\r\n case 'Escape':\r\n controller.toggleEditionMode(false);\r\n }\r\n } else {\r\n if (\r\n [\r\n 'Escape',\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'PageUp',\r\n 'PageDown',\r\n 'Home',\r\n 'End',\r\n ].includes(ev.code) ||\r\n (ev.code === 'Enter' && controller.getState('allowEdition')) ||\r\n (ev.code === 'Space' && ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n }\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n controller.toggleEditionMode();\r\n break;\r\n case 'Space':\r\n {\r\n if (ev.ctrlKey) {\r\n const row = (ev.target as HTMLElement)?.closest('tr');\r\n if (row instanceof HTMLElement) {\r\n getRow(controller, row)!.toggleSelection();\r\n }\r\n }\r\n }\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n case 'ArrowLeft':\r\n case 'ArrowRight':\r\n case 'Home':\r\n case 'End':\r\n case 'PageUp':\r\n case 'PageDown':\r\n handleArrowKey(controller, ev);\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport {\r\n disableChildrenFocus,\r\n getFocusSelector,\r\n scrollParentIntoElement,\r\n useMount,\r\n} from '@apia/util';\r\nimport { FocusEvent, useRef } from 'react';\r\nimport { Element } from '../../primitive/Element';\r\nimport { TableController } from '../../TableController';\r\nimport type { TablePlugin } from '../TablePlugin';\r\nimport { useFocusByClick } from './useFocusByClick';\r\nimport { useFocusByKey } from './useFocusByKey';\r\nimport type { Cell } from '../../primitive/Cell';\r\n\r\nfunction getCellElement(focusControllerRef: HTMLElement, cell: Cell) {\r\n return focusControllerRef.querySelector<HTMLTableCellElement>(\r\n `tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] td[data-colname=\"${cell.getState('colName')}\"], tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] th[data-colname=\"${cell.getState('colName')}\"]`,\r\n );\r\n}\r\n\r\nfunction isVisible(el: HTMLElement | null) {\r\n if (!(el instanceof HTMLElement)) return false;\r\n\r\n // Traverse up the DOM tree\r\n while (el) {\r\n const style = getComputedStyle(el);\r\n\r\n if (\r\n style.display === 'none' ||\r\n style.visibility === 'hidden' ||\r\n style.opacity === '0'\r\n ) {\r\n return false;\r\n }\r\n\r\n el = el.parentElement;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction scrollIntoRow(row: HTMLTableCaptionElement) {\r\n if (row) {\r\n scrollParentIntoElement(row, 150, 0, 0);\r\n }\r\n}\r\n\r\nexport function restoreFocus(\r\n controller: TableController,\r\n tableElement: HTMLElement,\r\n doFocus: boolean,\r\n) {\r\n const cell = controller.getFocusedCell();\r\n\r\n if (cell) {\r\n const cellElement = getCellElement(tableElement, cell);\r\n\r\n if (cellElement) {\r\n disableChildrenFocus(tableElement);\r\n const widgets =\r\n cellElement.querySelectorAll<HTMLElement>(getFocusSelector());\r\n const widget = [...widgets].find((c) => isVisible(c));\r\n const focusableElement = widget || cellElement;\r\n\r\n focusableElement.setAttribute('tabindex', '0');\r\n restoreEditionMode(tableElement, cell.getTable().isEditionMode);\r\n if (doFocus) {\r\n focusableElement.focus();\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction restoreEditionMode(\r\n focusController: HTMLElement,\r\n editionMode: boolean,\r\n) {\r\n const focusable = focusController?.querySelector(\r\n '[tabindex=\"0\"]',\r\n ) as HTMLElement;\r\n const cell = focusable?.closest('td, th');\r\n if (cell instanceof HTMLElement) {\r\n const widgets = cell.querySelectorAll<HTMLElement>(getFocusSelector());\r\n widgets.forEach((widget) => {\r\n widget.setAttribute('tabindex', editionMode ? '0' : '-1');\r\n });\r\n const firstFocusable = [...widgets].find((c) => isVisible(c)) || cell;\r\n firstFocusable.setAttribute('tabindex', '0');\r\n }\r\n}\r\n\r\nexport class FocusControllerPlugin implements TablePlugin {\r\n rootElement: HTMLElement | null = null;\r\n\r\n scrollIntoView(rowId: string) {\r\n const row = this.rootElement?.querySelector(\r\n `tr[data-rowid=\"${rowId}\"]`,\r\n ) as HTMLTableRowElement;\r\n\r\n if (row) {\r\n scrollIntoRow(row);\r\n }\r\n }\r\n\r\n useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n _context: any,\r\n ) {\r\n if (element instanceof TableController) {\r\n const disconnect = useRef(() => {});\r\n\r\n useMount(() => {\r\n const uns1 = controller.on('cellFocus', (ev) => {\r\n if (this.rootElement) {\r\n restoreFocus(controller, this.rootElement, ev.doFocus);\r\n }\r\n });\r\n const uns2 = controller.on('editionMode', (editionMode) => {\r\n if (this.rootElement) {\r\n restoreEditionMode(this.rootElement!, editionMode);\r\n }\r\n });\r\n const uns3 = controller.on('scrollIntoRow', (row) => {\r\n this.scrollIntoView(row.getState('id'));\r\n });\r\n\r\n return () => {\r\n uns1();\r\n uns2();\r\n uns3();\r\n };\r\n });\r\n\r\n return {\r\n className: 'table__focus_controller',\r\n onClick: useFocusByClick(controller),\r\n onKeyDown: useFocusByKey(controller),\r\n onBlur: (ev: FocusEvent) => {\r\n if (\r\n ev.relatedTarget instanceof HTMLElement &&\r\n ev.relatedTarget.closest('.table__focus_controller') !==\r\n this.rootElement\r\n ) {\r\n controller.toggleEditionMode(false);\r\n }\r\n },\r\n ref: (el: HTMLElement | null) => {\r\n this.rootElement = el;\r\n if (el) {\r\n const observer = new MutationObserver(() => {\r\n restoreFocus(controller, this.rootElement!, false);\r\n });\r\n disconnect.current?.();\r\n observer.observe(el, { subtree: true, childList: true });\r\n disconnect.current = () => {\r\n observer.disconnect();\r\n };\r\n }\r\n },\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n","import { Cell } from '../primitive/Cell';\r\nimport type { Element } from '../primitive/Element';\r\nimport { Row } from '../primitive/Row';\r\nimport { TableController } from '../TableController';\r\nimport type { TablePlugin } from './TablePlugin';\r\n\r\nexport class WaiAriaPlugin implements TablePlugin {\r\n public useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n context: any,\r\n ) {\r\n if (element instanceof Row) {\r\n const base =\r\n element.getContainer() === controller.head\r\n ? 0\r\n : controller.head.rows.length;\r\n return {\r\n 'aria-selected': element.isSelected,\r\n 'aria-rowindex': context + base + 1,\r\n };\r\n } else if (element instanceof Cell) {\r\n return {\r\n 'aria-colindex': context + 1,\r\n };\r\n } else if (element instanceof TableController) {\r\n return {\r\n role: 'treegrid',\r\n 'aria-multiselectable':\r\n controller.getState('allowSelection') &&\r\n controller.getState('isSelectionMultiple')\r\n ? true\r\n : undefined,\r\n 'aria-colcount': controller.head.rows[0]?.cells.length || 0,\r\n 'aria-rowcount':\r\n controller.head.rows.length + controller.body.rows.length,\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n"],"names":["__publicField","filter","returnValue"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/table2-controller",
3
- "version": "4.0.47",
3
+ "version": "4.0.50",
4
4
  "sideEffects": false,
5
5
  "author": "Alexis Leite <alexisleite@live.com>",
6
6
  "main": "dist/index.js",
@@ -30,9 +30,9 @@
30
30
  "registry": "https://registry.npmjs.org/"
31
31
  },
32
32
  "dependencies": {
33
- "@apia/util": "^4.0.47",
34
- "mobx": "^6.13.7",
35
- "mobx-react-lite": "^4.1.0"
33
+ "@apia/util": "^4.0.50",
34
+ "mobx": "^6.12.3",
35
+ "mobx-react-lite": "^3.4.3"
36
36
  },
37
- "gitHead": "88b1e430483e2a5f0859c7f4fd87811cafa02453"
37
+ "gitHead": "9d08b163f939d98211398165f1a926e82664f420"
38
38
  }