Neumorphism using Jetpack Compose
Neumorphism design implementation in jetpack compose.

What is Neumorphism
- Neumorphism is a ui design concept which mainly uses shadows to create awesome looking UI.
 
- Basic design concept from 
Neumorphism are Extruded and Pressed/Flat style. 
- Neumorphism design concept allows us to represent a objects like how it appear on real world. (like a extruded volume control nob on a media player app)
 
About this library
- This library enables android application to create 
Neumorphic design using Jetpack Compose 
Sample app preview
| Dark | 
Light | 
  | 
  | 
Install
You can install compose-neumorphism by adding this to your build.gradle file
dependencies {
  implementation 'io.github.sridhar-sp:neumorphic:0.0.6'
}
Features
- Draw shadows on widget to bring out the neumorphic design, following neumorphic components are supported.
- Extruded or Elevated view
 
- Pressed View
 
 
- All the above neumorphic component support two corner shape
 
- Simply add a single 
neu modifier on any compose component to create a neumorphic design 
Usage
Refer the sample app provided for more information.
Extruded or Elevated design
Extruded or Elevated button
| Dark | 
Light | 
  | 
  | 
    Button(
        modifier = Modifier
            .defaultMinSize(minHeight = 80.dp)
            .fillMaxWidth()
            .padding(defaultWidgetPadding)
            .neu(
                lightShadowColor = AppColors.lightShadow(),
                darkShadowColor = AppColors.darkShadow(),
                shadowElevation = defaultElevation,
                lightSource = LightSource.LEFT_TOP,
                shape = Flat(defaultCornerShape),
            ),
        colors = ButtonDefaults.buttonColors(
            backgroundColor = MaterialTheme.colors.surface
        )
    ) {
        Text(
            text = "Button", style = AppTextStyle.button()
        )
    }
Elevated card view with rounded rectangle shape
| Dark | 
Light | 
  | 
  | 
    Card(
        modifier = Modifier
            .size(128.dp)
            .neu(
                lightShadowColor = AppColors.lightShadow(),
                darkShadowColor = AppColors.darkShadow(),
                shadowElevation = defaultElevation,
                lightSource = LightSource.LEFT_TOP,
                shape = Flat(RoundedCorner(24.dp)),
            ),
        elevation = 0.dp,
        shape = RoundedCornerShape(24.dp),
    ){
    	// Add child components here.
    }
    
Pressed design
Pressed button
| Dark | 
Light | 
  | 
  | 
    Button(
        modifier = Modifier
            .fillMaxWidth()
            .padding(defaultWidgetPadding)
            .neu(
                lightShadowColor = AppColors.lightShadow(),
                darkShadowColor = AppColors.darkShadow(),
                shadowElevation = defaultElevation,
                lightSource = LightSource.LEFT_TOP,
                shape = Pressed(defaultCornerShape),
            ),
        colors = ButtonDefaults.buttonColors(
            backgroundColor = MaterialTheme.colors.surface,
        ),
        shape = RoundedCornerShape(12.dp),
        elevation = null
    ) {
        Text(text = "Button", style = AppTextStyle.button())
    }
Pressed card view with rounded rectangle shape
| Dark | 
Light | 
  | 
  | 
    Card(
        modifier = Modifier
            .size(128.dp)
            .neu(
                lightShadowColor = AppColors.lightShadow(),
                darkShadowColor = AppColors.darkShadow(),
                shadowElevation = defaultElevation,
                lightSource = LightSource.LEFT_TOP,
                shape = Pressed(RoundedCorner(24.dp)),
            ),
        elevation = 0.dp,
        shape = RoundedCornerShape(24.dp),
    ){
    	// Add child components here.
    }
Light source
| LEFT_TOP | 
RIGHT_TOP | 
LEFT_BOTTOM | 
RIGHT_BOTTOM | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
Shapes
Sample implementation
  
Reference
- https://github.com/fornewid/neumorphism
 
- https://github.com/CRED-CLUB/synth-android