Skip to content

Compose Multiplatform UI components for Android, iOS, Desktop, and Web. Unleash limitless creativity.

License

Notifications You must be signed in to change notification settings

shubhamsinghshubham777/Adapt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

41 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Adapt

badge badge badge badge

Adapt is a Compose-based UI component library that provides you components from various commonly used design systems on different platforms like Material 3 (for Android & Web), Cupertino (for iOS & macOS), and WinUI 3 (for Windows).

Adapt provides a Flutter-like experience where you can mix-and-match UI components between platforms to achieve your desired UI/UX output(s) (e.g. using Cupertino components on Android devices and Material components on Apple devices).

Types of components

Adapt offers the following 2 types of composables/components:

  1. Platform-specific - These look the same on all platforms (e.g. WindowsButton, CupertinoSpinner)
  2. Platform-agnostic - These look native-like on every platform (e.g. AdaptButton, AdaptCircularIndicator).

Platform-agnostic components

Along with Platform-specific components that allow you to write common UI for all platforms, Adapt also provides you with Platform-agnostic components that display native-like components on the current platform you're running.

For example, the following common code:

@Composable
internal fun App() {
    AdaptButton(
        modifier = AdaptModifier(common = Modifier.fillMaxSize().wrapContentSize()),
        onClick = {},
        text = { AdaptText("Click me") }
    )
}

would produce the following results on different platforms πŸ‘‡

Android (Material) iOS (Cupertino) Windows (WinUI3)

Hence, you can mix and match Platform-specific and agnostic components according to your desired output(s) 🌟

Get Started πŸš€

Sonatype Nexus (Snapshots)

Add the following to your shared module's build.gradle.kts:

implementation("io.github.shubhamsinghshubham777:adapt:0.0.1-SNAPSHOT") // Get the latest version from GitHub Releases/Tags

For SNAPSHOT versions

Add the following to your project level settings.gradle.kts:

dependencyResolutionManagement {
    repositories {
        ...
        maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") // Add this
    }
}

Replace Material based components with Adapt based components:

Old Code

@Composable
fun MyApp() {
    MaterialTheme {
        Button(onClick = {}, content = { Text("Click me") })
    }
}

New Code

@Composable
fun MyApp() {
    AdaptTheme {
        AdaptButton(onClick = {}, text = { Text("Click me") })
        // You can also use platform-specific components like IOSButton, MacOSButton, or WindowsButton
    }
}

Available Components βœ…

Name Image Platform-agnostic variant
CupertinoSlider CupertinoSlider AdaptSlider
CupertinoSpinner CupertinoSpinner AdaptCircularIndicator
IOSButton IOSButton AdaptButton
IOSToggle IOSToggle AdaptSwitch
MacOSButton MacOSButton AdaptButton
MacOSSwitch MacOSSwitch AdaptSwitch
WindowsButton WindowsButton AdaptButton
WindowsProgressRing WindowsProgressRing AdaptCircularIndicator
WindowsSlider WindowsSlider AdaptSlider
WindowsToggleSwitch WindowsToggleSwitch AdaptSwitch

Planned Components 🚧

The long term goal of this library is to recreate all components from major design systems like Material, Cupertino, WinUI, etc. to allow developers to seamlessly create multiplatform apps that look, feel, and behave native-like.

Expected upcoming components are: Checkbox, TextField, and Date/Time Pickers. Expected platform support: WASM (JS)

Run Demo/Sample

Demo.mp4

This repository also contains a sample Compose Multiplatform app that showcases the components provided by this library. You can check out this repository and simply run the app, but before you do that, please make sure to:

  • check your system with KDoctor
  • install JDK 17 on your machine
  • add local.properties file to the project root and set a path to Android SDK there
  • run ./gradlew podInstall in the project root

Android

To run the application on android device/emulator:

  • open project in Android Studio and run imported android run configuration

To build the application bundle:

  • run ./gradlew :sample:composeApp:assembleDebug
  • find .apk file in sample/composeApp/build/outputs/apk/debug/composeApp-debug.apk

Desktop

Run the desktop application: ./gradlew :sample:composeApp:run

iOS

To run the application on iPhone device/simulator:

Browser

Run the browser application: ./gradlew :sample:composeApp:jsBrowserDevelopmentRun

About

Compose Multiplatform UI components for Android, iOS, Desktop, and Web. Unleash limitless creativity.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages