Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.3.0] - 2026-04-06
Changed
- Expo SDK 55 upgrade: All peer dependencies updated to Expo SDK 55 (
expo,expo-*,react-native 0.83,react 19.2). MultinaireSwitchinternal state: The switch now maintains internal state for optimistic updates, making it feel more responsive regardless of whether anonChangehandler is provided.MultinaireSwitchdisabled appearance: When noonChangeis provided, the switch now renders withopacity: 0.5to indicate it is non-interactive.MultinaireSwitchthumb color simplified: Removed platform-specificPlatform.selectfor the inactive thumb color — all platforms now usecolors.background(light) /colors.onBackground(dark).- Tab container background token:
MultinaireTopTabandMultinaireBottomTabcontainer backgrounds changed from'base'to'backgroundVariant'to better match the design intent. MultinaireStackHeadersafe area handling: Replaced manualuseSafeAreaInsetstop inset calculation in height/padding withsafeAreaEdges={['top']}on the container. Both the compact and expanded header layouts are affected.ThemeProviderstatus bar management simplified: On theme switch, the provider no longer callsExpoStatusBar.setStatusBarStyleor (on Android)ExpoStatusBar.setStatusBarBackgroundColor. The<StatusBar>component handles style automatically; the provider only sets system UI background color and (Android) navigation bar style.MultinaireInputweb height: Addedheight: '100%'to the web platform style block so the inner text input fills its container correctly.
Fixed
MultinairePaginationsafe area: The pagination bar now readsbottomfromuseSafeAreaInsetsand applies it as the bottom margin, preventing it from being obscured by the home indicator on iOS.MultinairePaginationReact key: Thekeyprop has been moved to the outerMultinaireContainerwrapper for each page item (was incorrectly placed on the inner container).
[0.2.7] - 2026-03-30
Added
TabButtonStyletype: New exported type for customizing tab button appearance withactiveBackgroundColor,inactiveBackgroundColor,activeColor, andinactiveColorcolor keys. Used byMultinaireBottomTabButton,MultinaireTopTabButton,MultinaireBottomTab,MultinaireTopTab,MultinaireTabBar, andMultinaireSideBar.styleprop onMultinaireBottomTabButtonandMultinaireTopTabButton: Newstyle?: TabButtonStyleprop for controlling active/inactive colors directly on tab buttons.buttonStyleprop onMultinaireBottomTabandMultinaireTopTab: NewbuttonStyle?: TabButtonStyleprop for consistent button color customization across all items in the tab bar.buttonStyleprop onMultinaireTabBar: NewbuttonStyle?: TabButtonStyleprop that propagates to the underlying top or bottom tab component.buttonStyleprop onMultinaireTabView: NewbuttonStyle?: TabButtonStyleprop forwarded to the internalMultinaireTopTaborMultinaireBottomTab.tabStyleprop onMultinaireTabView: NewtabStyle?: ContainerStylePropsprop for styling the tab bar container. The existingstyleprop (fromTabProps) now applies to the page content wrapper.useMapNativeThemehook: NewuseMapNativeTheme()hook that maps the Multinaire theme (colors, fonts, dark mode) to a React NavigationThemeobject. Use it as thethemeprop onNavigationContainer.
Changed
- Tab and sidebar default styles centralised:
MultinaireBottomTab,MultinaireTopTab, andMultinaireSideBarnow derive their default container and button styles from the internaluseTabStyleshook rather than hard-coded values. Visible defaults: active items use'background'/'primary'; inactive items useundefined/'neutral'. SideBarButtonfallback colors removed:MultinaireSideBarButtonno longer applies its own fallback colors whenstyleis not passed. Defaults are now provided by the parent component (MultinaireSideBar) viauseTabStyles. If you useMultinaireSideBarButtonstandalone without astyleprop, pass explicit colors.getContainerPropsno longer addsoverflow: hidden: On non-mobile, the returned props no longer includestyle: { overflow: 'hidden' }. If your layout relied on this clipping, addstyle={{ overflow: 'hidden' }}manually.PageViewmobile layout updated: On mobile, the pagination indicator now renders at the top, page content fills the middle, and navigation buttons sit in a padded container at the bottom. Desktop layout uses a single outer container with consistent padding and gap.
[0.2.6] - 2026-03-26
Added
Switchcolorprop: Newcolor?: ColorKeysprop onMultinaireSwitchto set the active track color. Defaults to'primary'.SideBarButtonStyletype: New exported type for customizing sidebar button appearance withactiveBackgroundColor,inactiveBackgroundColor,activeColor, andinactiveColorcolor keys.SideBarButtonstyleprop: Newstyle?: SideBarButtonStyleprop onMultinaireSideBarButton.SideBarbuttonStyleprop: NewbuttonStyle?: SideBarButtonStyleprop onMultinaireSideBarfor consistent active/inactive color customization across all sidebar items.- Layout tab
styleprop:TabProps,TopTabProps, andBottomTabPropsnow acceptstyle?: ContainerStylePropsfor direct container styling onMultinaireTabView,MultinaireTopTab, andMultinaireBottomTab. PageViewpaginationStyleprop: NewpaginationStyle?: ContainerStylePropsprop onMultinairePageViewto style the pagination sidebar/bar (replaces the removedstyleprop).
Changed
PageViewstyleprop removed: Thestyleprop onMultinairePageViewhas been replaced bypaginationStyle. Update any usage ofstyletopaginationStyle.PageViewunified rendering: Mobile and desktop now share a single render path. The pagination bar switches orientation (horizontalon desktop, stacked on mobile) instead of duplicating the layout tree.getContainerPropssignature change:useMultinaireResponsiveDesign().getContainerPropsnow acceptsoverrides: Partial<ContainerProps>instead ofwithMargin?: boolean. Pass an overrides object (or{}) instead. On mobile the function still returns{}regardless.SideBardefault colors updated: Active items useonBackground(wasprimary) and inactive items useneutralVariant(wasneutral) by default. Override withbuttonStyle.
Fixed
MultinaireSwitchevent handler: Fixed the change handler to use the correctonValueChangeevent (wasonChange), resolving cases where the callback was not reliably fired on Android.MultinaireBadgebackground rendering: Background color is now applied correctly; the badge background no longer bleeds outside the rounded border.
[0.2.5] - 2026-03-25
Added
useScreenOptionsoverride methods: NewstackWithOverrides,topTabWithOverrides,bottomTabWithOverrides, andsideBarWithOverridesmethods that merge custom navigation options with the design system defaults, providing a cleaner API than manually spreading options.
Changed
- Navigation and layout components no longer use
getContainerPropsinternally:MultinaireSideBar,MultinaireStackHeader,MultinaireTabBar,MultinaireTabHeader,PageView, andPaginationnow accept astyle?: ContainerStylePropsprop for direct styling control instead of relying ongetContainerPropsinternally.getContainerPropsis still available inuseMultinaireResponsiveDesignfor custom layouts. - Navigation component
styleprop type: All navigation components (MultinaireSideBar,MultinaireStackHeader,MultinaireTabBar,MultinaireTabHeader) useContainerStylePropsfor thestyleprop, aligning with the rest of the component library. - Removed
formatscript: The standalonenpm run formatscript has been removed.npm run lintalready runs Prettier through ESLint'sprettier/prettierrule, so a separate format command was redundant and caused conflicts.
Fixed
- Lint and format no longer conflict: The
formatscript was resolving tojest-snapshot-prettier(Prettier 2.8.8) instead of the project's Prettier 3.8.1, causing ternary indentation conflicts. Fixed by removing the separate format script and ensuring ESLint'sprettier/prettierrule explicitly uses the.prettierrc.jsconfig.
[0.2.4] - 2026-03-17
Added
- Badge component: New
MultinaireBadgecomponent with six color variants (primary,secondary,surface,success,warning,error), icon support, and optional press handling - Card
backgroundColorprop: Set a background color from the theme palette - Card
borderColorprop: Override the defaultbackgroundVariantborder color (ignored whenselectedistrue) - Container
borderprop: Set border width in pixels - Container
borderColorprop: Set border color from the theme palette - Text
alignmentprop: Set text alignment (replaces the deprecatedcenterprop) - Text
decorationprop: Set text decoration line (underline, line-through, etc.) - Button
secondary,success,warning,errortypes: New color variants forMultinaireButton,MultinaireActionButton, andMultinaireIconButton - MenuButton
valueprop: Display a value string between the title and trailing icon (useful for showing current selections) - Text
transformprop: Set text transform (uppercase,lowercase,capitalize). Equivalent to thetextTransformstyle property. - Card
badgeprop: Accepts aMultinaireBadgeelement to overlay on the card. - Custom icon set expanded: Added
CustomApple,CustomFacebook,CustomGithub,CustomGoogle,CustomInstagram,CustomLinkedIn,CustomPlan, andCustomXtoMultinaireIcons. The previous standalone icon files (Github,Instagram,LinkedIn,X) have been replaced by the newCustom-prefixed variants.
Changed
- Text
centerprop deprecated: Usealignment="center"instead. The prop still works but will be removed in a future major version. - Button
destructivetype deprecated: Usetype="error"instead. The type still works but will be removed in a future major version. - MenuButton
typeprop deprecated: Thetypeprop ('default' | 'warning' | 'error') onMultinaireMenuButtonis deprecated and will be removed in a future major version.
Fixed
- Card web ScrollView scroll freeze: Cards without an
onPresshandler now render asAnimated.Viewinstead ofAnimatedTouchableOpacity, preventing pointer-event capture that was blocking scroll on web.
[0.2.3] - 2026-03-08
Added
- New
iconTypeprop inMultinaireSocialLoginButton - New
onChangeSearchprops inMultinaireListPicker
Fixed
- Fixed issue where clear icon is not tappable
[0.2.2] - 2026-03-07
Added
- Switch component: New
MultinaireSwitchtoggle control for boolean selections with theme-aware styling - Icon system overhaul: Replaced built-in icon set with Iconsax (via
iconsax-react-nativejs), giving access to 993 icons across 6 style types
[0.2.1] - 2026-02-08
Added
- Avatar component: New Avatar component for displaying user profile images with fallback support
- useMultinaireModal export: Exported
useMultinaireModalhook for programmatic modal control
Changed
- StatusBar style based on color: StatusBar style now automatically adjusts based on the background color luminance
- Common components reorganization: Improved organization and exports for common components
Fixed
- Linting and formatting improvements across the codebase
[0.2.0] - 2026-02-04
Added
- Theme JSON Schema: Added
theme.schema.jsonfor IDE autocompletion and validation of theme configurations - ThemeValidationError: New error class with detailed error information for theme parsing failures
- Safe theme parsing: Added
Theme.safeToScheme()function that returns a result object instead of throwing - Responsive design types: Exported
BreakpointName,Orientation, andResponsiveDesigntypes - ESLint improvements: Enhanced linting rules for import ordering, consistent type imports, and unused variables
- Documentation site: Added Docusaurus-based documentation with component guides, theme builder, and API reference
- hideHeader option for Modal: New
hideHeaderprop to hide the modal header when needed - allowClear option for Input: New
allowClearprop to show a clear button for input fields - banner type in Dialog: Added
bannertype to Dialog component for banner-style dialogs - loading state for Icon: Added loading state support for Icon component
- boxShadow for FloatingActionButton: Added box shadow styling for FAB component
- shadow support in theme: Added shadow configuration in theme variables
Changed
- BREAKING:
useMultinaireResponsiveDesignhook redesigned:- Renamed
DEVICE_WIDTHtowidth - Renamed
DEVICE_HEIGHTtoheight - Renamed
isLandscapetoorientation(returns'portrait'|'landscape') - Renamed
containerWrapper()togetContainerProps() - Renamed
MAX_WIDTHtomaxWidths.content - Renamed
MODAL_MAX_WIDTHtomaxWidths.modal - Removed
BUTTOM_MAX_WITH(typo), nowmaxWidths.button - Added
breakpointproperty returning'mobile'|'tablet'|'desktop' - Added
useMemofor performance optimization
- Renamed
- BREAKING:
getMargingPropsrenamed togetMarginProps(typo fix) - Peer dependencies: Updated from
"*"to proper semver ranges (e.g.,">=18.0.0") - Package exports: Added
module,exports, andsideEffects: falsefor better bundler support - Theme schema: Added detailed descriptions for all color, text, and variable properties
- System bars and header handling: Improved status bar and header management across platforms
- Padding for TopTab and BottomTab: Adjusted padding for better visual consistency
- Modal behaviour: Enhanced modal open/close behavior and animations
Removed
- Oxygen font: Removed Oxygen font family (DancingScript and OpenSans remain)
Fixed
- Fixed typo in helper function name:
getMargingPropstogetMarginProps - Fixed typo in responsive design hook:
BUTTOM_MAX_WITHtomaxWidths.button - Fixed inconsistent barrel export file extensions (
.tsxto.tsfor non-JSX files) - Fixed label rendering issues in form components
- Fixed various Modal component issues
- Fixed DateTimePicker component issues
[0.1.17] - 2025-01-15
Changed
- Removed ts-node dependency
- Updated dependencies and theme configuration
[0.1.16] - 2025-01-10
Changed
- Minor changes and improvements
[0.1.15] - 2024-12-20
Changed
- Updated to Expo SDK 54
- Updated all dependencies to latest versions
[0.1.14] - 2024-12-15
Fixed
- NPM package publishing fix
[0.1.13] - 2024-12-10
Fixed
- Minor fixes and improvements
[0.1.12] - 2024-12-05
Changed
- Various improvements to components
[0.1.11] - 2024-11-28
Changed
- Web platform updates and improvements
[0.1.10] - 2024-11-20
Added
- Initial public release
- 40+ UI components organized in 6 categories:
- Buttons: Button, IconButton, ActionButton, MenuButton, SocialLoginButton, TopTabButton, BottomTabButton, SideBarButton, FloatingActionButton
- Common: Text, Icon, Card, Container, Image, Avatar, Gap, Divider, Loading, Message, Positioned
- Inputs: Input, Checkbox, PickerButton, MediaPickerButton
- Layouts: ScrollView, ListView, KeyboardAvoidingView, Page, PageView, TopTab, TabView, BottomTab, Pagination
- Modals: Modal, ModalHeader, ListPicker, ListPickerItem, DateTimePicker, Dialog, Menu
- Navigation: StackHeader, TabBar, TabHeader, SideBar
- Theme system with light/dark mode support
- Design tokens (colors, texts, variables)
- 53 SVG icons
- 2 font families (DancingScript, OpenSans)
- i18n support with react-i18next
- Responsive design utilities
- Example app demonstrating all components