@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,7 +1,6 @@
1
+ import type { ElementType, ReactNode } from 'react';
1
2
  import { forwardRef } from 'react';
2
- import * as React from 'react';
3
3
  import { rem } from 'polished';
4
- import { get } from '@styled-system/css';
5
4
 
6
5
  import type { BoxProps } from '../Box';
7
6
  import { Box } from '../Box';
@@ -9,9 +8,9 @@ import { useTheme } from '../theme';
9
8
  import { alpha } from '../color';
10
9
 
11
10
  export interface ListItemProps extends BoxProps {
12
- as?: React.ElementType<any>;
13
- innerAs?: React.ElementType<any>;
14
- children?: React.ReactNode;
11
+ as?: ElementType<any>;
12
+ innerAs?: ElementType<any>;
13
+ children?: ReactNode;
15
14
  disabled?: boolean;
16
15
  selected?: boolean;
17
16
  color?: string;
@@ -51,6 +50,7 @@ export const ListItem = forwardRef<HTMLDivElement, ListItemProps>(
51
50
  disabled={disabled}
52
51
  {...otherProps}
53
52
  __css={{
53
+ variant: 'text.label-large',
54
54
  px: 3,
55
55
  py: rem(12),
56
56
  transition: 'background-color 75ms linear',
@@ -69,6 +69,7 @@ export const ListItem = forwardRef<HTMLDivElement, ListItemProps>(
69
69
  },
70
70
  '&[aria-selected="true"]': {
71
71
  backgroundColor: alpha(color, baseOpacity + 0.12),
72
+ color,
72
73
  ':hover': {
73
74
  backgroundColor: alpha(color, hoverOpacity + 0.12),
74
75
  },
@@ -87,7 +88,6 @@ export const ListItem = forwardRef<HTMLDivElement, ListItemProps>(
87
88
  },
88
89
  textDecoration: 'none',
89
90
  WebkitTapHighlightColor: 'transparent',
90
- ...get(theme, 'text.subtitle1'),
91
91
  ...__css,
92
92
  }}
93
93
  >
@@ -1,13 +1,12 @@
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 { Text } from '../Text';
5
5
 
6
- export interface ListItemTextProps
7
- extends React.HTMLAttributes<HTMLDivElement> {
8
- as?: React.ElementType<any>;
9
- text?: React.ReactNode;
10
- secondaryText?: React.ReactNode;
6
+ export interface ListItemTextProps extends HTMLAttributes<HTMLDivElement> {
7
+ as?: ElementType<any>;
8
+ text?: ReactNode;
9
+ secondaryText?: ReactNode;
11
10
  }
12
11
 
13
12
  export const ListItemText = forwardRef<HTMLDivElement, ListItemTextProps>(
@@ -20,7 +19,7 @@ export const ListItemText = forwardRef<HTMLDivElement, ListItemTextProps>(
20
19
  {secondaryText && (
21
20
  <Text
22
21
  as="span"
23
- variant="body2"
22
+ variant="body-small"
24
23
  display="block"
25
24
  __css={{
26
25
  color: 'currentColor',
package/src/Menu/Menu.tsx CHANGED
@@ -1,6 +1,5 @@
1
- import type { FC } from 'react';
1
+ import type { FC, HTMLAttributes } from 'react';
2
2
  import { forwardRef } from 'react';
3
- import * as React from 'react';
4
3
  import type {
5
4
  MenuButtonProps as MenuButtonPropsCore,
6
5
  MenuListProps as MenuListPropsCore,
@@ -25,13 +24,14 @@ import type { BoxProps } from '../Box';
25
24
  import { Box } from '../Box';
26
25
  import { growAnimation } from './animation';
27
26
  import type { PaperProps } from '../Paper';
27
+ import { EASING_STANDARD } from '../motion';
28
28
 
29
29
  /////////////////////////////////////////////////////
30
30
  // MenuList
31
31
 
32
32
  export type MenuListProps = MenuListPropsCore &
33
33
  PaperProps &
34
- BoxProps<HTMLUListElement, React.HTMLAttributes<HTMLUListElement>>;
34
+ BoxProps<HTMLUListElement, HTMLAttributes<HTMLUListElement>>;
35
35
 
36
36
  const MenuListCore: FC<MenuListProps> = _MenuListCore as any;
37
37
 
@@ -49,7 +49,7 @@ export const MenuList = forwardRef<HTMLUListElement, MenuListProps>(
49
49
  minWidth: rem(112),
50
50
  maxWidth: rem(280),
51
51
  maxHeight: rem(300),
52
- borderRadius: 'default',
52
+ borderRadius: 'extra-small',
53
53
  overflowY: 'auto',
54
54
  '[data-popper-placement="top"] &': {
55
55
  transformOrigin: 'bottom center',
@@ -57,7 +57,7 @@ export const MenuList = forwardRef<HTMLUListElement, MenuListProps>(
57
57
  '[data-popper-placement="bottom"] &': {
58
58
  transformOrigin: 'top center',
59
59
  },
60
- animation: `${growAnimation} .12s cubic-bezier(0,0,0.2,1)`,
60
+ animation: `${growAnimation} .12s ${EASING_STANDARD}`,
61
61
  ...__css,
62
62
  }}
63
63
  {...props}
@@ -0,0 +1,190 @@
1
+ import { rem } from 'polished';
2
+ import { forwardRef, useState } from 'react';
3
+
4
+ import { Box } from '../Box';
5
+ import { NavRailItem, NavRailIndicator, NavRailLabel } from './';
6
+ import type { NavRailLabelProps } from './';
7
+ import { EASING_STANDARD } from '../motion';
8
+ // import './styles.css';
9
+
10
+ export default {
11
+ title: 'components/NavRail',
12
+ };
13
+
14
+ const ListIcon = (props) => (
15
+ <svg
16
+ xmlns="http://www.w3.org/2000/svg"
17
+ height={16}
18
+ width={16}
19
+ viewBox="0 0 24 24"
20
+ {...props}
21
+ >
22
+ <path
23
+ fill="currentColor"
24
+ d="M8 17q.425 0 .713-.288Q9 16.425 9 16t-.287-.713Q8.425 15 8 15t-.713.287Q7 15.575 7 16t.287.712Q7.575 17 8 17Zm0-4q.425 0 .713-.288Q9 12.425 9 12t-.287-.713Q8.425 11 8 11t-.713.287Q7 11.575 7 12t.287.712Q7.575 13 8 13Zm0-4q.425 0 .713-.288Q9 8.425 9 8t-.287-.713Q8.425 7 8 7t-.713.287Q7 7.575 7 8t.287.712Q7.575 9 8 9Zm3 8h6v-2h-6Zm0-4h6v-2h-6Zm0-4h6V7h-6ZM5 21q-.825 0-1.413-.587Q3 19.825 3 19V5q0-.825.587-1.413Q4.175 3 5 3h14q.825 0 1.413.587Q21 4.175 21 5v14q0 .825-.587 1.413Q19.825 21 19 21Zm0-2h14V5H5v14ZM5 5v14V5Z"
25
+ />
26
+ </svg>
27
+ );
28
+
29
+ const KitchenIcon = (props) => (
30
+ <svg
31
+ xmlns="http://www.w3.org/2000/svg"
32
+ height={16}
33
+ width={16}
34
+ viewBox="0 0 24 24"
35
+ {...props}
36
+ >
37
+ <path
38
+ fill="currentColor"
39
+ d="M8 8V5h2v3Zm0 9v-5h2v5Zm-2 5q-.825 0-1.412-.587Q4 20.825 4 20V4q0-.825.588-1.413Q5.175 2 6 2h12q.825 0 1.413.587Q20 3.175 20 4v16q0 .825-.587 1.413Q18.825 22 18 22Zm0-2h12v-9H6v9ZM6 9h12V4H6Z"
40
+ />
41
+ </svg>
42
+ );
43
+
44
+ const MenuIcon = (props) => (
45
+ <svg
46
+ xmlns="http://www.w3.org/2000/svg"
47
+ height={16}
48
+ width={16}
49
+ viewBox="0 0 24 24"
50
+ {...props}
51
+ >
52
+ <path
53
+ fill="currentColor"
54
+ d="M17 22v-8h-3V7q0-2.075 1.463-3.537Q16.925 2 19 2v20ZM7 22v-9.15q-1.275-.35-2.137-1.4Q4 10.4 4 9V2h2v7h1V2h2v7h1V2h2v7q0 1.4-.863 2.45-.862 1.05-2.137 1.4V22Z"
55
+ />
56
+ </svg>
57
+ );
58
+
59
+ export const Default = () => {
60
+ const [selectedItem, setSelectedItem] = useState('0');
61
+
62
+ return (
63
+ <Box
64
+ bg="surface"
65
+ width="80px"
66
+ position="fixed"
67
+ top="0"
68
+ bottom="0"
69
+ left="0"
70
+ py={rem(80)}
71
+ display="flex"
72
+ flexDirection="column"
73
+ >
74
+ <NavRailItem
75
+ selected={selectedItem === '0'}
76
+ onClick={() => setSelectedItem('0')}
77
+ >
78
+ <NavRailIndicator>
79
+ <MenuIcon />
80
+ </NavRailIndicator>
81
+ <NavRailLabel>Menu</NavRailLabel>
82
+ </NavRailItem>
83
+ <NavRailItem
84
+ selected={selectedItem === '1'}
85
+ onClick={() => setSelectedItem('1')}
86
+ >
87
+ <NavRailIndicator>
88
+ <KitchenIcon />
89
+ </NavRailIndicator>
90
+ <NavRailLabel>Kitchen</NavRailLabel>
91
+ </NavRailItem>
92
+ <NavRailItem
93
+ selected={selectedItem === '2'}
94
+ onClick={() => setSelectedItem('2')}
95
+ >
96
+ <NavRailIndicator>
97
+ <ListIcon />
98
+ </NavRailIndicator>
99
+ <NavRailLabel>Orders</NavRailLabel>
100
+ </NavRailItem>
101
+ </Box>
102
+ );
103
+ };
104
+
105
+ const DisappearingNavRailLabel = forwardRef<
106
+ HTMLDivElement,
107
+ NavRailLabelProps & { selected: boolean }
108
+ >(function AnimatedNavRailLabel({ selected, height = '28px', ...props }, ref) {
109
+ const transitionDuration = '0.2s';
110
+ const transitionTimingFunction = EASING_STANDARD;
111
+ return (
112
+ <Box
113
+ ref={ref}
114
+ style={{
115
+ height: selected ? height : '0px',
116
+ }}
117
+ sx={{
118
+ transition: `height ${transitionDuration} ${transitionTimingFunction}`,
119
+ }}
120
+ >
121
+ <NavRailLabel
122
+ style={{
123
+ transform: selected
124
+ ? 'scale(1) translateY(0)'
125
+ : `scale(0.8, 0.64) translateY(calc(${height} * -0.5 * 0.64))`,
126
+ opacity: selected ? '1' : '0',
127
+ }}
128
+ sx={{
129
+ transformOrigin: 'center top',
130
+ transition:
131
+ `transform ${transitionDuration} ${transitionTimingFunction}, ` +
132
+ `opacity ${transitionDuration} ${transitionTimingFunction}`,
133
+ }}
134
+ {...props}
135
+ />
136
+ </Box>
137
+ );
138
+ });
139
+
140
+ export const WithHiddenLabels = () => {
141
+ const [selectedItem, setSelectedItem] = useState('0');
142
+
143
+ return (
144
+ <Box
145
+ bg="surface"
146
+ width="80px"
147
+ position="fixed"
148
+ top="0"
149
+ bottom="0"
150
+ left="0"
151
+ py={rem(80)}
152
+ display="flex"
153
+ flexDirection="column"
154
+ >
155
+ <NavRailItem
156
+ selected={selectedItem === '0'}
157
+ onClick={() => setSelectedItem('0')}
158
+ >
159
+ <NavRailIndicator>
160
+ <MenuIcon />
161
+ </NavRailIndicator>
162
+ <DisappearingNavRailLabel selected={selectedItem === '0'}>
163
+ Menu
164
+ </DisappearingNavRailLabel>
165
+ </NavRailItem>
166
+ <NavRailItem
167
+ selected={selectedItem === '1'}
168
+ onClick={() => setSelectedItem('1')}
169
+ >
170
+ <NavRailIndicator>
171
+ <KitchenIcon />
172
+ </NavRailIndicator>
173
+ <DisappearingNavRailLabel selected={selectedItem === '1'}>
174
+ Kitchen
175
+ </DisappearingNavRailLabel>
176
+ </NavRailItem>
177
+ <NavRailItem
178
+ selected={selectedItem === '2'}
179
+ onClick={() => setSelectedItem('2')}
180
+ >
181
+ <NavRailIndicator>
182
+ <ListIcon />
183
+ </NavRailIndicator>
184
+ <DisappearingNavRailLabel selected={selectedItem === '2'}>
185
+ Orders
186
+ </DisappearingNavRailLabel>
187
+ </NavRailItem>
188
+ </Box>
189
+ );
190
+ };
@@ -0,0 +1,176 @@
1
+ import type { ElementType, ReactNode } from 'react';
2
+ import { forwardRef, useMemo } from 'react';
3
+ import { rem } from 'polished';
4
+ import { get } from 'styled-system';
5
+
6
+ import type { BoxProps, SxStyleProp } from '../Box';
7
+ import { Box } from '../Box';
8
+ import { useTheme } from '../theme';
9
+ import { Text } from '../Text';
10
+ import type { TextProps } from '../Text';
11
+ import { useRippleSurface } from '../Ripple';
12
+ import { EASING_STANDARD } from '../motion';
13
+
14
+ export interface NavRailItemProps extends Omit<BoxProps, 'color'> {
15
+ as?: ElementType<any>;
16
+ children?: ReactNode;
17
+ disabled?: boolean;
18
+ selected?: boolean;
19
+ color?: string;
20
+ }
21
+
22
+ export type NavRailIndicatorProps = BoxProps;
23
+
24
+ export const NavRailIndicator = forwardRef<
25
+ HTMLDivElement,
26
+ NavRailIndicatorProps
27
+ >(function NavRailIndicator(props, forwardedRef) {
28
+ const { as = 'div', children, __css, ...otherProps } = props;
29
+
30
+ return (
31
+ <Box
32
+ color="currentColor"
33
+ ref={forwardedRef}
34
+ as={as}
35
+ data-nav-rail-item-indicator=""
36
+ {...otherProps}
37
+ __css={{
38
+ width: '100%',
39
+ height: '100%',
40
+ maxWidth: rem(56),
41
+ maxHeight: rem(56),
42
+ borderRadius: 'full',
43
+ bg: 'var(--indicator-background-color)',
44
+ display: 'flex',
45
+ alignItems: 'center',
46
+ justifyContent: 'center',
47
+ minHeight: rem(32),
48
+ transition: `background-color .2s ${EASING_STANDARD}`,
49
+ pointerEvents: 'none',
50
+ ...__css,
51
+ }}
52
+ >
53
+ {children}
54
+ </Box>
55
+ );
56
+ });
57
+
58
+ export type NavRailLabelProps = TextProps;
59
+
60
+ export const NavRailLabel = forwardRef<HTMLDivElement, NavRailLabelProps>(
61
+ function NavRailLabel(props, forwardedRef) {
62
+ const { as = 'div', children, __css, ...otherProps } = props;
63
+
64
+ return (
65
+ <Text
66
+ ref={forwardedRef}
67
+ as={as}
68
+ variant="label-small"
69
+ lineHeight={1}
70
+ {...otherProps}
71
+ __css={{
72
+ pt: rem(4),
73
+ pb: rem(12),
74
+ color: 'inherit',
75
+ pointerEvents: 'none',
76
+ ...__css,
77
+ }}
78
+ >
79
+ {children}
80
+ </Text>
81
+ );
82
+ }
83
+ );
84
+
85
+ export const NavRailItem = forwardRef<HTMLDivElement, NavRailItemProps>(
86
+ function NavRailItem(props, forwardedRef) {
87
+ const {
88
+ as = 'button',
89
+ children,
90
+ color = 'primary-container',
91
+ selected = false,
92
+ disabled = false,
93
+ style,
94
+ onKeyDown,
95
+ onPointerDown,
96
+ __css,
97
+ ...otherProps
98
+ } = props;
99
+ const theme = useTheme();
100
+ const baseOpacity = 0,
101
+ hoverOpacity = 0.04,
102
+ focusOpacity = 0.12,
103
+ pressedOpacity = 0.12;
104
+ const ripple = useRippleSurface({
105
+ rippleColor: 'currentColor',
106
+ onKeyDown,
107
+ onPointerDown,
108
+ baseOpacity,
109
+ hoverOpacity,
110
+ focusOpacity,
111
+ pressedOpacity,
112
+ });
113
+
114
+ // Apply ripple from nav item to nav indicator
115
+ const rippleCss = useMemo(() => {
116
+ const ret: SxStyleProp = {};
117
+ const keys = Object.keys(ripple.__css);
118
+ for (const key of keys) {
119
+ if (!key.startsWith('&')) {
120
+ ret['& [data-nav-rail-item-indicator]'] =
121
+ ret['& [data-nav-rail-item-indicator]'] || {};
122
+ ret['& [data-nav-rail-item-indicator]'][key] = ripple.__css[key];
123
+ continue;
124
+ }
125
+
126
+ const newKey = key.replace(
127
+ /(.+?)::(before|after)/g,
128
+ '$1 [data-nav-rail-item-indicator]::$2'
129
+ );
130
+ ret[newKey] = ripple.__css[key];
131
+ }
132
+ return ret;
133
+ }, [ripple.__css]);
134
+
135
+ return (
136
+ <Box
137
+ ref={forwardedRef}
138
+ as={as}
139
+ {...otherProps}
140
+ onPointerDown={ripple.onPointerDown}
141
+ onKeyDown={ripple.onKeyDown}
142
+ aria-pressed={selected}
143
+ type="button"
144
+ style={{ ...ripple.style, ...style }}
145
+ disabled={disabled}
146
+ __css={{
147
+ display: 'flex',
148
+ flexDirection: 'column',
149
+ alignItems: 'center',
150
+ transition: `color .2s ${EASING_STANDARD}`,
151
+ color: selected ? `on.${color}` : 'on.surface-variant',
152
+ '--indicator-background-color': selected
153
+ ? get(theme, `colors.${color}`)
154
+ : 'transparent',
155
+ border: 'none',
156
+ ':focus': {
157
+ outline: 'none',
158
+ },
159
+ backgroundColor: 'transparent',
160
+ margin: 0,
161
+ padding: 0,
162
+ px: rem(12),
163
+ minHeight: rem(60),
164
+ height: rem(60),
165
+ cursor: 'pointer',
166
+ textDecoration: 'none',
167
+ WebkitTapHighlightColor: 'transparent',
168
+ ...rippleCss,
169
+ ...__css,
170
+ }}
171
+ >
172
+ {children}
173
+ </Box>
174
+ );
175
+ }
176
+ );
@@ -0,0 +1 @@
1
+ export * from './NavRailItem';
@@ -1,13 +1,12 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
1
2
  import { forwardRef } from 'react';
2
- import * as React from 'react';
3
3
  import { rem } from 'polished';
4
4
 
5
5
  import { NotchedOutlineProvider } from './context';
6
6
  import { useTheme } from '../theme';
7
7
  import { NOTCH_PADDING, InnerContainer } from './styledComponents';
8
8
 
9
- export interface NotchedOutlineProps
10
- extends React.HTMLAttributes<HTMLDivElement> {
9
+ export interface NotchedOutlineProps extends HTMLAttributes<HTMLDivElement> {
11
10
  borderColor: string;
12
11
  borderStyle?: string;
13
12
  borderWidth: number;
@@ -16,8 +15,8 @@ export interface NotchedOutlineProps
16
15
  notchWidth: number;
17
16
  notchActive?: boolean;
18
17
  forceActive?: boolean;
19
- label?: React.ReactNode;
20
- children?: React.ReactNode;
18
+ label?: ReactNode;
19
+ children?: ReactNode;
21
20
  }
22
21
 
23
22
  export const NotchedOutline = forwardRef<HTMLDivElement, NotchedOutlineProps>(
@@ -5,6 +5,7 @@ import { css } from '@styled-system/css';
5
5
 
6
6
  import { alpha } from '../color';
7
7
  import type { Theme } from '../theme';
8
+ import { EASING_STANDARD } from '../motion';
8
9
 
9
10
  export const NOTCH_PADDING = 4;
10
11
 
@@ -105,7 +106,7 @@ export const InnerContainer = styled('div', {
105
106
  ['[data-notch-outline-item]']: {
106
107
  boxSizing: 'border-box',
107
108
  borderStyle,
108
- transition: `border-color .15s cubic-bezier(.4,0,.2,1)`,
109
+ transition: `border-color .15s ${EASING_STANDARD}`,
109
110
  ...(forceActive ? focusStyle : inactiveStyle),
110
111
  },
111
112
  // notch items styles when input is hovered
@@ -27,12 +27,12 @@ const Example = ({}) => {
27
27
  mb="4"
28
28
  sx={{ borderRadius: 'large' }}
29
29
  >
30
- <Text variant="h3">Hello</Text>
31
- <Text variant="body1">This is looking cool</Text>
30
+ <Text variant="headline-medium">Hello</Text>
31
+ <Text variant="body-medium">This is looking cool</Text>
32
32
  Pretty cool.
33
33
  </Paper>
34
34
  <label>
35
- <Text as="span" variant="body1">
35
+ <Text as="span" variant="body-medium">
36
36
  Elevation: {elevation}
37
37
  </Text>
38
38
  <input
@@ -1,5 +1,5 @@
1
+ import type { ElementType, ReactNode } from 'react';
1
2
  import { forwardRef } from 'react';
2
- import * as React from 'react';
3
3
  import { rem } from 'polished';
4
4
 
5
5
  import type { BoxProps } from '../Box';
@@ -12,12 +12,12 @@ import {
12
12
  } from '../color';
13
13
 
14
14
  export interface PaperProps extends BoxProps {
15
- as?: React.ElementType<any>;
15
+ as?: ElementType<any>;
16
16
  elevation?: number;
17
17
  outlined?: boolean;
18
18
  backgroundOverlay?: number | string;
19
19
  darkThemeBackgroundOverlay?: number | string;
20
- children?: React.ReactNode;
20
+ children?: ReactNode;
21
21
  }
22
22
 
23
23
  export const Paper = forwardRef<HTMLDivElement, PaperProps>(function Paper(
@@ -5,6 +5,7 @@ import { rem } from 'polished';
5
5
 
6
6
  import type { BoxProps } from '../Box';
7
7
  import { Box } from '../Box';
8
+ import { EASING_STANDARD } from '../motion';
8
9
 
9
10
  export type ProgressSpinnerProps = BoxProps & {
10
11
  progress?: number;
@@ -105,8 +106,7 @@ export const ProgressSpinner = forwardRef<HTMLDivElement, ProgressSpinnerProps>(
105
106
  strokeDashoffset: '0px',
106
107
  }
107
108
  : {
108
- transition:
109
- 'stroke-dashoffset 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',
109
+ transition: `stroke-dashoffset 300ms ${EASING_STANDARD} 0ms`,
110
110
  strokeDasharray: circumference.toFixed(3),
111
111
  }
112
112
  }
@@ -1,5 +1,5 @@
1
+ import type { ChangeEvent } from 'react';
1
2
  import { useState } from 'react';
2
- import * as React from 'react';
3
3
 
4
4
  import { RadioButton, RadioGroup, Box } from '../';
5
5
  // import './styles.css';
@@ -35,7 +35,7 @@ const Example = (props) => {
35
35
 
36
36
  const StandaloneExample = (props) => {
37
37
  const [selectedValue, setSelectedValue] = useState('a');
38
- const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
38
+ const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
39
39
  setSelectedValue(e.target.value);
40
40
  };
41
41
 
@@ -21,7 +21,7 @@ export type RadioButtonProps = RadioButtonCoreProps;
21
21
  const RadioButtonInner = forwardRef<
22
22
  HTMLInputElement,
23
23
  RadioButtonProps &
24
- BoxProps<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>
24
+ BoxProps<HTMLInputElement, InputHTMLAttributes<HTMLInputElement>>
25
25
  >(function RadioButtonInner(props, forwardedRef) {
26
26
  const { innerAs: as, checked, disabled, __css, ...otherProps } = props;
27
27
  const color = 'primary';
@@ -1,11 +1,11 @@
1
+ import type { HTMLAttributes } from 'react';
1
2
  import { forwardRef } from 'react';
2
- import * as React from 'react';
3
3
  import { rem } from 'polished';
4
4
 
5
5
  import { Box } from '../Box';
6
+ import { EASING_STANDARD } from '../motion';
6
7
 
7
- export interface RadioButtonIconProps
8
- extends React.HTMLAttributes<HTMLDivElement> {
8
+ export interface RadioButtonIconProps extends HTMLAttributes<HTMLDivElement> {
9
9
  checked?: boolean;
10
10
  disabled?: boolean;
11
11
  }
@@ -34,8 +34,7 @@ export const RadioButtonIcon = forwardRef<HTMLDivElement, RadioButtonIconProps>(
34
34
  borderRadius: 'full',
35
35
  width: '100%',
36
36
  height: '100%',
37
- transition:
38
- 'transform .12s cubic-bezier(0,0,.2,1) 0ms,background-color .12s cubic-bezier(0,0,.2,1) 0ms',
37
+ transition: `transform .12s ${EASING_STANDARD} 0ms,background-color .12s ${EASING_STANDARD} 0ms`,
39
38
  transform: checked ? 'scale(1)' : 'scale(0)',
40
39
  }}
41
40
  />
@@ -46,7 +46,7 @@ const Example = () => {
46
46
  }}
47
47
  >
48
48
  <Ripple animation={animation} style={rippleStyle} />
49
- <Text variant="h3" style={{ zIndex: 1, color: textColor }}>
49
+ <Text variant="headline-medium" style={{ zIndex: 1, color: textColor }}>
50
50
  Hello
51
51
  </Text>
52
52
  </Box>
@@ -1,6 +1,5 @@
1
1
  import type { HTMLAttributes } from 'react';
2
2
  import { forwardRef } from 'react';
3
- import * as React from 'react';
4
3
 
5
4
  import type { UseRippleSurfaceOptions } from './useRippleSurface';
6
5
  import { useRippleSurface } from './useRippleSurface';
@@ -9,7 +8,7 @@ import { Box } from '../Box';
9
8
 
10
9
  export type RippleBoxProps<
11
10
  H extends HTMLElement = HTMLDivElement,
12
- Attr = React.HTMLAttributes<H>
11
+ Attr = HTMLAttributes<H>
13
12
  > = BoxProps<H, Attr> & UseRippleSurfaceOptions<H>;
14
13
 
15
14
  export const RippleBox: <