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