import com.vanniktech.maven.publish.SonatypeHost
import static de.fayard.refreshVersions.core.Versions.versionFor

plugins {
  id 'com.android.library'
  id 'org.jetbrains.kotlin.android'
  id 'com.vanniktech.maven.publish'
  id 'androidx.baselineprofile'
  id 'org.jetbrains.kotlinx.binary-compatibility-validator'
}

android {
  namespace 'com.airbnb.lottie.compose'
  compileSdk 34
  defaultConfig {
    minSdk 21
    targetSdk 34
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  }
  buildTypes {
    release {
      minifyEnabled false
    }
  }
  kotlinOptions {
    freeCompilerArgs += [
        "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
    ]
  }
  buildFeatures {
    compose true
  }
  composeOptions {
    kotlinCompilerExtensionVersion = versionFor(project, AndroidX.compose.compiler)
  }
}

mavenPublishing {
  publishToMavenCentral(SonatypeHost.DEFAULT)
  signAllPublications()
}

baselineProfile {
  filter {
    include 'com.airbnb.lottie.compose.**'
  }
}

dependencies {
  api project(':lottie')
  implementation platform(libs.compose.bom)
  implementation libs.compose.foundation
  implementation libs.compose.ui

  baselineProfile project(':baselineprofile')

  testImplementation libs.robolectric
  testImplementation libs.androidx.collection.ktx
  testImplementation libs.kotlinx.coroutines.test
  testImplementation libs.junit4
  androidTestImplementation libs.androidx.test.junit
  androidTestImplementation libs.androidx.test.espresso
}
