🆕 Add new UI scripts and update gitignore to ignore cache directory
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
.perry-cache/
|
||||
# ---> macOS
|
||||
# General
|
||||
.DS_Store
|
||||
|
||||
13
simple-ui/main-2.ts
Normal file
13
simple-ui/main-2.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { App, VStack, Text, Button, State } from "perry/ui"
|
||||
|
||||
const count = State(0)
|
||||
|
||||
App({
|
||||
title: "Counter",
|
||||
width: 400,
|
||||
height: 300,
|
||||
body: VStack(16, [
|
||||
Text(`Count: ${count.value}`),
|
||||
Button("Increment", () => count.set(count.value + 1)),
|
||||
]),
|
||||
})
|
||||
26
simple-ui/main-with-style.ts
Normal file
26
simple-ui/main-with-style.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import {
|
||||
App, VStack, Text, Button, State,
|
||||
textSetFontSize, textSetColor,
|
||||
setCornerRadius, setPadding,
|
||||
widgetSetBackgroundColor,
|
||||
} from "perry/ui"
|
||||
|
||||
const count = State(0)
|
||||
|
||||
const label = Text(`Count: ${count.value}`)
|
||||
textSetFontSize(label, 24)
|
||||
textSetColor(label, 0.2, 0.2, 0.2, 1.0) // RGBA in [0,1] — same as #333333
|
||||
|
||||
const btn = Button("Increment", () => count.set(count.value + 1))
|
||||
setCornerRadius(btn, 8)
|
||||
widgetSetBackgroundColor(btn, 0.0, 0.478, 1.0, 1.0) // system blue
|
||||
|
||||
const stack = VStack(20, [label, btn])
|
||||
setPadding(stack, 20, 20, 20, 20)
|
||||
|
||||
App({
|
||||
title: "Styled Counter",
|
||||
width: 400,
|
||||
height: 300,
|
||||
body: stack,
|
||||
})
|
||||
53
simple-ui/todo.ts
Normal file
53
simple-ui/todo.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import {
|
||||
App,
|
||||
Text,
|
||||
Button,
|
||||
TextField,
|
||||
VStack,
|
||||
HStack,
|
||||
State,
|
||||
ForEach,
|
||||
Spacer,
|
||||
Divider,
|
||||
} from "perry/ui"
|
||||
|
||||
const todos = State<string[]>([])
|
||||
const count = State(0)
|
||||
const input = State("")
|
||||
|
||||
App({
|
||||
title: "Todo App",
|
||||
width: 480,
|
||||
height: 600,
|
||||
body: VStack(16, [
|
||||
Text("My Todos"),
|
||||
|
||||
HStack(8, [
|
||||
TextField("What needs to be done?", (value: string) => input.set(value)),
|
||||
Button("Add", () => {
|
||||
const text = input.value
|
||||
if (text.length > 0) {
|
||||
todos.set([...todos.value, text])
|
||||
count.set(count.value + 1)
|
||||
input.set("")
|
||||
}
|
||||
}),
|
||||
]),
|
||||
|
||||
Divider(),
|
||||
|
||||
ForEach(count, (i: number) =>
|
||||
HStack(8, [
|
||||
Text(todos.value[i]),
|
||||
Spacer(),
|
||||
Button("Delete", () => {
|
||||
todos.set(todos.value.filter((_, idx) => idx !== i))
|
||||
count.set(count.value - 1)
|
||||
}),
|
||||
]),
|
||||
),
|
||||
|
||||
Spacer(),
|
||||
Text(`${count.value} items`),
|
||||
]),
|
||||
})
|
||||
Reference in New Issue
Block a user