noph-ui 0.51.2 → 0.53.0

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 (187) hide show
  1. package/dist/animation.d.ts +14 -1
  2. package/dist/animation.js +55 -2
  3. package/dist/app-bar/AppBar.svelte +71 -7
  4. package/dist/app-bar/types.d.ts +6 -0
  5. package/dist/autocomplete/AutoComplete.svelte +6 -31
  6. package/dist/autocomplete/AutoComplete.svelte.d.ts +1 -1
  7. package/dist/badge/Badge.svelte +12 -4
  8. package/dist/badge/description.d.ts +4 -0
  9. package/dist/badge/description.js +4 -0
  10. package/dist/button/Button.svelte +53 -30
  11. package/dist/button/ButtonGroup.svelte +139 -19
  12. package/dist/button/ButtonGroup.svelte.d.ts +1 -1
  13. package/dist/button/IconButton.svelte +51 -33
  14. package/dist/button/SegmentedButton.svelte +52 -15
  15. package/dist/button/SplitButton.svelte +77 -3
  16. package/dist/button/SplitButton.svelte.d.ts +1 -1
  17. package/dist/button/buttonGroup.d.ts +0 -4
  18. package/dist/button/buttonGroup.js +0 -9
  19. package/dist/button/groupContext.d.ts +10 -0
  20. package/dist/button/groupContext.js +4 -0
  21. package/dist/button/types.d.ts +19 -0
  22. package/dist/card/Card.svelte +3 -19
  23. package/dist/card/types.d.ts +12 -2
  24. package/dist/carousel/Carousel.svelte +77 -14
  25. package/dist/carousel/CarouselItem.svelte +26 -14
  26. package/dist/carousel/carouselMorph.js +1 -1
  27. package/dist/carousel/carouselStrategy.js +25 -27
  28. package/dist/checkbox/Checkbox.svelte +6 -8
  29. package/dist/chip/ChipSet.svelte +28 -2
  30. package/dist/chip/FilterChip.svelte +33 -17
  31. package/dist/chip/InputChip.svelte +127 -26
  32. package/dist/chip/SuggestionChip.svelte +6 -22
  33. package/dist/chip/SuggestionChip.svelte.d.ts +1 -2
  34. package/dist/chip/types.d.ts +8 -1
  35. package/dist/date-picker/Calendar.svelte +34 -31
  36. package/dist/date-picker/Calendar.svelte.d.ts +2 -0
  37. package/dist/date-picker/CalendarHeader.svelte +84 -62
  38. package/dist/date-picker/CalendarHeader.svelte.d.ts +3 -0
  39. package/dist/date-picker/DatePickerDialog.svelte +135 -75
  40. package/dist/date-picker/DatePickerDialog.svelte.d.ts +4 -3
  41. package/dist/date-picker/DateRangePicker.svelte +227 -78
  42. package/dist/date-picker/DateRangePicker.svelte.d.ts +3 -3
  43. package/dist/date-picker/DockedDatePicker.svelte +76 -457
  44. package/dist/date-picker/DockedDatePicker.svelte.d.ts +3 -3
  45. package/dist/date-picker/DockedDateTimePicker.svelte +128 -518
  46. package/dist/date-picker/DockedDateTimePicker.svelte.d.ts +3 -3
  47. package/dist/date-picker/DockedPickerField.svelte +221 -0
  48. package/dist/date-picker/DockedPickerField.svelte.d.ts +9 -0
  49. package/dist/date-picker/MonthPanel.svelte +291 -0
  50. package/dist/date-picker/MonthPanel.svelte.d.ts +12 -0
  51. package/dist/date-picker/SelectionList.svelte +7 -6
  52. package/dist/date-picker/SelectionList.svelte.d.ts +1 -0
  53. package/dist/date-picker/TimeColumn.svelte +2 -6
  54. package/dist/date-picker/TimeColumn.svelte.d.ts +1 -0
  55. package/dist/date-picker/YearGrid.svelte +6 -13
  56. package/dist/date-picker/YearGrid.svelte.d.ts +1 -0
  57. package/dist/date-picker/dateUtils.d.ts +4 -0
  58. package/dist/date-picker/dateUtils.js +15 -88
  59. package/dist/date-picker/exitVisibility.svelte.js +13 -6
  60. package/dist/date-picker/formatters.d.ts +16 -0
  61. package/dist/date-picker/formatters.js +48 -15
  62. package/dist/date-picker/internalTypes.d.ts +59 -1
  63. package/dist/date-picker/shortcuts.d.ts +11 -0
  64. package/dist/date-picker/shortcuts.js +40 -0
  65. package/dist/date-picker/timeUtils.d.ts +8 -3
  66. package/dist/date-picker/timeUtils.js +33 -51
  67. package/dist/date-picker/types.d.ts +22 -0
  68. package/dist/dialog/Dialog.svelte +171 -33
  69. package/dist/dialog/Dialog.svelte.d.ts +2 -1
  70. package/dist/dialog/types.d.ts +6 -0
  71. package/dist/divider/Divider.svelte +36 -10
  72. package/dist/divider/types.d.ts +1 -0
  73. package/dist/fab/ExtendedFab.svelte +26 -60
  74. package/dist/fab/Fab.svelte +13 -48
  75. package/dist/fab/FabMenu.svelte +102 -44
  76. package/dist/fab/FabMenu.svelte.d.ts +2 -1
  77. package/dist/fab/FabMenuItem.svelte +8 -0
  78. package/dist/fab/FabMenuItem.svelte.d.ts +4 -0
  79. package/dist/fab/index.d.ts +1 -0
  80. package/dist/fab/index.js +1 -0
  81. package/dist/fab/types.d.ts +6 -4
  82. package/dist/icons/Icon.svelte +1 -4
  83. package/dist/icons/MenuIcon.svelte +13 -0
  84. package/dist/icons/MenuIcon.svelte.d.ts +7 -0
  85. package/dist/icons/MenuOpenIcon.svelte +15 -0
  86. package/dist/icons/MenuOpenIcon.svelte.d.ts +7 -0
  87. package/dist/icons/index.d.ts +2 -0
  88. package/dist/icons/index.js +2 -0
  89. package/dist/internal/exit.css +33 -0
  90. package/dist/internal/field.css +337 -0
  91. package/dist/internal/fieldTypes.d.ts +6 -0
  92. package/dist/internal/focus-ring.css +25 -6
  93. package/dist/internal/interest.css +3 -1
  94. package/dist/internal/pop-in.css +19 -0
  95. package/dist/internal/visually-hidden.css +11 -0
  96. package/dist/keyboard-nav.d.ts +12 -1
  97. package/dist/keyboard-nav.js +104 -14
  98. package/dist/list/Item.svelte +84 -24
  99. package/dist/list/List.svelte +35 -2
  100. package/dist/list/ListItem.svelte +16 -2
  101. package/dist/list/context.d.ts +6 -0
  102. package/dist/list/context.js +4 -0
  103. package/dist/list/types.d.ts +7 -0
  104. package/dist/media.d.ts +1 -0
  105. package/dist/media.js +1 -0
  106. package/dist/menu/Menu.svelte +53 -20
  107. package/dist/menu/Menu.svelte.d.ts +3 -1
  108. package/dist/menu/MenuItem.svelte +9 -3
  109. package/dist/menu/types.d.ts +7 -1
  110. package/dist/navigation-bar/NavigationBar.svelte +9 -3
  111. package/dist/navigation-bar/NavigationBarItem.svelte +31 -39
  112. package/dist/navigation-drawer/NavigationDrawer.svelte +96 -20
  113. package/dist/navigation-drawer/NavigationDrawer.svelte.d.ts +2 -1
  114. package/dist/navigation-drawer/NavigationDrawerItem.svelte +10 -12
  115. package/dist/navigation-drawer/NavigationDrawerSection.svelte +49 -0
  116. package/dist/navigation-drawer/NavigationDrawerSection.svelte.d.ts +4 -0
  117. package/dist/navigation-drawer/index.d.ts +1 -0
  118. package/dist/navigation-drawer/index.js +1 -0
  119. package/dist/navigation-drawer/types.d.ts +12 -0
  120. package/dist/navigation-rail/NavigationRail.svelte +367 -7
  121. package/dist/navigation-rail/NavigationRail.svelte.d.ts +1 -1
  122. package/dist/navigation-rail/NavigationRailItem.svelte +185 -59
  123. package/dist/navigation-rail/NavigationRailSection.svelte +57 -0
  124. package/dist/navigation-rail/NavigationRailSection.svelte.d.ts +4 -0
  125. package/dist/navigation-rail/context.d.ts +6 -0
  126. package/dist/navigation-rail/context.js +5 -0
  127. package/dist/navigation-rail/index.d.ts +1 -0
  128. package/dist/navigation-rail/index.js +1 -0
  129. package/dist/navigation-rail/morph.d.ts +14 -0
  130. package/dist/navigation-rail/morph.js +78 -0
  131. package/dist/navigation-rail/types.d.ts +21 -0
  132. package/dist/press.svelte.d.ts +0 -1
  133. package/dist/press.svelte.js +0 -11
  134. package/dist/progress/CircularProgress.svelte +28 -82
  135. package/dist/progress/CircularProgress.svelte.d.ts +1 -0
  136. package/dist/progress/LinearProgress.svelte +67 -171
  137. package/dist/progress/LinearProgress.svelte.d.ts +1 -0
  138. package/dist/progress/four-color.css +34 -0
  139. package/dist/progress/types.d.ts +1 -0
  140. package/dist/radio/Radio.svelte +13 -10
  141. package/dist/ripple/Ripple.svelte +8 -16
  142. package/dist/search/Search.svelte +238 -58
  143. package/dist/search/Search.svelte.d.ts +1 -0
  144. package/dist/search/types.d.ts +4 -0
  145. package/dist/select/Check.svelte +8 -31
  146. package/dist/select/Check.svelte.d.ts +1 -1
  147. package/dist/select/NativeSelect.svelte +113 -374
  148. package/dist/select/NativeSelect.svelte.d.ts +1 -0
  149. package/dist/select/Option.svelte +2 -11
  150. package/dist/select/Select.svelte +170 -858
  151. package/dist/select/Select.svelte.d.ts +1 -0
  152. package/dist/select/VirtualList.svelte +16 -2
  153. package/dist/select/VirtualList.svelte.d.ts +6 -2
  154. package/dist/sheet/Sheet.svelte +229 -22
  155. package/dist/sheet/Sheet.svelte.d.ts +3 -1
  156. package/dist/sheet/types.d.ts +10 -0
  157. package/dist/slider/Slider.svelte +14 -64
  158. package/dist/slider/Slider.svelte.d.ts +1 -0
  159. package/dist/snackbar/Snackbar.svelte +3 -0
  160. package/dist/snackbar/Snackbar.svelte.d.ts +2 -1
  161. package/dist/switch/Switch.svelte +53 -19
  162. package/dist/tabs/Tab.svelte +30 -18
  163. package/dist/tabs/Tabs.svelte +28 -4
  164. package/dist/tabs/types.d.ts +3 -0
  165. package/dist/text-field/TextField.svelte +124 -616
  166. package/dist/text-field/TextField.svelte.d.ts +1 -0
  167. package/dist/time-picker/ClockDial.svelte +8 -25
  168. package/dist/time-picker/ClockDial.svelte.d.ts +2 -0
  169. package/dist/time-picker/DockedTimePicker.svelte +102 -239
  170. package/dist/time-picker/DockedTimePicker.svelte.d.ts +3 -3
  171. package/dist/time-picker/PeriodSelector.svelte +8 -7
  172. package/dist/time-picker/PeriodSelector.svelte.d.ts +1 -0
  173. package/dist/time-picker/TimeInputs.svelte +13 -2
  174. package/dist/time-picker/TimePickerDialog.svelte +33 -26
  175. package/dist/time-picker/TimePickerDialog.svelte.d.ts +3 -3
  176. package/dist/time-picker/TimePickerPanel.svelte +26 -4
  177. package/dist/time-picker/TimeSelectors.svelte +4 -9
  178. package/dist/time-picker/TimeSelectors.svelte.d.ts +1 -0
  179. package/dist/time-picker/internalTypes.d.ts +2 -0
  180. package/dist/time-picker/timePickerState.svelte.js +3 -9
  181. package/dist/toolbar/Toolbar.svelte +21 -11
  182. package/dist/toolbar/types.d.ts +1 -0
  183. package/dist/tooltip/RichTooltip.svelte +2 -23
  184. package/dist/tooltip/RichTooltip.svelte.d.ts +2 -1
  185. package/dist/tooltip/Tooltip.svelte +5 -25
  186. package/dist/tooltip/Tooltip.svelte.d.ts +2 -1
  187. package/package.json +12 -12
@@ -1,9 +1,14 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
3
+ import IconButton from '../button/IconButton.svelte'
2
4
  import ArrowDropDownIcon from '../icons/ArrowDropDownIcon.svelte'
3
5
  import ChevronLeftIcon from '../icons/ChevronLeftIcon.svelte'
4
6
  import ChevronRightIcon from '../icons/ChevronRightIcon.svelte'
5
7
  import Ripple from '../ripple/Ripple.svelte'
8
+ import Tooltip from '../tooltip/Tooltip.svelte'
6
9
  import type { HTMLAttributes } from 'svelte/elements'
10
+ import { DEFAULT_SHORTCUT_LABELS, withShortcut } from './shortcuts.js'
11
+ import type { DatePickerShortcutLabels } from './types.js'
7
12
 
8
13
  interface CalendarHeaderProps extends HTMLAttributes<HTMLDivElement> {
9
14
  monthLabel: string
@@ -19,6 +24,7 @@
19
24
  nextYearLabel: string
20
25
  selectMonthLabel: string
21
26
  selectYearLabel: string
27
+ shortcutLabels?: Partial<DatePickerShortcutLabels>
22
28
  monthListId: string
23
29
  yearListId: string
24
30
  onpreviousmonth?: () => void
@@ -43,6 +49,7 @@
43
49
  nextYearLabel,
44
50
  selectMonthLabel,
45
51
  selectYearLabel,
52
+ shortcutLabels,
46
53
  monthListId,
47
54
  yearListId,
48
55
  onpreviousmonth,
@@ -54,40 +61,51 @@
54
61
  ...attributes
55
62
  }: CalendarHeaderProps = $props()
56
63
 
64
+ const uid = $props.id()
57
65
  let showSteppers = $derived(mode === 'days')
66
+ let keys = $derived({ ...DEFAULT_SHORTCUT_LABELS, ...shortcutLabels })
58
67
  </script>
59
68
 
60
- {#snippet stepper(label: string, enabled: boolean, next: boolean, onclick?: () => void)}
61
- <button
62
- type="button"
63
- class={['np-date-picker-stepper', !showSteppers && 'hidden']}
64
- aria-label={label}
65
- disabled={!enabled}
66
- {onclick}
67
- >
68
- {#if next}
69
- <ChevronRightIcon />
70
- {:else}
71
- <ChevronLeftIcon />
72
- {/if}
73
- {#if enabled}
74
- <Ripple />
75
- {/if}
76
- </button>
69
+ {#snippet stepper(
70
+ label: string,
71
+ key: string,
72
+ enabled: boolean,
73
+ next: boolean,
74
+ onclick?: () => void,
75
+ )}
76
+ <span class={['np-date-picker-stepper', !showSteppers && 'hidden']}>
77
+ <IconButton
78
+ type="button"
79
+ class="np-focus-ring-inset"
80
+ aria-label={label}
81
+ title={withShortcut(label, key)}
82
+ disabled={!enabled}
83
+ {onclick}
84
+ >
85
+ {#if next}
86
+ <ChevronRightIcon />
87
+ {:else}
88
+ <ChevronLeftIcon />
89
+ {/if}
90
+ </IconButton>
91
+ </span>
77
92
  {/snippet}
78
93
 
79
94
  {#snippet menuButton(
80
95
  label: string,
81
96
  accessibleLabel: string,
97
+ key: string,
82
98
  expanded: boolean,
83
99
  disabled: boolean,
84
100
  controls: string,
101
+ tooltipId: string,
85
102
  onclick?: () => void,
86
103
  )}
87
104
  <button
88
105
  type="button"
89
- class="np-date-picker-menu-button"
106
+ class="np-date-picker-menu-button np-focus-ring"
90
107
  aria-label="{accessibleLabel}, {label}"
108
+ aria-describedby={disabled ? undefined : tooltipId}
91
109
  aria-haspopup="listbox"
92
110
  aria-expanded={expanded}
93
111
  aria-controls={expanded ? controls : undefined}
@@ -102,32 +120,45 @@
102
120
  <Ripple />
103
121
  {/if}
104
122
  </button>
123
+ {#if !disabled}
124
+ <Tooltip id={tooltipId}>{withShortcut(accessibleLabel, key)}</Tooltip>
125
+ {/if}
105
126
  {/snippet}
106
127
 
107
128
  <div {...attributes} class={['np-date-picker-header', attributes.class]}>
108
129
  <div class="np-date-picker-header-group">
109
- {@render stepper(previousMonthLabel, canPreviousMonth, false, onpreviousmonth)}
130
+ {@render stepper(
131
+ previousMonthLabel,
132
+ keys.previousMonth,
133
+ canPreviousMonth,
134
+ false,
135
+ onpreviousmonth,
136
+ )}
110
137
  {@render menuButton(
111
138
  monthLabel,
112
139
  selectMonthLabel,
140
+ keys.monthList,
113
141
  mode === 'months',
114
142
  mode === 'years',
115
143
  monthListId,
144
+ `${uid}-month-tip`,
116
145
  ontogglemonths,
117
146
  )}
118
- {@render stepper(nextMonthLabel, canNextMonth, true, onnextmonth)}
147
+ {@render stepper(nextMonthLabel, keys.nextMonth, canNextMonth, true, onnextmonth)}
119
148
  </div>
120
149
  <div class="np-date-picker-header-group">
121
- {@render stepper(previousYearLabel, canPreviousYear, false, onpreviousyear)}
150
+ {@render stepper(previousYearLabel, keys.previousYear, canPreviousYear, false, onpreviousyear)}
122
151
  {@render menuButton(
123
152
  yearLabel,
124
153
  selectYearLabel,
154
+ keys.yearList,
125
155
  mode === 'years',
126
156
  mode === 'months',
127
157
  yearListId,
158
+ `${uid}-year-tip`,
128
159
  ontoggleyears,
129
160
  )}
130
- {@render stepper(nextYearLabel, canNextYear, true, onnextyear)}
161
+ {@render stepper(nextYearLabel, keys.nextYear, canNextYear, true, onnextyear)}
131
162
  </div>
132
163
  </div>
133
164
 
@@ -138,6 +169,10 @@
138
169
  justify-content: space-between;
139
170
  height: 1.5rem;
140
171
  color: var(--np-date-picker-header-color, var(--np-color-on-surface-variant));
172
+ --np-icon-button-icon-color: var(
173
+ --np-date-picker-header-color,
174
+ var(--np-color-on-surface-variant)
175
+ );
141
176
  }
142
177
 
143
178
  .np-date-picker-header-group {
@@ -146,24 +181,48 @@
146
181
  gap: 0.25rem;
147
182
  }
148
183
 
149
- .np-date-picker-stepper,
184
+ .np-date-picker-header-group:first-child {
185
+ margin-inline-start: -0.5rem;
186
+ }
187
+ .np-date-picker-header-group:last-child {
188
+ margin-inline-end: -0.5rem;
189
+ }
190
+
191
+ .np-date-picker-stepper {
192
+ display: flex;
193
+ flex: none;
194
+ }
195
+
196
+ .np-date-picker-stepper.hidden {
197
+ visibility: hidden;
198
+ opacity: 0;
199
+ }
200
+
201
+ @media (prefers-reduced-motion: no-preference) {
202
+ .np-date-picker-stepper {
203
+ transition:
204
+ opacity var(--np-motion-expressive-default-effects),
205
+ visibility var(--np-motion-expressive-default-effects);
206
+ }
207
+ }
208
+
150
209
  .np-date-picker-menu-button {
151
210
  font: inherit;
152
211
  -webkit-tap-highlight-color: transparent;
153
212
  background: none;
154
213
  border: 0;
155
- padding: 0;
156
214
  margin: 0;
157
215
  color: inherit;
158
216
  cursor: pointer;
159
217
  position: relative;
160
218
  display: flex;
161
219
  align-items: center;
220
+ gap: 0.25rem;
162
221
  height: 1.5rem;
222
+ padding: 0 0.5rem;
163
223
  border-radius: var(--np-shape-corner-full);
164
224
  }
165
225
 
166
- .np-date-picker-stepper::before,
167
226
  .np-date-picker-menu-button::before {
168
227
  content: '';
169
228
  position: absolute;
@@ -171,30 +230,6 @@
171
230
  inset-inline: 0;
172
231
  }
173
232
 
174
- .np-date-picker-stepper.hidden {
175
- visibility: hidden;
176
- opacity: 0;
177
- }
178
-
179
- @media (prefers-reduced-motion: no-preference) {
180
- .np-date-picker-stepper {
181
- transition:
182
- opacity var(--np-motion-expressive-default-effects),
183
- visibility var(--np-motion-expressive-default-effects);
184
- }
185
- }
186
-
187
- .np-date-picker-stepper {
188
- width: 1.5rem;
189
- justify-content: center;
190
- flex: none;
191
- }
192
-
193
- .np-date-picker-menu-button {
194
- gap: 0.25rem;
195
- padding-inline: 0.5rem;
196
- }
197
-
198
233
  .np-date-picker-menu-button-label {
199
234
  font-size: 0.875rem;
200
235
  line-height: 1.25rem;
@@ -212,27 +247,14 @@
212
247
  rotate: 180deg;
213
248
  }
214
249
 
215
- :global(.np-date-picker-stepper svg) {
216
- width: 1.5rem;
217
- height: 1.5rem;
218
- fill: currentColor;
219
- }
220
-
221
250
  :global(.np-date-picker-menu-button-caret svg) {
222
251
  width: 1.25rem;
223
252
  height: 1.25rem;
224
253
  fill: currentColor;
225
254
  }
226
255
 
227
- .np-date-picker-stepper:disabled,
228
256
  .np-date-picker-menu-button:disabled {
229
257
  cursor: default;
230
258
  color: color-mix(in srgb, var(--np-color-on-surface) 38%, transparent);
231
259
  }
232
-
233
- .np-date-picker-stepper:focus-visible,
234
- .np-date-picker-menu-button:focus-visible {
235
- outline: 3px solid var(--np-color-secondary);
236
- outline-offset: 2px;
237
- }
238
260
  </style>
@@ -1,4 +1,6 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { HTMLAttributes } from 'svelte/elements';
3
+ import type { DatePickerShortcutLabels } from './types.js';
2
4
  interface CalendarHeaderProps extends HTMLAttributes<HTMLDivElement> {
3
5
  monthLabel: string;
4
6
  yearLabel: string;
@@ -13,6 +15,7 @@ interface CalendarHeaderProps extends HTMLAttributes<HTMLDivElement> {
13
15
  nextYearLabel: string;
14
16
  selectMonthLabel: string;
15
17
  selectYearLabel: string;
18
+ shortcutLabels?: Partial<DatePickerShortcutLabels>;
16
19
  monthListId: string;
17
20
  yearListId: string;
18
21
  onpreviousmonth?: () => void;