@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.
- package/build/cjs/index.js +248 -57
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Alert/Alert.d.ts +1 -1
- package/build/esm/Alert/Alert.js +1 -1
- package/build/esm/Alert/Alert.js.map +1 -1
- package/build/esm/AppBar/AppBar.d.ts +3 -3
- package/build/esm/AppBar/AppBar.js +2 -2
- package/build/esm/AppBar/AppBar.js.map +1 -1
- package/build/esm/AppBar/AppBarButton.d.ts +1 -1
- package/build/esm/Badge/Badge.d.ts +1 -1
- package/build/esm/BaseLine/BaseLine.d.ts +1 -0
- package/build/esm/BottomSheet/BottomSheet.d.ts +1 -1
- package/build/esm/BottomSheet/BottomSheetSurface.d.ts +2 -2
- package/build/esm/BottomSheet/BottomSheetSurface.js +2 -2
- package/build/esm/BottomSheet/BottomSheetSurface.js.map +1 -1
- package/build/esm/Box/Box.d.ts +4 -4
- package/build/esm/Box/Box.js +1 -2
- package/build/esm/Box/Box.js.map +1 -1
- package/build/esm/Button/BaseButton.d.ts +3 -3
- package/build/esm/Button/BaseButton.js +0 -1
- package/build/esm/Button/BaseButton.js.map +1 -1
- package/build/esm/Button/Button.d.ts +4 -4
- package/build/esm/Button/Button.js +0 -1
- package/build/esm/Button/Button.js.map +1 -1
- package/build/esm/Button/ButtonGroup.d.ts +2 -2
- package/build/esm/Button/ButtonGroup.js +1 -1
- package/build/esm/Button/ButtonGroup.js.map +1 -1
- package/build/esm/Button/FilledButton.d.ts +1 -1
- package/build/esm/Button/FilledButton.js +6 -8
- package/build/esm/Button/FilledButton.js.map +1 -1
- package/build/esm/Button/OutlinedButton.d.ts +1 -1
- package/build/esm/Button/TransparentButton.d.ts +1 -1
- package/build/esm/CheckBox/CheckBox.d.ts +5 -5
- package/build/esm/CheckBox/CheckBox.js +0 -1
- package/build/esm/CheckBox/CheckBox.js.map +1 -1
- package/build/esm/CheckBox/CheckBoxIcon.d.ts +4 -4
- package/build/esm/CheckBox/CheckBoxIcon.js +2 -2
- package/build/esm/CheckBox/CheckBoxIcon.js.map +1 -1
- package/build/esm/Chip/ButtonChip.d.ts +4 -4
- package/build/esm/Chip/ButtonChip.js +0 -1
- package/build/esm/Chip/ButtonChip.js.map +1 -1
- package/build/esm/Chip/ChipBase.d.ts +3 -3
- package/build/esm/Chip/ChipBase.js +0 -1
- package/build/esm/Chip/ChipBase.js.map +1 -1
- package/build/esm/Chip/ChoiceChip.d.ts +5 -5
- package/build/esm/Chip/ChoiceChip.js +0 -1
- package/build/esm/Chip/ChoiceChip.js.map +1 -1
- package/build/esm/ColorMode/ColorModeProvider.d.ts +3 -3
- package/build/esm/ColorMode/ColorModeProvider.js +0 -1
- package/build/esm/ColorMode/ColorModeProvider.js.map +1 -1
- package/build/esm/Combobox/Combobox.d.ts +13 -13
- package/build/esm/Combobox/Combobox.js +3 -3
- package/build/esm/Combobox/Combobox.js.map +1 -1
- package/build/esm/Dialog/Dialog.d.ts +1 -1
- package/build/esm/Dialog/DialogBackdrop.d.ts +2 -2
- package/build/esm/Dialog/DialogBackdrop.js +0 -1
- package/build/esm/Dialog/DialogBackdrop.js.map +1 -1
- package/build/esm/Dialog/DialogSurface.d.ts +2 -2
- package/build/esm/Dialog/DialogSurface.js +0 -1
- package/build/esm/Dialog/DialogSurface.js.map +1 -1
- package/build/esm/Dialog/useDialogAnimation.js +3 -2
- package/build/esm/Dialog/useDialogAnimation.js.map +1 -1
- package/build/esm/Divider/Divider.d.ts +3 -3
- package/build/esm/Divider/Divider.js +0 -1
- package/build/esm/Divider/Divider.js.map +1 -1
- package/build/esm/FloatingLabel/FloatingLabel.d.ts +4 -4
- package/build/esm/FloatingLabel/FloatingLabel.js +3 -3
- package/build/esm/FloatingLabel/FloatingLabel.js.map +1 -1
- package/build/esm/LineRipple/LineRipple.d.ts +3 -3
- package/build/esm/LineRipple/LineRipple.js +2 -2
- package/build/esm/LineRipple/LineRipple.js.map +1 -1
- package/build/esm/Link/Link.d.ts +3 -3
- package/build/esm/Link/Link.js +0 -1
- package/build/esm/Link/Link.js.map +1 -1
- package/build/esm/List/List.d.ts +5 -5
- package/build/esm/List/List.js +0 -1
- package/build/esm/List/List.js.map +1 -1
- package/build/esm/ListItem/ListItem.d.ts +5 -5
- package/build/esm/ListItem/ListItem.js +3 -3
- package/build/esm/ListItem/ListItem.js.map +1 -1
- package/build/esm/ListItem/ListItemText.d.ts +6 -6
- package/build/esm/ListItem/ListItemText.js +1 -2
- package/build/esm/ListItem/ListItemText.js.map +1 -1
- package/build/esm/Menu/Menu.d.ts +6 -6
- package/build/esm/Menu/Menu.js +5 -3
- package/build/esm/Menu/Menu.js.map +1 -1
- package/build/esm/NavRail/NavRailItem.d.ts +15 -0
- package/build/esm/NavRail/NavRailItem.js +147 -0
- package/build/esm/NavRail/NavRailItem.js.map +1 -0
- package/build/esm/NavRail/index.d.ts +1 -0
- package/build/esm/NavRail/index.js +2 -0
- package/build/esm/NavRail/index.js.map +1 -0
- package/build/esm/NotchedOutline/NotchedOutline.d.ts +5 -5
- package/build/esm/NotchedOutline/NotchedOutline.js +0 -1
- package/build/esm/NotchedOutline/NotchedOutline.js.map +1 -1
- package/build/esm/NotchedOutline/styledComponents.d.ts +114 -1
- package/build/esm/NotchedOutline/styledComponents.js +3 -2
- package/build/esm/NotchedOutline/styledComponents.js.map +1 -1
- package/build/esm/Paper/Paper.d.ts +4 -4
- package/build/esm/Paper/Paper.js +0 -1
- package/build/esm/Paper/Paper.js.map +1 -1
- package/build/esm/ProgressSpinner/ProgressSpinner.js +2 -1
- package/build/esm/ProgressSpinner/ProgressSpinner.js.map +1 -1
- package/build/esm/RadioButton/RadioButton.js.map +1 -1
- package/build/esm/RadioButton/RadioButtonIcon.d.ts +3 -3
- package/build/esm/RadioButton/RadioButtonIcon.js +2 -2
- package/build/esm/RadioButton/RadioButtonIcon.js.map +1 -1
- package/build/esm/RadioButton/RadioGroup.d.ts +1 -1
- package/build/esm/Ripple/RippleBox.d.ts +1 -2
- package/build/esm/Ripple/RippleBox.js +0 -1
- package/build/esm/Ripple/RippleBox.js.map +1 -1
- package/build/esm/Ripple/useRippleHandlers.d.ts +3 -3
- package/build/esm/Ripple/useRippleHandlers.js.map +1 -1
- package/build/esm/Ripple/useRippleSurface.d.ts +5 -5
- package/build/esm/Ripple/useRippleSurface.js +61 -58
- package/build/esm/Ripple/useRippleSurface.js.map +1 -1
- package/build/esm/Select/Select.d.ts +6 -6
- package/build/esm/Select/Select.js +0 -1
- package/build/esm/Select/Select.js.map +1 -1
- package/build/esm/Select/SelectIcon.d.ts +3 -3
- package/build/esm/Select/SelectIcon.js +2 -2
- package/build/esm/Select/SelectIcon.js.map +1 -1
- package/build/esm/Select/context.d.ts +2 -2
- package/build/esm/Select/context.js.map +1 -1
- package/build/esm/Select/defaultRender.d.ts +2 -1
- package/build/esm/Select/defaultRender.js.map +1 -1
- package/build/esm/Select/styledComponents.d.ts +9 -9
- package/build/esm/Select/styledComponents.js +0 -1
- package/build/esm/Select/styledComponents.js.map +1 -1
- package/build/esm/SelectItem/SelectItem.d.ts +1 -1
- package/build/esm/SelectionControl/SelectionControlLabel.d.ts +5 -5
- package/build/esm/SelectionControl/SelectionControlLabel.js +0 -1
- package/build/esm/SelectionControl/SelectionControlLabel.js.map +1 -1
- package/build/esm/SelectionControl/SelectionControlText.d.ts +4 -4
- package/build/esm/SelectionControl/SelectionControlText.js +0 -1
- package/build/esm/SelectionControl/SelectionControlText.js.map +1 -1
- package/build/esm/Skeleton/DelayAppearance.d.ts +3 -3
- package/build/esm/Skeleton/DelayAppearance.js +0 -1
- package/build/esm/Skeleton/DelayAppearance.js.map +1 -1
- package/build/esm/Skeleton/Skeleton.d.ts +6 -6
- package/build/esm/Skeleton/Skeleton.js +0 -1
- package/build/esm/Skeleton/Skeleton.js.map +1 -1
- package/build/esm/Snackbar/Snackbar.d.ts +3 -3
- package/build/esm/Snackbar/Snackbar.js +1 -2
- package/build/esm/Snackbar/Snackbar.js.map +1 -1
- package/build/esm/Snackbar/Stack.d.ts +2 -3
- package/build/esm/Snackbar/Stack.js +0 -1
- package/build/esm/Snackbar/Stack.js.map +1 -1
- package/build/esm/Snackbar/useSnackbarAnimation.d.ts +2 -2
- package/build/esm/Snackbar/useSnackbarAnimation.js +2 -1
- package/build/esm/Snackbar/useSnackbarAnimation.js.map +1 -1
- package/build/esm/Switch/Switch.d.ts +4 -5
- package/build/esm/Switch/Switch.js +0 -1
- package/build/esm/Switch/Switch.js.map +1 -1
- package/build/esm/Switch/styledComponents.d.ts +1 -0
- package/build/esm/Switch/styledComponents.js +2 -1
- package/build/esm/Switch/styledComponents.js.map +1 -1
- package/build/esm/Tab/Tab.d.ts +3 -3
- package/build/esm/Tab/Tab.js +2 -3
- package/build/esm/Tab/Tab.js.map +1 -1
- package/build/esm/Tab/TabList.d.ts +1 -1
- package/build/esm/Tab/TabPanel.d.ts +1 -1
- package/build/esm/TabIndicator/TabIndicator.d.ts +1 -1
- package/build/esm/TabIndicator/TabIndicator.js +2 -1
- package/build/esm/TabIndicator/TabIndicator.js.map +1 -1
- package/build/esm/TabIndicator/context.d.ts +2 -2
- package/build/esm/TabIndicator/context.js.map +1 -1
- package/build/esm/Table/Table.d.ts +1 -1
- package/build/esm/Table/TableRow.d.ts +1 -1
- package/build/esm/Table/TableRow.js +1 -1
- package/build/esm/Table/TableRow.js.map +1 -1
- package/build/esm/Text/LoremIpsum.js +1 -1
- package/build/esm/Text/LoremIpsum.js.map +1 -1
- package/build/esm/Text/Text.d.ts +8 -4
- package/build/esm/Text/Text.js +5 -2
- package/build/esm/Text/Text.js.map +1 -1
- package/build/esm/TextField/FilledContainer.d.ts +4 -4
- package/build/esm/TextField/FilledContainer.js +0 -1
- package/build/esm/TextField/FilledContainer.js.map +1 -1
- package/build/esm/TextField/HelperText.d.ts +5 -5
- package/build/esm/TextField/HelperText.js +1 -2
- package/build/esm/TextField/HelperText.js.map +1 -1
- package/build/esm/TextField/IconContainer.d.ts +2 -3
- package/build/esm/TextField/IconContainer.js +0 -1
- package/build/esm/TextField/IconContainer.js.map +1 -1
- package/build/esm/TextField/Input.d.ts +4 -4
- package/build/esm/TextField/Input.js +2 -1
- package/build/esm/TextField/Input.js.map +1 -1
- package/build/esm/TextField/OutlinedContainer.d.ts +4 -4
- package/build/esm/TextField/OutlinedContainer.js +0 -1
- package/build/esm/TextField/OutlinedContainer.js.map +1 -1
- package/build/esm/TextField/TextField.d.ts +5 -5
- package/build/esm/TextField/TextField.js +0 -1
- package/build/esm/TextField/TextField.js.map +1 -1
- package/build/esm/ThemeExplorer/ThemeColors.d.ts +2 -2
- package/build/esm/ThemeExplorer/ThemeColors.js +1 -1
- package/build/esm/ThemeExplorer/ThemeColors.js.map +1 -1
- package/build/esm/ThemeExplorer/components.d.ts +5 -6
- package/build/esm/ThemeExplorer/components.js +4 -3
- package/build/esm/ThemeExplorer/components.js.map +1 -1
- package/build/esm/ThemeExplorer/makeColorScheme.js +2 -1
- package/build/esm/ThemeExplorer/makeColorScheme.js.map +1 -1
- package/build/esm/ThemeExplorer/useDeferredColor.js +2 -1
- package/build/esm/ThemeExplorer/useDeferredColor.js.map +1 -1
- package/build/esm/Tooltip/Tooltip.d.ts +3 -3
- package/build/esm/Tooltip/Tooltip.js +5 -8
- package/build/esm/Tooltip/Tooltip.js.map +1 -1
- package/build/esm/color.d.ts +2 -0
- package/build/esm/color.js +8 -3
- package/build/esm/color.js.map +1 -1
- package/build/esm/index.d.ts +2 -0
- package/build/esm/index.js +2 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/motion.d.ts +7 -0
- package/build/esm/motion.js +8 -0
- package/build/esm/motion.js.map +1 -0
- package/build/esm/theme/theme.d.ts +114 -1
- package/build/esm/theme/theme.js +42 -7
- package/build/esm/theme/theme.js.map +1 -1
- package/build/tsconfig-build.tsbuildinfo +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/Alert/Alert.tsx +1 -1
- package/src/AppBar/AppBar.tsx +4 -3
- package/src/BottomSheet/BottomSheetSurface.tsx +5 -4
- package/src/Box/Box.tsx +6 -8
- package/src/Button/BaseButton.tsx +3 -11
- package/src/Button/Button.story.tsx +21 -4
- package/src/Button/Button.tsx +4 -4
- package/src/Button/ButtonGroup.tsx +1 -1
- package/src/Button/FilledButton.tsx +4 -9
- package/src/Button/SpinnerButton.story.tsx +1 -1
- package/src/CheckBox/CheckBox.story.tsx +2 -2
- package/src/CheckBox/CheckBox.tsx +6 -10
- package/src/CheckBox/CheckBoxIcon.tsx +5 -5
- package/src/Chip/ButtonChip.tsx +3 -3
- package/src/Chip/Chip.story.tsx +1 -1
- package/src/Chip/ChipBase.tsx +2 -2
- package/src/Chip/ChoiceChip.tsx +7 -7
- package/src/ColorMode/ColorModeProvider.tsx +3 -3
- package/src/Combobox/Combobox.story.tsx +3 -3
- package/src/Combobox/Combobox.tsx +9 -10
- package/src/Dialog/DialogBackdrop.tsx +3 -3
- package/src/Dialog/DialogSurface.tsx +2 -4
- package/src/Dialog/useDialogAnimation.tsx +3 -4
- package/src/Divider/Divider.tsx +2 -2
- package/src/FloatingLabel/FloatingLabel.tsx +7 -6
- package/src/LineRipple/LineRipple.story.tsx +1 -1
- package/src/LineRipple/LineRipple.tsx +4 -4
- package/src/Link/Link.tsx +2 -5
- package/src/List/List.tsx +4 -4
- package/src/ListItem/ListItem.tsx +6 -6
- package/src/ListItem/ListItemText.tsx +6 -7
- package/src/Menu/Menu.tsx +5 -5
- package/src/NavRail/NavRail.story.tsx +190 -0
- package/src/NavRail/NavRailItem.tsx +176 -0
- package/src/NavRail/index.ts +1 -0
- package/src/NotchedOutline/NotchedOutline.tsx +4 -5
- package/src/NotchedOutline/styledComponents.ts +2 -1
- package/src/Paper/Paper.story.tsx +3 -3
- package/src/Paper/Paper.tsx +3 -3
- package/src/ProgressSpinner/ProgressSpinner.tsx +2 -2
- package/src/RadioButton/RadioButton.story.tsx +2 -2
- package/src/RadioButton/RadioButton.tsx +1 -1
- package/src/RadioButton/RadioButtonIcon.tsx +4 -5
- package/src/Ripple/Ripple.story.tsx +1 -1
- package/src/Ripple/RippleBox.tsx +1 -2
- package/src/Ripple/useRippleHandlers.ts +3 -3
- package/src/Ripple/useRippleSurface.ts +77 -61
- package/src/Select/Select.tsx +11 -6
- package/src/Select/SelectIcon.tsx +3 -4
- package/src/Select/context.ts +2 -1
- package/src/Select/defaultRender.ts +2 -1
- package/src/Select/styledComponents.tsx +13 -11
- package/src/SelectionControl/SelectionControlLabel.tsx +4 -8
- package/src/SelectionControl/SelectionControlText.tsx +3 -3
- package/src/Skeleton/DelayAppearance.tsx +2 -2
- package/src/Skeleton/Skeleton.story.tsx +2 -2
- package/src/Skeleton/Skeleton.tsx +6 -6
- package/src/Snackbar/Snackbar.tsx +3 -3
- package/src/Snackbar/Stack.tsx +6 -9
- package/src/Snackbar/useSnackbarAnimation.ts +4 -3
- package/src/Switch/Switch.tsx +6 -10
- package/src/Switch/styledComponents.tsx +2 -2
- package/src/Tab/Tab.tsx +3 -7
- package/src/TabIndicator/TabIndicator.tsx +2 -1
- package/src/TabIndicator/context.ts +2 -1
- package/src/Table/TableRow.tsx +1 -1
- package/src/Text/LoremIpsum.tsx +1 -1
- package/src/Text/Text.story.tsx +42 -7
- package/src/Text/Text.tsx +25 -5
- package/src/TextField/FilledContainer.tsx +3 -3
- package/src/TextField/HelperText.tsx +5 -5
- package/src/TextField/IconContainer.tsx +2 -3
- package/src/TextField/Input.tsx +5 -4
- package/src/TextField/OutlinedContainer.tsx +3 -3
- package/src/TextField/TextField.tsx +4 -4
- package/src/ThemeExplorer/ThemeBuilder.story.tsx +29 -25
- package/src/ThemeExplorer/ThemeColors.tsx +1 -1
- package/src/ThemeExplorer/components.tsx +8 -3
- package/src/ThemeExplorer/makeColorScheme.tsx +1 -1
- package/src/ThemeExplorer/useDeferredColor.tsx +1 -1
- package/src/Tooltip/Tooltip.story.tsx +1 -1
- package/src/Tooltip/Tooltip.tsx +9 -11
- package/src/color.ts +25 -4
- package/src/index.ts +2 -0
- package/src/motion.ts +7 -0
- package/src/theme/theme.ts +47 -6
- 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:
|
|
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:
|
|
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 {
|
|
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?:
|
|
21
|
-
onKeyDown?:
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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 },
|
package/src/Select/Select.tsx
CHANGED
|
@@ -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,
|
|
35
|
+
BoxProps<HTMLSelectElement, SelectHTMLAttributes<HTMLSelectElement>>,
|
|
31
36
|
'value' | 'defaultValue' | 'onChange'
|
|
32
37
|
> {
|
|
33
38
|
variant?: 'outlined' | 'filled';
|
|
34
39
|
color?: 'primary' | 'secondary';
|
|
35
|
-
label?:
|
|
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:
|
|
47
|
+
onChange?: (e: ChangeEvent<HTMLSelectElement>, value: string) => void;
|
|
43
48
|
renderValue?: (value?: string) => string | undefined;
|
|
44
|
-
leadingIcon?:
|
|
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:
|
|
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
|
-
|
|
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
|
>
|
package/src/Select/context.ts
CHANGED
|
@@ -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:
|
|
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?:
|
|
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
|
-
|
|
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:
|
|
21
|
-
|
|
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?:
|
|
33
|
+
SelectProps & { innerAs?: ElementType<any> }
|
|
31
34
|
>(({ innerAs = 'div', ...props }, forwardedRef) => {
|
|
32
|
-
const InputButton:
|
|
33
|
-
|
|
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
|
-
|
|
11
|
-
|
|
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?:
|
|
10
|
-
children?:
|
|
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?:
|
|
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="
|
|
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="
|
|
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,
|
|
12
|
-
as?:
|
|
13
|
-
innerAs?:
|
|
14
|
-
children?:
|
|
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,
|
|
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?:
|
|
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="
|
|
71
|
+
<Text variant="body-medium" as="span" py={2}>
|
|
72
72
|
{children}
|
|
73
73
|
</Text>
|
|
74
74
|
{action && (
|
package/src/Snackbar/Stack.tsx
CHANGED
|
@@ -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:
|
|
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:
|
|
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?:
|
|
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:
|
|
215
|
-
function onAddItem(element:
|
|
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
|
|
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:
|
|
114
|
+
ref: MutableRefObject<HTMLDivElement | null>,
|
|
114
115
|
timeout: number
|
|
115
116
|
): {
|
|
116
117
|
style: CSSProperties;
|
package/src/Switch/Switch.tsx
CHANGED
|
@@ -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:
|
|
16
|
+
const CheckBoxCore: FC<
|
|
18
17
|
SwitchProps & {
|
|
19
|
-
innerAs?:
|
|
18
|
+
innerAs?: ElementType<any>;
|
|
20
19
|
}
|
|
21
20
|
> = _CheckBoxCore as any;
|
|
22
21
|
|
|
23
|
-
interface SwitchProps
|
|
24
|
-
extends BoxProps<
|
|
25
|
-
|
|
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"
|
|
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="
|
|
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:
|
|
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:
|
|
6
|
+
currentIndicator: MutableRefObject<HTMLSpanElement | null>;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
const TabIndicatorContext = createContext<TabIndicatorContextProps>({
|