249 lines
6.4 KiB
Go
249 lines
6.4 KiB
Go
package mujica_test
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
|
|
mujica "mujicaui"
|
|
)
|
|
|
|
func ExampleSplitButton() {
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
r := mujica.SplitButton(c, "Save", mujica.SplitButtonOptions{}, func(m *mujica.PopupMenu) {
|
|
if m.Item("Save as…", mujica.PopupMenuItemOptions{}) {
|
|
// ask for a file name
|
|
}
|
|
})
|
|
if r.Changed() {
|
|
// save
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleCopyButton() {
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.CopyButton(c, "https://example.com/invite/42", mujica.CopyButtonOptions{Label: "Copy link"})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleHoldToConfirm() {
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
if mujica.HoldToConfirm(c, "Delete project", mujica.HoldToConfirmOptions{}).Changed() {
|
|
// delete the project
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleBulkActionBar() {
|
|
selected := 3
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
r := mujica.BulkActionBar(c, selected, mujica.BulkActionBarOptions{}, func() {
|
|
mujica.Button(c, "Archive", mujica.ButtonOptions{Variant: mujica.Secondary})
|
|
})
|
|
if r.Changed() {
|
|
selected = 0
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleScrubInput() {
|
|
opacity := 0.6
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.ScrubInput(c, "Opacity", &opacity, mujica.ScrubInputOptions{Max: 1, Step: 0.1})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleCurrencyInput() {
|
|
cents := int64(123450)
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.CurrencyInput(c, ¢s, mujica.CurrencyInputOptions{Symbol: "$", Label: "Price"})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleMaskedInput() {
|
|
phone := ""
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.MaskedInput(c, &phone, mujica.MaskedInputOptions{Mask: "(999) 999-9999", Label: "Phone"})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleMentionInput() {
|
|
text, mentions := "", []mujica.Mention(nil)
|
|
people := []mujica.MentionCandidate{{ID: "u1", Name: "Alice"}, {ID: "u2", Name: "Bob"}}
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.MentionInput(c, &text, &mentions, mujica.MentionInputOptions{
|
|
Label: "Comment",
|
|
Candidates: func(q string) []mujica.MentionCandidate {
|
|
var out []mujica.MentionCandidate
|
|
for _, p := range people {
|
|
if strings.HasPrefix(strings.ToLower(p.Name), strings.ToLower(q)) {
|
|
out = append(out, p)
|
|
}
|
|
}
|
|
return out
|
|
},
|
|
})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleChoiceChips() {
|
|
var status []string
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.ChoiceChips(c, &status, []mujica.ToggleItem[string]{
|
|
{Value: "open", Label: "Open"}, {Value: "closed", Label: "Closed"},
|
|
}, mujica.ChoiceChipsOptions{Multiple: true, Label: "Status"})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleKnob() {
|
|
gain := 35.0
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.Knob(c, &gain, mujica.KnobOptions{Label: "Gain", Ticks: 11})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleVerticalSlider() {
|
|
level := 40.0
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.VerticalSlider(c, &level, mujica.VerticalSliderOptions{Step: 10, Label: "Level"})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleColorPalette() {
|
|
color := ui.Hex("#7D2034")
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.ColorPalette(c, &color, []mujica.ColorSwatch{
|
|
{Color: ui.Hex("#7D2034"), Name: "Wine"},
|
|
{Color: ui.Hex("#AD9164"), Name: "Old gold"},
|
|
{Color: ui.Hex("#355E80"), Name: "Slate blue"},
|
|
}, mujica.ColorPaletteOptions{Custom: true, Label: "Tag color"})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleSignaturePad() {
|
|
var strokes [][]mujica.SignaturePoint
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
if mujica.SignaturePad(c, &strokes, mujica.SignaturePadOptions{}).Changed() {
|
|
_ = mujica.SignaturePath(strokes) // SVG path data to store
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleBanner() {
|
|
open := true
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
r := mujica.Banner(c, &open, "Maintenance tonight at 22:00.", mujica.BannerOptions{
|
|
Severity: mujica.SeverityWarning,
|
|
Action: "Details",
|
|
})
|
|
if r.Action {
|
|
// show the details
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleUndoToast() {
|
|
open := true
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.UndoToast(c, &open, "Note deleted", mujica.UndoToastOptions{
|
|
OnUndo: func() {
|
|
// restore the note
|
|
},
|
|
})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleMasonry() {
|
|
titles := []string{"Sea", "Forest", "Desert", "Glacier"}
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.Masonry(c, len(titles), mujica.MasonryOptions{
|
|
Key: func(i int) string { return titles[i] },
|
|
}, func(i int) {
|
|
ui.Text(c, titles[i])
|
|
}).Size(380, 280)
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleResizablePanelGroup() {
|
|
var sizes []float32
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
r := mujica.ResizablePanelGroup(c, &sizes, []mujica.ResizablePanel{
|
|
{Label: "Files", Collapsible: true, Build: func() { ui.Text(c, "Files") }},
|
|
{Label: "Editor", Build: func() { ui.Text(c, "Editor") }},
|
|
}, mujica.ResizablePanelGroupOptions{})
|
|
if r.Committed {
|
|
// save sizes
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleDockPanel() {
|
|
var layout mujica.DockLayout
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
r := mujica.DockPanel(c, &layout, []mujica.DockItem{
|
|
{ID: "files", Title: "Files", Build: func() { ui.Text(c, "Files") }},
|
|
{ID: "terminal", Title: "Terminal", Build: func() { ui.Text(c, "$") }},
|
|
}, mujica.DockPanelOptions{})
|
|
if r.Changed() {
|
|
// save layout
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleQRCode() {
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.QRCode(c, "https://example.com/mujica", mujica.QRCodeOptions{Level: mujica.QRQuartile})
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|
|
|
|
func ExampleActivityFeed() {
|
|
events := []mujica.Activity{
|
|
{ID: "1", Actor: "Lin", Action: "commented on", Object: "Quarterly report", Time: time.Now()},
|
|
}
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
mujica.ActivityFeed(c, events, mujica.ActivityFeedOptions{}).Size(380, 280)
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
}
|