teksilo-widgets 0.9.0

Widget library for Teksilo — over a hundred widgets and layout primitives, from Button to TreeTableView.
Documentation
#![allow(
// SPDX-License-Identifier: MPL-2.0
// SPDX-FileCopyrightText: 2026 FernTech

    clippy::type_complexity,
    clippy::too_many_arguments,
    clippy::collapsible_if,
    clippy::manual_find,
    clippy::redundant_guards,
    clippy::needless_range_loop,
    clippy::explicit_counter_loop,
    clippy::if_same_then_else,
    dead_code
)]

pub mod accordion;
pub mod animations;
pub mod avatar;
pub mod badge;
pub mod banner;
pub mod breadcrumb;
pub mod button;
pub mod calendar;
pub mod card;
pub mod checkbox;
pub mod code_editor;
pub use code_editor::{
    BracketPair, COMMON_BRACKETS, CodeConfig, CodeEditor, CodeEditorHandle, CompletionContext,
    CompletionItem, CompletionKind, IndentStyle, LogView, LogViewHandle, PlainTextEditor,
};
pub mod color_edit;
pub mod color_picker;
pub mod combo_box;
pub mod command_link_button;
pub mod command_palette;
pub mod common;
pub(crate) mod data_views;
pub mod date_edit;
pub mod date_range_edit;
pub mod date_time_edit;
pub mod dialog;
pub mod docking;
pub use data_views::{ActivateOn, DragTransferMode, RowDragData, ViewId};
pub(crate) mod drag_preview;
pub mod drop_target;
pub mod drop_zone;
pub mod file_picker_field;
pub mod focus_scope;
pub mod font_picker;
pub mod grid_view;
pub mod group_box;
pub mod group_header;
pub mod hex_color_input;
pub mod icon_button;
pub mod input_dialog;
pub mod keystroke_format;
pub mod language_switcher;
pub mod link;
pub(crate) mod list_item_a11y;
pub(crate) mod list_source;
pub mod list_view;
pub mod menu;
pub mod menu_bar;
pub(crate) mod menu_context;
pub mod menu_item;
pub mod menu_list;
pub mod message_box;
pub mod notification;
pub mod overlay_trigger;
pub mod panel;
pub mod password_field;
pub(crate) mod popover_caret;
pub mod popover_surface;
pub mod popover_widget;
pub mod primitives;
#[cfg(feature = "telemetry")]
pub mod privacy_settings;
pub mod progress_bar;
pub mod radio_button;
pub mod radio_group;
pub mod radio_tile;
pub mod radio_tile_group;
pub mod repeater;
pub mod rich_text;
pub mod scroll_area;
pub mod scroll_bar;
pub mod search_field;
pub mod segmented_control;
pub(crate) mod severity_badge;
pub mod shadow;
pub mod shortcut_settings;
pub mod slider;
pub mod snackbar;
pub mod spin_box;
pub mod spinner;
pub mod split_button;
pub mod splitter;
pub mod standard_item;
pub mod status_bar;
pub mod stepper;
pub mod styles;
pub mod tab_widget;
pub mod table_view;
pub mod text_input;
pub mod text_scale_control;
pub mod theme_switcher;
pub mod time_edit;
pub mod title_bar;
pub mod toast;
pub mod toggle;
pub mod tool_box;
pub mod toolbar;
pub mod tooltip;
pub(crate) mod tree_source;
pub mod tree_table_view;
pub mod tree_view;

#[cfg(feature = "preview")]
mod doc_snippets;
#[cfg(feature = "preview")]
mod preview_catalog;

pub use tooltip::TooltipWidget;

pub use accordion::{Accordion, AccordionOrientation};
pub use animations::{
    Blur, Collapse, Crossfade, Cycle, Fade, Pulse, Rotate, Scale, ScaleOrigin, Shake, Slide,
    SlideEdge, SmoothSize, SmoothSizeAxes, Unroll, UnrollFrom,
};
pub use avatar::{Avatar, AvatarCorner, AvatarPresence, AvatarShape, AvatarSize};
pub use badge::Badge;
pub use banner::{Banner, BannerSeverity};
pub use breadcrumb::{Breadcrumb, BreadcrumbItem};
pub use button::{Button, ButtonVariant, IconLocation};
pub use calendar::{Calendar, DateRange, WeekNumberDisplay};
pub use card::Card;
pub use checkbox::Checkbox;
pub use color_edit::ColorEdit;
pub use color_picker::{ColorPicker, ColorPickerLayout, ColorSwatch, DEFAULT_SWATCHES};
pub use combo_box::ComboBox;
pub use command_link_button::CommandLinkButton;
pub use command_palette::{CommandPalette, PaletteCommand};
pub use common::scroll::OverscrollBehavior;
pub use date_edit::DateEdit;
pub use date_range_edit::DateRangeEdit;
pub use date_time_edit::DateTimeEdit;
pub use dialog::{Dialog, DialogContent, ModalContainer, ModalScrim};
pub use docking::{
    CornerOwners, DockAction, DockActionId, DockActionPlacement, DockCorner, DockLayoutState,
    DockOpenLocation, DockOpenMode, DockPolicy, DockRail, DockRailItemSize, DockRailSlot, DockSide,
    DockTabDisplay, DockTabId, DockWidget, DockWidgetId, DockingLayout, DockingModel,
    TabPresentation,
};
pub use drop_target::{DropRegionSpec, DropTarget};
pub use drop_zone::DropZone;
pub use file_picker_field::{FilePickerField, FilePickerKind};
pub use focus_scope::FocusScope;
pub use font_picker::{FontMeta, FontPicker, FontPreviewMode, FontSpacingFilter};
pub use teksilo_core::styles::{
    DropRegion, DropRegionSet, DropTargetDragState, DropTargetStyle, DropTargetStyleConfig,
    DropTargetVariant, RadioTileStyle, RadioTileStyleConfig, RadioTileVariant,
    SharedDropTargetStyle, SharedRadioTileStyle, TabIndicatorPosition,
};
pub use teksilo_data::CheckState;
// Re-export the policy enum alongside the widget so consumers need a single
// `use teksilo::widgets::{FocusScope, TraversalScopePolicy}`.
pub use grid_view::{
    GridSectionProvider, GridSizing, GridTabTraversal, GridView, GroupingSections, ScrollAnchor,
    TileContext, grouping_sections,
};
pub use group_box::GroupBox;
pub use group_header::GroupHeader;
pub use hex_color_input::HexColorInput;
pub use icon_button::{BuiltInIcons, IconButton, IconButtonSize};
pub use input_dialog::InputDialog;
pub use language_switcher::LanguageSwitcher;
pub use link::Link;
pub use list_view::ListView;
pub use menu::{
    MenuEntry, MenuItemState, MenuItems, MenuModel, MenuNode, NativeMenuMode, StandardMenu,
    StandardMenuRole,
};
pub use menu_bar::{CollapsePolicy, MenuBar};
pub use menu_item::MenuItem;
pub use menu_list::{MenuList, MenuSeparator};
pub use message_box::{
    ButtonRole, EventContextMessageBoxExt, MessageBox, MessageBoxButton, MessageBoxButtons,
    MessageBoxResult, MessageBoxSeverity, StandardButton,
};
pub use notification::{
    ARCHIVE_FILE_NAME, ArchivedAction, ArchivedActionStyle, DEFAULT_ARCHIVE_LIMIT,
    NotificationArchive, NotificationArchiveModel, NotificationCenterButton, NotificationEntry,
    NotificationLog, NotificationLogDialog, NotificationUpdate,
};
pub use overlay_trigger::OverlayTrigger;
pub use panel::Panel;
pub use password_field::{AtRevealPolicy, EchoMode, PasswordField, RevealMode};
pub use popover_surface::PopoverSurface;
pub use popover_widget::{
    PopoverButton, PopoverCustom, PopoverIconButton, PopoverTrigger, PopoverWidget,
};
pub use primitives::text_input_field::{InputPurpose, ValidationFeedback, ValidationOutcome};
pub use primitives::{
    AspectRatio, Center, ColumnFlow, DeadZone, Divider, Expand, FixedSize, FormLayout, Grid,
    HStack, IconWidget, ImageFit, ImageWidget, MasonryLayout, MaxSize, MinSize, Padding,
    RectWidget, Shrinkable, Spacer, Switcher, TextWidget, TrackSize, VStack, Wrap, ZStack,
};
pub use primitives::{TextFieldHandle, TextInputField};
#[cfg(feature = "telemetry")]
pub use privacy_settings::PrivacySettings;
pub use progress_bar::ProgressBar;
pub use radio_button::RadioButton;
pub use radio_group::RadioGroup;
pub use radio_tile::{RadioTile, RadioTileIndicatorSide};
pub use radio_tile_group::{RadioTileGroup, TileLayout};
pub use repeater::Repeater;
pub use scroll_area::{ScrollArea, ScrollBarMode, ScrollBarPolicy};
pub use scroll_bar::{ScrollBar, ScrollBarOrientation};
pub use search_field::SearchField;
pub use segmented_control::{
    Segment, SegmentDisplay, SegmentId, SegmentOverflow, SegmentSizing, SegmentedControl,
};
pub use shortcut_settings::ShortcutSettings;
pub use slider::Slider;
pub use snackbar::Snackbar;
pub use spin_box::{
    ButtonLayout as SpinButtonLayout, SpinBox, SpinValue, StepType, WheelMode, WrapMode,
};
pub use spinner::Spinner;
pub use split_button::SplitButton;
pub use splitter::{
    PaneDescriptor, PaneSnapshot, PaneState, Splitter, SplitterModel, SplitterState,
};
pub use teksilo_core::focus::TraversalScopePolicy;
// `Splitter`'s public API takes an `Orientation`; re-export it so callers
// don't need a separate `teksilo_tokens` import.
pub use standard_item::{StandardListItem, StandardTreeItem};
pub use status_bar::StatusBar;
pub use stepper::{
    ChromePosition, Step, StepStatus, Stepper, StepperController, StepperOrientation, Wizard,
};
pub use tab_widget::{
    ContextMenuFactory, IconFactory as TabIconFactory, STATIC_KIND, StaticContentFactory, TabBar,
    TabBarOrientation, TabBarVisibility, TabDelegate, TabDisplayMode, TabHandle, TabId, TabInfo,
    TabOverflowButton, TabSizing, TabWidget,
};
pub use table_view::{
    Alignment as TableAlignment, CellContext, CellSelectionModel, Column, ColumnContext,
    ColumnResizePolicy, ColumnWidth, EditTriggers, GridLines, PinnedSide, SortDirection,
    TabTraversal, TableSelectionMode, TableView, TruncationPolicy,
};
pub use teksilo_tokens::Orientation;
pub use text_input::{TextInput, ValidationState};
pub use text_scale_control::TextScaleControl;
pub use theme_switcher::ThemeSwitcher;
pub use time_edit::{SecondsMode, TimeEdit, TimeFormat};
pub use title_bar::{DragRegion, ResizeStrip, TitleBar, WindowControls, WindowFrame};
pub use toast::{
    EventContextToastExt, Toast, ToastAction, ToastActionStyle, ToastAudience, ToastDismissCause,
    ToastHandle, ToastHost, ToastInstallOptions, ToastPriority, ToastRegistry, ToastRoute,
    ToastSeverity, ToastSurface,
};
pub use toggle::Toggle;
pub use tool_box::{ToolBox, ToolBoxItem, ToolBoxOrientation};
pub use toolbar::{Toolbar, ToolbarAction, ToolbarItem, ToolbarOrientation, ToolbarOverflow};
pub use tree_source::{TreeRow, TreeRowMeta};
pub use tree_table_view::TreeTableView;
pub use tree_view::{TreeRowContext, TreeView};

/// The framework bundle: teksilo-widgets' own translatable strings, grouped
/// by locale. Registered by applications via
/// `I18nConfig::framework_locales(teksilo_widgets::framework_locales())`
/// at startup.
///
/// teksilo-widgets ships `en-US` (the source language) plus 22
/// translations. Keys missing from a locale's bundle fall back to the en-US
/// source via `I18nManager::resolve_widget`'s fallback chain, so a partial
/// translation degrades key-by-key rather than wholesale. Applications that
/// need a locale teksilo-widgets doesn't ship — or that disagree with a
/// shipped rendering — can fill the gap with
/// `I18nConfig::override_widget_strings(...)`, which wins over this bundle.
///
/// `ar-SA` and `he-IL` are right-to-left; the layout flip is derived from the
/// language tag by `teksilo_i18n::rtl_from_locale`, not from anything in the
/// `.ftl` files themselves.
///
/// Every translation carries exactly the same message keys and the same
/// `{ $variable }` placeables as `en-US.ftl`; `locale_parity` in
/// `crates/teksilo-widgets/tests/locale_parity.rs` enforces that.
pub fn framework_locales() -> &'static [(&'static str, &'static [&'static str])] {
    &[
        ("en-US", &[include_str!("../locales/en-US.ftl")]), // source language
        ("ar-SA", &[include_str!("../locales/ar-SA.ftl")]), // Arabic (RTL)
        ("cs-CZ", &[include_str!("../locales/cs-CZ.ftl")]), // Czech
        ("da-DK", &[include_str!("../locales/da-DK.ftl")]), // Danish
        ("de-DE", &[include_str!("../locales/de-DE.ftl")]), // German
        ("el-GR", &[include_str!("../locales/el-GR.ftl")]), // Greek
        ("es-ES", &[include_str!("../locales/es-ES.ftl")]), // Spanish
        ("fi-FI", &[include_str!("../locales/fi-FI.ftl")]), // Finnish
        ("fr-FR", &[include_str!("../locales/fr-FR.ftl")]), // French
        ("he-IL", &[include_str!("../locales/he-IL.ftl")]), // Hebrew (RTL)
        ("hu-HU", &[include_str!("../locales/hu-HU.ftl")]), // Hungarian
        ("it-IT", &[include_str!("../locales/it-IT.ftl")]), // Italian
        ("ja-JP", &[include_str!("../locales/ja-JP.ftl")]), // Japanese
        ("ko-KR", &[include_str!("../locales/ko-KR.ftl")]), // Korean
        ("nb-NO", &[include_str!("../locales/nb-NO.ftl")]), // Norwegian Bokmål
        ("nl-NL", &[include_str!("../locales/nl-NL.ftl")]), // Dutch
        ("pl-PL", &[include_str!("../locales/pl-PL.ftl")]), // Polish
        ("pt-PT", &[include_str!("../locales/pt-PT.ftl")]), // Portuguese (European)
        ("ro-RO", &[include_str!("../locales/ro-RO.ftl")]), // Romanian
        ("ru-RU", &[include_str!("../locales/ru-RU.ftl")]), // Russian
        ("sv-SE", &[include_str!("../locales/sv-SE.ftl")]), // Swedish
        ("tr-TR", &[include_str!("../locales/tr-TR.ftl")]), // Turkish
        ("uk-UA", &[include_str!("../locales/uk-UA.ftl")]), // Ukrainian
    ]
}

#[cfg(test)]
mod layout_integration_tests;