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