Skip to content

Widget Catalog

oldmangan edited this page Oct 11, 2026 · 44 revisions

The running list of every wapyt widget. Update this page whenever a widget is added, renamed or retired, and move a Roadmap entry up into the first table when it ships.

Everything is importable from the package root (from wapyt import Tree, ...). "Mount" is the Layout helper that places it in an existing cell; widgets without one are constructed with container= or have no DOM of their own.

Shipped

Widget Module Mount What it is Page
Layout / MainWindow layout add_layout Flexbox rows/columns of cells with optional drag-to-resize splitters; MainWindow is the app entrypoint base Layout and MainWindow
Tree tree add_tree Nested, filterable nodes with per-kind right-click menus, checkboxes, drag-and-drop and full keyboard support Tree
DataTable datatable add_datatable Sortable, filterable, selectable rows; inline cell editing; resizable, reorderable and frozen columns; CSV export; drop upload DataTable
Form form add_form Declarative fields with client-side validation and error slots: text, select, combo, checkbox, toggle, radio and checkbox groups, date/time, colour, and range (one or two thumbs, with ticks); toggle groups, file and avatar fields, buttons anywhere, fieldsets, spacers and static values, labels on top or on the left, Python validators (sync or async) Form
ModalWindow modal — (ModalWindow(cfg)) Dialog shell; mount widgets into modal.body; show / hide / close events ModalWindow
Window window — (Window(cfg)) Floating window: move, resize, maximise, stack; non-modal by default, optional footer Window
Chart chart add_chart Chart.js charts (line, area, bar, pie, doughnut, scatter, bubble, radar) that fill and follow their container, for resizable dashboards Chart
Scheduler scheduler add_scheduler Day / week / month / agenda calendar: drag to create, move and resize appointments, keyboard throughout, iCal export, print view Scheduler
MediaPlayer mediaplayer add_mediaplayer Video in place, an audio bar that docks to the window's foot, or a compact inline player; a queue with shuffle (each item once) and repeat; HLS (bundled hls.js), WebVTT subtitles, items resolved when reached, exclusive groups, keyboard and OS media keys, the app's own buttons in the bar MediaPlayer
TabWidget tabwidget add_tabwidget Tabs with badges, closable tabs, keep-alive panels TabWidget
Sidebar sidebar add_sidebar Collapsible navigation rail: icons, badges, nested groups (a flyout when collapsed), headings, separators, a bottom spacer Sidebar
Chat chat add_chat Streaming AI chat: multi-chat history, model picker, artifacts, voice capture Chat
Terminal terminal add_terminal xterm.js terminal wired to a WebSocket shell relay Terminal
CardPanel cardpanel add_cardpanel Searchable, template-driven card grid CardPanel
ResourceBoard resourceboard add_resourceboard Master/detail list with a templated detail pane ResourceBoard
filetransfer filetransfer — (functions) Native save/open/folder pickers and streaming uploads/downloads File Transfer
message message — (functions) Toasts, plus awaitable alert / confirm / prompt dialogs Message
Toolbar toolbar add_toolbar Buttons, toggles, groups, dropdown and split buttons, text, separators and spacers; drops to icons when narrow Toolbar
ContextMenu contextmenu — (attach / show_at) Right-click menus with icons, shortcuts, danger/disabled items, checkable and radio items, and submenus ContextMenu
MenuBar menubar add_menubar File / Edit / View menu bar whose titles open ContextMenu dropdowns MenuBar
Kanban kanban add_kanban Listbox columns with counts, WIP limits, add-card buttons, collapsible and reorderable columns, a board-wide filter Kanban
Listbox listbox add_listbox Rich items (fields or an escaped template) hosting live widgets; actions, selection, filter; drag-and-drop within and between lists Listbox
ProgressBar / progress_html progressbar add_progressbar Determinate or indeterminate bars with states; also static markup ProgressBar
Pagination pagination add_pagination First/prev/next/last, page box or numbered buttons, page sizes, summary; unknown totals Pagination
Popup popup — (show / toggle at an anchor) Anchored popover for pickers, help and small forms Popup
tooltip / tooltip_attr popup — (functions) Styled tooltips; every widget's title text uses them Popup and tooltips

26 widgets. Config classes: LayoutConfig, CellConfig, TreeConfig, TreeItem, TreeAction, DataTableConfig, ColumnConfig, TableAction, FormConfig, FieldConfig, SelectOption, FormButton, FormFieldset, FormSpacer, ModalConfig, WindowConfig, ChartConfig, ChartDataset, SchedulerConfig, ScheduleItem, MediaPlayerConfig, MediaItem, MediaTextTrack, MediaAction, TabWidgetConfig, TabConfig, ToolbarConfig, ToolbarButton, ToolbarText, ToolbarSeparator, ToolbarSpacer, ContextMenuConfig, MenuItem, MenuBarConfig, ListboxConfig, ListAction, KanbanConfig, KanbanColumn, ProgressBarConfig, PaginationConfig, PopupConfig, SidebarConfig, SidebarItem, SidebarHeading, SidebarSeparator, SidebarSpacer, ChatConfig, ChatAgentConfig, ChatMessageConfig, TerminalConfig, TerminalTheme, CardPanelConfig, CardPanelCardConfig, ResourceBoardConfig, ResourceItem.

Planned

Proposed in the Roadmap, roughly in priority order. Names are working titles until they ship.

Widget Replaces today dhxpyt counterpart
Scheduler resource timeline — (DHTMLX Scheduler's timeline; dhxpyt has none)

See Comparison with dhxpyt for the full mapping.

Changes

Record widget additions here, newest first.

  • 2026-10-11: wapyt 0.2.0 released: the first final release from this repository, and what a plain pip install wapyt now installs (#74). Parity items and the Scheduler's resource timeline follow in later versions.

  • 2026-10-11: wapyt 0.2.0.dev2 published to PyPI as a pre-release: the first release with the MediaPlayer (#73).

  • 2026-10-10: MediaPlayer works with any media source: MediaItem(headers=…) on every HLS request, live=True (the live edge), a Quality menu with on_levels / set_quality, refresh() for an expiring URL, error codes with the HTTP status; a refused playlist is reported at once instead of hanging. New guide: MediaPlayer: connecting your media server, with a runnable demo (#72).

  • 2026-10-10: MediaPlayer buttons of the app's own in the bar (MediaAction, on_action, set_action), and shuffle deals every item once before any repeats — turned on mid-queue, after items are added, and across passes with repeat all (#71).

  • 2026-10-09: MediaPlayer added: video in place, an audio bar that docks to the window's foot, a compact player; a queue, items resolved when reached, HLS on a vendored hls.js 1.7.3, WebVTT subtitles, exclusive groups, keyboard and OS media keys (#70).

  • 2026-10-08: wapyt 0.2.0.dev1 published to PyPI as a pre-release, the first release from this repository (#68). Since: the iCal export no longer prints a SyntaxWarning on import, and CI fails on source warnings (#69).

  • 2026-10-08: Scheduler added: day, week, work week, month and agenda views; drag (or keyboard) to create, move and resize; act-then-revert; iCal export and a print view (#67).

  • 2026-10-08: Chart added, on a vendored Chart.js 4.5.1: fills and follows its container (tested in gridstack dashboards), a validated light / dark palette keyed by series, one value axis, a data table for screen readers, live append (#65).

  • 2026-10-08: Window added: a movable, resizable, stackable window, non-modal by default, with maximise, a footer and keyboard moving (#64).

  • 2026-10-08: Tree checkboxes (cascading or independent), drag-and-drop (pointer and Alt+arrows, act-then-revert on_move / move) and keyboard / screen-reader support, which it had none of (#63).

  • 2026-10-08: Form toggle groups (type="toggle_group", one choice or multiple, icons on segments) (#62).

  • 2026-10-08: Form file and avatar fields; get_files / adopt_files hand files to filetransfer (#61).

  • 2026-10-08: Form async validators (async def; submit waits); blur validation can no longer swallow a click (#60).

  • 2026-10-08: Form max_length, field icons and SelectOption(disabled=True) (#59).

  • 2026-10-08: Form disable() / enable() / hide() / show() for the whole form (#58).

  • 2026-10-08: Form set_properties / get_properties (#57).

  • 2026-10-08: Form on_focus / on_blur (per field), set_focus, get_focused and validate_field for validate-on-blur; removing a combo chip no longer blurs the field (#56).

  • 2026-10-08: Form validators: FieldConfig(validate=fn) runs a Python function in the browser, set_validator changes it, and success_message shows once a field passes (#55).

  • 2026-10-08: Form fieldsets (FormFieldset, nestable, hide / disable as a unit), spacers (FormSpacer) and static fields (type="static"). Validation now skips hidden and disabled fields (#54).

  • 2026-10-08: Form buttons (FormButton among the fields or in the action row, on_click, submit buttons that validate first, set_button_loading) and labels on the left (label_position, label_width, hidden_label); the action row wraps (#53).

  • 2026-10-08: CI can commit a regenerated asset manifest to a pull request whose manifest went stale, once a MANIFEST_BOT_TOKEN secret is set; until then a stale manifest fails with the command to run (#51; see Development).

  • 2026-10-08: Toolbar dropdown and split buttons: ToolbarButton(items=[MenuItem...], split=), on_select, on_open, set_menu_items, set_checked, and set_disabled / set_hidden for menu items (#50).

  • 2026-10-08: Form two-thumb range (FieldConfig(type="range", range=True) reads [low, high]) and tick marks (ticks, major_ticks, tick_labels) for every range field; the range readout no longer resizes the track (#49).

  • 2026-10-07: FormConfig(submit_text=None) / cancel_text=None now hide the button (the default "Save" used to come back), and a Form or DataTable mounted with container=tabs.get_cell(id) no longer shows through an inactive tab (#48).

  • 2026-10-07: Version 0.2.0.dev0, working toward 0.2.0. CI on every pull request, and a tag-driven release workflow that publishes to PyPI (#47; see Development).

  • 2026-10-07: Kanban added, built from Listbox columns: counts and WIP limits (optionally strict), add-card buttons, collapsible and reorderable columns, a board-wide filter and selection (#46).

  • 2026-10-07: Listbox added: rich items with an escaped template, item_body for live widgets, ListActions, selection, a filter, and pointer and keyboard drag-and-drop within and between lists (#45).

  • 2026-10-07: MenuBar added. ContextMenu gains persistent set_disabled / set_hidden / set_checked and checkable and radio-group items (#44).

  • 2026-10-07: Form.clear() and reset(); an unset range now starts at the midpoint of its own min/max instead of its max (#43).

  • 2026-10-07: DataTable row and cell classes (row_class_by, column css, cell_class_by) and hidden columns (hidden, hide_column, show_column) (#42).

  • 2026-10-07: ModalWindow on_show / on_hide / on_close with the close reason; only the topmost modal answers Escape (#41).

  • 2026-10-06: Sidebar groups (SidebarItem(items=...), nested, a flyout on the collapsed rail), SidebarHeading, SidebarSeparator, SidebarSpacer, keyboard navigation, on_toggle and expand-state persistence; its styles moved onto the --wapyt-* tokens (#40).

  • 2026-10-06: DataTable CSV export: to_csv and export_csv, with a formula-injection guard on by default (#39).

  • 2026-10-06: DataTable frozen columns: DataTableConfig(frozen_columns=N) and set_frozen_columns (#38).

  • 2026-10-06: DataTable inline cell editing: ColumnConfig(editable, editor, options, required), on_edit, set_cell, set_cell_error, edit_cell, cancel_edit. Row selection no longer redraws the table, so a double-click can no longer land on a row that moved (#37).

  • 2026-10-06: Popup and styled tooltips (tooltip, tooltip_attr, set_tooltips_enabled). Toolbar, DataTable, Tree and Sidebar title text now shows as a styled tooltip, also on keyboard focus; DataTable cells and tree labels only show one when cut off (#36).

  • 2026-10-06: Resizable layout cells: CellConfig(resizable=True, max_size=...), Layout.on_resize, set_size, get_size. Cells are now border-box, so sized cells are 2px smaller than before (#35).

  • 2026-10-06: Pagination added, with page_slice and Layout.add_pagination (#34).

  • 2026-10-06: Form combo field: searchable select with multiple chips and allow_custom (#32, on main via #33).

  • 2026-10-06: Form field types date, time, datetime-local, color, range, radio, toggle, checkbox_group; min/max validated; date objects accepted; unknown types raise (#31).

  • 2026-10-06: filetransfer.upload sends the right CSRF token when an app uses its own pytincture cookie names (cookie_namespace); uploads used to 403 (#30).

  • 2026-10-06: Every widget returns None instead of Pyodide's JsNull in event payloads and getters; Layout events arrive as dicts (#29).

  • 2026-10-06: ProgressBar and progress_html added (#28).

  • 2026-10-06: Tree, DataTable and Terminal right-click menus now use ContextMenu (keyboard, focus, ARIA); their APIs are unchanged (#27).

  • 2026-10-06: Toolbar and ContextMenu separators use new --wapyt-divider tokens; they were invisible in dark mode (#26).

  • 2026-10-06: ContextMenu added (#25).

  • 2026-10-06: Toolbar added (#24).

  • 2026-10-06: message.prompt(..., password=True) masks the input (#23).

  • 2026-10-06: message added: toasts and alert / confirm / prompt dialogs (#22).

  • 2026-10-06: CardPanel defaults are generic (empty title and description, "Search…", "Add"). Layouts and modals take their font from --wapyt-font-family. Chat.on_send is documented as {id, text, message}.

  • 2026-09-30: TreeAction(requires=[...]), matching data["flags"].

  • 2026-09-29: ColumnConfig(icon_by=...) per-cell icons in DataTable.

  • 2026-09-25: TreeAction(kinds=[...]); DataTable resizable and reorderable columns; ModalConfig(dispose_on_close=True).

Clone this wiki locally