254 lines
9.8 KiB
Go
254 lines
9.8 KiB
Go
package main
|
|
|
|
// Code snippets mirror example_calendar_test.go.
|
|
const (
|
|
calCalendarMonthViewCode = `func exampleEvents(loc *time.Location) []datetime.CalendarEvent {
|
|
start := time.Date(2026, time.October, 14, 9, 0, 0, 0, loc)
|
|
return []datetime.CalendarEvent{
|
|
{ID: "rehearsal", Title: "Rehearsal", Start: start, End: start.Add(2 * time.Hour), Location: "Hall"},
|
|
{ID: "fitting", Title: "Fitting", Start: start.Add(time.Hour), End: start.Add(90 * time.Minute), Color: datetime.EventInfo},
|
|
}
|
|
}
|
|
|
|
loc := time.Local
|
|
events := exampleEvents(loc)
|
|
month := datetime.YearMonth{Year: 2026, Month: time.October}
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
r := datetime.CalendarMonthView(c, &month, events, datetime.CalendarMonthViewOptions{Location: loc})
|
|
if ch, ok := r.Changed(); ok {
|
|
fmt.Println("move", ch.ID, "to", ch.Start)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calCalendarWeekViewCode = `func exampleEvents(loc *time.Location) []datetime.CalendarEvent {
|
|
start := time.Date(2026, time.October, 14, 9, 0, 0, 0, loc)
|
|
return []datetime.CalendarEvent{
|
|
{ID: "rehearsal", Title: "Rehearsal", Start: start, End: start.Add(2 * time.Hour), Location: "Hall"},
|
|
{ID: "fitting", Title: "Fitting", Start: start.Add(time.Hour), End: start.Add(90 * time.Minute), Color: datetime.EventInfo},
|
|
}
|
|
}
|
|
|
|
loc := time.Local
|
|
events := exampleEvents(loc)
|
|
week := core.Date{Year: 2026, Month: time.October, Day: 14}
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
r := datetime.CalendarWeekView(c, &week, events, datetime.CalendarWeekViewOptions{Location: loc, SlotMinutes: 15})
|
|
if ch, ok := r.Changed(); ok && ch.Kind == datetime.CalendarCreate {
|
|
fmt.Println("new event", ch.Start, ch.End)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calCalendarDayViewCode = `func exampleEvents(loc *time.Location) []datetime.CalendarEvent {
|
|
start := time.Date(2026, time.October, 14, 9, 0, 0, 0, loc)
|
|
return []datetime.CalendarEvent{
|
|
{ID: "rehearsal", Title: "Rehearsal", Start: start, End: start.Add(2 * time.Hour), Location: "Hall"},
|
|
{ID: "fitting", Title: "Fitting", Start: start.Add(time.Hour), End: start.Add(90 * time.Minute), Color: datetime.EventInfo},
|
|
}
|
|
}
|
|
|
|
loc := time.Local
|
|
events := exampleEvents(loc)
|
|
day := core.Date{Year: 2026, Month: time.October, Day: 14}
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if id, ok := datetime.CalendarDayView(c, &day, events, datetime.CalendarDayViewOptions{Location: loc}).Opened(); ok {
|
|
fmt.Println("open", id)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calAgendaViewCode = `func exampleEvents(loc *time.Location) []datetime.CalendarEvent {
|
|
start := time.Date(2026, time.October, 14, 9, 0, 0, 0, loc)
|
|
return []datetime.CalendarEvent{
|
|
{ID: "rehearsal", Title: "Rehearsal", Start: start, End: start.Add(2 * time.Hour), Location: "Hall"},
|
|
{ID: "fitting", Title: "Fitting", Start: start.Add(time.Hour), End: start.Add(90 * time.Minute), Color: datetime.EventInfo},
|
|
}
|
|
}
|
|
|
|
loc := time.Local
|
|
events := exampleEvents(loc)
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
opts := datetime.AgendaViewOptions{Location: loc, From: core.Date{Year: 2026, Month: time.October, Day: 12}, Days: 14}
|
|
if id, ok := datetime.AgendaView(c, events, opts).Opened(); ok {
|
|
fmt.Println("open", id)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calYearViewCode = `func exampleEvents(loc *time.Location) []datetime.CalendarEvent {
|
|
start := time.Date(2026, time.October, 14, 9, 0, 0, 0, loc)
|
|
return []datetime.CalendarEvent{
|
|
{ID: "rehearsal", Title: "Rehearsal", Start: start, End: start.Add(2 * time.Hour), Location: "Hall"},
|
|
{ID: "fitting", Title: "Fitting", Start: start.Add(time.Hour), End: start.Add(90 * time.Minute), Color: datetime.EventInfo},
|
|
}
|
|
}
|
|
|
|
loc := time.Local
|
|
events := exampleEvents(loc)
|
|
year := 2026
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if day, ok := datetime.YearView(c, &year, events, datetime.YearViewOptions{Location: loc}).DayChosen(); ok {
|
|
fmt.Println("go to", day)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calEventChipCode = `func exampleEvents(loc *time.Location) []datetime.CalendarEvent {
|
|
start := time.Date(2026, time.October, 14, 9, 0, 0, 0, loc)
|
|
return []datetime.CalendarEvent{
|
|
{ID: "rehearsal", Title: "Rehearsal", Start: start, End: start.Add(2 * time.Hour), Location: "Hall"},
|
|
{ID: "fitting", Title: "Fitting", Start: start.Add(time.Hour), End: start.Add(90 * time.Minute), Color: datetime.EventInfo},
|
|
}
|
|
}
|
|
|
|
loc := time.Local
|
|
ev := exampleEvents(loc)[0]
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if datetime.EventChip(c, ev, datetime.EventChipOptions{Location: loc}).Clicked() {
|
|
fmt.Println("open", ev.ID)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calEventEditorCode = `func exampleEvents(loc *time.Location) []datetime.CalendarEvent {
|
|
start := time.Date(2026, time.October, 14, 9, 0, 0, 0, loc)
|
|
return []datetime.CalendarEvent{
|
|
{ID: "rehearsal", Title: "Rehearsal", Start: start, End: start.Add(2 * time.Hour), Location: "Hall"},
|
|
{ID: "fitting", Title: "Fitting", Start: start.Add(time.Hour), End: start.Add(90 * time.Minute), Color: datetime.EventInfo},
|
|
}
|
|
}
|
|
|
|
loc := time.Local
|
|
ev := exampleEvents(loc)[0]
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
r := datetime.EventEditor(c, &ev, datetime.EventEditorOptions{Location: loc})
|
|
if r.Saved() {
|
|
fmt.Println("saved", ev.Title, ev.Start)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calEventPopoverCode = `func exampleEvents(loc *time.Location) []datetime.CalendarEvent {
|
|
start := time.Date(2026, time.October, 14, 9, 0, 0, 0, loc)
|
|
return []datetime.CalendarEvent{
|
|
{ID: "rehearsal", Title: "Rehearsal", Start: start, End: start.Add(2 * time.Hour), Location: "Hall"},
|
|
{ID: "fitting", Title: "Fitting", Start: start.Add(time.Hour), End: start.Add(90 * time.Minute), Color: datetime.EventInfo},
|
|
}
|
|
}
|
|
|
|
loc := time.Local
|
|
ev := exampleEvents(loc)[0]
|
|
open := false
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
chip := datetime.EventChip(c, ev, datetime.EventChipOptions{Location: loc})
|
|
if chip.Clicked() {
|
|
open = true
|
|
}
|
|
r := datetime.EventPopover(c, chip, &open, ev, datetime.EventPopoverOptions{Location: loc})
|
|
if r.Delete() {
|
|
fmt.Println("delete", ev.ID)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calCurrentTimeIndicatorCode = `view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
ui.Box(c).Size(200, 240).Children(func() {
|
|
datetime.CurrentTimeIndicator(c, datetime.CurrentTimeIndicatorOptions{Location: time.Local})
|
|
})
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calRecurrenceEditorCode = `rule := datetime.Recurrence{Unit: datetime.RepeatWeekly, Interval: 1, Weekdays: []time.Weekday{time.Monday}}
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
r := datetime.RecurrenceEditor(c, &rule, datetime.RecurrenceEditorOptions{Start: core.Date{Year: 2026, Month: time.October, Day: 5}})
|
|
if r.Changed() && r.Problem() == "" {
|
|
fmt.Println(datetime.RecurrenceSummary(c, rule))
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calAvailabilityPickerCode = `days := []core.Date{{Year: 2026, Month: time.October, Day: 12}, {Year: 2026, Month: time.October, Day: 13}}
|
|
mine := [][]bool{make([]bool, 18), make([]bool, 18)}
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if datetime.AvailabilityPicker(c, &mine, datetime.AvailabilityPickerOptions{Days: days}).Changed() {
|
|
fmt.Println("availability changed")
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calTimezoneSelectCode = `zone := "Asia/Shanghai"
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if datetime.TimezoneSelect(c, &zone, datetime.TimezoneSelectOptions{}).Changed() {
|
|
fmt.Println("zone", zone)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calReminderPickerCode = `reminders := []time.Duration{15 * time.Minute}
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if datetime.ReminderPicker(c, &reminders, datetime.ReminderPickerOptions{Max: 3}).Changed() {
|
|
fmt.Println("reminders", reminders)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calAttendeeListCode = `people := []datetime.Attendee{{Name: "Sakiko", Status: datetime.AttendeeAccepted, Organizer: true}, {Name: "Mutsumi"}}
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if i, ok := datetime.AttendeeList(c, people, datetime.AttendeeListOptions{Removable: true}).Removed(); ok {
|
|
people = append(people[:i], people[i+1:]...)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calWeekPickerCode = `var week core.Date
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if datetime.WeekPicker(c, &week, datetime.WeekPickerOptions{WeekStart: datetime.WeekStartMonday, Clearable: true}).Changed() {
|
|
fmt.Println("week of", week)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calDurationPickerCode = `length := 90 * time.Minute
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
opts := datetime.DurationPickerOptions{Min: 15 * time.Minute, Max: 8 * time.Hour}
|
|
if datetime.DurationPicker(c, &length, opts).Changed() {
|
|
fmt.Println("length", length)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calCronEditorCode = `expr := "0 9 * * MON-FRI"
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if datetime.CronEditor(c, &expr, datetime.CronEditorOptions{Location: time.Local}).Changed() {
|
|
if _, err := datetime.ParseCron(expr); err == nil {
|
|
fmt.Println("schedule", expr)
|
|
}
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calRelativeTimeCode = `posted := time.Date(2026, time.October, 5, 9, 0, 0, 0, time.Local)
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
datetime.RelativeTime(c, posted, datetime.RelativeTimeOptions{Location: time.Local})
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calCountdownCode = `deadline := time.Date(2026, time.December, 31, 23, 59, 59, 0, time.Local)
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if datetime.Countdown(c, deadline, datetime.CountdownOptions{}).Finished() {
|
|
fmt.Println("happy new year")
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
calStopwatchCode = `var sw datetime.StopwatchState
|
|
view := func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
if datetime.Stopwatch(c, &sw, datetime.StopwatchOptions{}).Changed() {
|
|
fmt.Println("laps", len(sw.Laps))
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)`
|
|
)
|