Skip to content

Commit fe7e490

Browse files
committed
fixup conventions and js scrollbar issue
1 parent 60cceaf commit fe7e490

22 files changed

Lines changed: 2287 additions & 329 deletions

.idea/runConfigurations.xml

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

android/build.gradle.kts

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,23 @@
11
plugins {
2-
alias(libs.plugins.compose)
3-
alias(libs.plugins.compose.compiler)
4-
alias(libs.plugins.android.application)
5-
alias(libs.plugins.kotlin.android)
2+
alias(libs.plugins.datatable.android.application)
63
}
74

8-
group = "com.seanproctor"
9-
version = "1.0-SNAPSHOT"
10-
115
dependencies {
126
implementation(project(":demo-common"))
137
implementation(compose.material)
148
implementation(compose.uiTooling)
159
implementation(libs.activity.compose)
1610
}
1711

18-
kotlin {
19-
jvmToolchain(11)
20-
}
21-
2212
android {
2313
namespace = "com.seanproctor.datatable.android"
24-
compileSdk = extra["sdk.compile"].toString().toInt()
2514
defaultConfig {
2615
applicationId = "com.seanproctor.datatable.android"
27-
minSdk = extra["sdk.min"].toString().toInt()
28-
targetSdk = extra["sdk.compile"].toString().toInt()
2916
versionCode = 1
30-
versionName = "1.0-SNAPSHOT"
31-
}
32-
compileOptions {
33-
sourceCompatibility = JavaVersion.VERSION_11
34-
targetCompatibility = JavaVersion.VERSION_11
17+
versionName = "1.0"
3518
}
36-
}
19+
}
20+
21+
kotlin {
22+
jvmToolchain(11)
23+
}

build-logic/convention/build.gradle.kts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ dependencies {
2525
compileOnly(libs.android.tools.common)
2626
compileOnly(libs.compose.gradlePlugin)
2727
compileOnly(libs.kotlin.gradlePlugin)
28+
compileOnly(libs.publish.gradlePlugin)
2829
implementation(libs.truth)
2930
lintChecks(libs.androidx.lint.gradle)
3031
}
@@ -38,9 +39,17 @@ tasks {
3839

3940
gradlePlugin {
4041
plugins {
41-
register("androidLibrary") {
42-
id = libs.plugins.nowinandroid.android.library.asProvider().get().pluginId
43-
implementationClass = "AndroidLibraryConventionPlugin"
42+
register("datatableAndroidApplication") {
43+
id = "datatable.android.application"
44+
implementationClass = "AndroidApplicationConventionPlugin"
45+
}
46+
register("datatablePublish") {
47+
id = "datatable.publish"
48+
implementationClass = "PublishConventionPlugin"
49+
}
50+
register("datatableLibrary") {
51+
id = "datatable.library"
52+
implementationClass = "LibraryConventionPlugin"
4453
}
4554
}
4655
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import com.android.build.api.dsl.ApplicationExtension
2+
import com.seanproctor.datatable.configureKotlinAndroid
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.configure
6+
7+
class AndroidApplicationConventionPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
with(pluginManager) {
11+
apply("com.android.application")
12+
apply("org.jetbrains.kotlin.android")
13+
apply("org.jetbrains.compose")
14+
apply("org.jetbrains.kotlin.plugin.compose")
15+
}
16+
extensions.configure<ApplicationExtension> {
17+
configureKotlinAndroid(this)
18+
defaultConfig.targetSdk = 35
19+
}
20+
}
21+
}
22+
}

build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt

Lines changed: 0 additions & 62 deletions
This file was deleted.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import com.android.build.gradle.LibraryExtension
2+
import com.seanproctor.datatable.configureKotlinAndroid
3+
import com.seanproctor.datatable.configureKotlinMultiplatform
4+
import org.gradle.api.Plugin
5+
import org.gradle.api.Project
6+
import org.gradle.kotlin.dsl.configure
7+
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
8+
9+
class LibraryConventionPlugin : Plugin<Project> {
10+
override fun apply(target: Project) {
11+
with(target) {
12+
with(pluginManager) {
13+
apply("com.android.library")
14+
apply("org.jetbrains.kotlin.multiplatform")
15+
apply("org.jetbrains.compose")
16+
apply("org.jetbrains.kotlin.plugin.compose")
17+
}
18+
extensions.configure<LibraryExtension> {
19+
configureKotlinAndroid(this)
20+
defaultConfig.targetSdk = 35
21+
}
22+
extensions.configure<KotlinMultiplatformExtension> {
23+
configureKotlinMultiplatform(this)
24+
}
25+
}
26+
}
27+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import org.gradle.api.Plugin
2+
import org.gradle.api.Project
3+
import org.gradle.api.publish.PublishingExtension
4+
import org.gradle.kotlin.dsl.configure
5+
import com.vanniktech.maven.publish.MavenPublishBaseExtension
6+
import com.vanniktech.maven.publish.SonatypeHost
7+
import com.vanniktech.maven.publish.KotlinMultiplatform
8+
import com.vanniktech.maven.publish.JavadocJar.Empty
9+
10+
// Credentials must be added to ~/.gradle/gradle.properties per
11+
// https://vanniktech.github.io/gradle-maven-publish-plugin/central/#secrets
12+
class PublishConventionPlugin : Plugin<Project> {
13+
override fun apply(target: Project) {
14+
with(target) {
15+
with(pluginManager) {
16+
apply("com.vanniktech.maven.publish.base")
17+
}
18+
19+
with(extensions) {
20+
configure<PublishingExtension> {
21+
repositories {
22+
maven {
23+
name = "testMaven"
24+
url = layout.buildDirectory.file("testMaven").get().asFile.toURI()
25+
}
26+
}
27+
}
28+
configure<MavenPublishBaseExtension> {
29+
publishToMavenCentral(SonatypeHost.S01)
30+
signAllPublications()
31+
pom {
32+
description.set("A Material Design data table implementation for Compose Multiplatform.")
33+
name.set(project.name)
34+
url.set("https://github.com/sproctor/compose-data-table")
35+
licenses {
36+
license {
37+
name.set("Apache 2.0")
38+
url.set("https://www.apache.org/licenses/LICENSE-2.0")
39+
}
40+
}
41+
developers {
42+
developer {
43+
id.set("sproctor")
44+
name.set("Sean Proctor")
45+
email.set("sproctor@gmail.com")
46+
}
47+
}
48+
scm {
49+
url.set("https://github.com/sproctor/compose-data-table/tree/main")
50+
}
51+
}
52+
configure(KotlinMultiplatform(javadocJar = Empty()))
53+
}
54+
}
55+
}
56+
}
57+
}

build-logic/convention/src/main/kotlin/com/seanproctor/datatable/KotlinAndroid.kt

Lines changed: 24 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -3,90 +3,48 @@ package com.seanproctor.datatable
33
import com.android.build.api.dsl.CommonExtension
44
import org.gradle.api.JavaVersion
55
import org.gradle.api.Project
6-
import org.gradle.api.plugins.JavaPluginExtension
7-
import org.gradle.kotlin.dsl.assign
8-
import org.gradle.kotlin.dsl.configure
9-
import org.gradle.kotlin.dsl.dependencies
10-
import org.gradle.kotlin.dsl.provideDelegate
11-
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
12-
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
13-
import org.jetbrains.kotlin.gradle.dsl.KotlinBaseExtension
14-
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
6+
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
157

16-
/**
17-
* Configure base Kotlin with Android options
18-
*/
198
internal fun Project.configureKotlinAndroid(
209
commonExtension: CommonExtension<*, *, *, *, *, *>,
2110
) {
2211
commonExtension.apply {
23-
compileSdk = 35
2412

13+
compileSdk = 35
2514
defaultConfig {
2615
minSdk = 21
2716
}
28-
2917
compileOptions {
30-
// Up to Java 11 APIs are available through desugaring
31-
// https://developer.android.com/studio/write/java11-minimal-support-table
3218
sourceCompatibility = JavaVersion.VERSION_11
3319
targetCompatibility = JavaVersion.VERSION_11
34-
isCoreLibraryDesugaringEnabled = true
3520
}
36-
}
37-
38-
configureKotlin<KotlinAndroidProjectExtension>()
39-
40-
dependencies {
41-
"coreLibraryDesugaring"(libs.findLibrary("android.desugarJdkLibs").get())
21+
packaging {
22+
resources {
23+
excludes += "/META-INF/{AL2.0,LGPL2.1}"
24+
}
25+
}
4226
}
4327
}
4428

4529
/**
46-
* Configure base Kotlin options for JVM (non-Android)
30+
* Configure base Kotlin options for all targets
4731
*/
48-
internal fun Project.configureKotlinJvm() {
49-
extensions.configure<JavaPluginExtension> {
50-
// Up to Java 11 APIs are available through desugaring
51-
// https://developer.android.com/studio/write/java11-minimal-support-table
52-
sourceCompatibility = JavaVersion.VERSION_11
53-
targetCompatibility = JavaVersion.VERSION_11
54-
}
55-
56-
configureKotlin<KotlinJvmProjectExtension>()
57-
}
32+
internal fun Project.configureKotlinMultiplatform(
33+
extension: KotlinMultiplatformExtension
34+
) {
35+
extension.apply {
36+
jvmToolchain(11)
5837

59-
/**
60-
* Configure base Kotlin options
61-
*/
62-
private inline fun <reified T : KotlinBaseExtension> Project.configureKotlin() = configure<T> {
63-
// Treat all Kotlin warnings as errors (disabled by default)
64-
// Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties
65-
val warningsAsErrors: String? by project
66-
when (this) {
67-
is KotlinAndroidProjectExtension -> compilerOptions
68-
is KotlinJvmProjectExtension -> compilerOptions
69-
else -> TODO("Unsupported project extension $this ${T::class}")
70-
}.apply {
71-
jvmTarget = JvmTarget.JVM_11
72-
allWarningsAsErrors = warningsAsErrors.toBoolean()
73-
freeCompilerArgs.add(
74-
// Enable experimental coroutines APIs, including Flow
75-
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
76-
)
77-
freeCompilerArgs.add(
78-
/**
79-
* Remove this args after Phase 3.
80-
* https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-consistent-copy-visibility/#deprecation-timeline
81-
*
82-
* Deprecation timeline
83-
* Phase 3. (Supposedly Kotlin 2.2 or Kotlin 2.3).
84-
* The default changes.
85-
* Unless ExposedCopyVisibility is used, the generated 'copy' method has the same visibility as the primary constructor.
86-
* The binary signature changes. The error on the declaration is no longer reported.
87-
* '-Xconsistent-data-class-copy-visibility' compiler flag and ConsistentCopyVisibility annotation are now unnecessary.
88-
*/
89-
"-Xconsistent-data-class-copy-visibility"
90-
)
38+
// targets
39+
androidTarget {
40+
publishLibraryVariants("release")
41+
}
42+
jvm()
43+
js {
44+
browser()
45+
}
46+
iosX64()
47+
iosArm64()
48+
iosSimulatorArm64()
9149
}
9250
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.seanproctor.datatable
2+
3+
import org.gradle.api.Project
4+
import org.gradle.api.artifacts.VersionCatalog
5+
import org.gradle.api.artifacts.VersionCatalogsExtension
6+
import org.gradle.kotlin.dsl.getByType
7+
8+
val Project.libs
9+
get(): VersionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")

0 commit comments

Comments
 (0)