Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 0 additions & 80 deletions .arena-sample.swift

This file was deleted.

1 change: 1 addition & 0 deletions .arena-sample.swift
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,5 @@ var loremIpsum: Text {
TextBuilder supports [Arena](https://github.com/finestructure/Arena) to effortlessly take it for a spin in a playground before you decide to add it to your codebase.

Simply [install Arena](https://github.com/finestructure/Arena#how-to-install-arena) and run `arena davdroman/TextBuilder@branch:main --platform macos` in your terminal.

Alternatively, a standalone demo Xcode Playground is also provided in this package.
75 changes: 75 additions & 0 deletions TextBuilder.playground/Contents.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import SwiftUI
import TextBuilder
import PlaygroundSupport

struct DemoView: View {
@State var name: String?

var body: some View {
VStack(spacing: 20) {
welcomeText.font(.title)
descriptionText
someClickableText
footnote
}
.multilineTextAlignment(.center)
.padding()
.background(Color(.windowBackgroundColor))
}

@SpacedTextBuilder
var welcomeText: Text {
if let name = name, !name.isEmpty {
"Welcome,"
name.text.bold()
} else {
"Welcome"
}
}

@BasicTextBuilder
var descriptionText: Text {
"This is a demo of "
"TextBuilder".text.italic()
"."
}

var someClickableText: Text {
Text(separator: " ") {
"This paragraph is implemented"
"without".text.underline()
"a builder to showcase the"
"Text.init(separator:content:)".text.font(.system(.body, design: .monospaced)).foregroundColor(.gray)
"initializer provided by this library."
}
}

var footnote: some View {
Text {
"Made by "
"@davdroman".text.bold()
}
.underline()
.font(.system(.caption))
.foregroundColor(.blue)
.pointable()
.onTapGesture { NSWorkspace.shared.open(URL(string: "https://github.com/davdroman/TextBuilder")!) }
}
}

extension View {
func pointable() -> some View {
onHover { inside in
if inside {
NSCursor.pointingHand.push()
} else {
NSCursor.pop()
}
}
}
}

let view = NSHostingController(rootView: DemoView(name: NSFullUserName()))
view.view.frame.size.width = 340
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = view
4 changes: 4 additions & 0 deletions TextBuilder.playground/contents.xcplayground
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<playground version='5.0' target-platform='macos' buildActiveScheme='true' importAppTypes='true'>
<timeline fileName='timeline.xctimeline'/>
</playground>

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.