diff --git a/docusaurus.config.js b/docusaurus.config.js index 656d8959..545d332e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -149,7 +149,13 @@ const config = { theme: lightCodeTheme, darkTheme: darkCodeTheme, additionalLanguages: [ - "rust" + "toml", + "rust", + "python", + "kotlin", + "swift", + "rust", + "shell-session" ] }, }), diff --git a/package.json b/package.json index bfe15e72..559cf692 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,8 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/preset-classic": "2.4.0", + "@docusaurus/core": "^2.4.3", + "@docusaurus/preset-classic": "^2.4.3", "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", "@mdx-js/react": "^1.6.22", @@ -47,7 +47,7 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/module-type-aliases": "^2.4.3", "@tsconfig/docusaurus": "^1.0.5", "doc-snippets": "^1.0.0", "npm-run-all": "^4.1.5", @@ -72,10 +72,11 @@ }, "doc-snippets": { "extract": { - "include": "./**/*.{ts,tsx,json,yaml,txt,md,graphql,cue}", + "include": "./**/*.{ts,tsx,js,json,yaml,txt,md,graphql,cue,kt,kts,py,swift,rs}", "ignore": [ "./**/node_modules/**", - "./**/.polywrap/**" + "./**/.polywrap/**", + "./**/build/**" ], "dir": "./snippets" }, diff --git a/sidebars.js b/sidebars.js index 90104371..de736faa 100644 --- a/sidebars.js +++ b/sidebars.js @@ -15,7 +15,17 @@ const sidebars = { docs: [ 'introduction', - 'quick-start', + { + type: 'category', + label: 'Quick Start', + items: [ + 'quick-start/javascript', + 'quick-start/rust', + 'quick-start/python', + 'quick-start/kotlin', + 'quick-start/swift', + ] + }, 'clients', 'cli', { diff --git a/snippets/cli/examples/kt-example/.gitignore b/snippets/cli/examples/kt-example/.gitignore new file mode 100644 index 00000000..18add014 --- /dev/null +++ b/snippets/cli/examples/kt-example/.gitignore @@ -0,0 +1,17 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties +wrap +.polywrap diff --git a/snippets/cli/examples/kt-example/app/.gitignore b/snippets/cli/examples/kt-example/app/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/snippets/cli/examples/kt-example/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/build.gradle.kts b/snippets/cli/examples/kt-example/app/build.gradle.kts new file mode 100644 index 00000000..81080ffa --- /dev/null +++ b/snippets/cli/examples/kt-example/app/build.gradle.kts @@ -0,0 +1,109 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("org.jetbrains.kotlin.plugin.serialization") + id("com.github.node-gradle.node") +} + +android { + namespace = "io.template.polywrap" + compileSdk = 33 + + defaultConfig { + applicationId = "io.template.polywrap" + minSdk = 24 + targetSdk = 33 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary = true + } + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = "1.4.8" + } + packaging { + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + } + } +} + +dependencies { + // polywrap client + implementation("io.polywrap:polywrap-client:0.10.4") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1") + // polywrap logger plugin + implementation("io.polywrap.plugins:logger:0.10.4") + implementation("com.github.tony19:logback-android:3.0.0") + + // ui + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1") + + // defaults + implementation("androidx.core:core-ktx:1.10.1") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") + implementation("androidx.activity:activity-compose:1.7.2") + implementation(platform("androidx.compose:compose-bom:2023.03.00")) + implementation("androidx.compose.ui:ui") + implementation("androidx.compose.ui:ui-graphics") + implementation("androidx.compose.ui:ui-tooling-preview") + implementation("androidx.compose.material3:material3") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00")) + androidTestImplementation("androidx.compose.ui:ui-test-junit4") + debugImplementation("androidx.compose.ui:ui-tooling") + debugImplementation("androidx.compose.ui:ui-test-manifest") +} + +// set up NodeJS to run the Polywrap CLI +// NodeJS installation will be stored in gradle cache +node { + val nullString: String? = null + distBaseUrl.set(nullString) + // Whether to download and install a specific Node.js version or not + // If false, it will use the globally installed Node.js + // If true, it will download node using above parameters + // Note that npm is bundled with Node.js + download.set(true) +} + +// run polwyrap codegen +tasks.register("codegen") { + group = "polywrap" + dependsOn(tasks.npmInstall) + command.set("polywrap") + args.set(listOf("codegen", + "-m", "$rootDir/polywrap.yaml", + "-g", "$projectDir/src/main/java/wrap" + )) +} + +// set polywrap codegen to run before each build +tasks.withType { dependsOn("codegen") } \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/proguard-rules.pro b/snippets/cli/examples/kt-example/app/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/snippets/cli/examples/kt-example/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/androidTest/java/io/template/polywrap/ExampleInstrumentedTest.kt b/snippets/cli/examples/kt-example/app/src/androidTest/java/io/template/polywrap/ExampleInstrumentedTest.kt new file mode 100644 index 00000000..b7b68eea --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/androidTest/java/io/template/polywrap/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package io.template.polywrap + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("io.template.polywrap", appContext.packageName) + } +} \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/AndroidManifest.xml b/snippets/cli/examples/kt-example/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..7f6e64f7 --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/assets/logback.xml b/snippets/cli/examples/kt-example/app/src/main/assets/logback.xml new file mode 100644 index 00000000..fd590840 --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/assets/logback.xml @@ -0,0 +1,18 @@ + + + + %logger{12} + + + [%-20thread] %msg + + + + + + + \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/MainActivity.kt b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/MainActivity.kt new file mode 100644 index 00000000..48bf2c78 --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/MainActivity.kt @@ -0,0 +1,59 @@ +package io.template.polywrap + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import io.template.myapplication.ui.theme.MyApplicationTheme + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + MyApplicationTheme { + Column( + verticalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxHeight().padding(16.dp) + ) { + Surface( + modifier = Modifier.fillMaxWidth().height(60.dp), + color = MaterialTheme.colorScheme.background + ) { + PolywrapDemo() + } + } + } + } + } +} + +@Composable +fun PolywrapDemo(demoViewModel: PolywrapDemoViewModel = viewModel()) { + Button(onClick = { demoViewModel.polywrapDemo() }) { + Text(text = "Click here and check the logs!") + } +} + +@Preview(showBackground = true) +@Composable +fun PolywrapDemoPreview() { + MyApplicationTheme { + PolywrapDemo() + } +} \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/PolywrapDemoViewModel.kt b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/PolywrapDemoViewModel.kt new file mode 100644 index 00000000..eadeb2f5 --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/PolywrapDemoViewModel.kt @@ -0,0 +1,71 @@ +package io.template.polywrap + +import android.util.Log +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import io.polywrap.client.PolywrapClient +import io.polywrap.configBuilder.polywrapClient +import io.polywrap.plugins.logger.loggerPlugin +import kotlinx.coroutines.launch +// $start: cli-kt-app-imports +import wrap.Ethereum +import wrap.EthereumArgsEncodeParams +import wrap.Logging +import wrap.LoggingArgsLog +import wrap.LoggingLogLevel +// $end + +// $start: cli-kt-app-typesafe +class PolywrapDemoViewModel: ViewModel() { + // we can create a custom client + val loggerInterfaceUri = "wrapscan.io/polywrap/logger@1.0" + private val client = polywrapClient { + addDefaults() + setPackage("plugin/logger" to loggerPlugin(null)) + addInterfaceImplementation(loggerInterfaceUri, "plugin/logger") + setRedirect(loggerInterfaceUri to "plugin/logger") + } + + // and use the custom client to create an SDK class instance + private val logger = Logging(client) + // the client can be shared across SDK instances + private val ethereum = Ethereum(client) + + // Because their lifetimes are tied to the client, SDK instances work well as extension properties + val PolywrapClient.eth + get() = ethereum + + // or we can create an SDK class instance with a new client using default configuration + private val defaultEth = Ethereum() + + fun polywrapDemo() = viewModelScope.launch { + Log.i("polywrapDemo","Invoking: Logging.info(...)") + + logger.log(LoggingArgsLog(LoggingLogLevel.INFO, "Hello there")).getOrThrow() + logger.log(LoggingArgsLog(LoggingLogLevel.INFO, "Hello again")).getOrThrow() + logger.log(LoggingArgsLog(LoggingLogLevel.INFO, "One last time...")).getOrThrow() + + Log.i("polywrapDemo","Invoking: Ethereum.encodeParams(...)") + + val encodeArgs = EthereumArgsEncodeParams( + types = listOf("address", "uint256"), + values = listOf("0xB1B7586656116D546033e3bAFF69BFcD6592225E", "500") + ) + val result = client.eth.encodeParams(encodeArgs) + + if (result.isSuccess) { + println("Ethereum.encodeParams:\n${result.getOrThrow()}") + } else { + println("Error - Ethereum.encodeParams:\n${result.exceptionOrNull()}") + } + } + + override fun onCleared() { + super.onCleared() + // remember to close clients to prevent memory leaks when you're done using them + client.close() + defaultEth.client.close() + } +} +// $end + diff --git a/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/theme/Color.kt b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/theme/Color.kt new file mode 100644 index 00000000..0c8be7eb --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/theme/Color.kt @@ -0,0 +1,11 @@ +package io.template.myapplication.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/theme/Theme.kt b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/theme/Theme.kt new file mode 100644 index 00000000..352cfd01 --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/theme/Theme.kt @@ -0,0 +1,70 @@ +package io.template.myapplication.ui.theme + +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView +import androidx.core.view.WindowCompat + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40 + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun MyApplicationTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + val window = (view.context as Activity).window + window.statusBarColor = colorScheme.primary.toArgb() + WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme + } + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/theme/Type.kt b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/theme/Type.kt new file mode 100644 index 00000000..6f962541 --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/java/io/template/polywrap/theme/Type.kt @@ -0,0 +1,34 @@ +package io.template.myapplication.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/res/drawable/ic_launcher_background.xml b/snippets/cli/examples/kt-example/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..07d5da9c --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/snippets/cli/examples/kt-example/app/src/main/res/drawable/ic_launcher_foreground.xml b/snippets/cli/examples/kt-example/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..2b068d11 --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..6f3b755b --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..6f3b755b --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 00000000..c209e78e Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 00000000..b2dfe3d1 Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 00000000..4f0f1d64 Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 00000000..62b611da Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 00000000..948a3070 Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 00000000..1b9a6956 Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 00000000..28d4b77f Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 00000000..9287f508 Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 00000000..aa7d6427 Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 00000000..9126ae37 Binary files /dev/null and b/snippets/cli/examples/kt-example/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/snippets/cli/examples/kt-example/app/src/main/res/values/colors.xml b/snippets/cli/examples/kt-example/app/src/main/res/values/colors.xml new file mode 100644 index 00000000..f8c6127d --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/res/values/strings.xml b/snippets/cli/examples/kt-example/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..9e62466c --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Template + \ No newline at end of file diff --git a/snippets/cli/examples/kt-example/app/src/main/res/values/themes.xml b/snippets/cli/examples/kt-example/app/src/main/res/values/themes.xml new file mode 100644 index 00000000..0b98d60c --- /dev/null +++ b/snippets/cli/examples/kt-example/app/src/main/res/values/themes.xml @@ -0,0 +1,5 @@ + + + +