syzygy_ui_flutter 2.4.0
syzygy_ui_flutter: ^2.4.0 copied to clipboard
Production-ready Flutter component library with design tokens, Dark Mode, and zero third-party dependencies
Changelog #
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.4.0 - 2026-08-05 #
Added #
- SyzygyTheme, SyzygyThemeProvider InheritedWidget, runtime theme switching via builder callback
- 3 built-in themes: defaultTheme, dark, highContrast
- Component-level theme override via theme constructor parameter
Changed #
- All components now read visual tokens from SyzygyThemeProvider.of(context)
Fixed #
- Accessibility: PhoneInput (Semantics label), SearchableDropdown (field + items), Popover (container)
2.3.0 - 2026-08-05 #
Changed (Breaking) #
- Color token vocabulary alignment —
AppColorsLight,AppColorsDark, andAppColorsupdated to canonical token set:- New tokens added:
primarySubtle,errorMuted,textPrimary,textSecondary,textDisabled,textInverse,scrim - All tokens wired through constructor required params,
copyWith,lerp,light/darkstatic consts, and both inner color classes
- New tokens added:
Fixed #
- CI
release.yml:seq 1 10→seq 1 30in pub.dev poll loop (300 s → 900 s max wait) to allow for slower registry propagation
2.2.1 - 2026-08-04 #
Added #
Timeline: renamedTimelineItemData→TimelineItem— cross-platform naming alignment (breaking rename)Accordion:initiallyOpenIndex: int?→initiallyOpenIndexes: Set<int>— lets callers pre-open multiple sections simultaneously (breaking rename; pass{0}to replicate the old single-index behaviour)
Fixed #
AppRadius.full: corrected from999.0to9999.0to match cross-platform token specConfirmDialog: wrapped content inSemantics(liveRegion: true)so TalkBack/VoiceOver announces the dialog on appearance
2.2.0 - 2026-08-04 #
Added #
- Display:
PageControl(akaDotIndicator; read-only row of dots synced withPagerView's current page — no tap-to-navigate, since a page indicator reflects state rather than driving it),Accordion(managed group ofCollapsibleView-style sections sharing open/closed coordination state; single-open-at-a-time by default viaallowMultipleOpen),Timeline(akaActivityFeed; vertical event list with a dot/icon connector line via simple fixed-height segments, not aCustomPainter),ColorSwatchView(circle/square swatch with optional label andisSelectedborder using thefocuscolor token — namedColorSwatchView, notColorSwatch, since Flutter Material already exports a framework class namedColorSwatch<T>). - Inputs:
SearchableDropdown(standaloneTextField+ filtered option list via an anchoredOverlayEntry, followingPopover's existingCompositedTransformTarget/CompositedTransformFollowerpattern — not a wrapper around this library'sDropdown, sinceDropdownButtonFormFieldhas no hook for inline search/filtering),PhoneInput(tappable flag-emoji + dial-code prefix selector, numeric keyboard, reports both a digits-onlyrawvalue and aformatteddisplay string; ships with a minimal, real, overridable 15-country default list),CurrencyInput(currency symbol prefix/suffix with hand-rolled thousands-separator grouping from Dart core — no newintldependency). - Feedback:
NetworkStatusBanner("No internet connection" banner — a controlled/presentational widget taking a requiredisOfflineprop, since Flutter's core SDK has no built-in connectivity-detection API the way iOS'sNWPathMonitor/Android'sConnectivityManagerdo natively),ConfirmDialog(presetModalDialogvariant: title/message/confirm/cancel, withisDestructivestyling on the confirm button). - Layout:
SafeAreaWrapper(themed wrapper around Flutter's own nativeSafeArea— exposes a consistentsyzygy_ui_flutter-named API surface over an already-solved problem, unlike this release's genuinely dependency-constrained components),LabeledDivider(centered/leading/trailing text label breaking a line, built from twoDividerLinesegments).
Nothing to report for ### Fixed this release — no CI/lint carry-over was assigned to this repo.
2.1.0 - 2026-08-03 #
Added #
- Buttons:
LoadingButton(built-in spinner, disabled while loading),AppFloatingActionButton(avoids colliding with Material's ownFloatingActionButton),ButtonGroup(single/multi-select segmented row). - Inputs:
TextArea(multi-line, viaTextField's nativeminLines/maxLines),OTPInput(auto-advancing focus per digit),TagInput(renders entered items as dismissibleChips),DatePickerField/TimePickerField(wrap Flutter's nativeshowDatePicker/showTimePicker),AppFormField(avoids colliding with Flutter's ownFormField<T>base class),PasswordStrengthIndicator(real length + character-class heuristic, not hardcoded). - Display:
AvatarGroup(overlappingAvatarstack with "+N" overflow),StatsCard(akaMetricCard; label/value/trend),RatingInput(interactive counterpart to the read-onlyStarRatingView). - Feedback:
SkeletonView(rectangle/circle shimmer placeholder, generalizingShimmerView's animation),CircularProgress(themed wrapper around Material's own determinate/indeterminateCircularProgressIndicator),InlineAlert(akaBanner; 4 variants using new*Mutedcolor tokens — named to avoid colliding with both Material'sBannerandMaterialBanner),AppSnackbar(aSnackBar-building factory forScaffoldMessenger.showSnackBar, rather than reinventing Material's overlay/queueing system). - Overlay:
ActionSheet(labelled actions in a bottom sheet, followingBottomSheet's existing.show(context, ...)convention),Popover(anchored floating content viaCompositedTransformTarget/CompositedTransformFollower),AppTooltip(themed wrapper around Material's ownTooltip, avoiding a name collision). - Navigation:
SideMenu(akaDrawer; wraps Material's ownDrawerforScaffold(drawer: ...)integration rather than a fully custom overlay),FloatingTabBar(floating pill bar with icon and label per item — fills the gap left byTabBar(edge-to-edge + labeled) andBottomNavigationBar(floating + icon-only)),StepIndicator(akaWizardSteps),Breadcrumbs. - Layout:
AdaptiveStack(Row above a breakpoint, Column below, viaLayoutBuilder),FlowLayout(thin wrapper over Flutter's nativeWrap),StickyHeader(viaCustomScrollView+SliverPersistentHeader). - Transitions:
NavigationTransitions.scaleTransition,.fadeThroughTransition(sequenced fade-out-then-fade-in via non-overlappingIntervals, not a simultaneous cross-fade). - Design Tokens: new color tokens
primaryMuted,destructiveMuted,successMuted,warningMuted,surfaceSecondary,surfaceTertiary,textTertiary,overlay,link,focus,separator(light + dark);AppTypography.largeTitle; spacingxxs/xxxl; radiusxs/xl; new token files/categoriesAppElevation,AppOpacity,AppBorderWidth,AppIconSize,AppAnimationDuration/AppAnimationEasing.
Changed #
- README's Design Tokens section condensed from per-token prose paragraphs to compact markdown reference tables, for both existing and newly added token categories.
No carry-over patch fixes were needed in this repo for this release — the PagerView Layout-vs-Navigation categorization fix landed in a previous release and required no further changes here.
2.0.0 - 2026-08-01 #
Changed — BREAKING #
- Repository renamed and transferred:
flutter-ui-libraryhas moved fromgithub.com/aks5686/flutter-ui-librarytogithub.com/Syzygy-Hub/syzygy-ui-flutter.- pub.dev package renamed:
aks5686_flutter_ui_library→syzygy_ui_flutter(Dart package naming rules require underscores, not hyphens, so this doesn't match thesyzygy-ui-flutterrepo name exactly — that's expected). - Consumers must update their pubspec.yaml dependency to
syzygy_ui_flutter: ^2.0.0and their imports topackage:syzygy_ui_flutter/syzygy_ui_flutter.dart. No API-level renames were made to existing components.
- pub.dev package renamed:
Added #
- Inputs:
SearchInput(debounced, clear button),ToggleSwitch,CheckboxInput,RadioButtonInput,SliderInput,Dropdown,SegmentedControl,QuantityStepper. The*Inputnames (andSliderInput) avoid colliding with Flutter Material's ownCheckbox/Radio/Slider/SearchBar. - Display (new category):
Avatar,DividerLine,Chip,ListRow,SectionHeader,LazyImageView(uses Flutter's coreImage.network, which handles async loading/caching natively),StarRatingView,CountBadge.Chiphides Flutter Material's ownChip, the same convention already used by this library'sBadge. - Feedback:
ShimmerView,ProgressBar,PullToRefresh(wraps coreRefreshIndicator),ErrorStateView(retry pattern, mirrorsEmptyStateView). - Overlay (new category):
ModalDialog(wrapsshowDialog),BottomSheet(wrapsshowModalBottomSheet; hides Material's ownBottomSheet),CollapsibleView(viaAnimatedCrossFade). - Navigation:
TabBar,BottomNavigationBar(floating icon-only pill — a visual alternative toTabBar),SyzygyAppBar(implementsPreferredSizeWidget, so it drops straight intoScaffold(appBar: ...)).TabBarandBottomNavigationBarhide their Material namesakes, the same convention already used byBadge.SyzygyAppBaruses a distinct name instead of hiding, sinceAppBaris used far more pervasively by consumers thanBadge/TabBar— forcing ahide AppBaron every file importing both this package and Material would be too disruptive. - Layout (new category):
KeyboardAvoidingScrollView,PagerView(wrapsPageView— no naming collision, since Flutter's own widget is namedPageView, notPagerView; categorized under Layout rather than Navigation since it's swipeable paged content, not navigation chrome —onPageChangedjust reports the current page index for the caller to use as local state or feed into a navigator, as needed). - Transitions (new):
NavigationTransitions.slideTransition,.crossFadeTransition,.slideVerticalTransition,.modalPresentationTransition—PageRouteBuilderfactories, following Flutter's own custom-transition idiom.
Fixed #
- CI's
Analyzestep now fetches the shared Dart analysis config fromsyzygy-lint-config(pinned tov1.0.0) instead of using only the localanalysis_options.yaml. - Replaced deprecated
Color.withOpacitywithColor.withValuesinShimmerViewto keepflutter analyzeclean under the shared config (which fails the build on any finding, including info-level). - Bumped the declared minimum SDK in
pubspec.yamlfromflutter: '>=3.10.0'toflutter: '>=3.27.0'(sdk: '>=3.6.0') — the previous minimum was stale and didn't actually reflect theColor.withValues()API used inShimmerView, which was introduced in Flutter 3.27 / Dart 3.6.
Documentation #
- README's Components list previously named
IconButton/BackButton, which don't match the actual class names (AppIconButton/AppBackButton) — corrected. - README's Usage section previously used
MaterialTheme-style pseudocode that doesn't match this library's realAppTheme/AppColors.of(context)API — corrected to a working example.
1.0.1 - 2026-07-30 #
- TextInput: added maxLength parameter with character counter.
- Renamed package to aks5686_flutter_ui_library.
- Updated installation to use pub.dev.
- Improved release workflow with automatic pub.dev publishing.
1.0.0 #
- Initial release.
- Components: PrimaryButton, SecondaryButton, DestructiveButton, GhostButton, IconButton, TextInput, SecureInput, LoadingView, EmptyStateView, ToastView, CardView, Badge, BackButton.
- Design tokens: colors, typography, spacing, radius.
- Full Dark Mode support via ThemeExtension.
- 18 tests passing.