/**
 * This file was created using the `create_project.py` script located in the
 * `<AndroidX root>/development/project-creator` directory.
 *
 * Please use that script when creating a new project, rather than copying an existing project and
 * modifying its settings.
 */
import androidx.build.LibraryType

plugins {
    id("AndroidXPlugin")
    id("com.android.library")
}

dependencies {
    api(libs.jspecify)
    api(project(":emoji2:emoji2"))
    implementation(project(":emoji2:emoji2-views-helper"))
    api("androidx.core:core:1.3.0")

    implementation("androidx.collection:collection:1.4.2")

    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.espressoCore)
    androidTestImplementation(libs.mockitoCore)
    androidTestImplementation(libs.dexmakerMockito)
    androidTestImplementation project(':internal-testutils-runtime')
}

android {
    sourceSets {
        main {
            res.srcDirs += 'src/main/res-public'
        }
    }
    namespace "androidx.emoji2.widget"
}

androidx {
    name = "Emoji2 Views"
    type = LibraryType.PUBLISHED_LIBRARY
    inceptionYear = "2017"
    description = "Support for using emoji2 directly with Android Views, for use in apps without " +
            "appcompat"
}
