Skip to main content

frus_widgets/
lib.rs

1//! `frus-widgets` — frus's declarative widget tree.
2//!
3//! An interface is described with composable widgets ([`Container`], [`Flex`],
4//! [`Text`], [`TextField`], [`SingleChildScrollView`]) generic over a message type `Msg`, in the
5//! Elm/iced message model. [`build_ui`] translates them into a layout, through
6//! `frus-layout`, and then into a [`Ui`]: the [`Scene`] to draw, plus the hit-test maps
7//! for clicking, focus and scrolling.
8//!
9//! The state retained between frames — hover and focus, scroll offsets, caret and
10//! selection — lives in a [`Runtime`], keyed by widget identity.
11
12#![deny(missing_docs)]
13
14// The README's example is compiled and run by `cargo test --doc`, so it cannot rot.
15#[cfg(doctest)]
16#[doc = include_str!("../README.md")]
17pub struct ReadmeDoctests;
18
19mod actionbutton;
20mod alert;
21mod align;
22mod animated;
23mod animatedsize;
24mod appbar;
25mod aspectratio;
26mod asyncbuild;
27mod autocomplete;
28mod autofill;
29mod avatar;
30mod badge;
31mod banner;
32mod barrier;
33mod baseline;
34mod bottomappbar;
35mod bottomsheet;
36mod boxes;
37mod breadcrumb;
38mod button;
39mod callback;
40mod card;
41mod carousel;
42mod chart;
43mod checkbox;
44mod chip;
45mod clip;
46mod collapsible;
47mod collapsingheader;
48mod colorpicker;
49mod component;
50mod constraints;
51mod container;
52mod controltile;
53mod crossfade;
54mod cupertinocolors;
55mod cupertinotheme;
56mod customlayout;
57mod custompaint;
58mod datatable;
59mod datepicker;
60mod datetimepicker;
61mod datetimerange;
62mod dialog;
63/// The **disabled state** every control shares: two colours and a four-part contract.
64pub mod disabled;
65/// Swipe-to-dismiss: the [`dismiss::Dismissible`] widget and its retained state.
66pub mod dismiss;
67mod divider;
68mod dragdrop;
69mod drawer;
70mod drawerheader;
71mod dropdown;
72mod dropdownmenu;
73mod dsl;
74mod editing;
75mod expanded;
76mod expansionpanel;
77mod fab;
78mod filters;
79mod fittedbox;
80mod flex;
81mod focus;
82/// Form validation, pure and application-side: [`form::Rule`] and [`form::Form`].
83pub mod form;
84mod sticky;
85mod switcher;
86mod system_ui;
87pub use form::ErrorSummary;
88mod fractional;
89mod gesturedetector;
90mod grid;
91mod gridtile;
92mod hero;
93mod mouseregion;
94// Documented inside (`host.rs`): an outer doc comment here would make its links resolve from
95// this scope rather than from the module's.
96pub mod host;
97mod icon;
98mod iconbutton;
99mod icons;
100mod image;
101/// The software keyboard's vocabulary: which keys, and what the action key does.
102pub mod ime;
103mod ink;
104mod inspector;
105mod interaction;
106mod interactive;
107mod kanban;
108mod kbd;
109mod keyed;
110mod layoutbuilder;
111pub mod licenses;
112mod list;
113mod listener;
114mod listtile;
115/// Which language the interface is in: [`locale::Locale`], [`locale::resolve`] and
116/// [`locale::of`].
117pub mod locale;
118/// The words the framework itself says: [`localizations::Localizations`] and [`localizations::of`].
119pub mod localizations;
120mod media;
121mod mediascope;
122mod menu;
123mod menubar;
124mod navbar;
125mod navdrawer;
126mod navigator;
127mod navrail;
128mod navscaffold;
129mod notifier;
130mod overflowbar;
131mod overscroll;
132mod pageselector;
133mod pagetransitions;
134mod pageview;
135mod pagination;
136mod paintcache;
137mod physics;
138mod placeholder;
139mod popover;
140mod portal;
141mod positioned;
142mod progressbar;
143mod radio;
144mod rating;
145/// Pull-to-refresh: the [`refresh::RefreshIndicator`] widget and its retained pull.
146pub mod refresh;
147mod region;
148mod relayout;
149mod reorder;
150mod reorderable;
151mod responsive;
152mod richtext;
153mod rotatedbox;
154mod router;
155mod rowcolumn;
156mod runtime;
157mod safearea;
158mod scaffold;
159mod scaffoldinfo;
160mod scroll;
161mod scrollbehavior;
162pub mod scrolloverlay;
163pub mod scrollposition;
164mod searchbar;
165mod searchview;
166mod segmented;
167mod selectiontoolbar;
168/// Stating what a widget **is** from outside it: the [`semantics::Semantics`] wrapper.
169pub mod semantics;
170#[cfg(test)]
171mod shadowprobe;
172mod sheet;
173mod shortcuts;
174mod skeleton;
175mod slider;
176mod slidershape;
177mod spacer;
178mod spinner;
179mod stack;
180mod stepper;
181mod steps;
182mod stretch;
183#[cfg(feature = "svg")]
184mod svg;
185mod switch;
186mod table;
187mod tabs;
188mod text;
189mod textinput;
190mod theme;
191mod themebuilder;
192mod themed;
193mod timeline;
194mod timepicker;
195mod titlebar;
196mod toast;
197mod toasthost;
198mod toggleable;
199mod togglebuttons;
200mod tooltip;
201mod transform;
202mod transitions;
203pub(crate) mod transparent;
204mod tree;
205mod twopane;
206mod ui;
207mod undo;
208mod visualdensity;
209mod wheel;
210mod widget;
211mod widgetstate;
212mod widgettheme;
213
214pub use actionbutton::{BackButton, CloseButton, DrawerButton, EndDrawerButton};
215pub use alert::{Alert, AlertKind};
216pub use align::{Aligned, Center};
217pub use animated::{
218    AnimatedAlign, AnimatedContainer, AnimatedDefaultTextStyle, AnimatedFractionallySizedBox,
219    AnimatedOpacity, AnimatedPadding, AnimatedPositioned, AnimatedRotation, AnimatedScale,
220    AnimatedSlide, Opacity,
221};
222pub use animatedsize::{AnimatedSize, SizeAnimation};
223pub use appbar::{platform_centers_title, AppBar, APP_BAR_HEIGHT, APP_BAR_MAX_TITLE_SCALE};
224pub use aspectratio::AspectRatio;
225pub use asyncbuild::{
226    set_task_spawner, task_arrivals, tasks_in_flight, AsyncSnapshot, BoxedTask, Builder,
227    ConnectionState, FutureBuilder, ListenableBuilder, MaybeSend, StreamBuilder, StreamSink,
228    TaskSpawner, ValueListenableBuilder,
229};
230pub use autocomplete::Autocomplete;
231pub use autofill::{AutofillGroup, AutofillHint};
232pub use avatar::{CircleAvatar, AVATAR_RADIUS};
233pub use badge::Badge;
234pub use banner::{MaterialBanner, BANNER_ELEVATION, BANNER_MIN_ACTION_BAR_HEIGHT};
235pub use barrier::{
236    AbsorbPointer, ExcludeSemantics, IgnorePointer, ModalBarrier, Offstage, Visibility,
237};
238pub use baseline::{Baseline, IgnoreBaseline};
239pub use bottomappbar::{bar_spacer, notched_outline, BottomAppBar};
240pub use bottomsheet::BottomSheet;
241pub use boxes::{ClipRect, ColoredBox, DecoratedBox, Padding};
242pub use breadcrumb::Breadcrumb;
243pub use button::{
244    Button, ButtonStyle, IconAlignment, Variant, BUTTON_BORDER_WIDTH, BUTTON_ELEVATION,
245    BUTTON_HEIGHT, BUTTON_ICON_SIZE, BUTTON_MIN_WIDTH, BUTTON_PADDING, BUTTON_TEXT_PADDING,
246};
247pub use callback::{Callback, IntoMsg};
248pub use card::{Card, CardVariant, CARD_ELEVATION, CARD_MARGIN};
249pub use carousel::CarouselView;
250pub use chart::{BarChart, LineChart};
251pub use checkbox::Checkbox;
252pub use chip::{
253    Chip, CHIP_BORDER_WIDTH, CHIP_HEIGHT, CHIP_ICON_SIZE, CHIP_LABEL_PADDING, CHIP_PADDING,
254    CHIP_RADIUS,
255};
256pub use clip::{ClipOval, ClipPath, ClipRRect};
257pub use collapsible::{ControlAffinity, ExpansionTile};
258pub use collapsingheader::{header_rect, CollapsingHeader, HeaderState, COLLAPSED_HEIGHT};
259pub use colorpicker::ColorPicker;
260pub use component::{
261    back_blocked, component, intervals, rebuild_requested, request_rebuild, take_rebuild_request,
262    BuildContext, Component, Interval, IntoCleanup, State, StateContext, StateHandle, StateStore,
263    StatefulWidget, StatelessWidget, UseRef, UseState,
264};
265pub use constraints::{
266    AxisConstraint, ConstrainedBox, ConstraintsTransform, ConstraintsTransformBox, Intrinsic,
267    IntrinsicAxis, IntrinsicHeight, IntrinsicWidth, LimitedBox, Overflow, OverflowBox, SizedBox,
268    SizedOverflowBox, UnconstrainedBox,
269};
270pub use container::Container;
271pub use controltile::{CheckboxListTile, RadioListTile, SwitchListTile};
272pub use crossfade::AnimatedCrossFade;
273pub use cupertinocolors::{
274    CupertinoColors, CupertinoDynamicColor, CupertinoUserInterfaceLevelData,
275};
276pub use cupertinotheme::{
277    CupertinoTextTheme, CupertinoTextThemeData, CupertinoTheme, CupertinoThemeData,
278};
279pub use customlayout::{
280    ChildAxis, ChildConstraints, ChildLayout, CustomLayout, CustomMultiChildLayout, LayoutFn,
281};
282pub use custompaint::CustomPaint;
283pub use datatable::{
284    compare_cells, page_count, page_range_label, page_rows, row_matches, sort_rows, DataTable,
285};
286pub use datepicker::DatePicker;
287pub use datetimepicker::DateTimePicker;
288pub use datetimerange::DateTimeRange;
289pub use dialog::{
290    ActionsAlignment, AlertDialog, Dialog, SimpleDialog, SimpleDialogOption, DIALOG_ELEVATION,
291    DIALOG_INSET_PADDING, DIALOG_MIN_WIDTH, DIALOG_RADIUS,
292};
293pub use disabled::{
294    disabled_container, disabled_content, disabled_mark, over_surface, DISABLED_CONTAINER_OPACITY,
295    DISABLED_CONTENT_OPACITY,
296};
297pub use dismiss::{
298    DismissAxis, DismissDirection, DismissPhase, DismissSpec, DismissState, Dismissable,
299    Dismissible,
300};
301pub use divider::{Divider, VerticalDivider, DIVIDER_SPACE, DIVIDER_THICKNESS};
302pub use dragdrop::{DragSource, DragTarget, Draggable, DropZone};
303pub use drawer::{Drawer, DRAWER_RADIUS, DRAWER_WIDTH};
304pub use drawerheader::{DrawerHeader, UserAccountsDrawerHeader, DRAWER_HEADER_HEIGHT};
305pub use dropdown::{DropdownButton, DropdownOption};
306pub use dropdownmenu::DropdownMenu;
307pub use dsl::{button, center, expanded, flexible, keyed, spacer, text};
308pub use editing::TextEditingController;
309pub use expanded::{Expanded, FlexFit, Flexible};
310pub use expansionpanel::{ExpansionPanel, ExpansionPanelList};
311pub use fab::{FabSize, FloatingActionButton};
312pub use filters::{BackdropFilter, BackdropGroup, ColorFiltered, ImageFiltered, ShaderMask};
313pub use fittedbox::FittedBox;
314pub use flex::{Flex, ListBody, Wrap};
315pub use focus::{
316    ExcludeFocus, ExcludeFocusTraversal, Focus, FocusTraversalGroup, FocusTraversalOrder,
317};
318pub use fractional::FractionallySizedBox;
319/// SVG pictures, drawn as vector paths (the `svg` feature).
320#[cfg(feature = "svg")]
321pub use frus_svg::{Svg, SvgError, SvgHandle};
322pub use gesturedetector::{GestureDetector, PanAxis, PanEvent};
323pub use grid::GridView;
324pub use gridtile::{GridTile, GridTileBar, GRID_TILE_BAR_HEIGHT, GRID_TILE_BAR_TWO_LINE_HEIGHT};
325pub use hero::{lerp_rect, Hero, HeroSpot};
326pub use icon::Icon;
327pub use iconbutton::{
328    IconButton, IconButtonVariant, ICON_BUTTON_BORDER_WIDTH, ICON_BUTTON_ICON_SIZE,
329    ICON_BUTTON_SIZE,
330};
331pub use icons::{AnimatedIconData, AnimatedIcons, IconData, IconStyle, Icons};
332pub use image::{
333    Image, ImageIcon, ImagePlaceholder, State as ImageState, IMAGE_FADE, QUICK_DECODE_PIXELS,
334};
335pub use ime::{Capitalization, Ime, KeyboardType, TextInputAction};
336pub use ink::{InkStyle, InkWell, Ripples};
337pub use inspector::{dump_tree, node_at, paint_overlay as paint_inspector_overlay, InspectorNode};
338pub use interaction::{Cursor, InputState, Interaction, Key, KeyResponse, Status, WidgetId};
339pub use interactive::{InteractiveView, InteractiveViewer};
340pub use kanban::{kanban_slot, Kanban};
341pub use kbd::Kbd;
342pub use keyed::Keyed;
343pub use layoutbuilder::LayoutBuilder;
344pub use licenses::{AboutDialog, AboutListTile, LicenseNotice, LicensePage, Package};
345pub use list::{ListView, VirtualList};
346pub use listener::{Listener, ListenerEvent, ListenerEventKind, OrientationBuilder};
347pub use listtile::{
348    ListTile, LIST_TILE_DENSE_HEIGHTS, LIST_TILE_HEIGHTS, LIST_TILE_MIN_LEADING_WIDTH,
349    LIST_TILE_MIN_VERTICAL_PADDING, LIST_TILE_PADDING_END, LIST_TILE_PADDING_START,
350    LIST_TILE_TITLE_GAP,
351};
352pub use locale::Locale;
353pub use localizations::{English, French, Localizations};
354pub use media::{
355    Accessibility, AccessibilityOverrides, Brightness, Edges, MediaQuery, SurfaceGuard,
356};
357pub use mediascope::MediaScope;
358pub use menu::{MenuItem, PopupMenuButton};
359pub use menubar::{MenuBar, MenuPath, SubmenuButton};
360pub use mouseregion::{HoverEvent, HoverRegion, MouseRegion};
361pub use navbar::NavigationBar;
362pub use navdrawer::NavigationDrawer;
363pub use navigator::Navigator;
364pub use navrail::{BottomBar, DestinationIcon, NavigationDestination, NavigationRail, RailLabels};
365pub use navscaffold::NavScaffold;
366pub use notifier::{ChangeNotifier, Listenable, Subscription, ValueNotifier};
367pub use overflowbar::OverflowBar;
368pub use overscroll::{
369    cross_axis as glow_cross_axis, edge_for, GlowEdge, OverscrollGlow, ScrollGlows,
370};
371pub use pageselector::{TabPageSelector, PAGE_DOT_GAP, PAGE_DOT_SIZE};
372pub use pagetransitions::{
373    PagePose, PageTransitionsBuilder, PageTransitionsTheme, TransitionFrame,
374    CUPERTINO_BARRIER_OPACITY,
375};
376pub use pageview::{PageSnap, PageView, PagedView};
377pub use pagination::Pagination;
378pub use paintcache::PaintCache;
379pub use physics::{
380    page_of, page_target, snap_target, Ballistic, OverscrollIndicator, ScrollDecelerationRate,
381    ScrollFeel, ScrollMetrics, ScrollPhysics, Scrollbars, UserScroll, CONSTANT_DECELERATION_FAST,
382    MAX_FLING_VELOCITY, MIN_FLING_VELOCITY,
383};
384pub use placeholder::{Placeholder, PLACEHOLDER_COLOR, PLACEHOLDER_FALLBACK, PLACEHOLDER_STROKE};
385pub use popover::MenuAnchor;
386pub use portal::{OverlayPortal, Placement};
387pub use positioned::{Positioned, Positioning};
388pub use progressbar::LinearProgressIndicator;
389pub use radio::{Radio, RadioGroup};
390pub use rating::Rating;
391pub use refresh::{RefreshIndicator, RefreshPhase, RefreshPull, RefreshSpec, Refreshable};
392pub use region::{
393    region_copy, region_ranges, RegionPoint, RegionSelection, SelectionArea, TextStop,
394};
395pub use relayout::LayoutCache;
396pub use reorder::{
397    nearest_reorder_slot, reflow_reorder_cards, reflow_reorder_columns, reorder_drop_after,
398};
399pub use reorderable::{settled_index, ReorderGrab, ReorderableList};
400pub use responsive::{responsive, Responsive};
401pub use richtext::RichText;
402pub use rotatedbox::RotatedBox;
403pub use router::{GoRoute, GoRouter, GoRouterState};
404pub use rowcolumn::{Column, MainAxisSize, Row, VerticalDirection};
405pub use runtime::{
406    spring_ease, spring_step, Anim, Edit, Runtime, ScrollBallistic, ScrollState, ScrollbarFade,
407    SelectionHandle, ToolbarMark, TransformValues, ValueAnim,
408};
409pub use safearea::SafeArea;
410pub use scaffold::{fab_button, FabLocation, NavPlacement, Scaffold};
411pub use scaffoldinfo::{ScaffoldGuard, ScaffoldInfo, ScaffoldScope};
412pub use scroll::{Axis, SingleChildScrollView};
413pub use scrollbehavior::{ScrollBehavior, ScrollBehaviorGuard, ScrollConfiguration};
414pub use scrolloverlay::{OverlayBuilder, ScrollOverlay};
415pub use scrollposition::{ScrollPosition, ScrollTarget, ScrollTo};
416pub use searchbar::{SearchBar, SEARCH_BAR_HEIGHT, SEARCH_BAR_MAX_WIDTH, SEARCH_BAR_MIN_WIDTH};
417pub use searchview::{
418    SearchAnchor, SEARCH_VIEW_FULL_SCREEN_HEADER, SEARCH_VIEW_MIN_HEIGHT, SEARCH_VIEW_MIN_WIDTH,
419    SEARCH_VIEW_RADIUS,
420};
421pub use segmented::{
422    SegmentedButton, SEGMENTED_BORDER_WIDTH, SEGMENTED_HEIGHT, SEGMENTED_ICON_GAP,
423    SEGMENTED_ICON_SIZE, SEGMENTED_PADDING,
424};
425pub use selectiontoolbar::{EditAction, ToolbarContext, ToolbarItem};
426pub use semantics::{Description, Semantics};
427pub use sheet::{
428    sheet_takes_release, split_sheet_drag, DraggableScrollableSheet, SheetArea, SheetSpec,
429    SheetState, SheetTo, SnapSimulation, SHEET_SNAP_MIN_SPEED,
430};
431pub use shortcuts::{
432    ActionListener, Actions, CallbackShortcuts, FocusableActionDetector, Intent, KeyStroke,
433    KeyboardListener, ShortcutKey, Shortcuts,
434};
435pub use skeleton::Skeleton;
436pub use slider::{RangeSlider, ShowValueIndicator, Slider, SliderInteraction};
437pub use slidershape::{
438    DropSliderValueIndicatorShape, NoSliderShape, RectangularSliderValueIndicatorShape,
439    RoundSliderOverlayShape, RoundSliderThumbShape, RoundSliderTickMarkShape,
440    RoundedRectRangeSliderTrackShape, RoundedRectSliderTrackShape, SliderOverlayShape, SliderPaint,
441    SliderPalette, SliderShape, SliderThumb, SliderThumbShape, SliderTickMarkShape,
442    SliderTrackShape, SliderValueIndicatorShape,
443};
444pub use spacer::Spacer;
445pub use spinner::CircularProgressIndicator;
446pub use stack::{Clip, IndexedStack, Stack, StackFit};
447pub use stepper::Stepper;
448pub use steps::Steps;
449pub use sticky::StickyHeader;
450pub use stretch::{OverscrollStretch, ScrollStretch};
451#[cfg(feature = "svg")]
452pub use svg::SvgPicture;
453pub use switch::Switch;
454pub use switcher::AnimatedSwitcher;
455pub use system_ui::{AnnotatedRegion, SystemBars, SystemUiOverlayStyle};
456pub use table::Table;
457pub use tabs::{
458    TabAlignment, TabBar, TabBarVariant, TabItem, TAB_DIVIDER_HEIGHT, TAB_HEIGHT, TAB_ICON_GAP,
459    TAB_ICON_HEIGHT, TAB_ICON_SIZE, TAB_INDICATOR_PRIMARY, TAB_INDICATOR_SECONDARY,
460    TAB_LABEL_PADDING, TAB_START_OFFSET,
461};
462pub use text::Text;
463pub use textinput::word_bounds;
464pub use textinput::{
465    FloatingLabelAlignment, FloatingLabelBehavior, TextField, TextFieldStyle, TextFieldVariant,
466    FIELD_BORDER_WIDTH, FIELD_DENSE_OUTLINED_PADDING_BOTTOM, FIELD_DENSE_OUTLINED_PADDING_TOP,
467    FIELD_DENSE_PADDING_Y, FIELD_DISABLED_OPACITY, FIELD_FOCUSED_BORDER_WIDTH, FIELD_GAP,
468    FIELD_ICON_SIZE, FIELD_LABEL_SCALE, FIELD_NOTCH_GAP, FIELD_OUTLINED_PADDING_BOTTOM,
469    FIELD_OUTLINED_PADDING_TOP, FIELD_PADDING_X, FIELD_PADDING_Y, FIELD_RADIUS, FIELD_SUB_SIZE,
470    FIELD_TEXT_SIZE,
471};
472pub use theme::{
473    ColorScheme, TapTarget, TextTheme, Theme, ThemeMode, MIN_TAP_TARGET, SHRUNK_TAP_TARGET,
474};
475pub use themebuilder::ThemeBuilder;
476pub use themed::Themed;
477pub use timeline::Timeline;
478pub use timepicker::{Endpoint, TimeField, TimePicker, TimeRange};
479pub use titlebar::{CaptionButton, TitleBar, TitleBarRole, WindowMenuBar};
480pub use toast::{SnackBar, SnackBarBehavior, SnackBarKind, SnackBarQueue};
481pub use toasthost::{ScaffoldMessenger, SnackBarPosition};
482pub use togglebuttons::{
483    ToggleAxis, ToggleButtons, TOGGLE_BUTTONS_BORDER_WIDTH, TOGGLE_BUTTON_MIN_SIZE,
484};
485pub use tooltip::Tooltip;
486pub use transform::{FractionalTranslation, Transform};
487pub use transitions::{
488    eased, DecoratedBoxTransition, DecorationPosition, DefaultTextStyleTransition, FadeTransition,
489    ScaleTransition, SizeTransition, SlideFrom, SlideTransition,
490};
491pub use tree::Tree;
492pub use twopane::TwoPane;
493pub use ui::{
494    build_deferred, build_ui, build_ui_inspected, collect_ids, find_by_key, find_path,
495    find_sheet_by_key, find_widget, focus_changes, reorder_siblings, reorderable_owners,
496    subtree_ids, FocusDirection, Focusable, KeepVisible, Scrollable, Scrollbar, Ui,
497};
498pub use undo::{EditKind, EditSnapshot, UndoHistory, RUN_PAUSE};
499pub use visualdensity::VisualDensity;
500pub use wheel::{ListWheel, RowOnWheel, WheelGeometry};
501pub use widget::{
502    CellFn, DragMode, DragTrack, FillAxes, FilterContext, ReorderAxis, ThumbDrag, Widget,
503};
504pub use widgetstate::{StateFilter, WidgetState, WidgetStateProperty, WidgetStates};
505// **Every** one of them, and not only the ones a doc link happened to need. A theme
506// struct that is `pub` inside a private module is public and unreachable: callers can
507// still set `theme.widgets.button.background`, because the field's type is inferred, but
508// they cannot name the type — so `AppBar::icon_theme` took an `IconTheme` no caller
509// could build from milestone 396 until now. A property that ships unusable is a property
510// that did not ship.
511pub use widgettheme::resolve_shape;
512pub use widgettheme::{
513    AppBarTheme, BadgeTheme, ButtonTheme, CaptionButtonsTheme, CardTheme, CheckboxTheme, ChipTheme,
514    DefaultTextStyle, DividerTheme, DrawerTheme, DropdownTheme, ExpansionPanelListTheme,
515    GridTileBarTheme, IconButtonTheme, IconTheme, InkTheme, MenuBarTheme, MenuTheme,
516    PageSelectorTheme, RadioTheme, SegmentedTheme, SliderTheme, SwitchTheme, TabBarTheme,
517    TextFieldTheme, TextSelectionTheme, TitleBarTheme, ToggleButtonsTheme, WidgetThemes,
518};
519
520// Convenience re-exports for callers.
521#[doc(hidden)]
522pub use frus_core::__set_detected_target_platform;
523pub use frus_core::{
524    debug_default_target_platform_override, default_target_platform,
525    set_debug_default_target_platform_override, Platform, TargetPlatform, IS_WEB,
526};
527/// Installing the reader's font size for a whole frame — see
528/// [`frus_core::install_text_scale`]. Re-exported for the shell, which has to hold it
529/// across the build, the layout **and** the paint.
530pub use frus_core::{install_text_scale, TextScaleGuard};
531pub use frus_core::{
532    Affine, Alignment, AlignmentDirectional, AlignmentGeometry, Backdrop, BlendMode, Border,
533    BorderRadius, BoxDecoration, BoxFit, BoxShadow, ClipShape, Color, ColorFilter, Colors,
534    FontFamily, FontWeight, FractionalMask, ImageData, ImageFilter, ImageHandle, Insets,
535    InsetsDirectional, InsetsGeometry, LinearGradient, MaterialColor, Orientation, Path, PathVerb,
536    Point, Primitive, Rect, Role, Scene, SemanticsProperties, Size, SizeClass, StrokeCap,
537    TextAlign, TextDecoration, TextDirection, TextOverflow, TextSpan, TextStyle, Toggled,
538    WindowInsets,
539};
540/// The shared animation layer — physics, curves, driver — see
541/// [`frus_core::animation`]. Re-exported here so applications can reach it through
542/// `frus_widgets` without depending on `frus-core` directly.
543pub use frus_core::{
544    AnimationController, ClampedSimulation, Curve, FrictionSimulation, Lerp, Simulation,
545    SpringDescription, SpringSimulation, Tolerance, Tween, Velocity, VelocityEstimate,
546    VelocityStrategy, VelocityTracker, BOUNCING_FLING_WEIGHTS, DESKTOP_FLING_WEIGHTS,
547};
548// `frus_core::Status`, an animation's progress, is renamed so it does not shadow the
549// interaction `Status`, which is paint state: hover, press, focus and so on.
550pub use frus_core::Status as AnimationStatus;
551/// A picture painted as a background, and the reference's fitting.
552pub use frus_core::{
553    apply_box_fit, DecorationImage, FittedSizes, ImagePiece, ImageRepeat, MAX_IMAGE_TILES,
554};
555/// The image stores, for an application that loads its own pictures or sizes the cache.
556pub use frus_core::{
557    cached, cached_at, decoded_at, fetched, fetched_at, forget_cached_images,
558    forget_fetched_images, image_cache_budget, image_cache_bytes, set_image_cache_budget,
559    trim_image_caches, DecodeSize, Fetched, DEFAULT_IMAGE_CACHE_BYTES,
560};
561/// What a decoration is made of — its shape, its sides, its border's two forms, its
562/// shadows' blur — and the shapes a border can take.
563pub use frus_core::{
564    paint_elevation, BlurStyle, BorderDirectional, BorderRadiusDirectional, BorderSide, BoxBorder,
565    BoxShape, ShapeBorder,
566};
567/// The rest of the animation layer: tweens chained and curved, the scroll simulations and
568/// their constants.
569pub use frus_core::{
570    Animatable, Animation, BouncingScrollSimulation, ClampingScrollSimulation, Curved,
571    PolynomialFit, TweenSequence, BOUNCING_DRAG, CLAMPING_FRICTION, MAX_SPRING_TRANSFER_VELOCITY,
572};
573/// What a layer does at compositing, for painting a scene by hand.
574pub use frus_core::{
575    FillRule, GradientRamp, LayerFilter, LayerTransform, MaskShader, PathGradient, RampShape,
576    Stroke, TextBlock,
577};
578/// The three gradients and how they tile.
579pub use frus_core::{Gradient, RadialGradient, SweepGradient, TileMode};
580// `frus_core::ShaderMask`, a layer's mask, is renamed so it does not shadow the
581// `ShaderMask` widget.
582pub use frus_core::ShaderMask as LayerShaderMask;
583/// Colour science: the tone-based space the schemes are made in, and the surface tint.
584pub use frus_core::{surface_tint_opacity, Hct, TonalPalette};
585/// Type as the renderer receives it, and the framework's defaults.
586pub use frus_core::{ResolvedTextStyle, TextRun, DEFAULT_LINE_HEIGHT, DEFAULT_TEXT_SIZE};
587
588/// The image stores and the two things a host has to name: a decoder is chosen by the
589/// `images` feature, and the **fetcher** is registered by whoever has a network. See
590/// [`Image::network`].
591pub use frus_core::{images_in_flight, set_image_fetcher, ImageFetcher};
592pub use frus_layout::{Align, AlignContent, FlexDirection, Justify, Overflowing, Side};