noph-ui 0.52.0 → 0.53.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/animation.d.ts +1 -13
  2. package/dist/animation.js +18 -13
  3. package/dist/button/Button.svelte +2 -14
  4. package/dist/button/IconButton.svelte +5 -18
  5. package/dist/button/SegmentedButton.svelte +8 -11
  6. package/dist/card/Card.svelte +3 -19
  7. package/dist/card/types.d.ts +12 -2
  8. package/dist/carousel/Carousel.svelte +77 -14
  9. package/dist/carousel/CarouselItem.svelte +26 -14
  10. package/dist/carousel/carouselMorph.js +1 -1
  11. package/dist/carousel/carouselStrategy.js +25 -27
  12. package/dist/checkbox/Checkbox.svelte +1 -8
  13. package/dist/chip/FilterChip.svelte +1 -13
  14. package/dist/date-picker/Calendar.svelte +31 -30
  15. package/dist/date-picker/Calendar.svelte.d.ts +2 -0
  16. package/dist/date-picker/CalendarHeader.svelte +84 -62
  17. package/dist/date-picker/CalendarHeader.svelte.d.ts +3 -0
  18. package/dist/date-picker/DatePickerDialog.svelte +134 -75
  19. package/dist/date-picker/DatePickerDialog.svelte.d.ts +4 -3
  20. package/dist/date-picker/DateRangePicker.svelte +226 -78
  21. package/dist/date-picker/DateRangePicker.svelte.d.ts +3 -3
  22. package/dist/date-picker/DockedDatePicker.svelte +76 -464
  23. package/dist/date-picker/DockedDatePicker.svelte.d.ts +2 -2
  24. package/dist/date-picker/DockedDateTimePicker.svelte +128 -525
  25. package/dist/date-picker/DockedDateTimePicker.svelte.d.ts +2 -2
  26. package/dist/date-picker/DockedPickerField.svelte +221 -0
  27. package/dist/date-picker/DockedPickerField.svelte.d.ts +9 -0
  28. package/dist/date-picker/MonthPanel.svelte +291 -0
  29. package/dist/date-picker/MonthPanel.svelte.d.ts +12 -0
  30. package/dist/date-picker/SelectionList.svelte +7 -6
  31. package/dist/date-picker/SelectionList.svelte.d.ts +1 -0
  32. package/dist/date-picker/TimeColumn.svelte +2 -6
  33. package/dist/date-picker/TimeColumn.svelte.d.ts +1 -0
  34. package/dist/date-picker/YearGrid.svelte +2 -11
  35. package/dist/date-picker/YearGrid.svelte.d.ts +1 -0
  36. package/dist/date-picker/dateUtils.d.ts +4 -0
  37. package/dist/date-picker/dateUtils.js +15 -88
  38. package/dist/date-picker/exitVisibility.svelte.js +13 -6
  39. package/dist/date-picker/formatters.d.ts +16 -0
  40. package/dist/date-picker/formatters.js +48 -15
  41. package/dist/date-picker/internalTypes.d.ts +59 -1
  42. package/dist/date-picker/shortcuts.d.ts +11 -0
  43. package/dist/date-picker/shortcuts.js +40 -0
  44. package/dist/date-picker/timeUtils.d.ts +8 -3
  45. package/dist/date-picker/timeUtils.js +33 -51
  46. package/dist/date-picker/types.d.ts +22 -0
  47. package/dist/icons/Icon.svelte +1 -4
  48. package/dist/internal/exit.css +0 -14
  49. package/dist/internal/field.css +337 -0
  50. package/dist/internal/focus-ring.css +23 -8
  51. package/dist/internal/pop-in.css +19 -0
  52. package/dist/internal/visually-hidden.css +11 -0
  53. package/dist/list/Item.svelte +32 -18
  54. package/dist/menu/Menu.svelte +6 -25
  55. package/dist/menu/Menu.svelte.d.ts +1 -0
  56. package/dist/navigation-bar/NavigationBarItem.svelte +6 -30
  57. package/dist/navigation-drawer/NavigationDrawerItem.svelte +4 -11
  58. package/dist/navigation-rail/NavigationRail.svelte +2 -3
  59. package/dist/navigation-rail/NavigationRailItem.svelte +2 -13
  60. package/dist/press.svelte.d.ts +0 -1
  61. package/dist/press.svelte.js +0 -11
  62. package/dist/progress/CircularProgress.svelte +26 -81
  63. package/dist/progress/CircularProgress.svelte.d.ts +1 -0
  64. package/dist/progress/LinearProgress.svelte +19 -151
  65. package/dist/progress/LinearProgress.svelte.d.ts +1 -0
  66. package/dist/progress/four-color.css +34 -0
  67. package/dist/radio/Radio.svelte +6 -9
  68. package/dist/ripple/Ripple.svelte +8 -16
  69. package/dist/search/Search.svelte +2 -9
  70. package/dist/search/Search.svelte.d.ts +1 -0
  71. package/dist/select/Check.svelte +8 -31
  72. package/dist/select/Check.svelte.d.ts +1 -1
  73. package/dist/select/NativeSelect.svelte +97 -366
  74. package/dist/select/NativeSelect.svelte.d.ts +1 -0
  75. package/dist/select/Option.svelte +1 -9
  76. package/dist/select/Select.svelte +139 -746
  77. package/dist/select/Select.svelte.d.ts +1 -0
  78. package/dist/select/VirtualList.svelte +0 -1
  79. package/dist/sheet/Sheet.svelte +11 -22
  80. package/dist/slider/Slider.svelte +13 -37
  81. package/dist/slider/Slider.svelte.d.ts +1 -0
  82. package/dist/switch/Switch.svelte +2 -8
  83. package/dist/tabs/Tab.svelte +2 -4
  84. package/dist/text-field/TextField.svelte +81 -609
  85. package/dist/text-field/TextField.svelte.d.ts +1 -0
  86. package/dist/time-picker/ClockDial.svelte +8 -25
  87. package/dist/time-picker/ClockDial.svelte.d.ts +2 -0
  88. package/dist/time-picker/DockedTimePicker.svelte +102 -244
  89. package/dist/time-picker/DockedTimePicker.svelte.d.ts +2 -2
  90. package/dist/time-picker/PeriodSelector.svelte +8 -7
  91. package/dist/time-picker/PeriodSelector.svelte.d.ts +1 -0
  92. package/dist/time-picker/TimeInputs.svelte +13 -2
  93. package/dist/time-picker/TimePickerDialog.svelte +32 -26
  94. package/dist/time-picker/TimePickerDialog.svelte.d.ts +2 -2
  95. package/dist/time-picker/TimePickerPanel.svelte +26 -4
  96. package/dist/time-picker/TimeSelectors.svelte +4 -9
  97. package/dist/time-picker/TimeSelectors.svelte.d.ts +1 -0
  98. package/dist/time-picker/internalTypes.d.ts +2 -0
  99. package/dist/time-picker/timePickerState.svelte.js +3 -9
  100. package/dist/tooltip/RichTooltip.svelte +2 -23
  101. package/dist/tooltip/RichTooltip.svelte.d.ts +1 -0
  102. package/dist/tooltip/Tooltip.svelte +2 -24
  103. package/dist/tooltip/Tooltip.svelte.d.ts +1 -0
  104. package/package.json +12 -12
@@ -1,9 +1,9 @@
1
1
  <script lang="ts">
2
- import { afterTwoFrames } from '../animation.js'
2
+ import '../internal/focus-ring.css'
3
+ import { afterTwoFrames, morphSize } from '../animation.js'
3
4
  import Button from '../button/Button.svelte'
4
5
  import IconButton from '../button/IconButton.svelte'
5
6
  import Dialog from '../dialog/Dialog.svelte'
6
- import { syncOpenEffect } from '../popover.svelte.js'
7
7
  import Divider from '../divider/Divider.svelte'
8
8
  import { exitVisibility } from './exitVisibility.svelte.js'
9
9
  import ArrowDropDownIcon from '../icons/ArrowDropDownIcon.svelte'
@@ -11,17 +11,20 @@
11
11
  import ChevronLeftIcon from '../icons/ChevronLeftIcon.svelte'
12
12
  import ChevronRightIcon from '../icons/ChevronRightIcon.svelte'
13
13
  import EditCalendarIcon from '../icons/EditCalendarIcon.svelte'
14
+ import Ripple from '../ripple/Ripple.svelte'
14
15
  import TextField from '../text-field/TextField.svelte'
15
- import { tick } from 'svelte'
16
+ import Tooltip from '../tooltip/Tooltip.svelte'
17
+ import { flushSync, tick } from 'svelte'
16
18
  import Calendar from './Calendar.svelte'
17
19
  import YearGrid from './YearGrid.svelte'
20
+ import { DEFAULT_SHORTCUT_LABELS, pickerShortcut, withShortcut } from './shortcuts.js'
18
21
  import {
19
22
  addMonths,
20
23
  clampMonthInYear,
21
- compareDays,
24
+ isMonthWithin,
22
25
  DEFAULT_YEAR_RANGE,
23
26
  formatDate,
24
- formatDateMedium,
27
+ formatDateHeadline,
25
28
  formatMonthYear,
26
29
  getDatePattern,
27
30
  getFirstDayOfWeek,
@@ -32,7 +35,7 @@
32
35
  toISODate,
33
36
  today as getToday,
34
37
  } from './dateUtils.js'
35
- import type { DatePickerDialogProps, ISODate } from './types.js'
38
+ import type { DatePickerDialogProps, DatePickerMode, ISODate } from './types.js'
36
39
 
37
40
  let {
38
41
  value = $bindable(),
@@ -53,12 +56,14 @@
53
56
  issues,
54
57
  name,
55
58
  form,
56
- modeToggle = false,
59
+ mode = $bindable<DatePickerMode>('calendar'),
60
+ modeToggle = true,
57
61
  cancelLabel = 'Cancel',
58
62
  confirmLabel = 'OK',
59
63
  nextMonthLabel = 'Next month',
60
64
  previousMonthLabel = 'Previous month',
61
65
  selectYearLabel = 'Select year',
66
+ shortcutLabels,
62
67
  calendarModeLabel = 'Switch to calendar mode',
63
68
  inputModeLabel = 'Switch to text input mode',
64
69
  selectedDateLabel = 'selected',
@@ -70,7 +75,6 @@
70
75
 
71
76
  const uid = $props.id()
72
77
 
73
- let mode = $state<'calendar' | 'input'>('calendar')
74
78
  let yearPickerVisible = $state(false)
75
79
  let pending = $state<ISODate | undefined>(undefined)
76
80
  let focusedDay = $state<Date | undefined>(undefined)
@@ -92,67 +96,61 @@
92
96
  parseISODate(displayMonth) ?? startOfMonth(pendingDate ?? parseISODate(value) ?? todayValue),
93
97
  )
94
98
  let headlineText = $derived(
95
- headline ?? (pendingDate ? formatDateMedium(pendingDate, locale) : title),
99
+ headline ?? (pendingDate ? formatDateHeadline(pendingDate, locale) : title),
96
100
  )
97
101
 
98
- let canPreviousMonth = $derived(
99
- !minDate ||
100
- compareDays(new Date(monthDate.getFullYear(), monthDate.getMonth(), 0), minDate) >= 0,
101
- )
102
- let canNextMonth = $derived(
103
- !maxDate ||
104
- compareDays(new Date(monthDate.getFullYear(), monthDate.getMonth() + 1, 1), maxDate) <= 0,
105
- )
102
+ let steps = $derived.by(() => {
103
+ const year = monthDate.getFullYear()
104
+ const month = monthDate.getMonth()
105
+ return {
106
+ previousMonth: isMonthWithin(year, month - 1, minDate, maxDate) ? -1 : 0,
107
+ nextMonth: isMonthWithin(year, month + 1, minDate, maxDate) ? 1 : 0,
108
+ previousYear:
109
+ year > yearRange[0] && isMonthWithin(year - 1, month, minDate, maxDate) ? -12 : 0,
110
+ nextYear: year < yearRange[1] && isMonthWithin(year + 1, month, minDate, maxDate) ? 12 : 0,
111
+ }
112
+ })
113
+ let canPreviousMonth = $derived(steps.previousMonth !== 0)
114
+ let canNextMonth = $derived(steps.nextMonth !== 0)
115
+
116
+ let keys = $derived({ ...DEFAULT_SHORTCUT_LABELS, ...shortcutLabels })
106
117
 
107
118
  let canConfirm = $derived(
108
119
  !pendingDate ||
109
120
  (isWithin(pendingDate, minDate, maxDate) && (isDateEnabled?.(pendingDate) ?? true)),
110
121
  )
111
122
 
112
- let modeEnter = $state<'' | 'to-input' | 'to-calendar'>('')
113
- let yearEnter = $state(false)
123
+ // The view switched to slides in. Only a switch does, so opening in input mode stays still.
124
+ let modeEnter = $state<DatePickerMode>()
114
125
  let cancelModeEnter: (() => void) | undefined
115
- let cancelYearEnter: (() => void) | undefined
116
126
 
117
- const setMode = (next: 'calendar' | 'input') => {
127
+ let content = $state<HTMLElement>()
128
+
129
+ const setMode = (next: DatePickerMode) => {
118
130
  if (mode === next) return
119
- mode = next
120
131
  cancelModeEnter?.()
121
- modeEnter = next === 'input' ? 'to-input' : 'to-calendar'
122
- cancelModeEnter = afterTwoFrames(() => (modeEnter = ''))
132
+ morphSize(
133
+ content,
134
+ () =>
135
+ flushSync(() => {
136
+ mode = next
137
+ modeEnter = next
138
+ yearPickerVisible = false
139
+ }),
140
+ '--np-motion-expressive-default-spatial',
141
+ )
142
+ cancelModeEnter = afterTwoFrames(() => (modeEnter = undefined))
123
143
  }
124
144
 
125
- const showYearPicker = (next: boolean) => {
126
- yearPickerVisible = next
127
- if (!next) return
128
- cancelYearEnter?.()
129
- yearEnter = true
130
- cancelYearEnter = afterTwoFrames(() => (yearEnter = false))
131
- }
145
+ let dialog = $state<Dialog>()
132
146
 
133
- export const show = () => {
134
- if (element && !element.open) element.showModal()
135
- }
136
-
137
- export const close = () => {
138
- if (element?.open) element.close()
139
- }
140
-
141
- syncOpenEffect(
142
- () => element,
143
- () => open,
144
- show,
145
- close,
146
- )
147
+ export const show = () => dialog?.show()
148
+ export const close = () => dialog?.close()
147
149
 
148
150
  const setMonth = (date: Date) => {
149
151
  displayMonth = toISODate(startOfMonth(date))
150
152
  }
151
153
 
152
- const cancel = () => {
153
- open = false
154
- }
155
-
156
154
  const confirm = () => {
157
155
  confirming = true
158
156
  value = pending
@@ -161,9 +159,13 @@
161
159
  open = false
162
160
  }
163
161
 
164
- const focusCalendarWhenReady = async () => {
162
+ const focusWhenReady = async () => {
165
163
  await tick()
166
- element?.querySelector<HTMLElement>('.np-calendar-day[tabindex="0"]')?.focus()
164
+ element
165
+ ?.querySelector<HTMLElement>(
166
+ mode === 'input' ? '.np-date-picker-dialog-input input' : '.np-calendar-day[tabindex="0"]',
167
+ )
168
+ ?.focus()
167
169
  }
168
170
 
169
171
  const syncText = () => {
@@ -194,32 +196,66 @@
194
196
  inputInvalid = !parsed
195
197
  if (parsed) text = formatDate(parsed, locale)
196
198
  }
199
+
200
+ let navigation = $state<HTMLElement>()
201
+
202
+ const showYears = (visible: boolean) => {
203
+ flushSync(() => (yearPickerVisible = visible))
204
+ element
205
+ ?.querySelector<HTMLElement>(
206
+ yearPickerVisible ? '.np-date-picker-year[tabindex="0"]' : '.np-calendar-day[tabindex="0"]',
207
+ )
208
+ ?.focus()
209
+ }
210
+
211
+ const handleKeydown = (event: KeyboardEvent) => {
212
+ if (event.key === 'Escape' && yearPickerVisible && !event.defaultPrevented) {
213
+ event.preventDefault()
214
+ showYears(false)
215
+ return
216
+ }
217
+ const target = event.target as Node
218
+ const onHeader = target === event.currentTarget || !!navigation?.contains(target)
219
+ const shortcut = mode === 'calendar' ? pickerShortcut(event) : undefined
220
+ if (shortcut === 'yearList') {
221
+ event.preventDefault()
222
+ showYears(!yearPickerVisible)
223
+ } else if (shortcut && shortcut !== 'monthList' && !yearPickerVisible && onHeader) {
224
+ event.preventDefault()
225
+ if (steps[shortcut]) setMonth(addMonths(monthDate, steps[shortcut]))
226
+ }
227
+ }
197
228
  </script>
198
229
 
199
230
  <Dialog
200
231
  role="dialog"
201
232
  {...attributes}
233
+ bind:this={dialog}
202
234
  bind:element
235
+ bind:open
203
236
  aria-label={title}
204
237
  class={['np-date-picker-dialog', attributes.class]}
205
238
  --np-dialog-container-width="fit-content"
206
239
  --np-dialog-container-min-width="0"
207
240
  --np-dialog-padding="0"
241
+ --np-dialog-elevation="none"
242
+ tabindex={-1}
208
243
  --np-dialog-container-color="var(--np-date-picker-dialog-container-color, var(--np-color-surface-container-high))"
209
244
  --np-dialog-container-shape="var(--np-date-picker-dialog-container-shape, var(--np-shape-corner-extra-large))"
245
+ onkeydown={(event) => {
246
+ attributes.onkeydown?.(event)
247
+ handleKeydown(event)
248
+ }}
210
249
  ontoggle={(event) => {
211
- const nowOpen = event.newState === 'open'
212
- open = nowOpen
213
- if (nowOpen) {
250
+ if (event.newState === 'open') {
214
251
  exit.show()
215
252
  monthBeforeOpen = displayMonth
216
253
  confirming = false
217
254
  pending = value ?? undefined
218
- setMode('calendar')
219
- showYearPicker(false)
255
+ yearPickerVisible = false
220
256
  focusedDay = undefined
221
257
  syncText()
222
- focusCalendarWhenReady()
258
+ focusWhenReady()
223
259
  } else {
224
260
  if (!confirming) oncancel?.()
225
261
  confirming = false
@@ -229,7 +265,7 @@
229
265
  >
230
266
  <input class="np-date-picker-dialog-value" type="hidden" value={value ?? ''} {name} {form} />
231
267
  {#if exit.visible}
232
- <div class="np-date-picker-dialog-content">
268
+ <div class="np-date-picker-dialog-content" bind:this={content}>
233
269
  <div class="np-date-picker-dialog-header">
234
270
  <div class="np-date-picker-dialog-header-text">
235
271
  <span class="np-date-picker-dialog-title">{title}</span>
@@ -242,7 +278,6 @@
242
278
  onclick={() => {
243
279
  if (mode === 'calendar') syncText()
244
280
  setMode(mode === 'calendar' ? 'input' : 'calendar')
245
- showYearPicker(false)
246
281
  }}
247
282
  >
248
283
  {#if mode === 'calendar'}
@@ -256,7 +291,7 @@
256
291
  <Divider />
257
292
 
258
293
  {#if mode === 'input'}
259
- <div class={['np-date-picker-dialog-input', modeEnter && modeEnter]}>
294
+ <div class={['np-date-picker-dialog-input', modeEnter === 'input' && 'to-input']}>
260
295
  <TextField
261
296
  {label}
262
297
  {issues}
@@ -265,28 +300,35 @@
265
300
  aria-invalid={inputInvalid ? 'true' : undefined}
266
301
  oninput={handleInput}
267
302
  onblur={handleBlur}
303
+ onkeydown={(event) => {
304
+ if (event.key === 'Enter') handleBlur()
305
+ }}
268
306
  />
269
307
  </div>
270
308
  {:else}
271
- <div class="np-date-picker-dialog-navigation">
309
+ <div class="np-date-picker-dialog-navigation" bind:this={navigation}>
272
310
  <button
273
311
  type="button"
274
- class="np-date-picker-dialog-year-button"
312
+ class="np-date-picker-dialog-year-button np-focus-ring"
275
313
  aria-label="{selectYearLabel}, {formatMonthYear(monthDate, locale)}"
314
+ aria-describedby="{uid}-year-tip"
276
315
  aria-expanded={yearPickerVisible}
277
316
  aria-controls={yearPickerVisible ? `${uid}-years` : undefined}
278
- onclick={() => showYearPicker(!yearPickerVisible)}
317
+ onclick={() => (yearPickerVisible = !yearPickerVisible)}
279
318
  >
280
319
  <span aria-live="polite">{formatMonthYear(monthDate, locale)}</span>
281
320
  <span class={['np-date-picker-dialog-caret', yearPickerVisible && 'expanded']}>
282
321
  <ArrowDropDownIcon />
283
322
  </span>
323
+ <Ripple />
284
324
  </button>
325
+ <Tooltip id="{uid}-year-tip">{withShortcut(selectYearLabel, keys.yearList)}</Tooltip>
285
326
  {#if !yearPickerVisible}
286
327
  <div class="np-date-picker-dialog-arrows">
287
328
  <IconButton
288
329
  type="button"
289
330
  aria-label={previousMonthLabel}
331
+ title={withShortcut(previousMonthLabel, keys.previousMonth)}
290
332
  disabled={!canPreviousMonth}
291
333
  onclick={() => setMonth(addMonths(monthDate, -1))}
292
334
  >
@@ -295,6 +337,7 @@
295
337
  <IconButton
296
338
  type="button"
297
339
  aria-label={nextMonthLabel}
340
+ title={withShortcut(nextMonthLabel, keys.nextMonth)}
298
341
  disabled={!canNextMonth}
299
342
  onclick={() => setMonth(addMonths(monthDate, 1))}
300
343
  >
@@ -306,7 +349,6 @@
306
349
 
307
350
  {#if yearPickerVisible}
308
351
  <YearGrid
309
- class={yearEnter ? 'entering' : undefined}
310
352
  id="{uid}-years"
311
353
  aria-label={selectYearLabel}
312
354
  {yearRange}
@@ -317,12 +359,14 @@
317
359
  setMonth(
318
360
  new Date(year, clampMonthInYear(year, monthDate.getMonth(), minDate, maxDate), 1),
319
361
  )
320
- showYearPicker(false)
362
+ showYears(false)
321
363
  }}
322
364
  />
323
365
  <Divider />
324
366
  {:else}
325
- <div class={['np-date-picker-dialog-calendar', modeEnter && modeEnter]}>
367
+ <div
368
+ class={['np-date-picker-dialog-calendar', modeEnter === 'calendar' && 'to-calendar']}
369
+ >
326
370
  <Calendar
327
371
  month={monthDate}
328
372
  selected={pendingDate}
@@ -340,6 +384,7 @@
340
384
  pending = toISODate(date)
341
385
  focusedDay = date
342
386
  }}
387
+ onconfirm={confirm}
343
388
  onfocusday={(date) => {
344
389
  focusedDay = date
345
390
  if (
@@ -357,7 +402,7 @@
357
402
  {/if}
358
403
 
359
404
  {#snippet actions()}
360
- <Button type="button" variant="text" onclick={cancel}>{cancelLabel}</Button>
405
+ <Button type="button" variant="text" onclick={close}>{cancelLabel}</Button>
361
406
  <Button type="button" variant="text" disabled={!canConfirm} onclick={confirm}>
362
407
  {confirmLabel}
363
408
  </Button>
@@ -375,6 +420,10 @@
375
420
  padding: 0.5rem 0.75rem 0.75rem;
376
421
  }
377
422
 
423
+ :global(.np-date-picker-dialog:has(.np-date-picker-dialog-calendar) .np-dialog-actions) {
424
+ padding-top: 0.25rem;
425
+ }
426
+
378
427
  .np-date-picker-dialog-header {
379
428
  box-sizing: border-box;
380
429
  height: 7.5rem;
@@ -430,6 +479,7 @@
430
479
  border: 0;
431
480
  color: inherit;
432
481
  cursor: pointer;
482
+ position: relative;
433
483
  display: flex;
434
484
  align-items: center;
435
485
  gap: 0.25rem;
@@ -440,9 +490,11 @@
440
490
  line-height: 1.25rem;
441
491
  }
442
492
 
443
- .np-date-picker-dialog-year-button:focus-visible {
444
- outline: 3px solid var(--np-color-secondary);
445
- outline-offset: 2px;
493
+ .np-date-picker-dialog-year-button::before {
494
+ content: '';
495
+ position: absolute;
496
+ inset-block: -0.375rem;
497
+ inset-inline: 0;
446
498
  }
447
499
 
448
500
  .np-date-picker-dialog-caret {
@@ -461,7 +513,7 @@
461
513
  }
462
514
 
463
515
  .np-date-picker-dialog-calendar {
464
- padding-inline: 0.75rem;
516
+ padding: 0 0.75rem 0.25rem;
465
517
  }
466
518
 
467
519
  .np-date-picker-dialog-input {
@@ -472,14 +524,14 @@
472
524
  overflow: hidden;
473
525
  }
474
526
 
475
- .np-date-picker-dialog-input.to-input {
476
- transform: translateY(100%);
527
+ .np-date-picker-dialog-calendar.to-calendar {
528
+ transform: translateY(-3rem);
477
529
  opacity: 0;
478
530
  transition: none;
479
531
  }
480
532
 
481
- .np-date-picker-dialog-calendar.to-calendar {
482
- transform: translateY(-3rem);
533
+ .np-date-picker-dialog-input.to-input {
534
+ transform: translateY(100%);
483
535
  opacity: 0;
484
536
  transition: none;
485
537
  }
@@ -491,5 +543,12 @@
491
543
  transform var(--np-motion-expressive-default-spatial),
492
544
  opacity var(--np-motion-expressive-default-effects);
493
545
  }
546
+
547
+ .np-date-picker-dialog-content :global(.np-date-picker-year-grid) {
548
+ @starting-style {
549
+ height: 0;
550
+ opacity: 0.6;
551
+ }
552
+ }
494
553
  }
495
554
  </style>
@@ -1,7 +1,8 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { DatePickerDialogProps } from './types.js';
2
3
  declare const DatePickerDialog: import("svelte").Component<DatePickerDialogProps, {
3
- show: () => void;
4
- close: () => void;
5
- }, "open" | "element" | "value" | "displayMonth">;
4
+ show: () => any;
5
+ close: () => any;
6
+ }, "open" | "element" | "value" | "displayMonth" | "mode">;
6
7
  type DatePickerDialog = ReturnType<typeof DatePickerDialog>;
7
8
  export default DatePickerDialog;