noph-ui 0.40.2 → 0.40.3

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 (37) hide show
  1. package/dist/button/Button.svelte +2 -12
  2. package/dist/button/Button.svelte.d.ts +1 -0
  3. package/dist/button/IconButton.svelte +2 -12
  4. package/dist/button/IconButton.svelte.d.ts +1 -0
  5. package/dist/button/SegmentedButton.svelte +9 -22
  6. package/dist/button/SegmentedButton.svelte.d.ts +1 -0
  7. package/dist/card/Card.svelte +2 -12
  8. package/dist/card/Card.svelte.d.ts +1 -0
  9. package/dist/checkbox/Checkbox.svelte +2 -12
  10. package/dist/checkbox/Checkbox.svelte.d.ts +1 -0
  11. package/dist/chip/FilterChip.svelte +2 -12
  12. package/dist/chip/FilterChip.svelte.d.ts +1 -0
  13. package/dist/chip/InputChip.svelte +2 -12
  14. package/dist/chip/InputChip.svelte.d.ts +1 -0
  15. package/dist/dialog/Dialog.svelte +3 -3
  16. package/dist/internal/focus-ring.css +26 -0
  17. package/dist/list/Item.svelte +2 -15
  18. package/dist/list/Item.svelte.d.ts +1 -0
  19. package/dist/menu/Menu.svelte +1 -1
  20. package/dist/navigation-drawer/NavigationDrawer.svelte +4 -4
  21. package/dist/navigation-drawer/NavigationDrawerItem.svelte +2 -15
  22. package/dist/navigation-drawer/NavigationDrawerItem.svelte.d.ts +1 -0
  23. package/dist/navigation-rail/NavigationRailItem.svelte +2 -12
  24. package/dist/navigation-rail/NavigationRailItem.svelte.d.ts +1 -0
  25. package/dist/progress/CircularProgress.svelte +26 -0
  26. package/dist/progress/LinearProgress.svelte +36 -0
  27. package/dist/radio/Radio.svelte +2 -12
  28. package/dist/radio/Radio.svelte.d.ts +1 -0
  29. package/dist/ripple/Ripple.svelte +2 -2
  30. package/dist/select/Option.svelte +2 -16
  31. package/dist/select/Option.svelte.d.ts +1 -0
  32. package/dist/select/Select.svelte +1 -7
  33. package/dist/switch/Switch.svelte +2 -12
  34. package/dist/switch/Switch.svelte.d.ts +1 -0
  35. package/dist/tabs/Tab.svelte +2 -15
  36. package/dist/tabs/Tab.svelte.d.ts +1 -0
  37. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import CircularProgress from '../progress/CircularProgress.svelte'
3
4
  import Ripple from '../ripple/Ripple.svelte'
4
5
  import Tooltip from '../tooltip/Tooltip.svelte'
@@ -285,18 +286,7 @@
285
286
  outline-color: var(--np-color-secondary);
286
287
  outline-width: 3px;
287
288
  outline-offset: 2px;
288
- animation: focusAnimation 0.3s ease forwards;
289
- }
290
- @keyframes focusAnimation {
291
- 0% {
292
- outline-width: 3px;
293
- }
294
- 50% {
295
- outline-width: 6px;
296
- }
297
- 100% {
298
- outline-width: 3px;
299
- }
289
+ animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
300
290
  }
301
291
  .text {
302
292
  --np-ripple-hover-color: var(--np-text-button-label-text-color, var(--np-color-primary));
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { ButtonProps } from './types.ts';
2
3
  declare const Button: import("svelte").Component<ButtonProps, {}, "element" | "selected">;
3
4
  type Button = ReturnType<typeof Button>;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import CircularProgress from '../progress/CircularProgress.svelte'
3
4
  import Ripple from '../ripple/Ripple.svelte'
4
5
  import Tooltip from '../tooltip/Tooltip.svelte'
@@ -290,18 +291,7 @@
290
291
  outline-color: var(--np-color-secondary);
291
292
  outline-width: 3px;
292
293
  outline-offset: 2px;
293
- animation: focusAnimation 0.3s ease forwards;
294
- }
295
- @keyframes focusAnimation {
296
- 0% {
297
- outline-width: 3px;
298
- }
299
- 50% {
300
- outline-width: 6px;
301
- }
302
- 100% {
303
- outline-width: 3px;
304
- }
294
+ animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
305
295
  }
306
296
  .text {
307
297
  --np-ripple-hover-color: var(--np-icon-button-icon-color, var(--np-color-on-surface-variant));
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { IconButtonProps } from './types.ts';
2
3
  declare const IconButton: import("svelte").Component<IconButtonProps, {}, "element" | "selected">;
3
4
  type IconButton = ReturnType<typeof IconButton>;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import CheckIcon from '../icons/CheckIcon.svelte'
3
4
  import Ripple from '../ripple/Ripple.svelte'
4
5
  import type { SegmentedButtonProps } from './types.js'
@@ -109,7 +110,7 @@
109
110
  align-items: center;
110
111
  border-inline-end: 1px solid var(--np-color-outline);
111
112
  position: relative;
112
- transition: all 0.15s linear;
113
+ transition: all var(--np-motion-expressive-fast-effects);
113
114
  }
114
115
  .np-segmented-button-icon-label {
115
116
  display: inline-flex;
@@ -142,7 +143,7 @@
142
143
  inset: 0;
143
144
  z-index: -1;
144
145
  opacity: 0;
145
- transition: opacity 0.15s linear;
146
+ transition: opacity var(--np-motion-expressive-fast-effects);
146
147
  background-color: var(--np-color-secondary-container);
147
148
  }
148
149
  .width-icon,
@@ -160,7 +161,7 @@
160
161
  width: 0;
161
162
  overflow: hidden;
162
163
  fill: currentColor;
163
- transition: width 0.3s ease;
164
+ transition: width var(--np-motion-expressive-slow-effects);
164
165
  }
165
166
  :global(.check-icon svg) {
166
167
  display: block;
@@ -168,14 +169,14 @@
168
169
  .check-icon-wrapper {
169
170
  width: 0;
170
171
  overflow: hidden;
171
- transition: width 0.15s linear;
172
+ transition: width var(--np-motion-expressive-fast-effects);
172
173
  }
173
174
  .alternate-icon {
174
175
  display: flex;
175
176
  width: 1.5rem;
176
177
  overflow: hidden;
177
178
  fill: currentColor;
178
- transition: width 0.3s ease;
179
+ transition: width var(--np-motion-expressive-slow-effects);
179
180
  }
180
181
  :global(.alternate-icon svg) {
181
182
  display: block;
@@ -186,8 +187,8 @@
186
187
  width: 2rem;
187
188
  overflow: hidden;
188
189
  transition:
189
- width 0.15s linear,
190
- opacity 0.15s linear;
190
+ width var(--np-motion-expressive-fast-effects),
191
+ opacity var(--np-motion-expressive-fast-effects);
191
192
  }
192
193
  .np-segmented-button:has(input:checked) :global(.alternate-icon-wrapper) {
193
194
  width: 0;
@@ -212,20 +213,6 @@
212
213
  outline-color: var(--np-color-secondary);
213
214
  outline-width: 3px;
214
215
  outline-offset: -3px;
215
- animation: focusAnimation 0.3s ease forwards;
216
- }
217
- @keyframes focusAnimation {
218
- 0% {
219
- outline-offset: -3px;
220
- outline-width: 3px;
221
- }
222
- 50% {
223
- outline-offset: -6px;
224
- outline-width: 6px;
225
- }
226
- 100% {
227
- outline-offset: -3px;
228
- outline-width: 3px;
229
- }
216
+ animation: focusAnimationInset var(--np-motion-expressive-slow-effects) forwards;
230
217
  }
231
218
  </style>
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { SegmentedButtonProps } from './types.ts';
2
3
  declare const SegmentedButton: import("svelte").Component<SegmentedButtonProps, {}, "element" | "group">;
3
4
  type SegmentedButton = ReturnType<typeof SegmentedButton>;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import Ripple from '../ripple/Ripple.svelte'
3
4
  import type { CardProps } from './types.js'
4
5
 
@@ -158,18 +159,7 @@
158
159
  outline-color: var(--np-color-secondary);
159
160
  outline-width: 3px;
160
161
  outline-offset: 2px;
161
- animation: focusAnimation 0.3s ease forwards;
162
- }
163
- @keyframes focusAnimation {
164
- 0% {
165
- outline-width: 3px;
166
- }
167
- 50% {
168
- outline-width: 6px;
169
- }
170
- 100% {
171
- outline-width: 3px;
172
- }
162
+ animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
173
163
  }
174
164
  .np-card-disabled {
175
165
  opacity: 0.38;
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { CardProps } from './types.ts';
2
3
  declare const Card: import("svelte").Component<CardProps, {}, "element">;
3
4
  type Card = ReturnType<typeof Card>;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import Ripple from '../ripple/Ripple.svelte'
3
4
  import type { CheckboxProps } from './types.js'
4
5
 
@@ -128,18 +129,7 @@
128
129
  outline-color: var(--np-color-secondary);
129
130
  outline-width: 3px;
130
131
  outline-offset: 2px;
131
- animation: focusAnimation 0.3s ease forwards;
132
- }
133
- @keyframes focusAnimation {
134
- 0% {
135
- outline-width: 3px;
136
- }
137
- 50% {
138
- outline-width: 6px;
139
- }
140
- 100% {
141
- outline-width: 3px;
142
- }
132
+ animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
143
133
  }
144
134
  .np-outline,
145
135
  .np-background,
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { CheckboxProps } from './types.ts';
2
3
  declare const Checkbox: import("svelte").Component<CheckboxProps, {}, "element" | "group" | "checked" | "indeterminate">;
3
4
  type Checkbox = ReturnType<typeof Checkbox>;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import IconButton from '../button/IconButton.svelte'
3
4
  import CheckIcon from '../icons/CheckIcon.svelte'
4
5
  import CloseIcon from '../icons/CloseIcon.svelte'
@@ -237,18 +238,7 @@
237
238
  outline-color: var(--np-color-secondary);
238
239
  outline-width: 3px;
239
240
  outline-offset: 2px;
240
- animation: focusAnimation 0.3s ease forwards;
241
- }
242
- @keyframes focusAnimation {
243
- 0% {
244
- outline-width: 3px;
245
- }
246
- 50% {
247
- outline-width: 6px;
248
- }
249
- 100% {
250
- outline-width: 3px;
251
- }
241
+ animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
252
242
  }
253
243
 
254
244
  .np-filter-chip-disabled .np-filter-chip-label {
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { FilterChipProps } from './types.ts';
2
3
  declare const FilterChip: import("svelte").Component<FilterChipProps, {}, "element" | "selected" | "group">;
3
4
  type FilterChip = ReturnType<typeof FilterChip>;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import IconButton from '../button/IconButton.svelte'
3
4
  import CloseIcon from '../icons/CloseIcon.svelte'
4
5
  import Ripple from '../ripple/Ripple.svelte'
@@ -149,18 +150,7 @@
149
150
  outline-color: var(--np-color-secondary);
150
151
  outline-width: 3px;
151
152
  outline-offset: 2px;
152
- animation: focusAnimation 0.3s ease forwards;
153
- }
154
- @keyframes focusAnimation {
155
- 0% {
156
- outline-width: 3px;
157
- }
158
- 50% {
159
- outline-width: 6px;
160
- }
161
- 100% {
162
- outline-width: 3px;
163
- }
153
+ animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
164
154
  }
165
155
 
166
156
  .np-input-chip-disabled .np-input-chip-label {
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { InputChipProps } from './types.ts';
2
3
  declare const InputChip: import("svelte").Component<InputChipProps, {}, "element" | "selected" | "actionElement">;
3
4
  type InputChip = ReturnType<typeof InputChip>;
@@ -156,9 +156,9 @@
156
156
 
157
157
  .np-animate[popover] {
158
158
  transition:
159
- opacity 0.25s ease,
160
- display 0.25s allow-discrete,
161
- overlay 0.25s allow-discrete;
159
+ opacity var(--np-motion-expressive-slow-effects),
160
+ display var(--np-motion-expressive-slow-effects) allow-discrete,
161
+ overlay var(--np-motion-expressive-slow-effects) allow-discrete;
162
162
  opacity: 0;
163
163
  }
164
164
  .np-animate[popover]:popover-open {
@@ -0,0 +1,26 @@
1
+ @keyframes focusAnimation {
2
+ 0% {
3
+ outline-width: 3px;
4
+ }
5
+ 50% {
6
+ outline-width: 6px;
7
+ }
8
+ 100% {
9
+ outline-width: 3px;
10
+ }
11
+ }
12
+
13
+ @keyframes focusAnimationInset {
14
+ 0% {
15
+ outline-offset: -3px;
16
+ outline-width: 3px;
17
+ }
18
+ 50% {
19
+ outline-offset: -6px;
20
+ outline-width: 6px;
21
+ }
22
+ 100% {
23
+ outline-offset: -3px;
24
+ outline-width: 3px;
25
+ }
26
+ }
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import Ripple from '../ripple/Ripple.svelte'
3
4
  import type { ItemProps } from './types.js'
4
5
 
@@ -150,21 +151,7 @@
150
151
  outline-width: 3px;
151
152
  outline-offset: -3px;
152
153
  border-radius: var(--np-shape-corner-extra-small);
153
- animation: focusAnimation 0.3s ease forwards;
154
- }
155
- @keyframes focusAnimation {
156
- 0% {
157
- outline-offset: -3px;
158
- outline-width: 3px;
159
- }
160
- 50% {
161
- outline-offset: -6px;
162
- outline-width: 6px;
163
- }
164
- 100% {
165
- outline-offset: -3px;
166
- outline-width: 3px;
167
- }
154
+ animation: focusAnimationInset var(--np-motion-expressive-slow-effects) forwards;
168
155
  }
169
156
 
170
157
  div.np-item {
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { ItemProps } from './types.ts';
2
3
  declare const Item: import("svelte").Component<ItemProps, {}, "">;
3
4
  type Item = ReturnType<typeof Item>;
@@ -112,7 +112,7 @@
112
112
 
113
113
  .np-menu-container:popover-open {
114
114
  opacity: 1;
115
- animation: fadeIn 0.2s linear;
115
+ animation: fadeIn var(--np-motion-expressive-default-effects);
116
116
  }
117
117
  @keyframes fadeIn {
118
118
  0% {
@@ -110,13 +110,13 @@
110
110
 
111
111
  .np-navigation-drawer-container[popover] .np-navigation-wrapper {
112
112
  transform: var(--np-navigation-drawer-start, translateX(-100%));
113
- transition: transform var(--np-motion-expressive-slow-effects);
113
+ transition: transform var(--np-motion-standard-slow-spatial);
114
114
  }
115
115
 
116
116
  .np-navigation-drawer-container[popover] {
117
117
  transition:
118
- overlay 0.3s allow-discrete,
119
- display 0.3s allow-discrete;
118
+ overlay var(--np-motion-standard-slow-spatial) allow-discrete,
119
+ display var(--np-motion-standard-slow-spatial) allow-discrete;
120
120
  }
121
121
 
122
122
  .np-navigation-drawer-container:popover-open .np-navigation-wrapper {
@@ -139,7 +139,7 @@
139
139
  position: fixed;
140
140
  background-color: var(--np-color-scrim);
141
141
  opacity: 0;
142
- transition: opacity 0.25s ease;
142
+ transition: opacity var(--np-motion-expressive-slow-effects);
143
143
  }
144
144
  .np-navigation-drawer-backdrop[popover]:popover-open .np-backdrop {
145
145
  opacity: 0.32;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import Ripple from '../ripple/Ripple.svelte'
3
4
  import type { HTMLButtonAttributes } from 'svelte/elements'
4
5
  import type { NavigationDrawerItemProps } from './types.js'
@@ -103,21 +104,7 @@
103
104
  }
104
105
  @media (prefers-reduced-motion: no-preference) {
105
106
  .np-navigation-drawer-item:focus-visible {
106
- animation: focusAnimation 0.3s ease forwards;
107
- }
108
- }
109
- @keyframes focusAnimation {
110
- 0% {
111
- outline-offset: -3px;
112
- outline-width: 3px;
113
- }
114
- 50% {
115
- outline-offset: -6px;
116
- outline-width: 6px;
117
- }
118
- 100% {
119
- outline-offset: -3px;
120
- outline-width: 3px;
107
+ animation: focusAnimationInset var(--np-motion-expressive-slow-effects) forwards;
121
108
  }
122
109
  }
123
110
  .np-navigation-drawer-item-icon {
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { NavigationDrawerItemProps } from './types.ts';
2
3
  declare const NavigationDrawerItem: import("svelte").Component<NavigationDrawerItemProps, {}, "">;
3
4
  type NavigationDrawerItem = ReturnType<typeof NavigationDrawerItem>;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import Ripple from '../ripple/Ripple.svelte'
3
4
  import type { HTMLButtonAttributes } from 'svelte/elements'
4
5
  import type { NavigationRailItemProps } from './types.js'
@@ -60,18 +61,7 @@
60
61
  }
61
62
  @media (prefers-reduced-motion: no-preference) {
62
63
  .np-navigation-action:focus-visible {
63
- animation: focusAnimation 0.3s ease forwards;
64
- }
65
- }
66
- @keyframes focusAnimation {
67
- 0% {
68
- outline-width: 3px;
69
- }
70
- 50% {
71
- outline-width: 6px;
72
- }
73
- 100% {
74
- outline-width: 3px;
64
+ animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
75
65
  }
76
66
  }
77
67
  .np-navigation-action-icon {
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { NavigationRailItemProps } from './types.ts';
2
3
  declare const NavigationRailItem: import("svelte").Component<NavigationRailItemProps, {}, "">;
3
4
  type NavigationRailItem = ReturnType<typeof NavigationRailItem>;
@@ -298,6 +298,11 @@
298
298
  animation-duration: 6000ms, calc(4 * 1333ms);
299
299
  }
300
300
 
301
+ .four-color .spinner-track {
302
+ animation-name: cp-track-sweep, four-color-track;
303
+ animation-duration: 6000ms, calc(4 * 1333ms);
304
+ }
305
+
301
306
  @media (forced-colors: active) {
302
307
  .active-track {
303
308
  stroke: CanvasText;
@@ -328,4 +333,25 @@
328
333
  stroke: var(--np-color-primary);
329
334
  }
330
335
  }
336
+ @keyframes four-color-track {
337
+ 0%,
338
+ 15% {
339
+ stroke: var(--np-color-primary-container);
340
+ }
341
+ 25%,
342
+ 40% {
343
+ stroke: var(--np-color-primary);
344
+ }
345
+ 50%,
346
+ 65% {
347
+ stroke: var(--np-color-tertiary-container);
348
+ }
349
+ 75%,
350
+ 90% {
351
+ stroke: var(--np-color-tertiary);
352
+ }
353
+ 100% {
354
+ stroke: var(--np-color-primary-container);
355
+ }
356
+ }
331
357
  </style>
@@ -378,6 +378,10 @@
378
378
  border-radius: var(--np-linear-progress-track-shape, var(--np-shape-corner-full));
379
379
  }
380
380
 
381
+ .indeterminate.four-color .np-lp-track {
382
+ animation: four-color-track calc(1750ms * 4) linear infinite;
383
+ }
384
+
381
385
  .np-lp-track.ahead {
382
386
  left: min(calc(var(--np-lp-h1) + var(--np-linear-progress-track-gap, 0.25rem)), 100%);
383
387
  right: 0;
@@ -572,6 +576,38 @@
572
576
  }
573
577
  }
574
578
 
579
+ @keyframes four-color-track {
580
+ 0% {
581
+ background: var(--np-color-primary-container);
582
+ }
583
+
584
+ 15% {
585
+ background: var(--np-color-primary-container);
586
+ }
587
+ 25% {
588
+ background: var(--np-color-primary);
589
+ }
590
+ 40% {
591
+ background: var(--np-color-primary);
592
+ }
593
+
594
+ 50% {
595
+ background: var(--np-color-tertiary-container);
596
+ }
597
+ 65% {
598
+ background: var(--np-color-tertiary-container);
599
+ }
600
+ 75% {
601
+ background: var(--np-color-tertiary);
602
+ }
603
+ 90% {
604
+ background: var(--np-color-tertiary);
605
+ }
606
+ 100% {
607
+ background: var(--np-color-primary-container);
608
+ }
609
+ }
610
+
575
611
  @media (forced-colors: active) {
576
612
  .np-container {
577
613
  outline: 1px solid CanvasText;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import Ripple from '../ripple/Ripple.svelte'
3
4
  import type { RadioProps } from './types.js'
4
5
 
@@ -127,17 +128,6 @@
127
128
  outline-color: var(--np-color-secondary);
128
129
  outline-width: 3px;
129
130
  outline-offset: 2px;
130
- animation: focusAnimation 0.3s ease forwards;
131
- }
132
- @keyframes focusAnimation {
133
- 0% {
134
- outline-width: 3px;
135
- }
136
- 50% {
137
- outline-width: 6px;
138
- }
139
- 100% {
140
- outline-width: 3px;
141
- }
131
+ animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
142
132
  }
143
133
  </style>
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { RadioProps } from './types.ts';
2
3
  declare const Radio: import("svelte").Component<RadioProps, {}, "element" | "group">;
3
4
  type Radio = ReturnType<typeof Radio>;
@@ -339,7 +339,7 @@
339
339
  transparent 100%
340
340
  );
341
341
  transform-origin: center center;
342
- transition: opacity 375ms linear;
342
+ transition: opacity var(--np-motion-expressive-slow-effects);
343
343
  }
344
344
  }
345
345
 
@@ -351,6 +351,6 @@
351
351
 
352
352
  .np-ripple-pressed::after {
353
353
  opacity: var(--np-ripple-pressed-opacity, 0.1);
354
- transition-duration: 105ms;
354
+ transition: opacity var(--np-motion-expressive-fast-effects);
355
355
  }
356
356
  </style>
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import Ripple from '../ripple/Ripple.svelte'
3
4
  import type { Snippet } from 'svelte'
4
5
  import type { HTMLOptionAttributes } from 'svelte/elements'
@@ -58,22 +59,7 @@
58
59
  outline-width: 3px;
59
60
  outline-offset: -3px;
60
61
  border-radius: var(--np-shape-corner-extra-small);
61
- animation: focusAnimation 0.3s ease forwards;
62
- }
63
- }
64
-
65
- @keyframes focusAnimation {
66
- 0% {
67
- outline-offset: -3px;
68
- outline-width: 3px;
69
- }
70
- 50% {
71
- outline-offset: -6px;
72
- outline-width: 6px;
73
- }
74
- 100% {
75
- outline-offset: -3px;
76
- outline-width: 3px;
62
+ animation: focusAnimationInset var(--np-motion-expressive-slow-effects) forwards;
77
63
  }
78
64
  }
79
65
  </style>
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { Snippet } from 'svelte';
2
3
  import type { HTMLOptionAttributes } from 'svelte/elements';
3
4
  interface OptionProps extends HTMLOptionAttributes {
@@ -806,15 +806,9 @@
806
806
  opacity: 1;
807
807
  }
808
808
 
809
- .field:not(:has(select:is(:user-invalid, [aria-invalid='true']))).menu-open .arrow,
810
- .field:not(:has(select:is(:user-invalid, [aria-invalid='true']))):focus .arrow {
811
- color: var(--np-color-primary);
812
- }
813
809
  .icon .arrow {
814
810
  display: flex;
815
- transition:
816
- color 75ms linear 75ms,
817
- rotate 150ms cubic-bezier(0.2, 0, 0, 1);
811
+ transition: rotate 150ms cubic-bezier(0.2, 0, 0, 1);
818
812
  }
819
813
  .field.menu-open .icon .arrow {
820
814
  rotate: 180deg;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import Ripple from '../ripple/Ripple.svelte'
3
4
  import type { SwitchProps } from './types.js'
4
5
 
@@ -193,17 +194,6 @@
193
194
  outline-color: var(--np-color-secondary);
194
195
  outline-width: 3px;
195
196
  outline-offset: -2px;
196
- animation: focusAnimation 0.3s ease forwards;
197
- }
198
- @keyframes focusAnimation {
199
- 0% {
200
- outline-width: 3px;
201
- }
202
- 50% {
203
- outline-width: 6px;
204
- }
205
- 100% {
206
- outline-width: 3px;
207
- }
197
+ animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
208
198
  }
209
199
  </style>
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { SwitchProps } from './types.ts';
2
3
  declare const Switch: import("svelte").Component<SwitchProps, {}, "element" | "selected" | "inputElement">;
3
4
  type Switch = ReturnType<typeof Switch>;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import '../internal/focus-ring.css'
2
3
  import Badge from '../badge/Badge.svelte'
3
4
  import Ripple from '../ripple/Ripple.svelte'
4
5
  import { tick } from 'svelte'
@@ -226,20 +227,6 @@
226
227
  outline-color: var(--np-color-secondary);
227
228
  outline-width: 3px;
228
229
  outline-offset: -3px;
229
- animation: focusAnimation 0.3s ease forwards;
230
- }
231
- @keyframes focusAnimation {
232
- 0% {
233
- outline-offset: -3px;
234
- outline-width: 3px;
235
- }
236
- 50% {
237
- outline-offset: -6px;
238
- outline-width: 6px;
239
- }
240
- 100% {
241
- outline-offset: -3px;
242
- outline-width: 3px;
243
- }
230
+ animation: focusAnimationInset var(--np-motion-expressive-slow-effects) forwards;
244
231
  }
245
232
  </style>
@@ -1,3 +1,4 @@
1
+ import '../internal/focus-ring.css';
1
2
  import type { TabProps } from './types.ts';
2
3
  declare const Tab: import("svelte").Component<TabProps, {}, "element">;
3
4
  type Tab = ReturnType<typeof Tab>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "noph-ui",
3
- "version": "0.40.2",
3
+ "version": "0.40.3",
4
4
  "license": "MIT",
5
5
  "homepage": "https://noph.dev",
6
6
  "repository": {