···11# Changelog
2233## Next
44+- Don't clamp time of day when settig date/month/year
45- Fix time field sometimes showing a value outside `min`/`max`
56- Fix time field losing highlight after pressing left/right arrow keys
67- Use numeric keyboard in time field
+30-7
src/lib/DatePicker.svelte
···2323 }
2424 }
25252626+ function setValueDate(d: Date) {
2727+ if (d.getTime() !== value?.getTime()) {
2828+ browseDate = clampDate(d, min, max)
2929+ value = cloneDate(browseDate)
3030+ }
3131+ }
3232+2633 /** Set the browseDate */
2734 function browse(d: Date) {
2828- browseDate = clamp(d, min, max)
3535+ browseDate = clampDate(d, min, max)
2936 if (!browseWithoutSelecting && value) {
3037 setValue(browseDate)
3138 }
···6471 return cloneDate(d)
6572 }
6673 }
7474+ function clampDate(d: Date, min: Date, max: Date) {
7575+ const limit = clamp(d, min, max)
7676+ if (limit.getTime() !== d.getTime()) {
7777+ d = new Date(
7878+ limit.getFullYear(),
7979+ limit.getMonth(),
8080+ limit.getDate(),
8181+ d.getHours(),
8282+ d.getMinutes(),
8383+ d.getSeconds(),
8484+ d.getMilliseconds(),
8585+ )
8686+ d = clamp(d, min, max)
8787+ }
8888+ return d
8989+ }
67906891 /** The date shown in the popup when none is selected */
6969- let browseDate = value ? cloneDate(value) : cloneDate(clamp(defaultDate, min, max))
9292+ let browseDate = value ? cloneDate(value) : cloneDate(clampDate(defaultDate, min, max))
7093 $: setBrowseDate(value)
7194 function setBrowseDate(value: Date | null) {
7295 if (browseDate.getTime() !== value?.getTime()) {
···132155 browseDate.setFullYear(calendarDay.year)
133156 browseDate.setMonth(calendarDay.month)
134157 browseDate.setDate(calendarDay.number)
135135- setValue(browseDate)
158158+ setValueDate(browseDate)
136159 dispatch('select', cloneDate(browseDate))
137160 }
138161 }
···205228 return
206229 } else if (e.key === 'ArrowUp') {
207230 browseDate.setDate(browseDate.getDate() - 7)
208208- setValue(browseDate)
231231+ setValueDate(browseDate)
209232 } else if (e.key === 'ArrowDown') {
210233 browseDate.setDate(browseDate.getDate() + 7)
211211- setValue(browseDate)
234234+ setValueDate(browseDate)
212235 } else if (e.key === 'ArrowLeft') {
213236 browseDate.setDate(browseDate.getDate() - 1)
214214- setValue(browseDate)
237237+ setValueDate(browseDate)
215238 } else if (e.key === 'ArrowRight') {
216239 browseDate.setDate(browseDate.getDate() + 1)
217217- setValue(browseDate)
240240+ setValueDate(browseDate)
218241 } else if (e.key === 'Enter') {
219242 setValue(browseDate)
220243 dispatch('select', cloneDate(browseDate))