ripplearc_coreui 0.11.2
ripplearc_coreui: ^0.11.2 copied to clipboard
A Flutter design system package with design tokens and basic components.
Changelog #
0.11.2 Keep CoreMultiSelectSheet visible above the keyboard #
๐ง Fixes #
- CoreMultiSelectSheet: the sheet now pads itself by the keyboard's view inset and lets the item list shrink, so the search field, list, and action buttons stay visible above the keyboard while the user types (CA-842)
๐งช Tests #
- Widget test: presents the sheet through
CoreQuickSheet.show(the real presentation path), simulates the keyboard opening, and asserts the search field, list items, and Apply button all sit above the keyboard - Golden tests: keyboard-open sheet in both light and dark themes
0.11.1 CoreBottomNavBar action button semantic label #
๐ง Fixes #
- CoreBottomNavBar: adds
actionButtonSemanticLabelparameter โ when provided, the trailing circular action button is wrapped in aSemanticsnode so screen readers can announce it; when null (default) behavior is unchanged (backward compatible, no golden change)
๐งช Tests #
- Semantics test: verifies label and
isButtonflag appear on the trailing button's semantics node - A11y test: confirms the labeled trailing button meets tap-target and label guidelines in both light and dark themes
0.11.0 Parameterize CoreBottomNavBar for 2โ4 tabs #
โจ Features #
- CoreBottomNavBar: now accepts 2โ4 tabs (previously required exactly 4)
- Assert updated to
tabs.length >= 2 && tabs.length <= 4 - Layout computation derives tab-row and nav-bar base widths dynamically from
tabs.length, so pill, active-tab, and inactive-tab proportions are correct for any supported tab count - 2-tab design verified against Figma spec (CA-874)
- Inactive tab icons corrected from
iconGrayMidtoiconWhitefor contrast on dark track - Active tab label uses
textLinktoken (semantic fix; same hex value in all themes) - Existing 4-tab layout unchanged; goldens regenerated for icon color fix
- Assert updated to
๐งช Tests #
- Boundary assert tests: rejects < 2 tabs and > 4 tabs
- 2-tab rendering tests: active label only visible, correct icon count
- 2-tab interaction test: tap second tab fires
onTabSelected(1) - New golden:
core_bottom_nav_bar_2tab_default.png
0.10.2 Accessibility #
โจ Features #
- CoreInputChip: add optional
removeSemanticLabelfor a localizable remove-button announcement; when null, keeps the default'Remove <label>'English label
0.10.1 Dark-mode contrast fixes #
๐ง Fixes #
- Accessibility / Dark mode
- CoreButton (social variant): background changed from
buttonInverse(gray25 โ near-white) tobackgroundSecondaryDarkin dark mode, preventing invisible content when text and icon tokens also resolve to near-white - DimensionCard: same background-swap fix applied; card surface is now
backgroundSecondaryDarkin dark mode instead ofbuttonInverse - SizeCard: same background-swap fix applied; card surface is now
backgroundSecondaryDarkin dark mode instead ofbuttonInverse - All three fixes mirror the existing
CoreSelectButtondark-mode guard pattern; contrast ratios now meet WCAG AA (โฅ 4.5:1 for text, โฅ 3:1 for UI components)
- CoreButton (social variant): background changed from
๐งช Tests #
- Social button: WCAG contrast a11y test + light & dark golden tests
- DimensionCard / SizeCard: WCAG contrast a11y tests added to
core_geometry_area_a11y_test.dart - Dark-mode golden tests added for
CoreGeometryArea(collapsed and expanded)
0.10.0 Search & Filter Components #
โจ Features #
- UI Components
- CoreDateFilterChip: Filter chip for a date-range filter. With no selection it renders a plain
CoreFilterChipthat opens aCoreDateRangeSheeton tap; with a selection it renders an active pill showing the formatted range with a clear ร. Surface-agnostic: each caller supplies its own label, accessibility labels, and widget keys. - CoreDateRangeSheet: Modal bottom sheet for picking an inclusive, whole-calendar-day
DateRange. Offers predefined ranges (Today, Last 7 days, Last 30 days, This month) plus a Custom range option that opensCoreDatePickertwice โ once for the start date, once for the end date. Resolves with the chosenDateRange, ornullon cancel/dismiss. - CoreMultiSelectSheet: Modal bottom sheet body for selecting multiple values from a searchable list of
{id, label}items. The caller supplies the (already filtered) list and reacts to search and apply callbacks; present it withCoreQuickSheet.show. - DateRange: Value type representing an inclusive calendar-day range, shared by the date filter components.
- All three components ship with showcase screens, widget tests, accessibility tests, and light + dark golden tests.
- CoreDateFilterChip: Filter chip for a date-range filter. With no selection it renders a plain
0.9.1 Dart 3.8 compatibility patch #
๐ง Fixes #
- Dependency constraints loosened for Dart 3.8 compatibility
flutter_svg:^2.3.0โ^2.2.3โ 2.3.0 requires Dart โฅ3.9.0; 2.2.3 is the last release compatible with Dart 3.8. No coreui APIs from 2.3.0 are used.lottie:^3.4.0โ^3.3.1โ same reason; onlyLottie.asset()with stable params is used.ripplearc_lintermoved fromdependenciestodev_dependenciesโ the linter has no runtime role and should never have been a transitive dependency for consumers; this was causinganalyzer ^8.4.0to cascade to every app using coreui, breaking build tooling on Dart 3.8.
0.9.0 Dark theme #
โจ Features #
- Dark Color Tokens
- 9 dark token classes mirroring each light class (
DarkBackgroundColors,DarkTextColors,DarkIconColors,DarkBorderColors,DarkTabColors,DarkButtonColors,DarkInputColors,DarkSelectColors,DarkStateColors) โ all colors sourced from the Figma dark-mode palette CoreTheme.dark()now returns a fully populatedThemeDatawithbrightness: Brightness.darkandscaffoldBackgroundColormapped togray50; bothAppColorsExtensionandAppTypographyExtensionare switched to their dark variants automaticallyAppTypographyExtension.createDark()โ all 19 text styles substituted withCoreDarkTextColors.*(gray25 for headlines, gray100 for titles, gray300 for body); components usingtypography.someStylewithout.copyWithnow render correctly in dark mode
- 9 dark token classes mirroring each light class (
๐ง Fixes #
- Accessibility
SingleItemSelectormodal title: uses.copyWith(color: colors.textHeadline)so text stays visible on the dark scaffold (was gray900 on gray900 โ 1:1 contrast)SingleItemSelectoritem text: uses.copyWith(color: colors.textBody)to ensure list items remain legible in dark modeCoreSelectButtonselected tab: text color switches totextInverse(gray900) when tab background istabsHighlight(orient300), resolving the 1.6:1 contrast failure in dark mode
- CoreLetterAvatar: replaced
Image.assetwith aBoxDecoration-basedContainerwrapped inAspectRatio(aspectRatio: 1.0); fixesSemanticslabel propagation that was blocked byImage.assetand correctly derives height from the available width constraint without aRenderBoxinfinite-constraint error
Tests #
CoreDatePicker Visual Regression - Darkgolden added โ verifies header background (blue900), selected day fill (orient200), and month row text underCoreTheme.dark()- Dark-mode goldens added for color tokens, letter avatar, and check row item; all light goldens refreshed against current Flutter SDK
0.8.0 CoreInputChip #
โจ Features #
- UI Components
- CoreInputChip: New non-toggleable input chip for displaying committed tokens (e.g. email addresses or tags) with a remove button.
- Displays a text label in
bodyMediumSemiBoldwithTextOverflow.ellipsisโ safe insideWraprows and on narrow screens - Trailing close (ร) button meets the 48 dp minimum tap-target requirement; tapping calls
onRemove onRemoveis optional โ omitting it hides the remove button entirely, enabling a read-only/locked-token display mode- Full accessibility support: chip container exposes a
Semantics(container: true)node with the label text; remove button exposes aSemantics(button: true)node labelled"Remove <label>"; labelTextis wrapped inExcludeSemanticsto prevent double-announcement CoreInputChip.removeButtonKeystatic key for locating the tap target in tests- Widget tests, accessibility tests (both themes), and golden tests (light + dark, short label + email label)
- Displays a text label in
- CoreInputChip: New non-toggleable input chip for displaying committed tokens (e.g. email addresses or tags) with a remove button.
0.7.2 CoreCheckRowItem & CoreDatePicker #
Upgraded #
- Flutter SDK bumped from
3.32.0to3.44.4; Dart SDK constraint raised to>=3.12.0 <4.0.0. - Gradle wrapper
8.13โ8.14. - Android Gradle Plugin (AGP)
8.7.0โ8.11.1. - Kotlin Gradle Plugin
2.1.0โ2.2.20. flutter_lints^5.0.0โ^6.0.0.flutter_svg^2.2.2โ^2.3.0,lottie^3.3.1โ^3.4.0,ripplearc_linter^0.4.0โ^0.4.1.- Minimum supported iOS deployment target raised from
12.0to13.0(example app).
Fixed #
- Fixed a drag-reorder regression in
CoreFunctionKeyBottomSheetwhere migrating to Flutter's newonReorderItemcallback (which now performs index correction internally) had left the widget's own manual index-correction logic in place, causing dropped items to land one position off from where the user released them.
Changed #
- Migrated
ReorderableListView/ReorderableListView.builderusages (_SizesTable,CoreFunctionKeyBottomSheet) from the deprecatedonReordercallback toonReorderItem, ahead of Flutter's planned removal ofonReorder. - Migrated widget tests off the deprecated
SemanticsNode.hasFlag/SemanticsData.flagsAPI to the newflagsCollectionAPI, including theisSelected/isEnabledflags moving fromboolto the newTristateenum. SingleItemSelector's bottom sheet item now wraps itsListTilein aMaterialwidget withClip.antiAlias, fixing the tap ripple/ink effect rendering outside the intended bounds.CoreKeyboard's reveal/collapseSizeTransitionmigrated fromaxisAlignment: -1.0toalignment: AlignmentDirectional.topStart.
Tests #
- Existing
SingleItemSelectorwidget tests now pass without framework exceptions after theMaterial(clipBehavior: Clip.antiAlias)wrapper fix.
0.7.0 CoreCheckRowItem & CoreDatePicker #
โจ Features #
- UI Components
- CoreCheckRowItem: New selectable list row โ leading widget, title (+ optional subtitle), and a trailing checkbox.
- Whole row is tappable; tapping toggles
selectedviaonChanged - Defaults the leading widget to a 24ร24 circle showing the first initial of
title(derived from the first whitespace-delimited token, uppercased, e.g."John Doe"โ"J"; blanktitlerenders an empty circle, no crash);avatarBackgroundColor/avatarTextColor/avatarTextStyletheme it (ignored when a customleadingis supplied);avatarTextColoris applied last and remains the single source of truth for the glyph colour - Trailing checkbox swaps between
CoreIcons.checkandCoreIcons.checkBlankbased onselected - Optional
subtitlefor a second line (e.g. an email address) - Localizable
semanticLabelparam (defaults totitle); exposed as aSemantics(button: true, checked: selected)node
- Whole row is tappable; tapping toggles
- CoreDatePicker: New modal calendar widget for picking a single date (CA-220).
- Header with a localizable label and a large spelled-out selected date (
"Mon, Aug 17"-style by default, fully overridable viadateLabelBuilder) - Month selector row with previous/next navigation; arrows disable themselves once an adjacent month would be entirely out of the optional
firstDate/lastDaterange - Day grid with selected (filled), "today" (outlined), and disabled (out-of-range) states
CoreDatePicker.showstatic helper presents the picker in a themed dialog and resolves with the confirmedDateTime, ornullon cancel/dismissmonthLabelBuilderandweekdayLabelsallow full localization of all date text without subclassing- Each day cell exposes a
Semantics(button: true, selected: ...)node with a full date label viaMaterialLocalizations.formatFullDate
- Header with a localizable label and a large spelled-out selected date (
- CoreCheckRowItem: New selectable list row โ leading widget, title (+ optional subtitle), and a trailing checkbox.
0.5.0 Search components #
โจ Features #
- UI Components
- CoreSearchBox: New borderless search input field.
- Built-in leading search icon and auto-appearing clear button (shown only when the field has text)
- Flat appearance with no visible border โ designed for global or in-page search bars
- Accepts an optional
TextEditingControllerandFocusNode; manages its own when none are supplied onChanged,onSearch(keyboard submit), andonClearcallbacksenabledflag renders the field non-interactive with abackgroundGrayMidfillclearSemanticLabellocalizable constructor param (defaults to'Clear search')hintTextlocalizable constructor param for placeholder text
- CoreSearchRowItem: New single-row item for search screens.
- Two named constructors:
CoreSearchRowItem.recentSearch(history icon) andCoreSearchRowItem.suggestion(search icon with bold-prefix query highlighting) - Trailing โ icon with independent
onTrailingTapcallback (e.g. fill the search field without triggering a search) showTrailingIconflag to hide the trailing iconsemanticLabelandtrailingSemanticLabellocalizable params for full screen-reader support- Custom variant via the default constructor: caller supplies any
leadingIconand a pre-builtlabelwidget
- Two named constructors:
- CoreSearchBox: New borderless search input field.
0.4.1 CoreIconSize token #
โจ Features #
- Design Tokens
- CoreIconSize: New icon size token with four canonical sizes โ
size16(16dp),size20(20dp),size24(24dp),size32(32dp).- Value-based naming reflects how icon sizes are referenced in design tooling and specs
- Exported from the public barrel alongside other theme tokens
- Golden test verifying each size using
CoreIconWidget
- CoreIconSize: New icon size token with four canonical sizes โ
0.4.0 CoreFilterChip component #
โจ Features #
- UI Components
- CoreFilterChip: New dropdown-style filter chip for filter rows.
- Filled pill design using
backgroundGrayMid(#F2F4F7) background token - Trailing dropdown arrow icon in
iconDark(#015B7C) color label(required) andonTap(optional) public API โ chip is non-interactive whenonTapis null- Full accessibility support: outer
Semanticsnode exposes label and button role (only when enabled);Textand arrow icon wrapped inExcludeSemanticsto prevent double-announcement - Widget tests, accessibility tests, and golden tests (enabled, long label, disabled states)
- Filled pill design using
- CoreFilterChip: New dropdown-style filter chip for filter rows.
0.3.9 CoreToast title support #
0.3.8 CoreQuickSheet component #
โจ Features #
- UI Components
- CoreQuickSheet: New standardized bottom sheet component for consistent sheet presentation across the app
- Automatic content-based height (up to 90% of screen)
- Custom drag handle with consistent styling
- Theme-aware background color (defaults to
pageBackground) - Configurable dismiss behavior (
isDismissible,enableDrag) - Optional safe area handling (
useSafeArea) - Optional custom background color override
- Rounded top corners (28px) per design spec
- Returns values when dismissed for result handling
- CoreQuickSheet: New standardized bottom sheet component for consistent sheet presentation across the app
๐ง Fixes #
- Code Quality
- Fixed tooltip component forced unwrapping issue with overlay entry
- Improved null safety in tooltip overlay insertion
0.3.7 Add splash screen icons #
โจ Features #
- Icons
- Added splash screen animation icons (splashFirstState, splashSecondState, splashThirdState)
- New SVG icons available via CoreIcons for splash screen animations
0.3.6 Accessibility improvements #
โจ Features #
- Accessibility
- Added accessibility tests for all interactive components (CoreAvatar, CoreLetterAvatar, CoreKeyboard, CoreButton, CoreBottomNavBar, CoreLoadingIndicator)
- Tests verify tap target size, semantic labels, and text contrast guidelines
๐ง Fixes #
-
Design Tokens
- Updated text link color from orient600 to orient800 to match UI design specification
-
Accessibility
- Fixed CoreButton text overflow with ellipsis and FittedBox scaling for long labels
- Fixed accessibility-related contrast and layout issues across components
0.3.5 Code quality improvements #
โจ Features #
-
UI Components
- CoreLoadingIndicator: Added Lottie-based loading indicator component with customizable size and fit options
-
Dependencies
- Added lottie (^3.2.0) for animation support
-
Assets
- Added loading animation asset (
assets/animations/loading.json)
- Added loading animation asset (
0.3.4 Code quality improvements #
๐ง Fixes #
- Code Quality
- Fixed
avoid_static_colorslinter violations - Integrated shadow colors into theme system for consistent design token usage
- Fixed
0.3.3 Theme extension naming consistency #
โ ๏ธ Breaking Changes #
- TypographyExtension has been renamed to AppTypographyExtension for consistency with other theme extensions
- Update your code:
Theme.of(context).extension<TypographyExtension>()โTheme.of(context).extension<AppTypographyExtension>()
0.3.2 Code quality improvements #
๐ง Fixes #
- Code Quality
- Fixed
avoid_static_typographylinter violations - Fixed
forbid_forced_unwrappinglinter violations - Fixed
specific_exceptions_typeslinter violations
- Fixed
0.3.1 Add transparent utility color #
โจ Features #
- Design Tokens
- Added transparent utility color to the core color palette and AppColorsExtension for consistent use across apps.
0.1.0 Initial Release #
โจ Features #
-
UI Components
- CoreBottomNavBar: A customizable bottom navigation bar component with responsive sizing and smooth animations.
- SuccessModal: A bottom sheet that is displayed to the user when an operation is successful.
- Toast: Provides a static interface to display toast messages, e.g., Toast.showSuccess, Toast.showError, Toast.showWarning.
- CoreButton: Customizable button with support for primary, secondary, and social variants, multiple sizes, icons, and disabled state.
- CoreTextField: Flexible text input with label, helper text, error handling, phone number input, prefix/suffix widgets, and country code selector.
- SingleItemSelector: Single-select dropdown with bottom sheet support.
- CoreIconWidget: Unified icon widget supporting both Material and SVG icons.
-
Design Tokens
- Color tokens (brand, gray, blue, red, etc.)
- Typography tokens (font sizes, weights, styles)
- Spacing tokens (consistent spacing system)
- Shadow tokens (multiple shadow levels)
- Icon tokens (Material and custom SVG icons)
-
Theming
- Light and dark theme support
- Easily extendable theme data for custom branding
-
Assets
- Extensive icon set (SVG and Material icons)
- IBM Plex Sans Hebrew font family included