safaeh library

Opt-in Safaeh presentation helpers for the settings framework.

The main package entrypoint intentionally does not export this library. Import it when the host app wants to use Safaeh's page-index, search, adaptive modal chrome, or the 0.5 list/status/theme seams:

import 'package:flutter_settings_framework/safaeh.dart';

Classes

SafaehAccentStyle
Appearance preference: tone down decorative accent fills.
SafaehAccentSurfaces
Shared decorations for bordered panels and accent heroes.
SafaehAction<T>
One row for showSafaehActionSheet.
SafaehActionSheetBody<T>
Action list used by showSafaehActionSheet.
SafaehAnchoredDropdownChip<T>
A compact chip that opens an anchored menu below the trigger.
SafaehAsyncBody
Generic loading / error / empty / data switcher.
SafaehAuthActions
Host callbacks for the generic auth presentation.
SafaehAuthCredentials
SafaehAuthFlow
Generic sign-in/signup presentation with no account or network knowledge.
SafaehAuthLabels
Copy supplied by the host. Safaeh deliberately has no localization dependency and uses these English values only as a usable fallback.
SafaehAuthProfile
SafaehAuthSnapshot
SafaehBorderedListChrome
Shared Material + outline shell for list cards.
SafaehBottomNavAwareFabLocation
FAB location that lifts a base location above the shell's visual inset.
SafaehBottomNavMetrics
Shared geometry for a floating bottom navigation bar and the content or controls that need to sit above it.
SafaehBottomNavScope
Provides bottom-navigation geometry to a shell's descendants.
SafaehCameraSheet
Handle for compact↔full camera / QR chrome.
SafaehCameraSheetHost
Paper-roll camera chrome. Use showSafaehCameraSheet for a dialog, or embed this widget on a route (pass onDismiss, omit openAnimation).
SafaehConfirmSheet
Confirmation body used by showSafaehConfirm.
SafaehContentAlignedAppBar
An app bar that places title in a horizontal content band.
SafaehContentAlignedFabLocation
Positions the scaffold FAB beside a content band on wide layouts.
SafaehContentAlignedPage
Wraps builder so SafaehContentAlignedAppBar can receive the scaffold width from a LayoutBuilder.
SafaehContentBand
Centers child at maxWidth (or SafaehThemeData.contentMaxWidth).
SafaehContentPanel
Inset surface for explanatory copy and compact form controls.
SafaehDebugAction
Dense list-row action inside a SafaehDebugSection.
SafaehDebugActionTile
Dense list-row action.
SafaehDebugChip
Selectable status chip.
SafaehDebugGroupLabel
Section subsection label.
SafaehDebugIdentityCard
Package / version header.
SafaehDebugL10nSection
Built-in localization section for a SafaehL10nBackend.
SafaehDebugMenuBody
Scrollable debug menu body used by showSafaehDebugMenu and hosts that already wrap showSafaeh.
SafaehDebugMenuFab
Draggable bug FAB. Host decides visibility; tap opens via onOpen.
SafaehDebugQuickAction
Tile in SafaehDebugQuickActionGrid.
SafaehDebugQuickActionGrid
2–3 column quick-action tiles.
SafaehDebugQuickActionTile
One tile in SafaehDebugQuickActionGrid.
SafaehDebugSection
One expandable section in showSafaehDebugMenu.
SafaehDebugSectionCard
Expandable section card.
SafaehDebugSnapshotCard
Snapshot blurb.
SafaehDebugStatusBanner
Bottom status message.
SafaehDebugStatusChip
Small status pill.
SafaehDropdownOption<T>
One row in a SafaehAnchoredDropdownChip menu.
SafaehEmptyState
Centered empty list/page: icon, title, optional subtitle and one action.
SafaehEndAsideLayout
Places aside in the end gutter of a centered content band.
SafaehErrorBody
Shared error content for async / error states.
SafaehFeedbackHost
Mounts the shared feedback overlay and its placement policy.
SafaehFeedbackSurface
Shared feedback surface used by the built-in and custom message APIs.
SafaehFloatingAppearance
Shared appearance options for Safaeh floating surfaces.
SafaehFloatingNavBar
Phone floating destination bar. Reuses SafaehSidenavDestination.
SafaehGlyphAvatar
Circle (or rounded-square) glyph for groups, senders, and list leadings.
SafaehInfoSheet
Body used by showSafaehInfo.
SafaehInlineBanner
Inline message block used inside sheets, above or below a form.
SafaehKeyboardAwareNav
Hides a floating nav bar while the keyboard is visible.
SafaehKpiCard
Compact label + value tile used on analytics and profile summaries.
SafaehL10nBackend
Host i18n engine + bundled maps.
SafaehL10nEditorLabels
Host-supplied copy for the localization editor and debug section.
SafaehL10nEditOverlay
Long-press wrapper that opens the localization editor.
SafaehL10nOverrideStore
Pure-Dart flatten / merge / reverse-lookup store.
SafaehL10nPersistence
Persistence for SafaehL10nOverrideStore.
SafaehLayoutFollowingFabAnimator
Follows responsive layout offsets without replaying Scaffold's relocation scale and rotation.
SafaehLoadingBody
Centered spinner used as the default SafaehAsyncBody loading slot.
SafaehLtrText
Pre-formatted string with forced LTR so number/currency order stays stable inside RTL UI shells.
SafaehMaterialRadii
Radii and chrome metrics passed to applySafaehMaterialChrome.
SafaehMemoryL10nPersistence
In-memory persistence used by tests and the example catalog.
SafaehMetaChip
Compact icon+label pill used on tiles, summaries, and filters.
SafaehMorphingAppBar
An app bar whose title and host-provided chrome follow a page position.
SafaehMorphingAppBarAction
Fades a page-specific action in and out around targetPage.
SafaehMorphingAppBarBottom
A bottom app-bar child whose height and opacity follow a normalized factor.
SafaehNavigatorScope
Which navigator safaehPop uses. showSafaeh / dialog / camera set this.
SafaehOnboarding
A reusable onboarding shell with six complete visual directions.
SafaehOnboardingActionBar
Public action bar. It can be mounted independently in a host flow.
SafaehOnboardingDesignCatalog
Design metadata shipped by Safaeh itself.
SafaehOnboardingDesignInfo
Public metadata for a design picker or documentation catalog.
SafaehOnboardingDesignPreview
Small public preview card used by the design catalog.
SafaehOnboardingHostActions
Host-controlled actions and optional top/bottom controls.
SafaehOnboardingLabels
Localized labels for the onboarding chrome.
SafaehOnboardingList
A design-aware list of option rows for host step content.
SafaehOnboardingListItem
One design-aware list row for onboarding choices or permissions.
SafaehOnboardingStep
A host-owned onboarding step.
SafaehOnboardingTracker
Public progress tracker. Hosts can use it outside SafaehOnboarding.
SafaehOption<T>
One card in showSafaehPicker.
SafaehOptionList
Vertical list of option rows with consistent gaps.
SafaehOptionPickerBody<T>
Card-picker body: optional in-body title, option cards, footer.
SafaehOptionTile
Bordered ink row for sheet action / picker lists.
SafaehPageIndex
GitBook-style "On this page" index for wide layouts (side rail).
SafaehPageIndexEntry
One jump target in a long scrolling page.
SafaehPageIndexOverlay
Floating overlay control for narrow layouts. Does not consume scroll space.
SafaehPhoneCenterExtent
Grows a bottom-docked phone sheet so the vertical center of the first body block after the handle aligns with the vertical center of the viewport. Pass-through when enabled is false.
SafaehQrFramePainter
Dimmed viewfinder with corner brackets and a scanning line.
SafaehQrMessageBody
Centered status copy for permission / camera-unavailable.
SafaehQrScannerOverlay
Overlay chrome for a camera QR preview: viewfinder, success wash, top bar, optional hint. Preview and decode stay in the host app.
SafaehQrTopBar
Close, title, optional torch, expand/collapse.
SafaehRouteOptions
Shared size / motion / navigator knobs for showSafaeh and wrappers.
SafaehSectionHeader
Accent-bar section title used across lists, forms, and tabs.
SafaehSettingsPageIndex
Safaeh's wide-layout page index backed by Edadat sections.
SafaehSettingsPageIndexOverlay
Safaeh's narrow-layout page-index overlay backed by Edadat sections.
SafaehSettingsSearchButton
Search trigger for a Safaeh-backed settings search overlay.
SafaehSettingsSearchOverlay
Animated, glass-surface settings search overlay for a page Stack.
SafaehSettingsSearchResults
A compact, grouped result list for SafaehSettingsSearchOverlay.
SafaehSidenav
Temporary drawer (mid), clipping rail (desktop), or overlay rail.
SafaehSidenavAvatar
Circular plate used as the default SafaehSidenavProfile leading.
SafaehSidenavDestination
One shell destination in SafaehSidenav.
SafaehSidenavProfile
Profile / account row at the bottom of SafaehSidenav.
SafaehStatusBody
Centered empty / busy / error chrome for sheets and bands.
SafaehTextInputSheet
Text field + action row used by showSafaehTextInput.
SafaehTheme
Provides SafaehThemeData to sheets, page index, and sidenav.
SafaehThemeData
Tokens for safaeh chrome. Override via SafaehTheme at the app root.
SafaehTileOption<T>
One list row in showSafaehTilePicker.
SafaehTilePickerBody<T>
List-row picker body: optional in-body title, header, SafaehOptionList.
SafaehTimedConfirmSheet
Confirmation whose primary action stays disabled until seconds elapse.
SafaehUserText
Displays user-generated text with a content-based textDirection so truncation / ellipsis follow the script order rather than only the UI locale.
SheetHandleBar
Top grabber for expandable black sheets (receipt camera / invite scanner).
SheetHandleDrag
Shared drag math for compact↔full camera / QR sheets (+ dismiss).

Enums

SafaehAuthMode
Visual/authentication state supplied by the host adapter.
SafaehAuthProvider
Provider buttons a host can expose in SafaehAuthFlow.
SafaehBannerTone
Severity of a SafaehInlineBanner, which picks its colours and default icon.
SafaehFeedbackType
The visual meaning of a Safaeh feedback message.
SafaehFloatingSurfaceStyle
Visual treatment used by floating and overlay surfaces.
SafaehOnboardingControlPlacement
Placement of host-provided language and theme controls.
SafaehOnboardingDesign
Complete visual directions available to every Safaeh consumer.
SafaehOnboardingResult
Result returned by the host completion callback.
SafaehOnboardingSkipPlacement
Placement of the optional skip action.
SafaehOnboardingTrackerStyle
Visual treatment for the onboarding page indicator.
SafaehPhoneSheetPlacement
Where a phone sheet sits. Tablet+ dialogs stay centered.
SheetHandleDragAction
Result of releasing the sheet drag handle.

Extensions

SafaehAccentStyleContext on BuildContext
SafaehFeedbackContext on BuildContext
Shared toast operations exposed through a small, app-agnostic interface.
SafaehOnboardingDesignX on SafaehOnboardingDesign
SafaehOnboardingSkipPlacementX on SafaehOnboardingSkipPlacement
SafaehSemanticStatus on ColorScheme
Theme-aware success / warning / danger colors.

Constants

kSafaehCameraCompactHeightFraction → const double
Compact fraction of screen height for camera / QR sheets (60–70% band).
kSafaehPhoneCenterFirstContentAnchor → const double
Fraction of the first body block that lines up with the viewport center (1 / 2 = center-to-center).
kSafaehPhoneCenterMinTopInset → const double
Smallest gap allowed above a raised phone sheet.
kSafaehPhoneFirstContentFallbackHeight → const double
First-content height used before the first layout measurement.
kSafaehPhoneHandleFallbackHeight → const double
Handle height used before the first layout measurement.
kSafaehSheetPadding → const double
kSafaehTimedConfirmSeconds → const int
Default countdown before an irreversible action can be confirmed.
kSheetContentPadding → const EdgeInsets
Default inset for free-form sheet bodies.

Functions

activeSafaehSettingsSectionId({required Iterable<SettingSection> sections, required Map<String, GlobalKey<State<StatefulWidget>>> sectionKeys, required BuildContext scrollContext, double activationOffset = 96}) String?
Resolves the active Edadat section using Safaeh's scroll spy.
applySafaehMaterialChrome(ThemeData theme, {required ColorScheme colorScheme, required TextTheme textTheme, required Color dividerColor, required Color outlineColor, required Color errorColor, required Color primarySeed, Color? iconColor, bool alwaysShowScrollbars = false, PageTransitionsTheme? pageTransitionsTheme, SafaehMaterialRadii radii = const SafaehMaterialRadii()}) ThemeData
Material chrome shared by host theme factories.
buildSafaehSheetShell({required Widget body, List<Widget> actions = const [], Widget? title, bool showTitleInBody = true, double padding = kSafaehSheetPadding}) Widget
Shared sheet body: optional in-body title, content, action row.
safaehActivePageSectionId({required List<(String, GlobalKey<State<StatefulWidget>>)> sections, required BuildContext scrollContext, double activationOffset = 96}) String?
Resolve the active section from scroll position (section tops vs viewport).
safaehArrowBack(BuildContext context) IconData
Back arrow that points toward the start.
safaehBandMetrics({required double contentAreaWidth, required double maxWidth, double reservedStartWidth = 0}) → ({double bandWidth, double endFree, double leftOffset})
Centers a capped content band inside contentAreaWidth.
safaehCanShowAside(BuildContext context, double contentAreaWidth, {double asideMinGutter = 176}) bool
Whether there is enough end-gutter space for a content aside rail.
safaehChevronEnd(BuildContext context) IconData
Material chevrons and back arrows already set IconData.matchTextDirection. Keep the LTR glyph. Swapping to the opposite icon in RTL mirrors twice. Chevron pointing toward the end (forward / open).
safaehChevronStart(BuildContext context) IconData
Chevron pointing toward the start (back / collapse into the rail).
safaehCollectPlainTextsAt(BuildContext context, Offset globalPosition) List<String>
Collects plain RenderParagraph strings under globalPosition.
safaehCurveFor(BuildContext context, Animation<double> animation) Curve
SafaehThemeData.enterCurve while opening, exitCurve while reversing.
safaehElideGraphemes(String text, {required int maxGraphemes, String ellipsis = '…', bool trimInput = true}) String
Grapheme-safe hard elide (emoji / ZWJ / flags stay intact).
safaehFade({required Animation<double> animation, required Widget child}) Widget
Fade-only enter / exit.
safaehFadeScale({required Animation<double> animation, required Widget child}) Widget
Default tablet dialog enter: fade + slight scale.
safaehIsolateBidi(String text) String
Unicode FSI (U+2068) / PDI (U+2069): isolate user-generated content inside mixed-direction strings (e.g. "$title – $amount", translated templates).
safaehPhoneCenterSheetHeight({required double viewportHeight, required double sheetTop}) double
Height of a bottom-flush raised sheet for a computed sheetTop.
safaehPhoneCenterSheetTop({required double viewportHeight, required double handleHeight, required double firstContentHeight, double minTopInset = kSafaehPhoneCenterMinTopInset, double minSheetHeight = 0, double maxSheetHeight = double.infinity}) double
Top of a bottom-docked raised sheet.
safaehPop<T>(BuildContext context, [T? result]) → void
Pops the navigator that opened the current Safaeh route.
safaehRailAwareBandMetrics(BuildContext context, double contentAreaWidth) → ({double bandWidth, double endFree, double leftOffset})
Centers a content band in the full viewport while a sibling shell rail eats contentAreaWidth from one side.
safaehResolvedMotion(BuildContext context, Duration motion) Duration
Zero when the platform has asked to disable animations.
safaehResolveUiStartTextAlign(TextDirection uiDirection) TextAlign
Align UGC to the ambient UI start edge (right in RTL, left in LTR).
safaehResolveUserTextDirection(String text) TextDirection?
Base direction for standalone UGC so truncation ellipsis follows the content's script, not only the ambient UI locale.
safaehSettingsPageIndexEntries({required Iterable<SettingSection> sections, required Map<String, GlobalKey<State<StatefulWidget>>> sectionKeys, required String labelBuilder(SettingSection section)}) List<SafaehPageIndexEntry>
Converts Edadat sections into Safaeh page-index entries.
safaehSidenavInitials(String label) String
Initials for SafaehSidenavAvatar: first letters of the first two words, or the first character of a single token (CJK / one-word names).
safaehTitleFromLabel(String data, SafaehLabelBuilder builder) SafaehTitleBuilder
Reuses a SafaehLabelBuilder on a sheet title.
safaehUnwrapBidiIsolates(String text) String
Strip bidi isolates for equality / test helpers.
scaleSafaehTextTheme(TextTheme baseTextTheme, double scaleFactor) TextTheme
Shared text scale used by host theme builders.
scrollToPageSection(GlobalKey<State<StatefulWidget>> key, {double alignment = 0.08, ScrollController? controller, double? knownOffset, Duration ensureDuration = const Duration(milliseconds: 280)}) Future<void>
Scroll helper: jump to a section key inside one scrollable.
showSafaeh<T>({required BuildContext context, required Widget child, String? title, SafaehTitleBuilder? titleBuilder, Widget? tabletTopBarAction, double? maxWidth, double? maxHeight, bool useSafeArea = true, bool showDragHandle = true, bool enableDrag = true, ShapeBorder? sheetShape, bool barrierDismissible = true, EdgeInsetsGeometry? contentPadding, double? tabletBreakpoint, double? dialogMaxWidth, Duration? motion, Curve? enterCurve, Curve? exitCurve, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, T? dismissValue, bool useRootNavigator = true, String? dismissLabel, String? closeTooltip, bool paintPhoneTitle = true, SafaehFloatingAppearance? floatingAppearance, SafaehRouteOptions? route}) Future<T?>
Shows child as a centered dialog on tablet+ and a bottom sheet on phone.
showSafaehActionSheet<T>({required BuildContext context, required String title, required List<SafaehAction<T>> actions, Widget? header, SafaehTitleBuilder? titleBuilder, SafaehActionTileBuilder<T>? tileBuilder, double railWidthOf(BuildContext context)?, double? tabletBreakpoint, double? maxWidth, double? maxHeight, bool barrierDismissible = true, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, bool useRootNavigator = true, SafaehRouteOptions? route}) Future<T?>
Action menu. Wide = dialog, phone = bottom sheet.
showSafaehCameraSheet<T>({required BuildContext context, required SafaehCameraSheetBuilder builder, double? compactHeightFraction, Color panelColor = Colors.black, Duration? motion, Duration? roll, Curve? enterCurve, Curve? exitCurve, double railWidthOf(BuildContext context)?, bool barrierDismissible = true, bool useRootNavigator = true, String? handleExpandLabel, String? handleCollapseLabel, String? handleDismissLabel, SafaehFloatingAppearance? floatingAppearance}) Future<T?>
Opens a black paper-roll sheet (receipt camera / QR scanner).
showSafaehConfirm({required BuildContext context, required String title, required String content, required String confirmLabel, String? cancelLabel, bool isDestructive = false, bool dismissReturnsFalse = false, SafaehTitleBuilder? titleBuilder, SafaehTitleBuilder? contentBuilder, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, double? tabletBreakpoint, Duration? motion, Curve? enterCurve, Curve? exitCurve, double? maxWidth, double? maxHeight, bool barrierDismissible = true, bool useRootNavigator = true, bool showTitleInBody = true, SafaehRouteOptions? route}) Future<bool?>
Adaptive confirm. Hosts pass every label — no .tr() here.
showSafaehDebugMenu<T>(BuildContext context, {required String title, Widget? identity, required List<SafaehDebugSection> sections, String? statusMessage, List<Widget> leading = const []}) Future<T?>
Opens a scrollable debug menu sheet.
showSafaehDialog<T>({required BuildContext context, required WidgetBuilder builder, bool barrierDismissible = true, Color? barrierColor, bool fadeScale = true, double railWidthOf(BuildContext context)?, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? transition, bool useRootNavigator = true, SafaehFloatingAppearance? floatingAppearance, SafaehRouteOptions? route}) Future<T?>
Centered dialog. railWidthOf is accepted for API compatibility and does not shift the panel — floating dialogs stay in the full viewport.
showSafaehInfo({required BuildContext context, required String title, required String content, required String primaryLabel, String? secondaryLabel, bool showSecondaryAction = true, SafaehTitleBuilder? titleBuilder, SafaehTitleBuilder? contentBuilder, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, double? tabletBreakpoint, Duration? motion, Curve? enterCurve, Curve? exitCurve, double? maxWidth, double? maxHeight, bool barrierDismissible = true, bool useRootNavigator = true, SafaehRouteOptions? route}) Future<bool?>
Informational modal with a content panel and a primary action.
showSafaehMultiTilePicker<T>({required BuildContext context, required List<SafaehTileOption<T>> options, required String confirmLabel, String? cancelLabel, String? title, SafaehTitleBuilder? titleBuilder, Widget? header, Iterable<T>? selected, SafaehTileBuilder<T>? tileBuilder, double railWidthOf(BuildContext context)?, double? tabletBreakpoint, double? maxWidth, double? maxHeight, bool barrierDismissible = true, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, String? searchHint, String? searchEmptyLabel, SafaehTileSearchMatch<T>? searchMatches, bool useRootNavigator = true, bool showTitleInBody = true, SafaehRouteOptions? route}) Future<List<T>?>
List-row multi-select picker. Confirm pops the current List; dismiss is null.
showSafaehPicker<T>({required BuildContext context, String? title, required List<SafaehOption<T>> options, T? selected, String? footer, SafaehTitleBuilder? titleBuilder, double railWidthOf(BuildContext context)?, double? tabletBreakpoint, double? maxWidth, double? maxHeight, bool barrierDismissible = true, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, bool useRootNavigator = true, bool showTitleInBody = true, SafaehRouteOptions? route}) Future<T?>
Compact single-select picker. Wide = dialog, phone = bottom sheet.
showSafaehTextInput({required BuildContext context, required String title, required String doneLabel, String? hint, String initialValue = '', int maxLines = 1, int? maxLength, bool obscureText = false, TextInputType? keyboardType, TextInputAction? textInputAction, List<TextInputFormatter>? inputFormatters, bool autocorrect = true, bool enableSuggestions = true, ValueChanged<String>? onChanged, String? cancelLabel, SafaehTitleBuilder? titleBuilder, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, double? tabletBreakpoint, Duration? motion, Curve? enterCurve, Curve? exitCurve, double? maxWidth, double? maxHeight, bool barrierDismissible = true, bool useRootNavigator = true, bool showTitleInBody = true, SafaehRouteOptions? route}) Future<String?>
Adaptive text field. Returns the trimmed value, or null if dismissed.
showSafaehTilePicker<T>({required BuildContext context, required List<SafaehTileOption<T>> options, String? title, SafaehTitleBuilder? titleBuilder, Widget? header, T? selected, SafaehTileBuilder<T>? tileBuilder, double railWidthOf(BuildContext context)?, double? tabletBreakpoint, double? maxWidth, double? maxHeight, bool barrierDismissible = true, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, String? searchHint, String? searchEmptyLabel, SafaehTileSearchMatch<T>? searchMatches, bool useRootNavigator = true, bool showTitleInBody = true, SafaehRouteOptions? route}) Future<T?>
List-row single-select picker. Wide = dialog, phone = bottom sheet.
showSafaehTimedConfirm({required BuildContext context, required String title, required String content, required String confirmLabel, String? cancelLabel, bool isDestructive = false, int seconds = kSafaehTimedConfirmSeconds, Widget? details, String statusLabel(int remaining)?, SafaehTitleBuilder? titleBuilder, SafaehTitleBuilder? contentBuilder, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, double? tabletBreakpoint, Duration? motion, Curve? enterCurve, Curve? exitCurve, double? maxWidth, double? maxHeight, bool barrierDismissible = true, bool useRootNavigator = true, SafaehRouteOptions? route}) Future<bool?>
Adaptive timed confirm. Hosts pass every label — no .tr() here.
withSafaehAccentStyle(ThemeData theme, {required bool subtleAccents}) ThemeData
Applies SafaehAccentStyle without dropping other theme extensions.

Typedefs

SafaehActionTileBuilder<T> = Widget Function(BuildContext context, SafaehAction<T> action)
Builds a custom action row. Tap / pop stay on the sheet.
SafaehAuthProviderBuilder = Widget Function(BuildContext context, SafaehAuthProvider provider, String label, VoidCallback? onPressed)
SafaehCameraSheetBuilder = Widget Function(BuildContext context, SafaehCameraSheet sheet)
SafaehFeedbackBuilder = Widget Function(BuildContext context, VoidCallback dismiss)
Builds custom feedback content and receives a dismissal callback owned by Safaeh. Apps can use this for richer messages while keeping placement and animation consistent with ordinary feedback.
SafaehFeedbackInsetBuilder = double Function(BuildContext context)
Resolves extra bottom clearance for feedback overlays.
SafaehLabelBuilder = Widget Function(String data, TextStyle? style)
Host bidi / i18n wrapper for a string label. Same shape on sidenav, floating nav, and page index.
SafaehMorphingAppBarActionBuilder = Widget Function(BuildContext context, double page)
Builds the single action slot of a SafaehMorphingAppBar.
SafaehOnboardingBackgroundBuilder = Widget Function(BuildContext context, SafaehOnboardingDesign design)
Optional host-supplied background builder.
SafaehTileBuilder<T> = Widget Function(BuildContext context, SafaehTileOption<T> option, bool selected)
Builds a custom row for SafaehTilePickerBody. Tap, pop, and multi-select stay on the body (the row is visual). Use onSelected to intercept.
SafaehTileSearchMatch<T> = bool Function(SafaehTileOption<T> option, String query)
Host-owned tile search. query is the raw field text (not lowercased).
SafaehTitleBuilder = Widget Function(BuildContext context, TextStyle? style)
Optional title widget (e.g. bidi-aware Text from the host app).
SafaehTransition = Widget Function({required Animation<double> animation, required Widget child})
Builds a wide-dialog entrance (fade + scale).