Caden Howell
04/19/2024, 9:57 PMCaden Howell
04/19/2024, 9:58 PMpackage com.entegral.demo
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.Button
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedButton
import androidx.compose.material.Scaffold
import androidx.compose.material.TextButton
import androidx.compose.material.Text
import androidx.compose.material.TopAppBar
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Search
import androidx.compose.material.icons.filled.Settings
import androidx.compose.runtime.* // replacing this with imports causes errors!
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.painterResource
import im_kotlin_multiplatform_demo.composeapp.generated.resources.Res
import im_kotlin_multiplatform_demo.composeapp.generated.resources.compose_multiplatform
@OptIn(ExperimentalResourceApi::class)
@Composable
fun App() {
MaterialTheme {
Scaffold(
modifier = Modifier.fillMaxSize(),
topBar = {
TopAppBar(
title = { Text("My App") },
actions = {
IconButton(onClick = { /* Action on click */ }) {
Icon(Icons.Filled.Search, contentDescription = "Search")
}
IconButton(onClick = { /* Another action */ }) {
Icon(Icons.Filled.Settings, contentDescription = "Settings")
}
}
)
}) { AnimatedLogoPane() }
}
}
@OptIn(ExperimentalResourceApi::class)
@Composable
fun AnimatedLogoPane() {
MaterialTheme {
var showContent by remember { mutableStateOf(false) }
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally) {
Button(onClick = { showContent = !showContent }) {
Text("Click me!")
}
OutlinedButton(onClick = { showContent = !showContent }) {
Text("Outlined Button")
}
TextButton(onClick = { showContent = !showContent }) {
Text("Text Button")
}
AnimatedVisibility(showContent) {
val greeting = remember { Greeting().greet() }
Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
Image(painterResource(Res.drawable.compose_multiplatform), null)
Text("Compose: $greeting")
}
}
}
}
}
Pablichjenkov
04/19/2024, 11:40 PM<meta name="viewport" content="width=device-width, initial-scale=1.0">
Caden Howell
04/22/2024, 2:57 PMCaden Howell
04/22/2024, 3:03 PM<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Compose App</title>
<script type="application/javascript" src="skiko.js"></script>
<script type="application/javascript" src="composeApp.js"></script>
</head>
<body>
<canvas id="ComposeTarget"></canvas>
</body>
</html>
but I do see it in these build files:
❯ grep -iR "scale=1.0" *
build/js/node_modules/mocha/lib/browser/template.html: <meta name="viewport" content="width=device-width, initial-scale=1.0" />
build/js/node_modules/serve-index/public/directory.html: <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
But I think these are for testing and serving the directory listings pageCaden Howell
04/22/2024, 3:11 PMPablichjenkov
04/22/2024, 4:32 PMCaden Howell
04/22/2024, 6:50 PM@OptIn(ExperimentalResourceApi::class)
@Composable
fun App() {
var drawerOpen by remember { mutableStateOf(false) } // Track drawer state
MaterialTheme (){
Scaffold(modifier = Modifier.fillMaxSize().border(1.dp, Color.Blue)){
Text("test")
}
}
}
Pablichjenkov
04/22/2024, 7:33 PM