// Path: ChatUILib/src/main/java/com/simon816/chatui/ui/table/TableRenderer.java
// interface TableViewport {
// 
//     int getFirstRowIndex();
// 
//     int getFirstColumnIndex();
// 
// }


import com.simon816.chatui.ui.table.TableRenderer.TableViewport;

            return false;
        }
        this.scrollOffset++;
        return true;
    }

    public boolean canScrollDown() {
        return this.scrollOffset < this.model.getRowCount() - 1;
    }

    public int getScrollOffset() {
        return this.scrollOffset;
    }

    public boolean scrollToOffset(int offset) {
        if (offset < 0 || offset >= this.model.getRowCount()) {
            return false;
        }
        this.scrollOffset = offset;
        return true;
    }

    public void reset() {
        this.scrollOffset = 0;
    }

    public TableModel getModel() {
        return this.model;
    }


// Path: ChatUILib/src/main/java/com/simon816/chatui/ui/table/TableRenderer.java
// interface TableViewport {
// 
//     int getFirstRowIndex();
// 
//     int getFirstColumnIndex();
// 
// }


// Path: ChatUILib/src/main/java/com/simon816/chatui/ui/table/TableScrollHelper.java
import com.simon816.chatui.ui.table.TableRenderer.TableViewport;

            return false;
        }
        this.scrollOffset++;
        return true;
    }

    public boolean canScrollDown() {
        return this.scrollOffset < this.model.getRowCount() - 1;
    }

    public int getScrollOffset() {
        return this.scrollOffset;
    }

    public boolean scrollToOffset(int offset) {
        if (offset < 0 || offset >= this.model.getRowCount()) {
            return false;
        }
        this.scrollOffset = offset;
        return true;
    }

    public void reset() {
        this.scrollOffset = 0;
    }

    public TableModel getModel() {
        return this.model;
    }


    public TableViewport createViewport() {
