88 "fmt"
99 "os"
1010 "strings"
11+ "time"
1112
1213 "github.com/charmbracelet/bubbles/viewport"
1314 tea "github.com/charmbracelet/bubbletea"
@@ -37,6 +38,8 @@ type testModel struct {
3738 showDialog bool
3839 filePicker * frame.FilePicker
3940 showFilePicker bool
41+ datePicker * frame.DatePicker
42+ showDatePicker bool
4043}
4144
4245func newTestModel () testModel {
@@ -69,6 +72,11 @@ func newTestModel() testModel {
6972 m .filePicker = frame .NewFilePicker (home )
7073 m .showFilePicker = false
7174
75+ // Create a date picker (default to 30 days from now, with time)
76+ futureDate := time .Now ().AddDate (0 , 0 , 30 )
77+ m .datePicker = frame .NewDatePicker (futureDate , true )
78+ m .showDatePicker = false
79+
7280 return m
7381}
7482
@@ -82,6 +90,8 @@ func (m testModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
8290 return m , tea .Quit
8391 case "d" :
8492 m .showDialog = ! m .showDialog
93+ case "t" :
94+ m .showDatePicker = ! m .showDatePicker
8595 case "f" :
8696 m .showFilePicker = ! m .showFilePicker
8797 // Toggle between load and save mode for testing
@@ -96,6 +106,8 @@ func (m testModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
96106 case "tab" , "right" :
97107 if m .showDialog {
98108 m .dialog .FocusRight ()
109+ } else if m .showDatePicker {
110+ m .datePicker .FocusNext ()
99111 } else if m .showFilePicker {
100112 // Tab cycles through: file list -> [filename input] -> OK -> Cancel -> file list
101113 if m .filePicker .IsSaveMode () {
@@ -121,6 +133,8 @@ func (m testModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
121133 case "shift+tab" , "left" :
122134 if m .showDialog {
123135 m .dialog .FocusLeft ()
136+ } else if m .showDatePicker {
137+ m .datePicker .FocusPrev ()
124138 } else if m .showFilePicker {
125139 // Shift+Tab cycles backward
126140 if m .filePicker .IsSaveMode () {
@@ -164,6 +178,14 @@ func (m testModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
164178 // Left button (Cancel) pressed
165179 m .showDialog = false
166180 }
181+ } else if m .showDatePicker {
182+ if m .datePicker .IsFocusedOk () {
183+ // OK pressed - close date picker
184+ m .showDatePicker = false
185+ } else if m .datePicker .IsFocusedCancel () {
186+ // Cancel pressed
187+ m .showDatePicker = false
188+ }
167189 } else if m .showFilePicker && m .filePicker .Focused == 0 {
168190 // Enter on file list: enter directory or select file
169191 selected := m .filePicker .SelectCurrent ()
@@ -173,27 +195,31 @@ func (m testModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
173195 }
174196 }
175197 case "j" , "down" :
176- if ! m .showDialog && ! m .showFilePicker {
198+ if ! m .showDialog && ! m .showFilePicker && ! m . showDatePicker {
177199 m .vp .LineDown (1 )
178200 } else if m .showFilePicker {
179201 m .filePicker .MoveDown ()
202+ } else if m .showDatePicker {
203+ m .datePicker .DecrementField ()
180204 }
181205 case "k" , "up" :
182- if ! m .showDialog && ! m .showFilePicker {
206+ if ! m .showDialog && ! m .showFilePicker && ! m . showDatePicker {
183207 m .vp .LineUp (1 )
184208 } else if m .showFilePicker {
185209 m .filePicker .MoveUp ()
210+ } else if m .showDatePicker {
211+ m .datePicker .IncrementField ()
186212 }
187213 case "u" :
188214 if m .showFilePicker {
189215 m .filePicker .GoUp ()
190216 }
191217 case "J" :
192- if ! m .showDialog && ! m .showFilePicker {
218+ if ! m .showDialog && ! m .showFilePicker && ! m . showDatePicker {
193219 m .menu .MoveDown ()
194220 }
195221 case "K" :
196- if ! m .showDialog && ! m .showFilePicker {
222+ if ! m .showDialog && ! m .showFilePicker && ! m . showDatePicker {
197223 m .menu .MoveUp ()
198224 }
199225 case "backspace" :
@@ -286,6 +312,14 @@ func (m testModel) View() string {
286312 return m .overlayDialog (pickerOutput , final )
287313 }
288314
315+ // Step 10: Render date picker if shown (overlay on top of background).
316+ if m .showDatePicker {
317+ m .datePicker .Width = 60
318+ m .datePicker .Height = frameH - 4
319+ dateOutput := m .datePicker .Render ()
320+ return m .overlayDialog (dateOutput , final )
321+ }
322+
289323 return final
290324}
291325
0 commit comments