@basic-ui/material 1.0.0-alpha.1 → 1.0.0-alpha.10

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 (309) hide show
  1. package/build/cjs/index.js +248 -57
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Alert/Alert.d.ts +1 -1
  4. package/build/esm/Alert/Alert.js +1 -1
  5. package/build/esm/Alert/Alert.js.map +1 -1
  6. package/build/esm/AppBar/AppBar.d.ts +3 -3
  7. package/build/esm/AppBar/AppBar.js +2 -2
  8. package/build/esm/AppBar/AppBar.js.map +1 -1
  9. package/build/esm/AppBar/AppBarButton.d.ts +1 -1
  10. package/build/esm/Badge/Badge.d.ts +1 -1
  11. package/build/esm/BaseLine/BaseLine.d.ts +1 -0
  12. package/build/esm/BottomSheet/BottomSheet.d.ts +1 -1
  13. package/build/esm/BottomSheet/BottomSheetSurface.d.ts +2 -2
  14. package/build/esm/BottomSheet/BottomSheetSurface.js +2 -2
  15. package/build/esm/BottomSheet/BottomSheetSurface.js.map +1 -1
  16. package/build/esm/Box/Box.d.ts +4 -4
  17. package/build/esm/Box/Box.js +1 -2
  18. package/build/esm/Box/Box.js.map +1 -1
  19. package/build/esm/Button/BaseButton.d.ts +3 -3
  20. package/build/esm/Button/BaseButton.js +0 -1
  21. package/build/esm/Button/BaseButton.js.map +1 -1
  22. package/build/esm/Button/Button.d.ts +4 -4
  23. package/build/esm/Button/Button.js +0 -1
  24. package/build/esm/Button/Button.js.map +1 -1
  25. package/build/esm/Button/ButtonGroup.d.ts +2 -2
  26. package/build/esm/Button/ButtonGroup.js +1 -1
  27. package/build/esm/Button/ButtonGroup.js.map +1 -1
  28. package/build/esm/Button/FilledButton.d.ts +1 -1
  29. package/build/esm/Button/FilledButton.js +6 -8
  30. package/build/esm/Button/FilledButton.js.map +1 -1
  31. package/build/esm/Button/OutlinedButton.d.ts +1 -1
  32. package/build/esm/Button/TransparentButton.d.ts +1 -1
  33. package/build/esm/CheckBox/CheckBox.d.ts +5 -5
  34. package/build/esm/CheckBox/CheckBox.js +0 -1
  35. package/build/esm/CheckBox/CheckBox.js.map +1 -1
  36. package/build/esm/CheckBox/CheckBoxIcon.d.ts +4 -4
  37. package/build/esm/CheckBox/CheckBoxIcon.js +2 -2
  38. package/build/esm/CheckBox/CheckBoxIcon.js.map +1 -1
  39. package/build/esm/Chip/ButtonChip.d.ts +4 -4
  40. package/build/esm/Chip/ButtonChip.js +0 -1
  41. package/build/esm/Chip/ButtonChip.js.map +1 -1
  42. package/build/esm/Chip/ChipBase.d.ts +3 -3
  43. package/build/esm/Chip/ChipBase.js +0 -1
  44. package/build/esm/Chip/ChipBase.js.map +1 -1
  45. package/build/esm/Chip/ChoiceChip.d.ts +5 -5
  46. package/build/esm/Chip/ChoiceChip.js +0 -1
  47. package/build/esm/Chip/ChoiceChip.js.map +1 -1
  48. package/build/esm/ColorMode/ColorModeProvider.d.ts +3 -3
  49. package/build/esm/ColorMode/ColorModeProvider.js +0 -1
  50. package/build/esm/ColorMode/ColorModeProvider.js.map +1 -1
  51. package/build/esm/Combobox/Combobox.d.ts +13 -13
  52. package/build/esm/Combobox/Combobox.js +3 -3
  53. package/build/esm/Combobox/Combobox.js.map +1 -1
  54. package/build/esm/Dialog/Dialog.d.ts +1 -1
  55. package/build/esm/Dialog/DialogBackdrop.d.ts +2 -2
  56. package/build/esm/Dialog/DialogBackdrop.js +0 -1
  57. package/build/esm/Dialog/DialogBackdrop.js.map +1 -1
  58. package/build/esm/Dialog/DialogSurface.d.ts +2 -2
  59. package/build/esm/Dialog/DialogSurface.js +0 -1
  60. package/build/esm/Dialog/DialogSurface.js.map +1 -1
  61. package/build/esm/Dialog/useDialogAnimation.js +3 -2
  62. package/build/esm/Dialog/useDialogAnimation.js.map +1 -1
  63. package/build/esm/Divider/Divider.d.ts +3 -3
  64. package/build/esm/Divider/Divider.js +0 -1
  65. package/build/esm/Divider/Divider.js.map +1 -1
  66. package/build/esm/FloatingLabel/FloatingLabel.d.ts +4 -4
  67. package/build/esm/FloatingLabel/FloatingLabel.js +3 -3
  68. package/build/esm/FloatingLabel/FloatingLabel.js.map +1 -1
  69. package/build/esm/LineRipple/LineRipple.d.ts +3 -3
  70. package/build/esm/LineRipple/LineRipple.js +2 -2
  71. package/build/esm/LineRipple/LineRipple.js.map +1 -1
  72. package/build/esm/Link/Link.d.ts +3 -3
  73. package/build/esm/Link/Link.js +0 -1
  74. package/build/esm/Link/Link.js.map +1 -1
  75. package/build/esm/List/List.d.ts +5 -5
  76. package/build/esm/List/List.js +0 -1
  77. package/build/esm/List/List.js.map +1 -1
  78. package/build/esm/ListItem/ListItem.d.ts +5 -5
  79. package/build/esm/ListItem/ListItem.js +3 -3
  80. package/build/esm/ListItem/ListItem.js.map +1 -1
  81. package/build/esm/ListItem/ListItemText.d.ts +6 -6
  82. package/build/esm/ListItem/ListItemText.js +1 -2
  83. package/build/esm/ListItem/ListItemText.js.map +1 -1
  84. package/build/esm/Menu/Menu.d.ts +6 -6
  85. package/build/esm/Menu/Menu.js +5 -3
  86. package/build/esm/Menu/Menu.js.map +1 -1
  87. package/build/esm/NavRail/NavRailItem.d.ts +15 -0
  88. package/build/esm/NavRail/NavRailItem.js +147 -0
  89. package/build/esm/NavRail/NavRailItem.js.map +1 -0
  90. package/build/esm/NavRail/index.d.ts +1 -0
  91. package/build/esm/NavRail/index.js +2 -0
  92. package/build/esm/NavRail/index.js.map +1 -0
  93. package/build/esm/NotchedOutline/NotchedOutline.d.ts +5 -5
  94. package/build/esm/NotchedOutline/NotchedOutline.js +0 -1
  95. package/build/esm/NotchedOutline/NotchedOutline.js.map +1 -1
  96. package/build/esm/NotchedOutline/styledComponents.d.ts +114 -1
  97. package/build/esm/NotchedOutline/styledComponents.js +3 -2
  98. package/build/esm/NotchedOutline/styledComponents.js.map +1 -1
  99. package/build/esm/Paper/Paper.d.ts +4 -4
  100. package/build/esm/Paper/Paper.js +0 -1
  101. package/build/esm/Paper/Paper.js.map +1 -1
  102. package/build/esm/ProgressSpinner/ProgressSpinner.js +2 -1
  103. package/build/esm/ProgressSpinner/ProgressSpinner.js.map +1 -1
  104. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  105. package/build/esm/RadioButton/RadioButtonIcon.d.ts +3 -3
  106. package/build/esm/RadioButton/RadioButtonIcon.js +2 -2
  107. package/build/esm/RadioButton/RadioButtonIcon.js.map +1 -1
  108. package/build/esm/RadioButton/RadioGroup.d.ts +1 -1
  109. package/build/esm/Ripple/RippleBox.d.ts +1 -2
  110. package/build/esm/Ripple/RippleBox.js +0 -1
  111. package/build/esm/Ripple/RippleBox.js.map +1 -1
  112. package/build/esm/Ripple/useRippleHandlers.d.ts +3 -3
  113. package/build/esm/Ripple/useRippleHandlers.js.map +1 -1
  114. package/build/esm/Ripple/useRippleSurface.d.ts +5 -5
  115. package/build/esm/Ripple/useRippleSurface.js +61 -58
  116. package/build/esm/Ripple/useRippleSurface.js.map +1 -1
  117. package/build/esm/Select/Select.d.ts +6 -6
  118. package/build/esm/Select/Select.js +0 -1
  119. package/build/esm/Select/Select.js.map +1 -1
  120. package/build/esm/Select/SelectIcon.d.ts +3 -3
  121. package/build/esm/Select/SelectIcon.js +2 -2
  122. package/build/esm/Select/SelectIcon.js.map +1 -1
  123. package/build/esm/Select/context.d.ts +2 -2
  124. package/build/esm/Select/context.js.map +1 -1
  125. package/build/esm/Select/defaultRender.d.ts +2 -1
  126. package/build/esm/Select/defaultRender.js.map +1 -1
  127. package/build/esm/Select/styledComponents.d.ts +9 -9
  128. package/build/esm/Select/styledComponents.js +0 -1
  129. package/build/esm/Select/styledComponents.js.map +1 -1
  130. package/build/esm/SelectItem/SelectItem.d.ts +1 -1
  131. package/build/esm/SelectionControl/SelectionControlLabel.d.ts +5 -5
  132. package/build/esm/SelectionControl/SelectionControlLabel.js +0 -1
  133. package/build/esm/SelectionControl/SelectionControlLabel.js.map +1 -1
  134. package/build/esm/SelectionControl/SelectionControlText.d.ts +4 -4
  135. package/build/esm/SelectionControl/SelectionControlText.js +0 -1
  136. package/build/esm/SelectionControl/SelectionControlText.js.map +1 -1
  137. package/build/esm/Skeleton/DelayAppearance.d.ts +3 -3
  138. package/build/esm/Skeleton/DelayAppearance.js +0 -1
  139. package/build/esm/Skeleton/DelayAppearance.js.map +1 -1
  140. package/build/esm/Skeleton/Skeleton.d.ts +6 -6
  141. package/build/esm/Skeleton/Skeleton.js +0 -1
  142. package/build/esm/Skeleton/Skeleton.js.map +1 -1
  143. package/build/esm/Snackbar/Snackbar.d.ts +3 -3
  144. package/build/esm/Snackbar/Snackbar.js +1 -2
  145. package/build/esm/Snackbar/Snackbar.js.map +1 -1
  146. package/build/esm/Snackbar/Stack.d.ts +2 -3
  147. package/build/esm/Snackbar/Stack.js +0 -1
  148. package/build/esm/Snackbar/Stack.js.map +1 -1
  149. package/build/esm/Snackbar/useSnackbarAnimation.d.ts +2 -2
  150. package/build/esm/Snackbar/useSnackbarAnimation.js +2 -1
  151. package/build/esm/Snackbar/useSnackbarAnimation.js.map +1 -1
  152. package/build/esm/Switch/Switch.d.ts +4 -5
  153. package/build/esm/Switch/Switch.js +0 -1
  154. package/build/esm/Switch/Switch.js.map +1 -1
  155. package/build/esm/Switch/styledComponents.d.ts +1 -0
  156. package/build/esm/Switch/styledComponents.js +2 -1
  157. package/build/esm/Switch/styledComponents.js.map +1 -1
  158. package/build/esm/Tab/Tab.d.ts +3 -3
  159. package/build/esm/Tab/Tab.js +2 -3
  160. package/build/esm/Tab/Tab.js.map +1 -1
  161. package/build/esm/Tab/TabList.d.ts +1 -1
  162. package/build/esm/Tab/TabPanel.d.ts +1 -1
  163. package/build/esm/TabIndicator/TabIndicator.d.ts +1 -1
  164. package/build/esm/TabIndicator/TabIndicator.js +2 -1
  165. package/build/esm/TabIndicator/TabIndicator.js.map +1 -1
  166. package/build/esm/TabIndicator/context.d.ts +2 -2
  167. package/build/esm/TabIndicator/context.js.map +1 -1
  168. package/build/esm/Table/Table.d.ts +1 -1
  169. package/build/esm/Table/TableRow.d.ts +1 -1
  170. package/build/esm/Table/TableRow.js +1 -1
  171. package/build/esm/Table/TableRow.js.map +1 -1
  172. package/build/esm/Text/LoremIpsum.js +1 -1
  173. package/build/esm/Text/LoremIpsum.js.map +1 -1
  174. package/build/esm/Text/Text.d.ts +8 -4
  175. package/build/esm/Text/Text.js +5 -2
  176. package/build/esm/Text/Text.js.map +1 -1
  177. package/build/esm/TextField/FilledContainer.d.ts +4 -4
  178. package/build/esm/TextField/FilledContainer.js +0 -1
  179. package/build/esm/TextField/FilledContainer.js.map +1 -1
  180. package/build/esm/TextField/HelperText.d.ts +5 -5
  181. package/build/esm/TextField/HelperText.js +1 -2
  182. package/build/esm/TextField/HelperText.js.map +1 -1
  183. package/build/esm/TextField/IconContainer.d.ts +2 -3
  184. package/build/esm/TextField/IconContainer.js +0 -1
  185. package/build/esm/TextField/IconContainer.js.map +1 -1
  186. package/build/esm/TextField/Input.d.ts +4 -4
  187. package/build/esm/TextField/Input.js +2 -1
  188. package/build/esm/TextField/Input.js.map +1 -1
  189. package/build/esm/TextField/OutlinedContainer.d.ts +4 -4
  190. package/build/esm/TextField/OutlinedContainer.js +0 -1
  191. package/build/esm/TextField/OutlinedContainer.js.map +1 -1
  192. package/build/esm/TextField/TextField.d.ts +5 -5
  193. package/build/esm/TextField/TextField.js +0 -1
  194. package/build/esm/TextField/TextField.js.map +1 -1
  195. package/build/esm/ThemeExplorer/ThemeColors.d.ts +2 -2
  196. package/build/esm/ThemeExplorer/ThemeColors.js +1 -1
  197. package/build/esm/ThemeExplorer/ThemeColors.js.map +1 -1
  198. package/build/esm/ThemeExplorer/components.d.ts +5 -6
  199. package/build/esm/ThemeExplorer/components.js +4 -3
  200. package/build/esm/ThemeExplorer/components.js.map +1 -1
  201. package/build/esm/ThemeExplorer/makeColorScheme.js +2 -1
  202. package/build/esm/ThemeExplorer/makeColorScheme.js.map +1 -1
  203. package/build/esm/ThemeExplorer/useDeferredColor.js +2 -1
  204. package/build/esm/ThemeExplorer/useDeferredColor.js.map +1 -1
  205. package/build/esm/Tooltip/Tooltip.d.ts +3 -3
  206. package/build/esm/Tooltip/Tooltip.js +5 -8
  207. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  208. package/build/esm/color.d.ts +2 -0
  209. package/build/esm/color.js +8 -3
  210. package/build/esm/color.js.map +1 -1
  211. package/build/esm/index.d.ts +2 -0
  212. package/build/esm/index.js +2 -0
  213. package/build/esm/index.js.map +1 -1
  214. package/build/esm/motion.d.ts +7 -0
  215. package/build/esm/motion.js +8 -0
  216. package/build/esm/motion.js.map +1 -0
  217. package/build/esm/theme/theme.d.ts +114 -1
  218. package/build/esm/theme/theme.js +42 -7
  219. package/build/esm/theme/theme.js.map +1 -1
  220. package/build/tsconfig-build.tsbuildinfo +1 -0
  221. package/build/tsconfig.tsbuildinfo +1 -1
  222. package/package.json +6 -6
  223. package/src/Alert/Alert.tsx +1 -1
  224. package/src/AppBar/AppBar.tsx +4 -3
  225. package/src/BottomSheet/BottomSheetSurface.tsx +5 -4
  226. package/src/Box/Box.tsx +6 -8
  227. package/src/Button/BaseButton.tsx +3 -11
  228. package/src/Button/Button.story.tsx +21 -4
  229. package/src/Button/Button.tsx +4 -4
  230. package/src/Button/ButtonGroup.tsx +1 -1
  231. package/src/Button/FilledButton.tsx +4 -9
  232. package/src/Button/SpinnerButton.story.tsx +1 -1
  233. package/src/CheckBox/CheckBox.story.tsx +2 -2
  234. package/src/CheckBox/CheckBox.tsx +6 -10
  235. package/src/CheckBox/CheckBoxIcon.tsx +5 -5
  236. package/src/Chip/ButtonChip.tsx +3 -3
  237. package/src/Chip/Chip.story.tsx +1 -1
  238. package/src/Chip/ChipBase.tsx +2 -2
  239. package/src/Chip/ChoiceChip.tsx +7 -7
  240. package/src/ColorMode/ColorModeProvider.tsx +3 -3
  241. package/src/Combobox/Combobox.story.tsx +3 -3
  242. package/src/Combobox/Combobox.tsx +9 -10
  243. package/src/Dialog/DialogBackdrop.tsx +3 -3
  244. package/src/Dialog/DialogSurface.tsx +2 -4
  245. package/src/Dialog/useDialogAnimation.tsx +3 -4
  246. package/src/Divider/Divider.tsx +2 -2
  247. package/src/FloatingLabel/FloatingLabel.tsx +7 -6
  248. package/src/LineRipple/LineRipple.story.tsx +1 -1
  249. package/src/LineRipple/LineRipple.tsx +4 -4
  250. package/src/Link/Link.tsx +2 -5
  251. package/src/List/List.tsx +4 -4
  252. package/src/ListItem/ListItem.tsx +6 -6
  253. package/src/ListItem/ListItemText.tsx +6 -7
  254. package/src/Menu/Menu.tsx +5 -5
  255. package/src/NavRail/NavRail.story.tsx +190 -0
  256. package/src/NavRail/NavRailItem.tsx +176 -0
  257. package/src/NavRail/index.ts +1 -0
  258. package/src/NotchedOutline/NotchedOutline.tsx +4 -5
  259. package/src/NotchedOutline/styledComponents.ts +2 -1
  260. package/src/Paper/Paper.story.tsx +3 -3
  261. package/src/Paper/Paper.tsx +3 -3
  262. package/src/ProgressSpinner/ProgressSpinner.tsx +2 -2
  263. package/src/RadioButton/RadioButton.story.tsx +2 -2
  264. package/src/RadioButton/RadioButton.tsx +1 -1
  265. package/src/RadioButton/RadioButtonIcon.tsx +4 -5
  266. package/src/Ripple/Ripple.story.tsx +1 -1
  267. package/src/Ripple/RippleBox.tsx +1 -2
  268. package/src/Ripple/useRippleHandlers.ts +3 -3
  269. package/src/Ripple/useRippleSurface.ts +77 -61
  270. package/src/Select/Select.tsx +11 -6
  271. package/src/Select/SelectIcon.tsx +3 -4
  272. package/src/Select/context.ts +2 -1
  273. package/src/Select/defaultRender.ts +2 -1
  274. package/src/Select/styledComponents.tsx +13 -11
  275. package/src/SelectionControl/SelectionControlLabel.tsx +4 -8
  276. package/src/SelectionControl/SelectionControlText.tsx +3 -3
  277. package/src/Skeleton/DelayAppearance.tsx +2 -2
  278. package/src/Skeleton/Skeleton.story.tsx +2 -2
  279. package/src/Skeleton/Skeleton.tsx +6 -6
  280. package/src/Snackbar/Snackbar.tsx +3 -3
  281. package/src/Snackbar/Stack.tsx +6 -9
  282. package/src/Snackbar/useSnackbarAnimation.ts +4 -3
  283. package/src/Switch/Switch.tsx +6 -10
  284. package/src/Switch/styledComponents.tsx +2 -2
  285. package/src/Tab/Tab.tsx +3 -7
  286. package/src/TabIndicator/TabIndicator.tsx +2 -1
  287. package/src/TabIndicator/context.ts +2 -1
  288. package/src/Table/TableRow.tsx +1 -1
  289. package/src/Text/LoremIpsum.tsx +1 -1
  290. package/src/Text/Text.story.tsx +42 -7
  291. package/src/Text/Text.tsx +25 -5
  292. package/src/TextField/FilledContainer.tsx +3 -3
  293. package/src/TextField/HelperText.tsx +5 -5
  294. package/src/TextField/IconContainer.tsx +2 -3
  295. package/src/TextField/Input.tsx +5 -4
  296. package/src/TextField/OutlinedContainer.tsx +3 -3
  297. package/src/TextField/TextField.tsx +4 -4
  298. package/src/ThemeExplorer/ThemeBuilder.story.tsx +29 -25
  299. package/src/ThemeExplorer/ThemeColors.tsx +1 -1
  300. package/src/ThemeExplorer/components.tsx +8 -3
  301. package/src/ThemeExplorer/makeColorScheme.tsx +1 -1
  302. package/src/ThemeExplorer/useDeferredColor.tsx +1 -1
  303. package/src/Tooltip/Tooltip.story.tsx +1 -1
  304. package/src/Tooltip/Tooltip.tsx +9 -11
  305. package/src/color.ts +25 -4
  306. package/src/index.ts +2 -0
  307. package/src/motion.ts +7 -0
  308. package/src/theme/theme.ts +47 -6
  309. package/src/ThemeExplorer/ThemeExplorer.story.tsx +0 -43
@@ -1,5 +1,5 @@
1
+ import type { KeyboardEvent as ReactKeyboardEvent, PointerEvent } from 'react';
1
2
  import { useRef } from 'react';
2
- import type * as React from 'react';
3
3
 
4
4
  import type { RippleOptions } from './useRipple';
5
5
  import { useRipple } from './useRipple';
@@ -18,7 +18,7 @@ export function useRippleHandlers<T extends HTMLElement>(opts: RippleOptions) {
18
18
  deactivate();
19
19
  };
20
20
 
21
- const handlePointerDown = (e: React.PointerEvent<T>) => {
21
+ const handlePointerDown = (e: PointerEvent<T>) => {
22
22
  const rect = e.currentTarget.getBoundingClientRect();
23
23
  activate(rect, e.clientX, e.clientY, opts.center);
24
24
  window.addEventListener('pointerup', handlePointerUp);
@@ -36,7 +36,7 @@ export function useRippleHandlers<T extends HTMLElement>(opts: RippleOptions) {
36
36
  deactivate();
37
37
  };
38
38
 
39
- const handleKeyDown = (e: React.KeyboardEvent<T>) => {
39
+ const handleKeyDown = (e: ReactKeyboardEvent<T>) => {
40
40
  if (e.key !== ' ' || !keyReleased.current) {
41
41
  return;
42
42
  }
@@ -1,4 +1,9 @@
1
- import type { CSSProperties } from 'react';
1
+ import type {
2
+ CSSProperties,
3
+ KeyboardEventHandler,
4
+ PointerEventHandler,
5
+ } from 'react';
6
+ import { useMemo } from 'react';
2
7
  import { get } from '@styled-system/css';
3
8
  import { wrapEvent } from '@basic-ui/core';
4
9
 
@@ -17,12 +22,12 @@ export interface UseRippleSurfaceOptions<T extends HTMLElement> {
17
22
  center?: boolean;
18
23
  disabled?: boolean;
19
24
  style?: CSSProperties;
20
- onPointerDown?: React.PointerEventHandler<T>;
21
- onKeyDown?: React.KeyboardEventHandler<T>;
25
+ onPointerDown?: PointerEventHandler<T>;
26
+ onKeyDown?: KeyboardEventHandler<T>;
22
27
  }
23
28
 
24
29
  export function useRippleSurface<T extends HTMLElement>(
25
- opts: UseRippleSurfaceOptions<T>
30
+ opts: UseRippleSurfaceOptions<T> = {}
26
31
  ) {
27
32
  let {
28
33
  // eslint-disable-next-line prefer-const
@@ -62,67 +67,78 @@ export function useRippleSurface<T extends HTMLElement>(
62
67
  ...rippleProps,
63
68
  });
64
69
 
65
- const css: SxStyleProp = {
66
- overflow: 'hidden',
67
- position: 'relative',
68
- cursor: 'pointer',
69
- // fix overflow: hidden + borderRadius in Safari
70
- // https://gist.github.com/ayamflow/b602ab436ac9f05660d9c15190f4fd7b#gistcomment-2359479
71
- willChange: 'transform,opacity',
72
- WebkitTapHighlightColor: 'transparent',
73
- // ripple overlay
74
- '&::before': {
75
- backgroundColor: rippleColor,
76
- boxSizing: 'content-box',
77
- position: 'absolute',
78
- content: '""',
79
- opacity: baseOpacity,
80
- pointerEvents: 'none',
81
- top: '0',
82
- left: '0',
83
- width: '100%',
84
- height: '100%',
85
- transition: 'opacity 75ms linear',
86
- },
87
- '&:hover::before': {
88
- opacity: hoverOpacity,
89
- },
90
- '&:focus-visible::before': {
91
- opacity: focusOpacity,
92
- },
93
- ...(!rippleEnabled && {
94
- '&:active::before': {
95
- opacity: pressedOpacity,
70
+ const css: SxStyleProp = useMemo(
71
+ () => ({
72
+ overflow: 'hidden',
73
+ position: 'relative',
74
+ cursor: 'pointer',
75
+ // fix overflow: hidden + borderRadius in Safari
76
+ // https://gist.github.com/ayamflow/b602ab436ac9f05660d9c15190f4fd7b#gistcomment-2359479
77
+ willChange: 'transform,opacity',
78
+ WebkitTapHighlightColor: 'transparent',
79
+ // ripple overlay
80
+ '&::before': {
81
+ backgroundColor: rippleColor,
82
+ boxSizing: 'content-box',
83
+ position: 'absolute',
84
+ content: '""',
85
+ opacity: baseOpacity,
86
+ pointerEvents: 'none',
87
+ top: '0',
88
+ left: '0',
89
+ width: '100%',
90
+ height: '100%',
91
+ transition: 'opacity 75ms linear',
96
92
  },
97
- }),
98
- '&[aria-pressed="true"]::before': {
99
- opacity: baseOpacity + pressedOpacity,
100
- },
101
- '&[aria-pressed="true"]:hover::before': {
102
- opacity: pressedOpacity + hoverOpacity,
103
- },
104
- '&[aria-pressed="true"]:focus-visible::before': {
105
- opacity: pressedOpacity + focusOpacity,
106
- },
107
- ...(!rippleEnabled && {
108
- '&[aria-pressed="true"]:active::before': {
109
- opacity: pressedOpacity + pressedOpacity,
93
+ '&:hover::before': {
94
+ opacity: hoverOpacity,
110
95
  },
111
- }),
112
- ['&:disabled::before,&:disabled:hover::before,&:disabled:focus::before,&:disabled:active::before,' +
113
- '&[data-disabled]::before,&[data-disabled]:hover::before,&[data-disabled]:focus::before,' +
114
- '&[data-disabled]:active::before,&:disabled[aria-pressed="true"]::before']:
115
- {
116
- opacity: 0,
96
+ '&:focus-visible::before': {
97
+ opacity: focusOpacity,
98
+ },
99
+ ...(!rippleEnabled && {
100
+ '&:active::before': {
101
+ opacity: pressedOpacity,
102
+ },
103
+ }),
104
+ '&[aria-pressed="true"]::before': {
105
+ opacity: baseOpacity + pressedOpacity,
106
+ },
107
+ '&[aria-pressed="true"]:hover::before': {
108
+ opacity: pressedOpacity + hoverOpacity,
117
109
  },
118
- '&:disabled,&[data-disabled]': {
119
- cursor: 'default',
120
- },
121
- // ripple
122
- ...(rippleEnabled && {
123
- '&::after': { ...rippleStyle({ animation }) },
110
+ '&[aria-pressed="true"]:focus-visible::before': {
111
+ opacity: pressedOpacity + focusOpacity,
112
+ },
113
+ ...(!rippleEnabled && {
114
+ '&[aria-pressed="true"]:active::before': {
115
+ opacity: pressedOpacity + pressedOpacity,
116
+ },
117
+ }),
118
+ ['&:disabled::before,&:disabled:hover::before,&:disabled:focus::before,&:disabled:active::before,' +
119
+ '&[data-disabled]::before,&[data-disabled]:hover::before,&[data-disabled]:focus::before,' +
120
+ '&[data-disabled]:active::before,&:disabled[aria-pressed="true"]::before']:
121
+ {
122
+ opacity: 0,
123
+ },
124
+ '&:disabled,&[data-disabled]': {
125
+ cursor: 'default',
126
+ },
127
+ // ripple
128
+ ...(rippleEnabled && {
129
+ '&::after': { ...rippleStyle({ animation }) },
130
+ }),
124
131
  }),
125
- };
132
+ [
133
+ animation,
134
+ baseOpacity,
135
+ focusOpacity,
136
+ hoverOpacity,
137
+ pressedOpacity,
138
+ rippleColor,
139
+ rippleEnabled,
140
+ ]
141
+ );
126
142
 
127
143
  return {
128
144
  style: { ...animationStyle, ...style },
@@ -1,5 +1,10 @@
1
+ import type {
2
+ SelectHTMLAttributes,
3
+ ReactNode,
4
+ ChangeEvent,
5
+ ComponentType,
6
+ } from 'react';
1
7
  import { forwardRef, useState, useRef, useEffect, useId } from 'react';
2
- import * as React from 'react';
3
8
  import {
4
9
  wrapEvent,
5
10
  assignMultipleRefs,
@@ -27,21 +32,21 @@ const componentMap = {
27
32
 
28
33
  export interface SelectProps
29
34
  extends Omit<
30
- BoxProps<HTMLSelectElement, React.SelectHTMLAttributes<HTMLSelectElement>>,
35
+ BoxProps<HTMLSelectElement, SelectHTMLAttributes<HTMLSelectElement>>,
31
36
  'value' | 'defaultValue' | 'onChange'
32
37
  > {
33
38
  variant?: 'outlined' | 'filled';
34
39
  color?: 'primary' | 'secondary';
35
- label?: React.ReactNode;
40
+ label?: ReactNode;
36
41
  helperText?: string;
37
42
  defaultValue?: string;
38
43
  value?: string;
39
44
  native?: boolean;
40
45
  theme?: Theme;
41
46
  error?: boolean | string;
42
- onChange?: (e: React.ChangeEvent<HTMLSelectElement>, value: string) => void;
47
+ onChange?: (e: ChangeEvent<HTMLSelectElement>, value: string) => void;
43
48
  renderValue?: (value?: string) => string | undefined;
44
- leadingIcon?: React.ReactNode;
49
+ leadingIcon?: ReactNode;
45
50
  }
46
51
 
47
52
  export const Select = forwardRef<
@@ -115,7 +120,7 @@ export const Select = forwardRef<
115
120
 
116
121
  const labelIsFloating = hasFocus || open || renderValue(value) !== undefined;
117
122
 
118
- const Comp: React.ComponentType<any> = native
123
+ const Comp: ComponentType<any> = native
119
124
  ? (SelectComp as any)
120
125
  : (SelectButton as any);
121
126
 
@@ -1,16 +1,16 @@
1
1
  import type { SVGAttributes } from 'react';
2
2
  import { forwardRef } from 'react';
3
- import * as React from 'react';
4
3
  import { rem } from 'polished';
5
4
 
6
5
  import type { BoxProps } from '../Box';
7
6
  import { Box } from '../Box';
8
7
  import { alpha } from '../color';
9
8
  import { PADDING_RIGHT_WITH_ICON } from '../TextField/consts';
9
+ import { EASING_STANDARD } from '../motion';
10
10
 
11
11
  export type SelectIconProps = BoxProps<
12
12
  SVGElement,
13
- React.SVGAttributes<SVGElement>
13
+ SVGAttributes<SVGElement>
14
14
  > & { open?: boolean };
15
15
 
16
16
  export const SelectIcon = forwardRef<SVGElement, SelectIconProps>(
@@ -32,8 +32,7 @@ export const SelectIcon = forwardRef<SVGElement, SelectIconProps>(
32
32
  color: open ? 'primary' : alpha('on.surface', 0.54),
33
33
  pointerEvents: 'none',
34
34
  transform: open ? 'rotate(180deg)' : undefined,
35
- transition:
36
- 'transform .15s cubic-bezier(.4,0,.2,1), color .15s cubic-bezier(.4,0,.2,1)',
35
+ transition: `transform .15s ${EASING_STANDARD}, color .15s ${EASING_STANDARD}`,
37
36
  }}
38
37
  {...otherProps}
39
38
  >
@@ -1,3 +1,4 @@
1
+ import type { MouseEvent, KeyboardEvent } from 'react';
1
2
  import { useContext, createContext } from 'react';
2
3
 
3
4
  // Select Component
@@ -5,7 +6,7 @@ export interface SelectContextProps {
5
6
  native: boolean;
6
7
  value?: string;
7
8
  onSelect: (
8
- e: React.MouseEvent<HTMLLIElement> | React.KeyboardEvent<HTMLLIElement>
9
+ e: MouseEvent<HTMLLIElement> | KeyboardEvent<HTMLLIElement>
9
10
  ) => void;
10
11
  }
11
12
 
@@ -1,7 +1,8 @@
1
+ import type { ReactNode } from 'react';
1
2
  import { Children, isValidElement } from 'react';
2
3
 
3
4
  export const makeDefaultRender =
4
- (children?: React.ReactNode) =>
5
+ (children?: ReactNode) =>
5
6
  (val?: string): string | undefined => {
6
7
  if (children && val !== undefined) {
7
8
  const allChildren = Children.toArray(children);
@@ -1,14 +1,18 @@
1
+ import type {
2
+ ElementType,
3
+ FC,
4
+ RefAttributes,
5
+ SelectHTMLAttributes,
6
+ } from 'react';
1
7
  import { forwardRef } from 'react';
2
- import * as React from 'react';
3
8
  import type { MenuButtonProps } from '@basic-ui/core';
4
9
  import { MenuButton as BaseMenuButton } from '@basic-ui/core';
5
10
 
6
11
  import type { Theme } from '../theme';
7
12
  import { Input } from '../TextField/Input';
8
13
 
9
- export interface SelectProps
10
- extends React.SelectHTMLAttributes<HTMLSelectElement> {
11
- as?: React.ElementType<any>;
14
+ export interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {
15
+ as?: ElementType<any>;
12
16
  variant?: 'filled' | 'outlined';
13
17
  hasLabel?: boolean;
14
18
  theme: Theme;
@@ -17,9 +21,8 @@ export interface SelectProps
17
21
 
18
22
  export const Select = forwardRef<HTMLSelectElement, SelectProps>(
19
23
  ({ as: asProp = 'select', ...props }, forwardedRef) => {
20
- const InputSelect: React.FC<
21
- SelectProps & React.RefAttributes<HTMLSelectElement>
22
- > = Input as any;
24
+ const InputSelect: FC<SelectProps & RefAttributes<HTMLSelectElement>> =
25
+ Input as any;
23
26
 
24
27
  return <InputSelect as={asProp} ref={forwardedRef} {...props} />;
25
28
  }
@@ -27,11 +30,10 @@ export const Select = forwardRef<HTMLSelectElement, SelectProps>(
27
30
 
28
31
  const SelectButtonInner = forwardRef<
29
32
  HTMLButtonElement,
30
- SelectProps & { innerAs?: React.ElementType<any> }
33
+ SelectProps & { innerAs?: ElementType<any> }
31
34
  >(({ innerAs = 'div', ...props }, forwardedRef) => {
32
- const InputButton: React.FC<
33
- SelectProps & React.RefAttributes<HTMLButtonElement>
34
- > = Input as any;
35
+ const InputButton: FC<SelectProps & RefAttributes<HTMLButtonElement>> =
36
+ Input as any;
35
37
 
36
38
  return (
37
39
  <InputButton as={innerAs} ref={forwardedRef} tabIndex={0} {...props} />
@@ -1,17 +1,13 @@
1
- import type { LabelHTMLAttributes } from 'react';
1
+ import type { ElementType, LabelHTMLAttributes, ReactNode } from 'react';
2
2
  import { forwardRef } from 'react';
3
- import * as React from 'react';
4
3
 
5
4
  import type { BoxProps } from '../Box';
6
5
  import { Box } from '../Box';
7
6
 
8
7
  export interface SelectionControlLabelProps
9
- extends BoxProps<
10
- HTMLLabelElement,
11
- React.LabelHTMLAttributes<HTMLLabelElement>
12
- > {
13
- as?: React.ElementType<any>;
14
- children?: React.ReactNode;
8
+ extends BoxProps<HTMLLabelElement, LabelHTMLAttributes<HTMLLabelElement>> {
9
+ as?: ElementType<any>;
10
+ children?: ReactNode;
15
11
  }
16
12
 
17
13
  export const SelectionControlLabel = forwardRef<
@@ -1,13 +1,13 @@
1
+ import type { ElementType, ReactNode } from 'react';
1
2
  import { forwardRef } from 'react';
2
- import * as React from 'react';
3
3
 
4
4
  import type { TextProps } from '../Text';
5
5
  import { Text } from '../Text';
6
6
  import { alpha } from '../color';
7
7
 
8
8
  export interface SelectionControlTextProps extends TextProps {
9
- as?: React.ElementType<any>;
10
- children?: React.ReactNode;
9
+ as?: ElementType<any>;
10
+ children?: ReactNode;
11
11
  disabled?: boolean;
12
12
  }
13
13
 
@@ -1,5 +1,5 @@
1
+ import type { ReactNode } from 'react';
1
2
  import { forwardRef } from 'react';
2
- import * as React from 'react';
3
3
  import { keyframes } from '@emotion/react';
4
4
  import type { Keyframes } from '@emotion/serialize';
5
5
 
@@ -14,7 +14,7 @@ export const appearAnimation: Keyframes = keyframes({
14
14
 
15
15
  export interface DelayAppearanceProps extends BoxProps {
16
16
  timeoutInMilliseconds?: number;
17
- children?: React.ReactNode;
17
+ children?: ReactNode;
18
18
  }
19
19
 
20
20
  /**
@@ -34,13 +34,13 @@ const Example = () => {
34
34
  return (
35
35
  <>
36
36
  <Box>
37
- <Text variant="h4" px={2}>
37
+ <Text variant="title-large" px={2}>
38
38
  Pulse
39
39
  </Text>
40
40
  <Skeletons animation="pulse" />
41
41
  </Box>
42
42
  <Box>
43
- <Text variant="h4" px={2}>
43
+ <Text variant="title-large" px={2}>
44
44
  Wave
45
45
  </Text>
46
46
  <Skeletons animation="wave" />
@@ -1,5 +1,5 @@
1
+ import type { ElementType, HTMLAttributes, ReactNode } from 'react';
1
2
  import { forwardRef } from 'react';
2
- import * as React from 'react';
3
3
 
4
4
  import type { BoxProps } from '../Box';
5
5
  import { Box } from '../Box';
@@ -8,10 +8,10 @@ import { useTheme } from '../theme';
8
8
  import { pulseAnimationStyle, waveAnimationStyle } from './animation';
9
9
 
10
10
  export interface SkeletonProps
11
- extends BoxProps<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>> {
12
- as?: React.ElementType<any>;
13
- innerAs?: React.ElementType<any>;
14
- children?: React.ReactNode;
11
+ extends BoxProps<HTMLSpanElement, HTMLAttributes<HTMLSpanElement>> {
12
+ as?: ElementType<any>;
13
+ innerAs?: ElementType<any>;
14
+ children?: ReactNode;
15
15
  animation?: 'pulse' | 'wave';
16
16
  }
17
17
 
@@ -21,7 +21,7 @@ export const Skeleton = forwardRef<HTMLSpanElement, SkeletonProps>(
21
21
  const theme = useTheme();
22
22
 
23
23
  return (
24
- <Box<BoxProps<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>>
24
+ <Box<BoxProps<HTMLSpanElement, HTMLAttributes<HTMLSpanElement>>>
25
25
  ref={forwardedRef}
26
26
  as={as}
27
27
  __css={{
@@ -1,7 +1,7 @@
1
1
  import { assignMultipleRefs } from '@basic-ui/core';
2
2
  import { rem } from 'polished';
3
+ import type { ReactElement } from 'react';
3
4
  import { cloneElement, forwardRef, useRef } from 'react';
4
- import * as React from 'react';
5
5
 
6
6
  import { Box } from '../Box';
7
7
  import {
@@ -15,7 +15,7 @@ import { Text } from '../Text';
15
15
  import { useSnackbarAnimation } from './useSnackbarAnimation';
16
16
 
17
17
  export interface SnackbarProps extends PaperProps {
18
- action?: React.ReactElement;
18
+ action?: ReactElement;
19
19
  timeout?: number;
20
20
  dismissible?: boolean;
21
21
  }
@@ -68,7 +68,7 @@ export const Snackbar = forwardRef<HTMLDivElement, SnackbarProps>(
68
68
  }}
69
69
  {...otherProps}
70
70
  >
71
- <Text variant="body2" as="span" py={2}>
71
+ <Text variant="body-medium" as="span" py={2}>
72
72
  {children}
73
73
  </Text>
74
74
  {action && (
@@ -1,4 +1,4 @@
1
- import type { MutableRefObject, ReactElement, FC } from 'react';
1
+ import type { MutableRefObject, ReactElement, FC, ReactNode } from 'react';
2
2
  import {
3
3
  useLayoutEffect,
4
4
  createContext,
@@ -7,7 +7,6 @@ import {
7
7
  useRef,
8
8
  useState,
9
9
  } from 'react';
10
- import * as React from 'react';
11
10
 
12
11
  export type StackPlacement =
13
12
  | 'top-right'
@@ -98,9 +97,7 @@ function StackContent({
98
97
  gap: number;
99
98
  placement: StackPlacement;
100
99
  maxSize: number;
101
- onAddItemRef: React.MutableRefObject<
102
- ((element: React.ReactElement) => void) | null
103
- >;
100
+ onAddItemRef: MutableRefObject<((element: ReactElement) => void) | null>;
104
101
  }) {
105
102
  const id = useRef(0);
106
103
  const items = useRef<StackItem[]>([]);
@@ -110,7 +107,7 @@ function StackContent({
110
107
  }
111
108
 
112
109
  useEffect(() => {
113
- onAddItemRef.current = (element: React.ReactElement) => {
110
+ onAddItemRef.current = (element: ReactElement) => {
114
111
  const itemId = String(++id.current);
115
112
 
116
113
  items.current.push({
@@ -200,7 +197,7 @@ interface StackItem {
200
197
  }
201
198
 
202
199
  export const StackProvider: FC<{
203
- children?: React.ReactNode | React.ReactNode[];
200
+ children?: ReactNode | ReactNode[];
204
201
  gap?: number;
205
202
  placement?:
206
203
  | 'top-right'
@@ -211,8 +208,8 @@ export const StackProvider: FC<{
211
208
  | 'bottom-left';
212
209
  maxSize?: number;
213
210
  }> = ({ children, gap = 8, placement = 'top-right', maxSize = 3 }) => {
214
- const onAddItemRef = useRef<(element: React.ReactElement) => void>(null);
215
- function onAddItem(element: React.ReactElement) {
211
+ const onAddItemRef = useRef<(element: ReactElement) => void>(null);
212
+ function onAddItem(element: ReactElement) {
216
213
  onAddItemRef.current?.(element);
217
214
  }
218
215
 
@@ -1,6 +1,7 @@
1
- import type { CSSProperties } from 'react';
1
+ import type { CSSProperties, MutableRefObject } from 'react';
2
2
  import { useEffect } from 'react';
3
3
 
4
+ import { EASING_STANDARD } from '../motion';
4
5
  import { useStackItem } from './Stack';
5
6
 
6
7
  const TRANSITION_TIME = 150;
@@ -100,7 +101,7 @@ export const placements = {
100
101
  const commonStyle = { position: 'fixed', zIndex: 'snackbar' };
101
102
 
102
103
  function getTransition(timems: number) {
103
- return `opacity ${timems}ms cubic-bezier(.4,0,.2,1),transform ${timems}ms cubic-bezier(.4,0,.2,1)`;
104
+ return `opacity ${timems}ms ${EASING_STANDARD},transform ${timems}ms ${EASING_STANDARD}`;
104
105
  }
105
106
 
106
107
  const defaultAnimation = {
@@ -110,7 +111,7 @@ const defaultAnimation = {
110
111
  };
111
112
 
112
113
  export function useSnackbarAnimation(
113
- ref: React.MutableRefObject<HTMLDivElement | null>,
114
+ ref: MutableRefObject<HTMLDivElement | null>,
114
115
  timeout: number
115
116
  ): {
116
117
  style: CSSProperties;
@@ -1,6 +1,5 @@
1
- import type { InputHTMLAttributes } from 'react';
1
+ import type { ElementType, FC, InputHTMLAttributes } from 'react';
2
2
  import { forwardRef } from 'react';
3
- import * as React from 'react';
4
3
  import { CheckBox as _CheckBoxCore } from '@basic-ui/core';
5
4
 
6
5
  import type { RippleBoxProps } from '../Ripple';
@@ -14,18 +13,15 @@ import {
14
13
  } from '../SelectionControl';
15
14
  import { SwitchTrail, SwitchThumb, SwitchCircle } from './styledComponents';
16
15
 
17
- const CheckBoxCore: React.FC<
16
+ const CheckBoxCore: FC<
18
17
  SwitchProps & {
19
- innerAs?: React.ElementType<any>;
18
+ innerAs?: ElementType<any>;
20
19
  }
21
20
  > = _CheckBoxCore as any;
22
21
 
23
- interface SwitchProps
24
- extends BoxProps<
25
- HTMLInputElement,
26
- React.InputHTMLAttributes<HTMLInputElement>
27
- > {
28
- as?: React.ElementType<any>;
22
+ export interface SwitchProps
23
+ extends BoxProps<HTMLInputElement, InputHTMLAttributes<HTMLInputElement>> {
24
+ as?: ElementType<any>;
29
25
  checked?: boolean;
30
26
  disabled?: boolean;
31
27
  }
@@ -1,6 +1,7 @@
1
1
  import { rem } from 'polished';
2
2
 
3
3
  import { Box } from '../Box';
4
+ import { EASING_STANDARD } from '../motion';
4
5
 
5
6
  const BORDER_WIDTH = 2;
6
7
  const TRAIL_WIDTH = 52;
@@ -48,8 +49,7 @@ export const SwitchThumb = ({ checked = false, ...otherProps }) => (
48
49
  (TRAIL_WIDTH - CIRCLE_SIZE_INACTIVE_CHECKED - BORDER_WIDTH * 4) / 2
49
50
  )})) translateY(-50%)`,
50
51
  WebkitTapHighlightColor: 'transparent',
51
- transition:
52
- 'background-color 90ms cubic-bezier(.4,0,.2,1),border-color 90ms cubic-bezier(.4,0,.2,1),transform 90ms cubic-bezier(.4,0,.2,1),height 90ms cubic-bezier(.4,0,.2,1),width 90ms cubic-bezier(.4,0,.2,1)',
52
+ transition: `background-color 90ms ${EASING_STANDARD},border-color 90ms ${EASING_STANDARD},transform 90ms ${EASING_STANDARD},height 90ms ${EASING_STANDARD},width 90ms ${EASING_STANDARD}`,
53
53
  '& > input': {
54
54
  width: THUMB_SIZE,
55
55
  height: THUMB_SIZE,
package/src/Tab/Tab.tsx CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { ButtonHTMLAttributes } from 'react';
2
2
  import { forwardRef } from 'react';
3
- import * as React from 'react';
4
3
  import type { TabProps as TabPropsCore } from '@basic-ui/core';
5
4
  import { Tab as TabCore } from '@basic-ui/core';
6
5
  import { rem } from 'polished';
@@ -14,10 +13,7 @@ import { TabIndicator } from '../TabIndicator';
14
13
  import { useTabListContext } from './context';
15
14
 
16
15
  export type TabProps = TabPropsCore &
17
- RippleBoxProps<
18
- HTMLButtonElement,
19
- React.ButtonHTMLAttributes<HTMLButtonElement>
20
- >;
16
+ RippleBoxProps<HTMLButtonElement, ButtonHTMLAttributes<HTMLButtonElement>>;
21
17
 
22
18
  const TabInner = forwardRef<
23
19
  HTMLButtonElement,
@@ -27,7 +23,7 @@ const TabInner = forwardRef<
27
23
  const { textColor, indicatorColor, selectedTextColor } = useTabListContext();
28
24
 
29
25
  return (
30
- <Box position="relative" display="flex" flexGrow={1} flexDirection="column">
26
+ <Box position="relative" display="flex" flex={1} flexDirection="column">
31
27
  <RippleBox<
32
28
  RippleBoxProps<
33
29
  HTMLButtonElement,
@@ -57,7 +53,7 @@ const TabInner = forwardRef<
57
53
  >
58
54
  <Text
59
55
  as="span"
60
- variant="button"
56
+ variant="label-large"
61
57
  color="inherit"
62
58
  height="100%"
63
59
  textAlign="center"
@@ -5,6 +5,7 @@ import { assignMultipleRefs } from '@basic-ui/core';
5
5
  import type { BoxProps } from '../Box';
6
6
  import { Box } from '../Box';
7
7
  import { useTabIndicatorContext } from './context';
8
+ import { EASING_STANDARD } from '../motion';
8
9
 
9
10
  export interface TabIndicatorProps extends BoxProps {
10
11
  selected?: boolean;
@@ -59,7 +60,7 @@ export const TabIndicator = forwardRef<HTMLDivElement, TabIndicatorProps>(
59
60
  transform: `scale(1)`,
60
61
  opacity: selected ? 1 : 0,
61
62
  transformOrigin: 'left',
62
- transition: 'transform .25s cubic-bezier(.4,0,.2,1)',
63
+ transition: `transform .25s ${EASING_STANDARD}`,
63
64
  zIndex: 1,
64
65
  }}
65
66
  {...otherProps}
@@ -1,8 +1,9 @@
1
+ import type { MutableRefObject } from 'react';
1
2
  import { createContext, useContext } from 'react';
2
3
 
3
4
  // TabIndicator Component
4
5
  export interface TabIndicatorContextProps {
5
- currentIndicator: React.MutableRefObject<HTMLSpanElement | null>;
6
+ currentIndicator: MutableRefObject<HTMLSpanElement | null>;
6
7
  }
7
8
 
8
9
  const TabIndicatorContext = createContext<TabIndicatorContextProps>({