celina/widgets/tabs

Tab widget for Celina CLI library

This module provides a tabbed interface widget that allows switching between multiple content panels.

Types

Tab = object
  title*: string
  content*: Widget
Individual tab data
TabPosition = enum
  Top, Bottom
Position of the tab bar
Tabs = ref object of Widget
  tabs*: seq[Tab]
  activeIndex*: int
  position*: TabPosition
  tabStyle*: TabStyle
  showBorder*: bool
Tab widget that displays multiple tabs with switchable content
TabStyle = object
  activeStyle*: Style
  inactiveStyle*: Style
  borderStyle*: Style
  dividerChar*: string
Styling for tabs

Procs

proc addTab(widget: Tabs; title: string; content: Widget) {....raises: [],
    tags: [], forbids: [].}
Add a new tab
proc defaultTabStyle(): TabStyle {....raises: [], tags: [], forbids: [].}
Create default tab styling
proc newTabs(tabs: seq[Tab] = @[]; activeIndex: int = 0;
             position: TabPosition = Top;
             tabStyle: TabStyle = defaultTabStyle(); showBorder: bool = true): Tabs {.
    ...raises: [], tags: [], forbids: [].}
Create a new Tabs widget
proc nextTab(widget: Tabs) {....raises: [], tags: [], forbids: [].}
Switch to the next tab (with wrapping)
proc prevTab(widget: Tabs) {....raises: [], tags: [], forbids: [].}
Switch to the previous tab (with wrapping)
proc removeTab(widget: Tabs; index: int) {....raises: [], tags: [], forbids: [].}
Remove a tab at the given index
proc setActiveTab(widget: Tabs; index: int) {....raises: [], tags: [], forbids: [].}
Set the active tab
proc simpleTabs(titles: seq[string]; contents: seq[Widget]): Tabs {....raises: [],
    tags: [], forbids: [].}
Create tabs from title and content sequences
proc tab(title: string; content: Widget): Tab {....raises: [], tags: [],
    forbids: [].}
Create a single tab
proc tabs(tabs: seq[Tab]; activeIndex: int = 0; position: TabPosition = Top;
          tabStyle: TabStyle = defaultTabStyle(); showBorder: bool = true): Tabs {.
    ...raises: [], tags: [], forbids: [].}
Convenience constructor for Tabs widget
proc textTabs(items: seq[(string, string)]): Tabs {....raises: [], tags: [],
    forbids: [].}
Create tabs with text content
proc withBorder(widget: Tabs; showBorder: bool): Tabs {....raises: [], tags: [],
    forbids: [].}
Create a copy with border enabled/disabled
proc withPosition(widget: Tabs; position: TabPosition): Tabs {....raises: [],
    tags: [], forbids: [].}
Create a copy with different tab position
proc withStyle(widget: Tabs; tabStyle: TabStyle): Tabs {....raises: [], tags: [],
    forbids: [].}
Create a copy with different styling

Methods

method canFocus(widget: Tabs): bool {....raises: [], tags: [], forbids: [].}
Tabs widget can receive focus for keyboard navigation
method getMinSize(widget: Tabs): Size {....raises: [], tags: [], forbids: [].}
Get minimum size for tabs widget
method getPreferredSize(widget: Tabs; available: Size): Size {....raises: [],
    tags: [], forbids: [].}
Get preferred size for tabs widget
method render(widget: Tabs; area: Rect; buf: var Buffer) {....raises: [], tags: [],
    forbids: [].}
Render the tabs widget