# abu-19950821/excelabu architecture

> Architecture diagram of the GitHub repository abu-19950821/excelabu, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/abu-19950821/excelabu
- Repository: https://github.com/abu-19950821/excelabu

## Overview

ExcelABu is a framework-free, browser-based spreadsheet component. A user creates an instance, loads or binds data, edits and selects cells, and uses spreadsheet operations; the component renders the active sheet and exposes APIs for data access and export. The map includes the documented formula, history, multi-sheet, formatting, import/export, and print capabilities. Relationships among unsampled modules follow the README’s architecture and capability descriptions; uncertain internal calls are omitted.

Main entry points: [`js/excelabu.js`](https://github.com/abu-19950821/excelabu/blob/master/js/excelabu.js) (ExcelABu API), [`js/src/events/mouse.js`](https://github.com/abu-19950821/excelabu/blob/master/js/src/events/mouse.js) (Input Events), [`js/src/editing.js`](https://github.com/abu-19950821/excelabu/blob/master/js/src/editing.js) (Cell Editing), [`js/src/sheet.js`](https://github.com/abu-19950821/excelabu/blob/master/js/src/sheet.js) (Sheet Model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Component and UI"]
  node_api["ExcelABu API<br/>[excelabu.js]"]
  node_core["Core UI<br/>[dom.js]"]
  node_events["Input Events<br/>[mouse.js]"]
  node_toolbar["Toolbar Menus<br/>[freeze_menu.js]"]
  node_grid["Grid Rendering<br/>[grid.js]"]
  node_cellrender["Cell Rendering<br/>[cell.js]"]
end

subgraph group_data["Workbook and Editing"]
  node_selection["Selection<br/>[selection.js]"]
  node_editing["Cell Editing<br/>[editing.js]"]
  node_sheet["Sheet Model<br/>[sheet.js]"]
  node_formula["Formula Evaluator<br/>[formula.js]"]
  node_history["Undo History<br/>[history.js]"]
end

subgraph group_features["Spreadsheet Operations"]
  node_clipboard["Clipboard<br/>[clipboard.js]"]
  node_operations["Sheet Operations<br/>[index.js]"]
  node_fill["Fill Handle<br/>[fill_handle.js]"]
  node_find["Find Replace<br/>[find_replace.js]"]
end

subgraph group_output["Import and Output"]
  node_xlsximport["XLSX Import<br/>[import.js]"]
  node_xlsxexport["XLSX Export<br/>[xlsx_export.js]"]
  node_print["Print Preview<br/>[print.js]"]
end

node_user(("User"))

node_user -->|"creates instance"| node_api
node_api -->|"composes mixin"| node_core
node_api -->|"composes mixin"| node_events
node_api -->|"composes mixin"| node_toolbar
node_api -->|"composes mixin"| node_selection
node_api -->|"composes mixin"| node_editing
node_api -->|"composes mixin"| node_grid
node_api -->|"composes mixin"| node_clipboard
node_api -->|"composes mixin"| node_history
node_api -->|"composes mixin"| node_operations
node_api -->|"composes mixin"| node_xlsximport
node_api -->|"composes mixin"| node_print
node_events -->|"updates selection"| node_selection
node_events -->|"starts editing"| node_editing
node_editing -.->|"edits cell data"| node_sheet
node_formula -.->|"evaluates cell values"| node_sheet
node_grid -.->|"renders cells"| node_cellrender
node_api -->|"loads sheet data"| node_sheet
node_api -->|"evaluates formulas"| node_formula
node_api -->|"offers fill handle"| node_fill
node_api -->|"offers find replace"| node_find
node_api -->|"exports workbook"| node_xlsxexport
node_xlsximport -->|"uses export helpers"| node_xlsxexport
node_api -->|"returns data"| node_user

click node_api "https://github.com/abu-19950821/excelabu/blob/master/js/excelabu.js"
click node_core "https://github.com/abu-19950821/excelabu/blob/master/js/src/core/dom.js"
click node_events "https://github.com/abu-19950821/excelabu/blob/master/js/src/events/mouse.js"
click node_toolbar "https://github.com/abu-19950821/excelabu/blob/master/js/src/toolbar/freeze_menu.js"
click node_grid "https://github.com/abu-19950821/excelabu/blob/master/js/src/rendering/grid.js"
click node_cellrender "https://github.com/abu-19950821/excelabu/blob/master/js/src/rendering/cell.js"
click node_selection "https://github.com/abu-19950821/excelabu/blob/master/js/src/selection.js"
click node_editing "https://github.com/abu-19950821/excelabu/blob/master/js/src/editing.js"
click node_sheet "https://github.com/abu-19950821/excelabu/blob/master/js/src/sheet.js"
click node_formula "https://github.com/abu-19950821/excelabu/blob/master/js/src/formula.js"
click node_history "https://github.com/abu-19950821/excelabu/blob/master/js/src/history.js"
click node_clipboard "https://github.com/abu-19950821/excelabu/blob/master/js/src/clipboard.js"
click node_operations "https://github.com/abu-19950821/excelabu/blob/master/js/src/operations/index.js"
click node_fill "https://github.com/abu-19950821/excelabu/blob/master/js/src/operations/fill_handle.js"
click node_find "https://github.com/abu-19950821/excelabu/blob/master/js/src/operations/find_replace.js"
click node_xlsximport "https://github.com/abu-19950821/excelabu/blob/master/js/src/import.js"
click node_xlsxexport "https://github.com/abu-19950821/excelabu/blob/master/js/src/xlsx_export.js"
click node_print "https://github.com/abu-19950821/excelabu/blob/master/js/src/print.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api,node_core,node_events,node_toolbar,node_grid,node_cellrender,node_user toneBlue
class node_selection,node_editing,node_sheet,node_formula,node_history toneAmber
class node_clipboard,node_operations,node_fill,node_find toneMint
class node_xlsximport,node_xlsxexport,node_print toneRose
```

## Components

### Component and UI

- [ExcelABu API](https://github.com/abu-19950821/excelabu/blob/master/js/excelabu.js): `js/excelabu.js`
- [Core UI](https://github.com/abu-19950821/excelabu/blob/master/js/src/core/dom.js): `js/src/core/dom.js`
- [Input Events](https://github.com/abu-19950821/excelabu/blob/master/js/src/events/mouse.js): `js/src/events/mouse.js`
- [Toolbar Menus](https://github.com/abu-19950821/excelabu/blob/master/js/src/toolbar/freeze_menu.js): `js/src/toolbar/freeze_menu.js`
- [Grid Rendering](https://github.com/abu-19950821/excelabu/blob/master/js/src/rendering/grid.js): `js/src/rendering/grid.js`
- [Cell Rendering](https://github.com/abu-19950821/excelabu/blob/master/js/src/rendering/cell.js): `js/src/rendering/cell.js`

### Workbook and Editing

- [Selection](https://github.com/abu-19950821/excelabu/blob/master/js/src/selection.js): `js/src/selection.js`
- [Cell Editing](https://github.com/abu-19950821/excelabu/blob/master/js/src/editing.js): `js/src/editing.js`
- [Sheet Model](https://github.com/abu-19950821/excelabu/blob/master/js/src/sheet.js): `js/src/sheet.js`
- [Formula Evaluator](https://github.com/abu-19950821/excelabu/blob/master/js/src/formula.js): `js/src/formula.js`
- [Undo History](https://github.com/abu-19950821/excelabu/blob/master/js/src/history.js): `js/src/history.js`

### Spreadsheet Operations

- [Clipboard](https://github.com/abu-19950821/excelabu/blob/master/js/src/clipboard.js): `js/src/clipboard.js`
- [Sheet Operations](https://github.com/abu-19950821/excelabu/blob/master/js/src/operations/index.js): `js/src/operations/index.js`
- [Fill Handle](https://github.com/abu-19950821/excelabu/blob/master/js/src/operations/fill_handle.js): `js/src/operations/fill_handle.js`
- [Find Replace](https://github.com/abu-19950821/excelabu/blob/master/js/src/operations/find_replace.js): `js/src/operations/find_replace.js`

### Import and Output

- [XLSX Import](https://github.com/abu-19950821/excelabu/blob/master/js/src/import.js): `js/src/import.js`
- [XLSX Export](https://github.com/abu-19950821/excelabu/blob/master/js/src/xlsx_export.js): `js/src/xlsx_export.js`
- [Print Preview](https://github.com/abu-19950821/excelabu/blob/master/js/src/print.js): `js/src/print.js`

### Other components

- **User**

## Connections

- User → ExcelABu API: creates instance (evidence: `README.md`)
- ExcelABu API → Core UI: composes mixin (evidence: `README.md`)
- ExcelABu API → Input Events: composes mixin (evidence: `README.md`)
- ExcelABu API → Toolbar Menus: composes mixin (evidence: `README.md`)
- ExcelABu API → Selection: composes mixin (evidence: `README.md`)
- ExcelABu API → Cell Editing: composes mixin (evidence: `README.md`)
- ExcelABu API → Grid Rendering: composes mixin (evidence: `README.md`)
- ExcelABu API → Clipboard: composes mixin (evidence: `README.md`)
- ExcelABu API → Undo History: composes mixin (evidence: `README.md`)
- ExcelABu API → Sheet Operations: composes mixin (evidence: `README.md`)
- ExcelABu API → XLSX Import: composes mixin (evidence: `README.md`)
- ExcelABu API → Print Preview: composes mixin (evidence: `README.md`)
- Input Events → Selection: updates selection (evidence: `js/src/events/mouse.js`)
- Input Events → Cell Editing: starts editing (evidence: `js/src/events/mouse.js`)
- Cell Editing → Sheet Model: edits cell data
- Formula Evaluator → Sheet Model: evaluates cell values
- Grid Rendering → Cell Rendering: renders cells
- ExcelABu API → Sheet Model: loads sheet data (evidence: `README.md`)
- ExcelABu API → Formula Evaluator: evaluates formulas (evidence: `README.md`)
- ExcelABu API → Fill Handle: offers fill handle (evidence: `README.md`)
- ExcelABu API → Find Replace: offers find replace (evidence: `README.md`)
- ExcelABu API → XLSX Export: exports workbook (evidence: `README.md`)
- XLSX Import → XLSX Export: uses export helpers (evidence: `js/src/import.js`)
- ExcelABu API → User: returns data (evidence: `README.md`)
