Skip to content

Releases: material-components/material-components-ios

v60.1.0

16 Aug 21:47
Compare
Choose a tag to compare

60.1.0

Component changes

Tabs

Changes

MaskedTransition

Changes

schemes/Color

Changes

FeatureHighlight

Changes

AppBar

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Snackbar

Changes

NavigationBar

Changes

ActivityIndicator

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

AnimationTiming

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

ShadowElevations

Changes

Palettes

Changes


v60.0.0

13 Aug 20:29
Compare
Choose a tag to compare

This major release introduces a breaking change for Swift libraries using FlexibleHeader. This
change also introduces a migration guide for color schemes along, changes to the Snackbar's
singleton pattern, and updated button theming in Dialogs.

Breaking changes

FlexibleHeader

This breaking change only affects Swift code and requires the following changes.

// Before
.preferredStatusBarStyle()

// After
.preferredStatusBarStyle

New features

FlexibleHeader has a new inferPreferredStatusBarStyle API that allows you to set an explicity
preferredStatusBarStyle on the MDCFlexibleHeaderViewController.

An example of setting an explicit preferredStatusBarStyle:

flexibleHeaderViewController.inferPreferredStatusBarStyle = false
flexibleHeaderViewController.preferredStatusBarStyle = .lightContent

Upcoming deprecations

MDCColorScheme and MDCBasicColorScheme will both be deprecated on the following timeline:

  • October 10, 2018: Both APIs and any corresponding themer API will be deprecated.
  • November 10, 2018: Both APIs and any corresponding themer API will be deleted.

Learn more by reading the migration guide.

API changes

ActivityIndicator+ColorThemer

MDCActivityIndicatorColorThemer(ToBeDeprecated)

new category: MDCActivityIndicatorColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toActivityIndicator: in MDCActivityIndicatorColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCActivityIndicatorColorThemer
To: c:objc(cy)MDCActivityIndicatorColorThemer@ToBeDeprecated

AppBar+ColorThemer

MDCAppBarColorThemer(ToBeDeprecated)

new category: MDCAppBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toAppBar: in MDCAppBarColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCAppBarColorThemer
To: c:objc(cy)MDCAppBarColorThemer@ToBeDeprecated

BottomAppBar+ColorThemer

MDCBottomAppBarColorThemer(ToBeDeprecated)

new category: MDCBottomAppBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toBottomAppBarView: in MDCBottomAppBarColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCBottomAppBarColorThemer
To: c:objc(cy)MDCBottomAppBarColorThemer@ToBeDeprecated

BottomNavigation+ColorThemer

MDCBottomNavigationBarColorThemer(ToBeDeprecated)

new category: MDCBottomNavigationBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toBottomNavigationBar: in MDCBottomNavigationBarColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCBottomNavigationBarColorThemer
To: c:objc(cy)MDCBottomNavigationBarColorThemer@ToBeDeprecated

ButtonBar+ColorThemer

MDCButtonBarColorThemer(ToBeDeprecated)

new category: MDCButtonBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toButtonBar: in MDCButtonBarColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCButtonBarColorThemer
To: c:objc(cy)MDCButtonBarColorThemer@ToBeDeprecated

Buttons+ColorThemer

MDCButtonColorThemer(ToBeDeprecated)

new category: MDCButtonColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toRaisedButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCButtonColorThemer
To: c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toFlatButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCButtonColorThemer
To: c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

modified class method: +applyColorScheme:toButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCButtonColorThemer
To: c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCButtonColorThemer
To: c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toFloatingButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCButtonColorThemer
To: c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

Chips+ColorThemer

MDCChipViewColorThemer(ToBeDeprecated)

new category: MDCChipViewColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toStrokedChipView: in MDCChipViewColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCChipViewColorThemer
To: c:objc(cy)MDCChipViewColorThemer@ToBeDeprecated

Dialogs+ColorThemer

MDCAlertColorThemer(ToBeDeprecated)

new category: MDCAlertColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme: in MDCAlertColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCAlertColorThemer
To: c:objc(cy)MDCAlertColorThemer@ToBeDeprecated

FeatureHighlight+ColorThemer

MDCFeatureHighlightColorThemer(ToBeDeprecated)

new category: MDCFeatureHighlightColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toFeatureHighlightView: in MDCFeatureHighlightColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCFeatureHighlightColorThemer
To: c:objc(cy)MDCFeatureHighlightColorThemer@ToBeDeprecated

FlexibleHeader+ColorThemer

MDCFlexibleHeaderColorThemer(ToBeDeprecated)

new category: MDCFlexibleHeaderColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toFlexibleHeaderView: in MDCFlexibleHeaderColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCFlexibleHeaderColorThemer
To: c:objc(cy)MDCFlexibleHeaderColorThemer@ToBeDeprecated

modified class method: +applyColorScheme:toMDCFlexibleHeaderController: in MDCFlexibleHeaderColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCFlexibleHeaderColorThemer
To: c:objc(cy)MDCFlexibleHeaderColorThemer@ToBeDeprecated

FlexibleHeader

MDCFlexibleHeaderViewController

new property: preferredStatusBarStyle in MDCFlexibleHeaderViewController

new property: inferPreferredStatusBarStyle in MDCFlexibleHeaderViewController

removed method: -preferredStatusBarStyle in MDCFlexibleHeaderViewController

HeaderStackView+ColorThemer

MDCHeaderStackViewColorThemer(ToBeDeprecated)

new category: MDCHeaderStackViewColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toHeaderStackView: in MDCHeaderStackViewColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCHeaderStackViewColorThemer
To: c:objc(cy)MDCHeaderStackViewColorThemer@ToBeDeprecated

Ink+ColorThemer

MDCInkColorThemer(ToBeDeprecated)

new category: MDCInkColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toInkView: in MDCInkColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCInkColorThemer
To: c:objc(cy)MDCInkColorThemer@ToBeDeprecated

NavigationBar+ColorThemer

MDCNavigationBarColorThemer(ToBeDeprecated)

new category: MDCNavigationBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toNavigationBar: in MDCNavigationBarColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCNavigationBarColorThemer
To: c:objc(cy)MDCNavigationBarColorThemer@ToBeDeprecated

PageControl+ColorThemer

MDCPageControlColorThemer(ToBeDeprecated)

new category: MDCPageControlColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toPageControl: in MDCPageControlColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCPageControlColorThemer
To: c:objc(cy)MDCPageControlColorThemer@ToBeDeprecated

ProgressView+ColorThemer

MDCProgressViewColorThemer(ToBeDeprecated)

new category: MDCProgressViewColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toProgressView: in MDCProgressViewColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCProgressViewColorThemer
To: c:objc(cy)MDCProgressViewColorThemer@ToBeDeprecated

Slider+ColorThemer

MDCSliderColorThemer(ToBeDeprecated)

new category: MDCSliderColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toSlider: in MDCSliderColorThemer(ToBeDeprecated)

Type of change: parent.usr
From: c:objc(cs)MDCSliderColorThemer
To: c:objc(cy)MDCSliderColorThemer@ToBeDeprecated

modified class method: +defaultSliderLightColorScheme in MDCSliderColorThemer(ToBeDeprecated)
...

Read more

v59.2.2

09 Aug 18:40
Compare
Choose a tag to compare

This patch release undoes some additional App Bar initialization changes that were introduced in
v59.2.0.

Component changes

AppBar

Changes

v59.2.1

08 Aug 21:43
Compare
Choose a tag to compare

This patch release reverts an unintentional change in App Bar shadow layer initialization behavior
that was introduced in v59.2.0.

Component changes

AppBar

Changes

v59.2.0

08 Aug 18:31
Compare
Choose a tag to compare

This minor release introduces several new improvements to the AppBar component and bug fixes and
accessibility improvements to various components.

New features

AppBar's documentation has been updated to reflect all of the most modern APIs and behavioral flags.

AppBar also now exposes a new MDCAppBarViewController API which is meant to be a more familiar
replacement API for MDCAppBar.

A typical migration diff will look something like so (in Swift):

// Step 1
-  let appBar = MDCAppBar()
+  let appBarViewController = MDCAppBarViewController()

// Step 2
-    self.addChildViewController(appBar.headerViewController)
+    self.addChildViewController(appBarViewController)

// Step 3
-    appBar.addSubviewsToParent()
+    view.addSubview(appBarViewController.view)
+    appBarViewController.didMove(toParentViewController: self)

API changes

AppBar+ColorThemer

MDCAppBarColorThemer

new class method: +applySurfaceVariantWithColorScheme:toAppBarViewController: in MDCAppBarColorThemer

new class method: +applyColorScheme:toAppBarViewController: in MDCAppBarColorThemer

AppBar

MDCAppBar

new property: appBarViewController in MDCAppBar

MDCAppBarNavigationControllerDelegate

new method: -appBarNavigationController:willAddAppBarViewController:asChildOfViewController: in MDCAppBarNavigationControllerDelegate

MDCAppBarNavigationController

new method: -appBarViewControllerForViewController: in MDCAppBarNavigationController

MDCAppBarContainerViewController

new property: appBarViewController in MDCAppBarContainerViewController

MDCAppBarViewController

new class: MDCAppBarViewController

AppBar+TypographyThemer

MDCAppBarTypographyThemer

new class method: +applyTypographyScheme:toAppBarViewController: in MDCAppBarTypographyThemer

TextFields

MDCTextInputController

new method: -setHelperText:helperAccessibilityLabel: in MDCTextInputController

Component changes

Tabs

Changes

AppBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

BottomAppBar

Changes

NavigationBar

Changes

BottomSheet

Changes

Dialogs

Changes

BottomNavigation

Changes

FlexibleHeader

Changes

ShadowElevations

Changes

v59.1.1

03 Aug 15:55
Compare
Choose a tag to compare

This patch release fixes a bug with Flexible Header when VoiceOver is enabled.

API changes

Component changes

FlexibleHeader

Changes

v59.1.0

01 Aug 20:29
Compare
Choose a tag to compare

AppBar and FlexibleHeader shipped several new features in this release. This release also includes additional accessibility improvements and examples, and also fixes some bugs.

New features

The new MDCAppBarNavigationController class is a simpler integration strategy for adding an App Bar to an application. Example:

let navigationController = MDCAppBarNavigationController()

// Will automatically inject an AppBar into the view controller if one is not already present.
navigationController.pushViewController(viewController, animated: true)

This new API enables all of the new AppBar and FlexibleHeader behaviors, meaning view controllers will better handle being presented in non-full screen settings. If you have already integrated with App Bar, migrating to MDCAppBarNavigationController will allow you to delete a substantial amount of boilerplate from your application. Most notably, MDCAppBarNavigationController enables the new observesTrackingScrollViewScrollEvents feature on FlexibleHeader, meaning you do not need to forward scroll view events to the navigation controller.

At a minimum you will need to implement the MDCAppBarNavigationController's delegate to theme the injected App Bars. Implement the delegate like so:

navigationController.delegate = self

// MARK: MDCAppBarNavigationControllerInjectorDelegate

func appBarNavigationController(_ navigationController: MDCAppBarNavigationController,
                                willAdd appBar: MDCAppBar,
                                asChildOf viewController: UIViewController) {
  let colorScheme: MDCSemanticColorScheme = <# Fetch your color scheme #>
  let typographyScheme: MDCTypographyScheme = <# Fetch your typography scheme #>
  MDCAppBarColorThemer.applySemanticColorScheme(colorScheme, to: appBar)
  MDCAppBarTypographyThemer.applyTypographyScheme(typographyScheme, to: appBar)
                                                  
  // Additional configuration of appBar if needed.
}

AppBar's new inferTopSafeAreaInsetFromViewController property enables App Bars to be presented in non-full-screen contexts, such as iPad popovers or extensions. Consider enabling this property by default in all use cases.

FlexibleHeader's new observesTrackingScrollViewScrollEvents property allows the FlexibleHeader to automatically observe content offset changes to the tracking scroll view, removing the need for forwarding the UIScrollViewDelegate events to the FlexibleHeader. Note: you can only use this new feature if you have not enabled the shift behavior.

API changes

AppBar

MDCAppBarNavigationController

new class: MDCAppBarNavigationController

new property: delegate in MDCAppBarNavigationController

new method: -appBarForViewController: in MDCAppBarNavigationController

MDCAppBarNavigationControllerDelegate

new protocol: MDCAppBarNavigationControllerDelegate

new method: -appBarNavigationController:willAddAppBar:asChildOfViewController: in MDCAppBarNavigationControllerDelegate

MDCAppBar

new property: inferTopSafeAreaInsetFromViewController in MDCAppBar

FlexibleHeader

MDCFlexibleHeaderView

new property: observesTrackingScrollViewScrollEvents in MDCFlexibleHeaderView

Component changes

AppBar

Changes

Ink

Changes

Snackbar

Changes

Cards

Changes

LibraryInfo

Changes

Dialogs

Changes

BottomNavigation

Changes

FlexibleHeader

Changes

v59.0.0

25 Jul 18:49
Compare
Choose a tag to compare

This major release removed the remaining encoding/decoding behaviors from components (tracking project) and fixed a variety of bugs in FlexibleHeader with relation to safe area insets.

Breaking changes

AppBar, TextFields, BottomNavigation, and Ink all removed support for encoding/decoding their custom properties.

New features

FlexibleHeader has a new behavior, inferTopSafeAreaInsetFromViewController, which allows the flexible header to determine its safe area insets from its view controller context, rather than always assuming that the header will consume the entire screen. This new behavior is most useful in extensions and on the iPad when presenting modal dialogs or popovers. To enable the new behavior, you simply set inferTopSafeAreaInsetFromViewController on MDCFlexibleHeaderViewController to YES.

API changes

FlexibleHeader

MDCFlexibleHeaderView

new property: topSafeAreaGuide in MDCFlexibleHeaderView

MDCFlexibleHeaderViewController

new property: inferTopSafeAreaInsetFromViewController in MDCFlexibleHeaderViewController

TextFields

MDCTextInputControllerLegacyFullWidth

modified class: MDCTextInputControllerLegacyFullWidth

Type of change: Declaration
From: @interface MDCTextInputControllerLegacyFullWidth : MDCTextInputControllerFullWidth <NSSecureCoding>
To: @interface MDCTextInputControllerLegacyFullWidth : MDCTextInputControllerFullWidth

MDCTextInputUnderlineView

modified class: MDCTextInputUnderlineView

Type of change: Declaration
From: @interface MDCTextInputUnderlineView : UIView <NSCopying, NSSecureCoding>
To: @interface MDCTextInputUnderlineView : UIView <NSCopying>

MDCTextInputController

modified protocol: MDCTextInputController

Type of change: Declaration
From: @protocol MDCTextInputController <NSObject, NSSecureCoding, NSCopying, MDCTextInputPositioningDelegate>
To: @protocol MDCTextInputController <NSObject, NSCopying, MDCTextInputPositioningDelegate>

Component changes

AppBar

Breaking changes

Ink

Breaking changes

TextFields

Breaking changes

BottomAppBar

Changes

BottomSheet

Changes

BottomNavigation

Breaking changes

FlexibleHeader

Changes

v58.0.0

18 Jul 18:42
Compare
Choose a tag to compare

This major release focused on accessibility and removing property coding/encoding from a variety of
components. It also fixed a bug related to AppBar/FlexibleHeader top layout guide behavior on
pre-iOS 11 devices.

Breaking changes

Property encoding/decoding has been removed from a majority of the components, along with any
related explicit conformances to NSCoding and NSSecureCoding. See the
tracking project to
learn more about the status of this work.

MDCNavigationBar's deprecated useFlexibleTopBottomInsets has been removed.

New features

A variety of accessibility documentation has been added to many of the components.

BottomNavigation has new parameters for the top padding of the nav bar items and the vertical
spacing between the icon and title.

API changes

BottomNavigation

MDCBottomNavigationBar

new property: itemsContentInsets in MDCBottomNavigationBar

new property: itemsContentHorizontalMargin in MDCBottomNavigationBar

new property: itemsContentVerticalMargin in MDCBottomNavigationBar

NavigationBar

MDCNavigationBar

removed property: useFlexibleTopBottomInsets in MDCNavigationBar

Component changes

AppBar

Breaking changes

Changes

Ink

Changes

Buttons

Breaking changes

Changes

ButtonBar

Breaking changes

TextFields

Changes

Chips

Breaking changes

Changes

Cards

Breaking changes

Changes

Slider

Changes

NavigationBar

Breaking changes

Changes

ShadowLayer

Breaking changes

ActivityIndicator

Changes

BottomSheet

Changes

Dialogs

Changes

BottomNavigation

Changes

AnimationTiming

Changes

HeaderStackView

Breaking changes

FlexibleHeader

Breaking changes

Changes

ProgressView

Changes

v57.0.0

12 Jul 17:04
Compare
Choose a tag to compare

In this release we have added the List component, made accessibility improvements to Bottom Sheet, added Shapes support for Chips and Bottom Sheet, made Catalog visual improvements, and other bug fixes.

Breaking changes

TextFields

We have removed property backgroundColor from MDCTextInputControllerBase and properties backgroundColor and backgroundColorDefault from MDCTextInputController. The reason for removal was due to these properties not being used by the controller in any meaningful way, and therefore this should not produce any changes.

New features

BottomSheet

VoiceOver and switch device users currently have to use the accessibility escape gesture to dismiss a Bottom Sheet. Optionally, the BottomSheet can use
the dimmed "scrim" area (which can be tappable) to dismiss the bottom sheet using accessibility technologies.

As an example of how this could be used by clients, here's how our AppDelegate would change to support a VoiceOver button for dismissal:

let menuViewController = MDCMenuViewController(style: .plain)
let bottomSheet = MDCBottomSheetController(contentViewController: menuViewController)
bottomSheet.dismissOnBackgroundTap = true
bottomSheet.isScrimAccessibilityElement = true
bottomSheet.scrimAccessibilityLabel = "Close"
self.present(bottomSheet, animated: true, completion: nil)

Cards

You can now set the car to be interactable or not. Our specification for cards explicitly define a card as being an interactable component.
Therefore, the interactable property should be set to NO only if there are other interactable items within the card's content, such as buttons or other tappable controls.
To set the interactability to no in your cards:

let card = MDCCard()
card.isInteractable = false

let cardCell = MDCCardCollectionCell()
cardCell.isInteractable = false

List

We now have a new component, List! See more information about the component here: https://github.com/material-components/material-components-ios/tree/develop/components/List

API changes

BottomSheet

MDCBottomSheetTransitionController(ScrimAccessibility)

new category: MDCBottomSheetTransitionController(ScrimAccessibility)

new property: isScrimAccessibilityElement in MDCBottomSheetTransitionController(ScrimAccessibility)

new property: scrimAccessibilityLabel in MDCBottomSheetTransitionController(ScrimAccessibility)

new property: scrimAccessibilityHint in MDCBottomSheetTransitionController(ScrimAccessibility)

new property: scrimAccessibilityTraits in MDCBottomSheetTransitionController(ScrimAccessibility)

MDCBottomSheetController

new property: scrimAccessibilityHint in MDCBottomSheetController

new property: isScrimAccessibilityElement in MDCBottomSheetController

new property: state in MDCBottomSheetController

new method: -shapeGeneratorForState: in MDCBottomSheetController

new property: scrimAccessibilityLabel in MDCBottomSheetController

new method: -setShapeGenerator:forState: in MDCBottomSheetController

new property: scrimAccessibilityTraits in MDCBottomSheetController

MDCSheetState

new enum: MDCSheetState with values MDCSheetStateExtended, MDCSheetStatePreferred, and MDCSheetStateClosed

MDCBottomSheetPresentationControllerDelegate

new method: -bottomSheetWillChangeState:sheetState: in MDCBottomSheetPresentationControllerDelegate

MDCBottomSheetPresentationController

new property: scrimAccessibilityLabel in MDCBottomSheetPresentationController

new property: isScrimAccessibilityElement in MDCBottomSheetPresentationController

new property: scrimAccessibilityTraits in MDCBottomSheetPresentationController

new property: scrimAccessibilityHint in MDCBottomSheetPresentationController

Cards

MDCCardCollectionCell

new property: interactable in MDCCardCollectionCell

MDCCard

new property: interactable in MDCCard

List

New component.

TextFields

MDCTextInputControllerFullWidth

new property: backgroundColor in MDCTextInputControllerFullWidth

new property: backgroundColorDefault in MDCTextInputControllerFullWidth

MDCTextInputControllerBase

removed property: backgroundColor in MDCTextInputControllerBase

MDCTextInputController

new property: textInputClearButtonTintColorDefault in MDCTextInputController

new property: textInputClearButtonTintColor in MDCTextInputController

removed property: backgroundColorDefault in MDCTextInputController

removed property: backgroundColor in MDCTextInputController

Typography

UIFont(MaterialSimpleEquality)

new method: -mdc_isSimplyEqual: in UIFont(MaterialSimpleEquality)

new category: UIFont(MaterialSimpleEquality)

Component changes

Tabs

Changes

FeatureHighlight

Changes

Buttons

Changes

TextFields

Changes

Chips

Changes

Cards

Changes

List

Changes

BottomSheet

Changes

Typography

Changes

BottomNavigation

Changes

FlexibleHeader

Changes