import static de.fayard.refreshVersions.core.Versions.versionFor

plugins {
    id 'com.android.application'
    id "kotlin-android"
}

android {
    namespace 'com.airbnb.lottie.issues.compose'
    compileSdk 33
    defaultConfig {
        applicationId "com.airbnb.lottie.issues.compose"
        minSdk 21
        targetSdk 33
        versionCode 1
        versionName "1.0"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17.toString()
    }
    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = versionFor(project, AndroidX.compose.compiler)
    }
}

dependencies {
    implementation project(':lottie-compose')
    implementation libs.androidx.appcompat
    implementation libs.androidx.activity.compose
    implementation platform(libs.compose.bom)
    implementation libs.compose.ui
    implementation libs.compose.material
    implementation libs.compose.material.icons.extended
    implementation libs.compose.ui.tooling
}
