@react-spectrum/s2 0.7.1 → 0.8.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 (346) hide show
  1. package/dist/ActionBar.cjs.map +1 -1
  2. package/dist/ActionBar.css.map +1 -1
  3. package/dist/ActionBar.mjs.map +1 -1
  4. package/dist/ActionButton.cjs +26 -7
  5. package/dist/ActionButton.cjs.map +1 -1
  6. package/dist/ActionButton.css +74 -18
  7. package/dist/ActionButton.css.map +1 -1
  8. package/dist/ActionButton.mjs +26 -7
  9. package/dist/ActionButton.mjs.map +1 -1
  10. package/dist/Add.cjs.map +1 -1
  11. package/dist/Add.mjs.map +1 -1
  12. package/dist/Asterisk.cjs.map +1 -1
  13. package/dist/Asterisk.mjs.map +1 -1
  14. package/dist/Breadcrumbs.cjs.map +1 -1
  15. package/dist/Breadcrumbs.css.map +1 -1
  16. package/dist/Breadcrumbs.mjs.map +1 -1
  17. package/dist/Button.cjs.map +1 -1
  18. package/dist/Button.css.map +1 -1
  19. package/dist/Button.mjs.map +1 -1
  20. package/dist/ButtonGroup.cjs +3 -2
  21. package/dist/ButtonGroup.cjs.map +1 -1
  22. package/dist/ButtonGroup.css.map +1 -1
  23. package/dist/ButtonGroup.mjs +3 -2
  24. package/dist/ButtonGroup.mjs.map +1 -1
  25. package/dist/Card.cjs +1 -1
  26. package/dist/Card.cjs.map +1 -1
  27. package/dist/Card.css.map +1 -1
  28. package/dist/Card.mjs +1 -1
  29. package/dist/Card.mjs.map +1 -1
  30. package/dist/CenterBaseline.cjs.map +1 -1
  31. package/dist/CenterBaseline.css.map +1 -1
  32. package/dist/CenterBaseline.mjs.map +1 -1
  33. package/dist/Checkmark.cjs.map +1 -1
  34. package/dist/Checkmark.mjs.map +1 -1
  35. package/dist/Chevron.cjs.map +1 -1
  36. package/dist/Chevron.mjs.map +1 -1
  37. package/dist/ColorHandle.cjs.map +1 -1
  38. package/dist/ColorHandle.css.map +1 -1
  39. package/dist/ColorHandle.mjs.map +1 -1
  40. package/dist/ColorSwatchPicker.cjs +2 -2
  41. package/dist/ColorSwatchPicker.cjs.map +1 -1
  42. package/dist/ColorSwatchPicker.css.map +1 -1
  43. package/dist/ColorSwatchPicker.mjs +2 -2
  44. package/dist/ColorSwatchPicker.mjs.map +1 -1
  45. package/dist/ComboBox.cjs.map +1 -1
  46. package/dist/ComboBox.css.map +1 -1
  47. package/dist/ComboBox.mjs.map +1 -1
  48. package/dist/Content.cjs +6 -6
  49. package/dist/Content.cjs.map +1 -1
  50. package/dist/Content.mjs +6 -6
  51. package/dist/Content.mjs.map +1 -1
  52. package/dist/Cross.cjs.map +1 -1
  53. package/dist/Cross.mjs.map +1 -1
  54. package/dist/Dash.cjs.map +1 -1
  55. package/dist/Dash.mjs.map +1 -1
  56. package/dist/DialogContainer.cjs.map +1 -1
  57. package/dist/DialogContainer.mjs.map +1 -1
  58. package/dist/DialogTrigger.cjs.map +1 -1
  59. package/dist/DialogTrigger.mjs.map +1 -1
  60. package/dist/Disclosure.cjs +24 -21
  61. package/dist/Disclosure.cjs.map +1 -1
  62. package/dist/Disclosure.css +12 -20
  63. package/dist/Disclosure.css.map +1 -1
  64. package/dist/Disclosure.mjs +24 -21
  65. package/dist/Disclosure.mjs.map +1 -1
  66. package/dist/Divider.cjs +6 -0
  67. package/dist/Divider.cjs.map +1 -1
  68. package/dist/Divider.css +8 -0
  69. package/dist/Divider.css.map +1 -1
  70. package/dist/Divider.mjs +6 -0
  71. package/dist/Divider.mjs.map +1 -1
  72. package/dist/Field.cjs.map +1 -1
  73. package/dist/Field.css.map +1 -1
  74. package/dist/Field.mjs.map +1 -1
  75. package/dist/Image.cjs +1 -1
  76. package/dist/Image.cjs.map +1 -1
  77. package/dist/Image.css.map +1 -1
  78. package/dist/Image.mjs +1 -1
  79. package/dist/Image.mjs.map +1 -1
  80. package/dist/ImageCoordinator.cjs.map +1 -1
  81. package/dist/ImageCoordinator.mjs.map +1 -1
  82. package/dist/Link.cjs.map +1 -1
  83. package/dist/Link.css.map +1 -1
  84. package/dist/Link.mjs.map +1 -1
  85. package/dist/LinkOut.cjs.map +1 -1
  86. package/dist/LinkOut.mjs.map +1 -1
  87. package/dist/Menu.cjs.map +1 -1
  88. package/dist/Menu.css.map +1 -1
  89. package/dist/Menu.mjs.map +1 -1
  90. package/dist/NotificationBadge.cjs +163 -0
  91. package/dist/NotificationBadge.cjs.map +1 -0
  92. package/dist/NotificationBadge.css +227 -0
  93. package/dist/NotificationBadge.css.map +1 -0
  94. package/dist/NotificationBadge.mjs +157 -0
  95. package/dist/NotificationBadge.mjs.map +1 -0
  96. package/dist/Picker.cjs.map +1 -1
  97. package/dist/Picker.css.map +1 -1
  98. package/dist/Picker.mjs.map +1 -1
  99. package/dist/Provider.cjs.map +1 -1
  100. package/dist/Provider.css.map +1 -1
  101. package/dist/Provider.mjs.map +1 -1
  102. package/dist/Slider.cjs.map +1 -1
  103. package/dist/Slider.css.map +1 -1
  104. package/dist/Slider.mjs.map +1 -1
  105. package/dist/StatusLight.cjs +2 -2
  106. package/dist/StatusLight.cjs.map +1 -1
  107. package/dist/StatusLight.css.map +1 -1
  108. package/dist/StatusLight.mjs +2 -2
  109. package/dist/StatusLight.mjs.map +1 -1
  110. package/dist/Tabs.cjs +1 -0
  111. package/dist/Tabs.cjs.map +1 -1
  112. package/dist/Tabs.css.map +1 -1
  113. package/dist/Tabs.mjs +1 -0
  114. package/dist/Tabs.mjs.map +1 -1
  115. package/dist/TabsPicker.cjs.map +1 -1
  116. package/dist/TabsPicker.css.map +1 -1
  117. package/dist/TabsPicker.mjs.map +1 -1
  118. package/dist/Toast.cjs +557 -0
  119. package/dist/Toast.cjs.map +1 -0
  120. package/dist/Toast.css +461 -0
  121. package/dist/Toast.css.map +1 -0
  122. package/dist/Toast.mjs +551 -0
  123. package/dist/Toast.mjs.map +1 -0
  124. package/dist/Toast_module.cjs +70 -0
  125. package/dist/Toast_module.cjs.map +1 -0
  126. package/dist/Toast_module.css +119 -0
  127. package/dist/Toast_module.css.map +1 -0
  128. package/dist/Toast_module.mjs +72 -0
  129. package/dist/Toast_module.mjs.map +1 -0
  130. package/dist/ToggleButton.cjs.map +1 -1
  131. package/dist/ToggleButton.css.map +1 -1
  132. package/dist/ToggleButton.mjs.map +1 -1
  133. package/dist/Tooltip.cjs.map +1 -1
  134. package/dist/Tooltip.css.map +1 -1
  135. package/dist/Tooltip.mjs.map +1 -1
  136. package/dist/TreeView.cjs.map +1 -1
  137. package/dist/TreeView.css.map +1 -1
  138. package/dist/TreeView.mjs.map +1 -1
  139. package/dist/ar-AE.cjs +6 -1
  140. package/dist/ar-AE.cjs.map +1 -1
  141. package/dist/ar-AE.mjs +6 -1
  142. package/dist/ar-AE.mjs.map +1 -1
  143. package/dist/bg-BG.cjs +6 -1
  144. package/dist/bg-BG.cjs.map +1 -1
  145. package/dist/bg-BG.mjs +6 -1
  146. package/dist/bg-BG.mjs.map +1 -1
  147. package/dist/cs-CZ.cjs +10 -2
  148. package/dist/cs-CZ.cjs.map +1 -1
  149. package/dist/cs-CZ.mjs +10 -2
  150. package/dist/cs-CZ.mjs.map +1 -1
  151. package/dist/da-DK.cjs +8 -3
  152. package/dist/da-DK.cjs.map +1 -1
  153. package/dist/da-DK.mjs +8 -3
  154. package/dist/da-DK.mjs.map +1 -1
  155. package/dist/de-DE.cjs +7 -3
  156. package/dist/de-DE.cjs.map +1 -1
  157. package/dist/de-DE.mjs +7 -3
  158. package/dist/de-DE.mjs.map +1 -1
  159. package/dist/el-GR.cjs +6 -1
  160. package/dist/el-GR.cjs.map +1 -1
  161. package/dist/el-GR.mjs +6 -1
  162. package/dist/el-GR.mjs.map +1 -1
  163. package/dist/en-US.cjs +6 -1
  164. package/dist/en-US.cjs.map +1 -1
  165. package/dist/en-US.mjs +6 -1
  166. package/dist/en-US.mjs.map +1 -1
  167. package/dist/es-ES.cjs +10 -6
  168. package/dist/es-ES.cjs.map +1 -1
  169. package/dist/es-ES.mjs +10 -6
  170. package/dist/es-ES.mjs.map +1 -1
  171. package/dist/et-EE.cjs +6 -1
  172. package/dist/et-EE.cjs.map +1 -1
  173. package/dist/et-EE.mjs +6 -1
  174. package/dist/et-EE.mjs.map +1 -1
  175. package/dist/fi-FI.cjs +7 -2
  176. package/dist/fi-FI.cjs.map +1 -1
  177. package/dist/fi-FI.mjs +7 -2
  178. package/dist/fi-FI.mjs.map +1 -1
  179. package/dist/fr-FR.cjs +7 -3
  180. package/dist/fr-FR.cjs.map +1 -1
  181. package/dist/fr-FR.mjs +7 -3
  182. package/dist/fr-FR.mjs.map +1 -1
  183. package/dist/he-IL.cjs +9 -5
  184. package/dist/he-IL.cjs.map +1 -1
  185. package/dist/he-IL.mjs +9 -5
  186. package/dist/he-IL.mjs.map +1 -1
  187. package/dist/hr-HR.cjs +11 -3
  188. package/dist/hr-HR.cjs.map +1 -1
  189. package/dist/hr-HR.mjs +11 -3
  190. package/dist/hr-HR.mjs.map +1 -1
  191. package/dist/hu-HU.cjs +6 -1
  192. package/dist/hu-HU.cjs.map +1 -1
  193. package/dist/hu-HU.mjs +6 -1
  194. package/dist/hu-HU.mjs.map +1 -1
  195. package/dist/it-IT.cjs +6 -2
  196. package/dist/it-IT.cjs.map +1 -1
  197. package/dist/it-IT.mjs +6 -2
  198. package/dist/it-IT.mjs.map +1 -1
  199. package/dist/ja-JP.cjs +7 -2
  200. package/dist/ja-JP.cjs.map +1 -1
  201. package/dist/ja-JP.mjs +7 -2
  202. package/dist/ja-JP.mjs.map +1 -1
  203. package/dist/ko-KR.cjs +8 -3
  204. package/dist/ko-KR.cjs.map +1 -1
  205. package/dist/ko-KR.mjs +8 -3
  206. package/dist/ko-KR.mjs.map +1 -1
  207. package/dist/lt-LT.cjs +8 -3
  208. package/dist/lt-LT.cjs.map +1 -1
  209. package/dist/lt-LT.mjs +8 -3
  210. package/dist/lt-LT.mjs.map +1 -1
  211. package/dist/lv-LV.cjs +9 -4
  212. package/dist/lv-LV.cjs.map +1 -1
  213. package/dist/lv-LV.mjs +9 -4
  214. package/dist/lv-LV.mjs.map +1 -1
  215. package/dist/main.cjs +9 -0
  216. package/dist/main.cjs.map +1 -1
  217. package/dist/module.mjs +6 -2
  218. package/dist/module.mjs.map +1 -1
  219. package/dist/nb-NO.cjs +12 -4
  220. package/dist/nb-NO.cjs.map +1 -1
  221. package/dist/nb-NO.mjs +12 -4
  222. package/dist/nb-NO.mjs.map +1 -1
  223. package/dist/nl-NL.cjs +6 -1
  224. package/dist/nl-NL.cjs.map +1 -1
  225. package/dist/nl-NL.mjs +6 -1
  226. package/dist/nl-NL.mjs.map +1 -1
  227. package/dist/pl-PL.cjs +11 -3
  228. package/dist/pl-PL.cjs.map +1 -1
  229. package/dist/pl-PL.mjs +11 -3
  230. package/dist/pl-PL.mjs.map +1 -1
  231. package/dist/pressScale.cjs.map +1 -1
  232. package/dist/pressScale.mjs.map +1 -1
  233. package/dist/pt-BR.cjs +6 -1
  234. package/dist/pt-BR.cjs.map +1 -1
  235. package/dist/pt-BR.mjs +6 -1
  236. package/dist/pt-BR.mjs.map +1 -1
  237. package/dist/pt-PT.cjs +6 -1
  238. package/dist/pt-PT.cjs.map +1 -1
  239. package/dist/pt-PT.mjs +6 -1
  240. package/dist/pt-PT.mjs.map +1 -1
  241. package/dist/ro-RO.cjs +8 -4
  242. package/dist/ro-RO.cjs.map +1 -1
  243. package/dist/ro-RO.mjs +8 -4
  244. package/dist/ro-RO.mjs.map +1 -1
  245. package/dist/ru-RU.cjs +11 -3
  246. package/dist/ru-RU.cjs.map +1 -1
  247. package/dist/ru-RU.mjs +11 -3
  248. package/dist/ru-RU.mjs.map +1 -1
  249. package/dist/sk-SK.cjs +10 -2
  250. package/dist/sk-SK.cjs.map +1 -1
  251. package/dist/sk-SK.mjs +10 -2
  252. package/dist/sk-SK.mjs.map +1 -1
  253. package/dist/sl-SI.cjs +11 -3
  254. package/dist/sl-SI.cjs.map +1 -1
  255. package/dist/sl-SI.mjs +11 -3
  256. package/dist/sl-SI.mjs.map +1 -1
  257. package/dist/sr-SP.cjs +10 -2
  258. package/dist/sr-SP.cjs.map +1 -1
  259. package/dist/sr-SP.mjs +10 -2
  260. package/dist/sr-SP.mjs.map +1 -1
  261. package/dist/sv-SE.cjs +6 -2
  262. package/dist/sv-SE.cjs.map +1 -1
  263. package/dist/sv-SE.mjs +6 -2
  264. package/dist/sv-SE.mjs.map +1 -1
  265. package/dist/tr-TR.cjs +7 -2
  266. package/dist/tr-TR.cjs.map +1 -1
  267. package/dist/tr-TR.mjs +7 -2
  268. package/dist/tr-TR.mjs.map +1 -1
  269. package/dist/types.d.ts +97 -29
  270. package/dist/types.d.ts.map +1 -1
  271. package/dist/uk-UA.cjs +10 -2
  272. package/dist/uk-UA.cjs.map +1 -1
  273. package/dist/uk-UA.mjs +10 -2
  274. package/dist/uk-UA.mjs.map +1 -1
  275. package/dist/zh-CN.cjs +6 -1
  276. package/dist/zh-CN.cjs.map +1 -1
  277. package/dist/zh-CN.mjs +6 -1
  278. package/dist/zh-CN.mjs.map +1 -1
  279. package/dist/zh-TW.cjs +6 -1
  280. package/dist/zh-TW.cjs.map +1 -1
  281. package/dist/zh-TW.mjs +6 -1
  282. package/dist/zh-TW.mjs.map +1 -1
  283. package/icons/Skeleton.cjs.map +1 -1
  284. package/icons/Skeleton.css.map +1 -1
  285. package/icons/Skeleton.mjs.map +1 -1
  286. package/package.json +21 -19
  287. package/src/ActionBar.tsx +9 -2
  288. package/src/ActionButton.tsx +38 -3
  289. package/src/Breadcrumbs.tsx +1 -1
  290. package/src/Button.tsx +2 -2
  291. package/src/ButtonGroup.tsx +4 -2
  292. package/src/Calendar.tsx +2 -1
  293. package/src/Card.tsx +1 -1
  294. package/src/CenterBaseline.tsx +1 -1
  295. package/src/ColorHandle.tsx +2 -2
  296. package/src/ColorSwatchPicker.tsx +2 -1
  297. package/src/ComboBox.tsx +2 -2
  298. package/src/Content.tsx +6 -6
  299. package/src/DateField.tsx +1 -1
  300. package/src/DatePicker.tsx +1 -1
  301. package/src/DateRangePicker.tsx +1 -1
  302. package/src/DialogContainer.tsx +2 -2
  303. package/src/DialogTrigger.tsx +2 -1
  304. package/src/Disclosure.tsx +18 -24
  305. package/src/Divider.tsx +2 -0
  306. package/src/Field.tsx +2 -2
  307. package/src/Image.tsx +1 -1
  308. package/src/ImageCoordinator.tsx +3 -3
  309. package/src/Link.tsx +1 -1
  310. package/src/ListBox.tsx +3 -2
  311. package/src/Menu.tsx +5 -5
  312. package/src/NotificationBadge.tsx +172 -0
  313. package/src/Picker.tsx +2 -2
  314. package/src/Provider.tsx +1 -1
  315. package/src/RangeCalendar.tsx +2 -1
  316. package/src/Skeleton.tsx +4 -4
  317. package/src/Slider.tsx +1 -1
  318. package/src/StatusLight.tsx +2 -2
  319. package/src/Tabs.tsx +4 -3
  320. package/src/TabsPicker.tsx +1 -1
  321. package/src/TimeField.tsx +1 -1
  322. package/src/Toast.module.css +153 -0
  323. package/src/Toast.tsx +579 -0
  324. package/src/ToggleButton.tsx +1 -1
  325. package/src/Toolbar.tsx +2 -1
  326. package/src/Tooltip.tsx +2 -2
  327. package/src/TreeView.tsx +2 -2
  328. package/src/index.ts +6 -1
  329. package/src/page.macro.ts +3 -3
  330. package/src/pressScale.ts +1 -1
  331. package/src/style-utils.ts +2 -2
  332. package/style/dist/main.cjs +18 -18
  333. package/style/dist/module.mjs +9 -9
  334. package/style/dist/spectrum-theme.cjs +191 -191
  335. package/style/dist/spectrum-theme.cjs.map +1 -1
  336. package/style/dist/spectrum-theme.mjs +183 -183
  337. package/style/dist/spectrum-theme.mjs.map +1 -1
  338. package/style/dist/style-macro.cjs +74 -74
  339. package/style/dist/style-macro.cjs.map +1 -1
  340. package/style/dist/style-macro.mjs +68 -68
  341. package/style/dist/style-macro.mjs.map +1 -1
  342. package/style/dist/types.d.ts +4 -4
  343. package/style/dist/types.d.ts.map +1 -1
  344. package/style/spectrum-theme.ts +5 -5
  345. package/style/style-macro.ts +3 -3
  346. package/style/tokens.ts +22 -6
package/src/Provider.tsx CHANGED
@@ -50,7 +50,7 @@ export interface ProviderProps extends UnsafeStyles {
50
50
 
51
51
  export const ColorSchemeContext = createContext<ColorScheme | 'light dark' | null>(null);
52
52
 
53
- export function Provider(props: ProviderProps) {
53
+ export function Provider(props: ProviderProps): ReactNode {
54
54
  let result = <ProviderInner {...props} />;
55
55
  let parentColorScheme = useContext(ColorSchemeContext);
56
56
  let colorScheme = props.colorScheme || parentColorScheme;
@@ -20,6 +20,7 @@ import {
20
20
  Heading,
21
21
  Text
22
22
  } from 'react-aria-components';
23
+ import {ReactNode} from 'react';
23
24
 
24
25
 
25
26
  export interface RangeCalendarProps<T extends DateValue>
@@ -29,7 +30,7 @@ export interface RangeCalendarProps<T extends DateValue>
29
30
 
30
31
  export function RangeCalendar<T extends DateValue>(
31
32
  {errorMessage, ...props}: RangeCalendarProps<T>
32
- ) {
33
+ ): ReactNode {
33
34
  return (
34
35
  <AriaRangeCalendar {...props}>
35
36
  <header>
package/src/Skeleton.tsx CHANGED
@@ -19,7 +19,7 @@ import {style} from '../style' with {type: 'macro'};
19
19
  import {StyleString} from '../style/types';
20
20
  import {useMediaQuery} from '@react-spectrum/utils';
21
21
 
22
- export function useLoadingAnimation(isAnimating: boolean) {
22
+ export function useLoadingAnimation(isAnimating: boolean): (element: HTMLElement | null) => void {
23
23
  let animationRef = useRef<Animation | null>(null);
24
24
  let reduceMotion = useMediaQuery('(prefers-reduced-motion: reduce)');
25
25
  return useCallback((element: HTMLElement | null) => {
@@ -65,7 +65,7 @@ export interface SkeletonProps {
65
65
  /**
66
66
  * A Skeleton wraps around content to render it as a placeholder.
67
67
  */
68
- export function Skeleton({children, isLoading}: SkeletonProps) {
68
+ export function Skeleton({children, isLoading}: SkeletonProps): ReactNode {
69
69
  // Disable all form components inside a skeleton.
70
70
  return (
71
71
  <SkeletonContext.Provider value={isLoading}>
@@ -97,7 +97,7 @@ export function useSkeletonText(children: ReactNode, style: CSSProperties | unde
97
97
  }
98
98
 
99
99
  // Rendered inside <Text> to create skeleton line boxes via box-decoration-break.
100
- export function SkeletonText({children}) {
100
+ export function SkeletonText({children}: {children: ReactNode}): ReactNode {
101
101
  return (
102
102
  <span
103
103
  // @ts-ignore - compatibility with React < 19
@@ -114,7 +114,7 @@ export function SkeletonText({children}) {
114
114
  }
115
115
 
116
116
  // Clones the child element and displays it with skeleton styling.
117
- export function SkeletonWrapper({children}: {children: SkeletonElement}) {
117
+ export function SkeletonWrapper({children}: {children: SkeletonElement}): ReactNode {
118
118
  let isLoading = useContext(SkeletonContext);
119
119
  let animation = useLoadingAnimation(isLoading || false);
120
120
  if (isLoading == null) {
package/src/Slider.tsx CHANGED
@@ -317,7 +317,7 @@ export let filledTrack = style({
317
317
  translateY: '[-50%]'
318
318
  });
319
319
 
320
- export function SliderBase<T extends number | number[]>(props: SliderBaseProps<T> & {sliderRef: RefObject<HTMLDivElement | null>}) {
320
+ export function SliderBase<T extends number | number[]>(props: SliderBaseProps<T> & {sliderRef: RefObject<HTMLDivElement | null>}): ReactNode {
321
321
  let formContext = useContext(FormContext);
322
322
  props = useFormProps(props);
323
323
  let {
@@ -112,11 +112,11 @@ export const StatusLight = /*#__PURE__*/ forwardRef(function StatusLight(props:
112
112
  let domRef = useDOMRef(ref);
113
113
  let isSkeleton = useIsSkeleton();
114
114
 
115
- if (!children && !props['aria-label']) {
115
+ if (!children && !props['aria-label'] && process.env.NODE_ENV !== 'production') {
116
116
  console.warn('If no children are provided, an aria-label must be specified');
117
117
  }
118
118
 
119
- if (!role && (props['aria-label'] || props['aria-labelledby'])) {
119
+ if (!role && (props['aria-label'] || props['aria-labelledby']) && process.env.NODE_ENV !== 'production') {
120
120
  console.warn('A labelled StatusLight must have a role.');
121
121
  }
122
122
 
package/src/Tabs.tsx CHANGED
@@ -182,12 +182,13 @@ const tablist = style({
182
182
  flexBasis: '[0%]'
183
183
  });
184
184
 
185
- export function TabList<T extends object>(props: TabListProps<T>) {
185
+ export function TabList<T extends object>(props: TabListProps<T>): ReactNode | null {
186
186
  let {showTabs} = useContext(CollapseContext) ?? {};
187
187
 
188
188
  if (showTabs) {
189
189
  return <TabListInner {...props} />;
190
190
  }
191
+ return null;
191
192
  }
192
193
 
193
194
  function TabListInner<T extends object>(props: TabListProps<T>) {
@@ -362,7 +363,7 @@ const icon = style({
362
363
  }
363
364
  });
364
365
 
365
- export function Tab(props: TabProps) {
366
+ export function Tab(props: TabProps): ReactNode {
366
367
  let {density, labelBehavior} = useContext(InternalTabsContext) ?? {};
367
368
 
368
369
  let contentId = useId();
@@ -421,7 +422,7 @@ const tabPanel = style({
421
422
  minWidth: 0
422
423
  }, getAllowedOverrides({height: true}));
423
424
 
424
- export function TabPanel(props: TabPanelProps) {
425
+ export function TabPanel(props: TabPanelProps): ReactNode | null {
425
426
  let {showTabs} = useContext(CollapseContext);
426
427
  let {selectedKey} = useContext(InternalTabsContext);
427
428
  if (showTabs) {
@@ -305,7 +305,7 @@ function TabLine(props) {
305
305
  export interface PickerItemProps extends Omit<ListBoxItemProps, 'children' | 'style' | 'className'>, StyleProps {
306
306
  children: ReactNode
307
307
  }
308
- export function PickerItem(props: PickerItemProps) {
308
+ export function PickerItem(props: PickerItemProps): ReactNode {
309
309
  let ref = useRef(null);
310
310
  let isLink = props.href != null;
311
311
  const size = 'M';
package/src/TimeField.tsx CHANGED
@@ -30,7 +30,7 @@ export interface TimeFieldProps<T extends TimeValue>
30
30
 
31
31
  export function TimeField<T extends TimeValue>(
32
32
  {label, description, errorMessage, ...props}: TimeFieldProps<T>
33
- ) {
33
+ ): ReactNode {
34
34
  return (
35
35
  <AriaTimeField {...props}>
36
36
  <Label>{label}</Label>
@@ -0,0 +1,153 @@
1
+ /* Safari doesn't support :active-view-transition-type() yet, so we fall back to a class on the html element */
2
+ html.toast-add,
3
+ html.toast-remove,
4
+ html.toast-expand,
5
+ html.toast-collapse,
6
+ html.toast-clear,
7
+ html:active-view-transition-type(toast-add, toast-remove, toast-expand, toast-collapse, toast-clear) {
8
+ view-transition-name: none;
9
+
10
+ .toast-controls {
11
+ view-transition-name: toast-controls;
12
+ }
13
+
14
+ .toast-background {
15
+ view-transition-name: toast-background;
16
+ }
17
+
18
+ &::view-transition-group(toast-background) {
19
+ z-index: -1;
20
+ }
21
+
22
+ &::view-transition-group(*) {
23
+ animation-duration: 400ms;
24
+ }
25
+ }
26
+
27
+ html.toast-add,
28
+ html.toast-remove,
29
+ html:active-view-transition-type(toast-add, toast-remove) {
30
+ /* The new toast should slide in and out. With reduce motion enabled, it fades by default. */
31
+ @media (prefers-reduced-motion: no-preference) {
32
+ &::view-transition-new(.toast):only-child {
33
+ animation-name: slide-in;
34
+ }
35
+
36
+ &::view-transition-old(.toast):only-child {
37
+ animation-name: slide-out;
38
+ }
39
+ }
40
+
41
+ &::view-transition-group(.toast.bottom) {
42
+ --slideX: 0;
43
+ --slideY: calc(100% + 12px);
44
+ }
45
+
46
+ &::view-transition-group(.toast.top) {
47
+ --slideX: 0;
48
+ --slideY: calc(-100% - 12px);
49
+ }
50
+
51
+ &::view-transition-group(.toast.start) {
52
+ --slideX: calc(-100% - 12px);
53
+ --slideY: 0;
54
+ }
55
+
56
+ &::view-transition-group(.toast.end) {
57
+ --slideX: calc(100% + 12px);
58
+ --slideY: 0;
59
+ }
60
+ }
61
+
62
+ /* Make the "Show all" button animate slightly faster/slower than other components when expanding/collapsing.
63
+ * This prevents it from appearing to overlap the text when it fades out and the text repositions. */
64
+ html.toast-expand,
65
+ html:active-view-transition-type(toast-expand) {
66
+ &::view-transition-group(toast-expand) {
67
+ animation-duration: 300ms;
68
+ }
69
+ }
70
+
71
+ html.toast-collapse,
72
+ html:active-view-transition-type(toast-collapse) {
73
+ &::view-transition-group(toast-expand) {
74
+ animation-duration: 600ms;
75
+ }
76
+ }
77
+
78
+ html.toast-expand,
79
+ html.toast-collapse,
80
+ html:active-view-transition-type(toast-expand, toast-collapse) {
81
+ @media (prefers-reduced-motion: no-preference) {
82
+ /* When expanding/collapsing, animate the components of the main toast individually. */
83
+ .toast-content {
84
+ view-transition-name: toast-content;
85
+ }
86
+
87
+ .toast-expand {
88
+ view-transition-name: toast-expand;
89
+ }
90
+
91
+ .toast-action {
92
+ view-transition-name: toast-action;
93
+ }
94
+
95
+ .toast-close {
96
+ view-transition-name: toast-close;
97
+ }
98
+
99
+ /* Force toast controls to be visible during the animation */
100
+ .toast-controls {
101
+ display: flex;
102
+ }
103
+
104
+ /* Smoothly transition the size of toasts. */
105
+ &::view-transition-old(.toast),
106
+ &::view-transition-new(.toast) {
107
+ /* Make the old and new images fill the size of the parent group. */
108
+ height: 100%;
109
+ width: 100%;
110
+ }
111
+
112
+ /* Background toasts don't have their components split apart in separate view transitions.
113
+ * This means we need to do some tricks to get the aspect ratio to transition smoothly.
114
+ * Clipping messes up the shadows a bit, but it's less noticeable on the background toasts. */
115
+ &::view-transition-old(.background-toast),
116
+ &::view-transition-new(.background-toast) {
117
+ /* Cover all of the available space without stretching the aspect ratio */
118
+ object-fit: cover;
119
+ object-position: top center;
120
+ /* Clip to retain rounded corners */
121
+ clip-path: inset(0px round 10px);
122
+ }
123
+ }
124
+
125
+ @media (prefers-reduced-motion) {
126
+ /* Do not animate individual toasts in reduced motion. The whole list cross-fades instead. */
127
+ .toast {
128
+ view-transition-name: none !important;
129
+ }
130
+
131
+ .toast-list-expanded {
132
+ view-transition-name: toast-list-expanded;
133
+ }
134
+
135
+ .toast-list-collapsed {
136
+ view-transition-name: toast-list-collapsed;
137
+ }
138
+ }
139
+ }
140
+
141
+ @keyframes slide-in {
142
+ from {
143
+ translate: var(--slideX) var(--slideY);
144
+ opacity: 0;
145
+ }
146
+ }
147
+
148
+ @keyframes slide-out {
149
+ to {
150
+ translate: var(--slideX) var(--slideY);
151
+ opacity: 0;
152
+ }
153
+ }