@channel.io/bezier-react 1.7.1 → 1.7.2
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/dist/cjs/components/Forms/FormControl/FormControl.js +1 -1
- package/dist/cjs/components/Forms/FormControl/FormControl.js.map +1 -1
- package/dist/cjs/components/Forms/FormControl/FormControlContext.js +4 -3
- package/dist/cjs/components/Forms/FormControl/FormControlContext.js.map +1 -1
- package/dist/cjs/components/Forms/FormGroup/FormGroup.js +2 -2
- package/dist/cjs/components/Forms/FormGroup/FormGroup.js.map +1 -1
- package/dist/cjs/components/Forms/FormHelperText/FormHelperText.js +2 -2
- package/dist/cjs/components/Forms/FormHelperText/FormHelperText.js.map +1 -1
- package/dist/cjs/components/Forms/FormLabel/FormLabel.js +2 -2
- package/dist/cjs/components/Forms/FormLabel/FormLabel.js.map +1 -1
- package/dist/cjs/components/Forms/SegmentedControl/SegmentedControlContext.js +3 -15
- package/dist/cjs/components/Forms/SegmentedControl/SegmentedControlContext.js.map +1 -1
- package/dist/cjs/components/Forms/useFormFieldProps.js +2 -2
- package/dist/cjs/components/Forms/useFormFieldProps.js.map +1 -1
- package/dist/cjs/components/ListItem/ListItem.styled.js +1 -1
- package/dist/cjs/components/Modals/Modal/Modal.js.map +1 -1
- package/dist/cjs/components/Modals/Modal/Modal.types.js.map +1 -1
- package/dist/cjs/components/Modals/Modal/ModalContent.js +1 -1
- package/dist/cjs/components/Modals/Modal/ModalContent.js.map +1 -1
- package/dist/cjs/components/Modals/Modal/ModalContentContext.js +4 -6
- package/dist/cjs/components/Modals/Modal/ModalContentContext.js.map +1 -1
- package/dist/cjs/components/Modals/Modal/ModalHeader.js +1 -1
- package/dist/cjs/components/Modals/Modal/ModalHeader.js.map +1 -1
- package/dist/cjs/components/OutlineItem/OutlineItem.js +2 -3
- package/dist/cjs/components/OutlineItem/OutlineItem.js.map +1 -1
- package/dist/cjs/components/OutlineItem/OutlineItemContext.js +9 -5
- package/dist/cjs/components/OutlineItem/OutlineItemContext.js.map +1 -1
- package/dist/cjs/components/Spinner/Spinner.styled.js +1 -1
- package/dist/cjs/components/Tabs/TabAction.js +1 -1
- package/dist/cjs/components/Tabs/TabAction.js.map +1 -1
- package/dist/cjs/components/Tabs/TabItem.js +1 -1
- package/dist/cjs/components/Tabs/TabItem.js.map +1 -1
- package/dist/cjs/components/Tabs/TabList.js +1 -1
- package/dist/cjs/components/Tabs/TabList.js.map +1 -1
- package/dist/cjs/components/Tabs/TabListContext.js +4 -6
- package/dist/cjs/components/Tabs/TabListContext.js.map +1 -1
- package/dist/cjs/components/Toast/ToastContext.js +4 -6
- package/dist/cjs/components/Toast/ToastContext.js.map +1 -1
- package/dist/cjs/components/Toast/ToastProvider.js +1 -4
- package/dist/cjs/components/Toast/ToastProvider.js.map +1 -1
- package/dist/cjs/components/Toast/useToast.js +2 -3
- package/dist/cjs/components/Toast/useToast.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.js +4 -16
- package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.styled.js +3 -56
- package/dist/cjs/components/Tooltip/Tooltip.styled.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.types.js.map +1 -1
- package/dist/cjs/features/FeatureProvider.js +4 -3
- package/dist/cjs/features/FeatureProvider.js.map +1 -1
- package/dist/cjs/index.js +1 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/reactUtils.js +21 -0
- package/dist/cjs/utils/reactUtils.js.map +1 -1
- package/dist/esm/components/Forms/FormControl/FormControl.mjs +2 -2
- package/dist/esm/components/Forms/FormControl/FormControl.mjs.map +1 -1
- package/dist/esm/components/Forms/FormControl/FormControlContext.mjs +3 -3
- package/dist/esm/components/Forms/FormControl/FormControlContext.mjs.map +1 -1
- package/dist/esm/components/Forms/FormGroup/FormGroup.mjs +1 -1
- package/dist/esm/components/Forms/FormGroup/FormGroup.mjs.map +1 -1
- package/dist/esm/components/Forms/FormHelperText/FormHelperText.mjs +1 -1
- package/dist/esm/components/Forms/FormHelperText/FormHelperText.mjs.map +1 -1
- package/dist/esm/components/Forms/FormLabel/FormLabel.mjs +1 -1
- package/dist/esm/components/Forms/FormLabel/FormLabel.mjs.map +1 -1
- package/dist/esm/components/Forms/SegmentedControl/SegmentedControlContext.mjs +3 -15
- package/dist/esm/components/Forms/SegmentedControl/SegmentedControlContext.mjs.map +1 -1
- package/dist/esm/components/Forms/useFormFieldProps.mjs +1 -1
- package/dist/esm/components/Forms/useFormFieldProps.mjs.map +1 -1
- package/dist/esm/components/ListItem/ListItem.styled.mjs +1 -1
- package/dist/esm/components/Modals/Modal/Modal.mjs.map +1 -1
- package/dist/esm/components/Modals/Modal/Modal.types.mjs.map +1 -1
- package/dist/esm/components/Modals/Modal/ModalContent.mjs +2 -2
- package/dist/esm/components/Modals/Modal/ModalContent.mjs.map +1 -1
- package/dist/esm/components/Modals/Modal/ModalContentContext.mjs +3 -4
- package/dist/esm/components/Modals/Modal/ModalContentContext.mjs.map +1 -1
- package/dist/esm/components/Modals/Modal/ModalHeader.mjs +3 -3
- package/dist/esm/components/Modals/Modal/ModalHeader.mjs.map +1 -1
- package/dist/esm/components/OutlineItem/OutlineItem.mjs +2 -3
- package/dist/esm/components/OutlineItem/OutlineItem.mjs.map +1 -1
- package/dist/esm/components/OutlineItem/OutlineItemContext.mjs +8 -3
- package/dist/esm/components/OutlineItem/OutlineItemContext.mjs.map +1 -1
- package/dist/esm/components/Spinner/Spinner.styled.mjs +1 -1
- package/dist/esm/components/Tabs/TabAction.mjs +3 -3
- package/dist/esm/components/Tabs/TabAction.mjs.map +1 -1
- package/dist/esm/components/Tabs/TabItem.mjs +3 -3
- package/dist/esm/components/Tabs/TabItem.mjs.map +1 -1
- package/dist/esm/components/Tabs/TabList.mjs +2 -2
- package/dist/esm/components/Tabs/TabList.mjs.map +1 -1
- package/dist/esm/components/Tabs/TabListContext.mjs +3 -4
- package/dist/esm/components/Tabs/TabListContext.mjs.map +1 -1
- package/dist/esm/components/Toast/ToastContext.mjs +3 -4
- package/dist/esm/components/Toast/ToastContext.mjs.map +1 -1
- package/dist/esm/components/Toast/ToastProvider.mjs +2 -5
- package/dist/esm/components/Toast/ToastProvider.mjs.map +1 -1
- package/dist/esm/components/Toast/useToast.mjs +3 -4
- package/dist/esm/components/Toast/useToast.mjs.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.mjs +4 -16
- package/dist/esm/components/Tooltip/Tooltip.mjs.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.styled.mjs +3 -56
- package/dist/esm/components/Tooltip/Tooltip.styled.mjs.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.types.mjs.map +1 -1
- package/dist/esm/features/FeatureProvider.mjs +5 -4
- package/dist/esm/features/FeatureProvider.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/utils/reactUtils.mjs +21 -1
- package/dist/esm/utils/reactUtils.mjs.map +1 -1
- package/dist/types/components/Forms/FormControl/FormControlContext.d.ts +1 -1
- package/dist/types/components/Forms/FormControl/FormControlContext.d.ts.map +1 -1
- package/dist/types/components/Forms/FormControl/index.d.ts +1 -1
- package/dist/types/components/Forms/FormControl/index.d.ts.map +1 -1
- package/dist/types/components/Forms/SegmentedControl/SegmentedControlContext.d.ts +3 -3
- package/dist/types/components/Forms/SegmentedControl/SegmentedControlContext.d.ts.map +1 -1
- package/dist/types/components/Forms/index.d.ts +1 -2
- package/dist/types/components/Forms/index.d.ts.map +1 -1
- package/dist/types/components/Forms/useFormFieldProps.d.ts.map +1 -1
- package/dist/types/components/Modals/Modal/Modal.types.d.ts +1 -1
- package/dist/types/components/Modals/Modal/Modal.types.d.ts.map +1 -1
- package/dist/types/components/Modals/Modal/ModalContentContext.d.ts +2 -3
- package/dist/types/components/Modals/Modal/ModalContentContext.d.ts.map +1 -1
- package/dist/types/components/Modals/Modal/ModalHeader.d.ts.map +1 -1
- package/dist/types/components/OutlineItem/OutlineItem.d.ts.map +1 -1
- package/dist/types/components/OutlineItem/OutlineItemContext.d.ts +4 -10
- package/dist/types/components/OutlineItem/OutlineItemContext.d.ts.map +1 -1
- package/dist/types/components/Tabs/TabAction.d.ts.map +1 -1
- package/dist/types/components/Tabs/TabItem.d.ts.map +1 -1
- package/dist/types/components/Tabs/TabListContext.d.ts +1 -2
- package/dist/types/components/Tabs/TabListContext.d.ts.map +1 -1
- package/dist/types/components/Toast/ToastContext.d.ts +1 -2
- package/dist/types/components/Toast/ToastContext.d.ts.map +1 -1
- package/dist/types/components/Toast/ToastProvider.d.ts.map +1 -1
- package/dist/types/components/Toast/useToast.d.ts.map +1 -1
- package/dist/types/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/components/Tooltip/Tooltip.styled.d.ts.map +1 -1
- package/dist/types/components/Tooltip/Tooltip.types.d.ts +3 -3
- package/dist/types/features/FeatureProvider.d.ts.map +1 -1
- package/dist/types/utils/reactUtils.d.ts +14 -0
- package/dist/types/utils/reactUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Forms/FormControl/FormControl.tsx +3 -3
- package/src/components/Forms/FormControl/FormControlContext.ts +5 -2
- package/src/components/Forms/FormControl/index.ts +1 -1
- package/src/components/Forms/FormGroup/FormGroup.tsx +1 -1
- package/src/components/Forms/FormHelperText/FormHelperText.tsx +1 -1
- package/src/components/Forms/FormLabel/FormLabel.tsx +1 -1
- package/src/components/Forms/SegmentedControl/SegmentedControlContext.ts +3 -26
- package/src/components/Forms/Slider/Slider.test.tsx +11 -4
- package/src/components/Forms/index.ts +0 -2
- package/src/components/Forms/useFormFieldProps.ts +1 -2
- package/src/components/KeyValueListItem/KeyValueListItem.test.tsx +4 -1
- package/src/components/Modals/Modal/Modal.stories.tsx +1 -1
- package/src/components/Modals/Modal/Modal.tsx +0 -1
- package/src/components/Modals/Modal/Modal.types.ts +1 -1
- package/src/components/Modals/Modal/ModalContent.tsx +3 -3
- package/src/components/Modals/Modal/ModalContentContext.ts +5 -4
- package/src/components/Modals/Modal/ModalHeader.tsx +3 -6
- package/src/components/OutlineItem/OutlineItem.tsx +6 -4
- package/src/components/OutlineItem/OutlineItemContext.ts +16 -5
- package/src/components/Tabs/TabAction.tsx +3 -6
- package/src/components/Tabs/TabItem.tsx +3 -6
- package/src/components/Tabs/TabList.tsx +3 -3
- package/src/components/Tabs/TabListContext.ts +5 -4
- package/src/components/Toast/ToastContext.ts +5 -5
- package/src/components/Toast/ToastProvider.tsx +3 -5
- package/src/components/Toast/useToast.ts +3 -5
- package/src/components/Tooltip/Tooltip.stories.tsx +2 -2
- package/src/components/Tooltip/Tooltip.styled.ts +0 -77
- package/src/components/Tooltip/Tooltip.test.tsx +8 -2
- package/src/components/Tooltip/Tooltip.tsx +4 -27
- package/src/components/Tooltip/Tooltip.types.ts +3 -3
- package/src/components/Tooltip/index.ts +0 -1
- package/src/features/FeatureProvider.tsx +9 -6
- package/src/utils/reactUtils.ts +41 -0
- package/dist/cjs/components/Forms/useFormControlContext.js +0 -13
- package/dist/cjs/components/Forms/useFormControlContext.js.map +0 -1
- package/dist/cjs/components/OutlineItem/useOutlineItemContext.js +0 -16
- package/dist/cjs/components/OutlineItem/useOutlineItemContext.js.map +0 -1
- package/dist/esm/components/Forms/useFormControlContext.mjs +0 -9
- package/dist/esm/components/Forms/useFormControlContext.mjs.map +0 -1
- package/dist/esm/components/OutlineItem/useOutlineItemContext.mjs +0 -12
- package/dist/esm/components/OutlineItem/useOutlineItemContext.mjs.map +0 -1
- package/dist/types/components/Forms/useFormControlContext.d.ts +0 -3
- package/dist/types/components/Forms/useFormControlContext.d.ts.map +0 -1
- package/dist/types/components/OutlineItem/useOutlineItemContext.d.ts +0 -4
- package/dist/types/components/OutlineItem/useOutlineItemContext.d.ts.map +0 -1
- package/src/components/Forms/useFormControlContext.ts +0 -9
- package/src/components/OutlineItem/useOutlineItemContext.ts +0 -16
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
isInaccessible,
|
|
5
|
+
waitFor,
|
|
6
|
+
} from '@testing-library/react'
|
|
4
7
|
import userEvent from '@testing-library/user-event'
|
|
5
8
|
|
|
6
9
|
import { render } from '~/src/utils/testUtils'
|
|
@@ -217,7 +220,9 @@ describe('Slider', () => {
|
|
|
217
220
|
const { getByRole, getAllByText } = renderSlider({ defaultValue: [0] })
|
|
218
221
|
const sliderThumb = getByRole('slider')
|
|
219
222
|
await user.hover(sliderThumb)
|
|
220
|
-
|
|
223
|
+
await waitFor(() => {
|
|
224
|
+
expect(getAllByText('0')[0]).toBeInTheDocument()
|
|
225
|
+
}, { timeout: 10000 })
|
|
221
226
|
})
|
|
222
227
|
|
|
223
228
|
it('should show tooltip when user focuses on the thumb', async () => {
|
|
@@ -230,8 +235,10 @@ describe('Slider', () => {
|
|
|
230
235
|
const { getByRole, getAllByText } = renderSlider({ defaultValue: [0] })
|
|
231
236
|
const sliderThumb = getByRole('slider')
|
|
232
237
|
await user.click(sliderThumb)
|
|
233
|
-
|
|
234
|
-
|
|
238
|
+
await waitFor(() => {
|
|
239
|
+
expect(getByRole('tooltip')).toBeInTheDocument()
|
|
240
|
+
expect(getAllByText('0')[0]).toBeInTheDocument()
|
|
241
|
+
}, { timeout: 10000 })
|
|
235
242
|
})
|
|
236
243
|
|
|
237
244
|
it('should not show tooltip when disableTooltip is true', async () => {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { FormComponentProps } from './Form.types'
|
|
2
2
|
import FormFieldSize from './FormFieldSize'
|
|
3
|
-
import useFormControlContext from './useFormControlContext'
|
|
4
3
|
import useFormFieldProps from './useFormFieldProps'
|
|
5
4
|
import useKeyboardActionLockerWhileComposing from './useKeyboardActionLockerWhileComposing'
|
|
6
5
|
|
|
@@ -8,7 +7,6 @@ export type { FormComponentProps }
|
|
|
8
7
|
export * from './Inputs/constants/CommonImeControlKeys'
|
|
9
8
|
export {
|
|
10
9
|
FormFieldSize,
|
|
11
|
-
useFormControlContext,
|
|
12
10
|
useFormFieldProps,
|
|
13
11
|
useKeyboardActionLockerWhileComposing,
|
|
14
12
|
}
|
|
@@ -3,8 +3,7 @@ import { useMemo } from 'react'
|
|
|
3
3
|
import { ariaAttr } from '~/src/utils/domUtils'
|
|
4
4
|
|
|
5
5
|
import type { FormComponentProps } from '~/src/components/Forms/Form.types'
|
|
6
|
-
|
|
7
|
-
import useFormControlContext from './useFormControlContext'
|
|
6
|
+
import { useFormControlContext } from '~/src/components/Forms/FormControl'
|
|
8
7
|
|
|
9
8
|
// TODO: 테스트 추가
|
|
10
9
|
function useFormFieldProps<Props extends FormComponentProps>(props?: Props) {
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
AppleIcon,
|
|
5
5
|
BadgeIcon,
|
|
6
6
|
} from '@channel.io/bezier-icons'
|
|
7
|
+
import { waitFor } from '@testing-library/react'
|
|
7
8
|
import userEvent from '@testing-library/user-event'
|
|
8
9
|
|
|
9
10
|
import { render } from '~/src/utils/testUtils'
|
|
@@ -176,7 +177,9 @@ describe('KeyValueListItem', () => {
|
|
|
176
177
|
const actionItemIcon = actionItemIconWrapper?.firstChild
|
|
177
178
|
|
|
178
179
|
await user.hover(actionItemIcon as HTMLElement)
|
|
179
|
-
|
|
180
|
+
await waitFor(() => {
|
|
181
|
+
expect(getByRole('tooltip')).toBeInTheDocument()
|
|
182
|
+
}, { timeout: 10000 })
|
|
180
183
|
})
|
|
181
184
|
})
|
|
182
185
|
|
|
@@ -85,7 +85,7 @@ function ModalComposition({
|
|
|
85
85
|
|
|
86
86
|
<ModalBody>
|
|
87
87
|
<FormControl labelPosition="left">
|
|
88
|
-
<FormLabel>Name</FormLabel>
|
|
88
|
+
<FormLabel help="Lorem Ipsum">Name</FormLabel>
|
|
89
89
|
<Select text="Lorem Ipsum">
|
|
90
90
|
{ Array.from({ length: 20 }).map((_, index) => (
|
|
91
91
|
<ListItem
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
type ModalContentContextValue,
|
|
14
14
|
type ModalContentProps,
|
|
15
15
|
} from './Modal.types'
|
|
16
|
-
import
|
|
16
|
+
import { ModalContentContextProvider } from './ModalContentContext'
|
|
17
17
|
import { ModalClose } from './ModalHelpers'
|
|
18
18
|
|
|
19
19
|
import * as Styled from './Modal.styled'
|
|
@@ -67,9 +67,9 @@ export const ModalContent = forwardRef(function ModalContent({
|
|
|
67
67
|
{...rest}
|
|
68
68
|
>
|
|
69
69
|
<Styled.Section>
|
|
70
|
-
<
|
|
70
|
+
<ModalContentContextProvider value={contextValue}>
|
|
71
71
|
{ children }
|
|
72
|
-
</
|
|
72
|
+
</ModalContentContextProvider>
|
|
73
73
|
|
|
74
74
|
{ /* NOTE: To prevent focusing first on the close button when opening the modal, place the close button behind. */ }
|
|
75
75
|
{ showCloseIcon && (
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createContext } from '~/src/utils/reactUtils'
|
|
2
2
|
|
|
3
3
|
import { type ModalContentContextValue } from './Modal.types'
|
|
4
4
|
|
|
5
|
-
const
|
|
5
|
+
export const [
|
|
6
|
+
ModalContentContextProvider,
|
|
7
|
+
useModalContentContext,
|
|
8
|
+
] = createContext<ModalContentContextValue>({
|
|
6
9
|
showCloseIcon: false,
|
|
7
10
|
})
|
|
8
|
-
|
|
9
|
-
export default ModalContentContext
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
forwardRef,
|
|
3
|
-
useContext,
|
|
4
|
-
} from 'react'
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
5
2
|
|
|
6
3
|
import * as DialogPrimitive from '@radix-ui/react-dialog'
|
|
7
4
|
|
|
@@ -14,7 +11,7 @@ import {
|
|
|
14
11
|
type ModalHeaderProps,
|
|
15
12
|
ModalTitleSize,
|
|
16
13
|
} from './Modal.types'
|
|
17
|
-
import
|
|
14
|
+
import { useModalContentContext } from './ModalContentContext'
|
|
18
15
|
|
|
19
16
|
import * as Styled from './Modal.styled'
|
|
20
17
|
|
|
@@ -82,7 +79,7 @@ export const ModalHeader = forwardRef(function ModalHeader({
|
|
|
82
79
|
hidden = false,
|
|
83
80
|
...rest
|
|
84
81
|
}: ModalHeaderProps, forwardedRef: React.Ref<HTMLElement>) {
|
|
85
|
-
const { showCloseIcon } =
|
|
82
|
+
const { showCloseIcon } = useModalContentContext()
|
|
86
83
|
const hasTitleArea = title || showCloseIcon
|
|
87
84
|
const Hidden = hidden ? VisuallyHidden : React.Fragment
|
|
88
85
|
|
|
@@ -19,8 +19,10 @@ import { isNil } from '~/src/utils/typeUtils'
|
|
|
19
19
|
import { IconSize } from '~/src/components/Icon'
|
|
20
20
|
|
|
21
21
|
import type OutlineItemProps from './OutlineItem.types'
|
|
22
|
-
import {
|
|
23
|
-
|
|
22
|
+
import {
|
|
23
|
+
OutlineItemContextProvider,
|
|
24
|
+
useOutlineItemContext,
|
|
25
|
+
} from './OutlineItemContext'
|
|
24
26
|
|
|
25
27
|
import {
|
|
26
28
|
ChevronWrapper,
|
|
@@ -250,9 +252,9 @@ function OutlineItem(
|
|
|
250
252
|
}
|
|
251
253
|
|
|
252
254
|
return (
|
|
253
|
-
<
|
|
255
|
+
<OutlineItemContextProvider value={passedContext}>
|
|
254
256
|
{ element }
|
|
255
|
-
</
|
|
257
|
+
</OutlineItemContextProvider>
|
|
256
258
|
)
|
|
257
259
|
})
|
|
258
260
|
), [
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import type React from 'react'
|
|
2
|
-
import { createContext } from 'react'
|
|
3
2
|
|
|
4
3
|
import { noop } from '~/src/utils/functionUtils'
|
|
4
|
+
import { createContext } from '~/src/utils/reactUtils'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
interface OutlineItemContextProps {
|
|
7
7
|
depth: number
|
|
8
8
|
paddingLeft: number
|
|
9
9
|
active: boolean
|
|
10
10
|
onClick: (event?: React.MouseEvent<Element>, name?: string) => void
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
const defaultOutlineItemContext = {
|
|
14
14
|
depth: 0,
|
|
15
15
|
paddingLeft: 0,
|
|
16
16
|
active: false,
|
|
17
17
|
onClick: noop,
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
function mergeOutlineItemContexts(
|
|
21
21
|
inherited: OutlineItemContextProps,
|
|
22
22
|
props: Partial<Omit<OutlineItemContextProps, 'depth'>>,
|
|
23
23
|
indent: number,
|
|
@@ -33,4 +33,15 @@ export function mergeOutlineItemContexts(
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
const [
|
|
37
|
+
OutlineItemContextProvider,
|
|
38
|
+
useOutlineItemContextBase,
|
|
39
|
+
] = createContext<OutlineItemContextProps>(defaultOutlineItemContext)
|
|
40
|
+
|
|
41
|
+
export { OutlineItemContextProvider }
|
|
42
|
+
|
|
43
|
+
export const useOutlineItemContext = (props: Partial<Omit<OutlineItemContextProps, 'depth'>>, indent: number) => {
|
|
44
|
+
const inheritedContext = useOutlineItemContextBase() ?? defaultOutlineItemContext
|
|
45
|
+
const context = mergeOutlineItemContexts(inheritedContext, props, indent)
|
|
46
|
+
return context
|
|
47
|
+
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
forwardRef,
|
|
3
|
-
useContext,
|
|
4
|
-
} from 'react'
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
5
2
|
|
|
6
3
|
import { OpenInNewIcon } from '@channel.io/bezier-icons'
|
|
7
4
|
|
|
@@ -12,7 +9,7 @@ import { isNil } from '~/src/utils/typeUtils'
|
|
|
12
9
|
import { IconSize } from '~/src/components/Icon'
|
|
13
10
|
import { Text } from '~/src/components/Text'
|
|
14
11
|
|
|
15
|
-
import
|
|
12
|
+
import { useTabListContext } from './TabListContext'
|
|
16
13
|
import {
|
|
17
14
|
type TabActionElement,
|
|
18
15
|
type TabActionProps,
|
|
@@ -52,7 +49,7 @@ export const TabAction = forwardRef(function TabAction<Link extends string | und
|
|
|
52
49
|
...rest
|
|
53
50
|
}: TabActionProps<Link>, forwardedRef: React.Ref<TabActionElement<Link>>,
|
|
54
51
|
) {
|
|
55
|
-
const { size } =
|
|
52
|
+
const { size } = useTabListContext()
|
|
56
53
|
|
|
57
54
|
return (
|
|
58
55
|
isNil(href) ? (
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
forwardRef,
|
|
3
|
-
useContext,
|
|
4
|
-
} from 'react'
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
5
2
|
|
|
6
3
|
import * as Tabs from '@radix-ui/react-tabs'
|
|
7
4
|
|
|
@@ -11,7 +8,7 @@ import {
|
|
|
11
8
|
ButtonStyleVariant,
|
|
12
9
|
} from '~/src/components/Button'
|
|
13
10
|
|
|
14
|
-
import
|
|
11
|
+
import { useTabListContext } from './TabListContext'
|
|
15
12
|
import {
|
|
16
13
|
type TabItemProps,
|
|
17
14
|
TabSize,
|
|
@@ -40,7 +37,7 @@ export const TabItem = forwardRef(function TabItem({
|
|
|
40
37
|
children,
|
|
41
38
|
...rest
|
|
42
39
|
}: TabItemProps, forwardedRef: React.Ref<HTMLButtonElement>) {
|
|
43
|
-
const { size } =
|
|
40
|
+
const { size } = useTabListContext()
|
|
44
41
|
|
|
45
42
|
if (typeof children !== 'string') {
|
|
46
43
|
return null
|
|
@@ -3,7 +3,7 @@ import React, {
|
|
|
3
3
|
useMemo,
|
|
4
4
|
} from 'react'
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
import { TabListContextProvider } from './TabListContext'
|
|
7
7
|
import {
|
|
8
8
|
type TabListProps,
|
|
9
9
|
TabSize,
|
|
@@ -36,7 +36,7 @@ export const TabList = forwardRef(function TabList({
|
|
|
36
36
|
}), [size])
|
|
37
37
|
|
|
38
38
|
return (
|
|
39
|
-
<
|
|
39
|
+
<TabListContextProvider value={heightContextValue}>
|
|
40
40
|
<Styled.TabList
|
|
41
41
|
size={size}
|
|
42
42
|
ref={forwardedRef}
|
|
@@ -47,6 +47,6 @@ export const TabList = forwardRef(function TabList({
|
|
|
47
47
|
>
|
|
48
48
|
{ children }
|
|
49
49
|
</Styled.TabList>
|
|
50
|
-
</
|
|
50
|
+
</TabListContextProvider>
|
|
51
51
|
)
|
|
52
52
|
})
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { createContext } from '
|
|
1
|
+
import { createContext } from '~/src/utils/reactUtils'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
type TabListContextValue,
|
|
5
5
|
TabSize,
|
|
6
6
|
} from './Tabs.types'
|
|
7
7
|
|
|
8
|
-
const
|
|
8
|
+
export const [
|
|
9
|
+
TabListContextProvider,
|
|
10
|
+
useTabListContext,
|
|
11
|
+
] = createContext<TabListContextValue>({
|
|
9
12
|
size: TabSize.M,
|
|
10
13
|
})
|
|
11
|
-
|
|
12
|
-
export default TabListContext
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { createContext } from 'react'
|
|
2
|
-
|
|
3
1
|
import { noop } from '~/src/utils/functionUtils'
|
|
2
|
+
import { createContext } from '~/src/utils/reactUtils'
|
|
4
3
|
|
|
5
4
|
import { type ToastContextType } from './Toast.types'
|
|
6
5
|
|
|
7
|
-
const
|
|
6
|
+
export const [
|
|
7
|
+
ToastContextProvider,
|
|
8
|
+
useToastContext,
|
|
9
|
+
] = createContext<ToastContextType>({
|
|
8
10
|
add: () => '',
|
|
9
11
|
update: () => '',
|
|
10
12
|
remove: noop,
|
|
@@ -12,5 +14,3 @@ const ToastContext = createContext<ToastContextType>({
|
|
|
12
14
|
leftToasts: [],
|
|
13
15
|
rightToasts: [],
|
|
14
16
|
})
|
|
15
|
-
|
|
16
|
-
export default ToastContext
|
|
@@ -15,13 +15,11 @@ import {
|
|
|
15
15
|
type ToastType,
|
|
16
16
|
} from './Toast.types'
|
|
17
17
|
import ToastContainer from './ToastContainer'
|
|
18
|
-
import
|
|
18
|
+
import { ToastContextProvider } from './ToastContext'
|
|
19
19
|
import ToastController from './ToastController'
|
|
20
20
|
import ToastElement from './ToastElement'
|
|
21
21
|
import useToastProviderValues from './useToastContextValues'
|
|
22
22
|
|
|
23
|
-
const { Provider } = ToastContext
|
|
24
|
-
|
|
25
23
|
function ToastProvider({
|
|
26
24
|
autoDismissTimeout = 3000,
|
|
27
25
|
children = [],
|
|
@@ -77,7 +75,7 @@ function ToastProvider({
|
|
|
77
75
|
])
|
|
78
76
|
|
|
79
77
|
return (
|
|
80
|
-
<
|
|
78
|
+
<ToastContextProvider value={toastContextValue}>
|
|
81
79
|
{ children }
|
|
82
80
|
{ createPortal(
|
|
83
81
|
[
|
|
@@ -86,7 +84,7 @@ function ToastProvider({
|
|
|
86
84
|
],
|
|
87
85
|
getRootElement(),
|
|
88
86
|
) }
|
|
89
|
-
</
|
|
87
|
+
</ToastContextProvider>
|
|
90
88
|
)
|
|
91
89
|
}
|
|
92
90
|
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import ToastContext from './ToastContext'
|
|
1
|
+
import { useToastContext } from './ToastContext'
|
|
4
2
|
|
|
5
3
|
export default function useToast() {
|
|
6
|
-
const context =
|
|
4
|
+
const context = useToastContext()
|
|
7
5
|
|
|
8
6
|
if (!context) {
|
|
9
|
-
throw Error('
|
|
7
|
+
throw Error('\'useToast\' must be used within \'ToastProvider\'')
|
|
10
8
|
}
|
|
11
9
|
|
|
12
10
|
return {
|
|
@@ -57,8 +57,8 @@ Primary.args = {
|
|
|
57
57
|
disabled: false,
|
|
58
58
|
keepInContainer: true,
|
|
59
59
|
allowHover: false,
|
|
60
|
-
delayShow:
|
|
61
|
-
delayHide:
|
|
60
|
+
delayShow: undefined,
|
|
61
|
+
delayHide: undefined,
|
|
62
62
|
children: (<Button text="Button" />),
|
|
63
63
|
content: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.',
|
|
64
64
|
description: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry.',
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
LineHeightAbsoluteNumber,
|
|
3
|
-
TransitionDuration,
|
|
4
3
|
Typography,
|
|
5
|
-
css,
|
|
6
4
|
ellipsis,
|
|
7
|
-
keyframes,
|
|
8
5
|
styled,
|
|
9
6
|
} from '~/src/foundation'
|
|
10
7
|
|
|
@@ -19,64 +16,6 @@ import { Text } from '~/src/components/Text'
|
|
|
19
16
|
|
|
20
17
|
import { type TooltipProps } from './Tooltip.types'
|
|
21
18
|
|
|
22
|
-
const fadeIn = keyframes`
|
|
23
|
-
from {
|
|
24
|
-
opacity: 0;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
to {
|
|
28
|
-
opacity: 1;
|
|
29
|
-
}
|
|
30
|
-
`
|
|
31
|
-
|
|
32
|
-
const SLIDE_OFFSET = 2
|
|
33
|
-
|
|
34
|
-
const slideUp = keyframes`
|
|
35
|
-
from {
|
|
36
|
-
transform: translateY(${SLIDE_OFFSET}px);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
to {
|
|
40
|
-
transform: translateY(0);
|
|
41
|
-
}
|
|
42
|
-
`
|
|
43
|
-
|
|
44
|
-
const slideRight = keyframes`
|
|
45
|
-
from {
|
|
46
|
-
transform: translateX(-${SLIDE_OFFSET}px);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
to {
|
|
50
|
-
transform: translateX(0);
|
|
51
|
-
}
|
|
52
|
-
`
|
|
53
|
-
|
|
54
|
-
const slideDown = keyframes`
|
|
55
|
-
from {
|
|
56
|
-
transform: translateY(-${SLIDE_OFFSET}px);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
to {
|
|
60
|
-
transform: translateY(0);
|
|
61
|
-
}
|
|
62
|
-
`
|
|
63
|
-
|
|
64
|
-
const slideLeft = keyframes`
|
|
65
|
-
from {
|
|
66
|
-
transform: translateX(${SLIDE_OFFSET}px);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
to {
|
|
70
|
-
transform: translateX(0);
|
|
71
|
-
}
|
|
72
|
-
`
|
|
73
|
-
|
|
74
|
-
const getSlideAnimation = (frames: ReturnType<typeof keyframes>) => css`
|
|
75
|
-
animation-name: ${() => frames}, ${() => fadeIn};
|
|
76
|
-
animation-duration: ${TransitionDuration.M}ms;
|
|
77
|
-
animation-timing-function: cubic-bezier(0.3, 0, 0, 1);
|
|
78
|
-
`
|
|
79
|
-
|
|
80
19
|
export const TooltipContent = styled(AlphaStack).attrs({
|
|
81
20
|
direction: 'horizontal',
|
|
82
21
|
spacing: 4,
|
|
@@ -94,22 +33,6 @@ export const TooltipContent = styled(AlphaStack).attrs({
|
|
|
94
33
|
${({ foundation }) => foundation?.elevation?.ev3(true)};
|
|
95
34
|
${({ foundation }) => foundation?.rounding?.round8};
|
|
96
35
|
|
|
97
|
-
&[data-side="top"] {
|
|
98
|
-
${getSlideAnimation(slideUp)}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
&[data-side="right"] {
|
|
102
|
-
${getSlideAnimation(slideRight)}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
&[data-side="bottom"] {
|
|
106
|
-
${getSlideAnimation(slideDown)}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
&[data-side="left"] {
|
|
110
|
-
${getSlideAnimation(slideLeft)}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
36
|
${({ interpolation }) => interpolation}
|
|
114
37
|
`
|
|
115
38
|
|
|
@@ -22,7 +22,10 @@ describe('Tooltip', () => {
|
|
|
22
22
|
children,
|
|
23
23
|
...rest
|
|
24
24
|
}: TooltipProps = {}) => render(
|
|
25
|
-
<Tooltip
|
|
25
|
+
<Tooltip
|
|
26
|
+
delayShow={0}
|
|
27
|
+
{...rest}
|
|
28
|
+
>
|
|
26
29
|
<button type="button">
|
|
27
30
|
Trigger
|
|
28
31
|
</button>
|
|
@@ -127,7 +130,10 @@ describe('TooltipProvider', () => {
|
|
|
127
130
|
children,
|
|
128
131
|
...rest
|
|
129
132
|
}: TooltipProviderProps = {}) => render(
|
|
130
|
-
<TooltipProvider
|
|
133
|
+
<TooltipProvider
|
|
134
|
+
delayShow={0}
|
|
135
|
+
{...rest}
|
|
136
|
+
>
|
|
131
137
|
<Tooltip>
|
|
132
138
|
<button type="button">
|
|
133
139
|
Trigger
|
|
@@ -10,6 +10,7 @@ import React, {
|
|
|
10
10
|
import * as TooltipPrimitive from '@radix-ui/react-tooltip'
|
|
11
11
|
|
|
12
12
|
import { document } from '~/src/utils/domUtils'
|
|
13
|
+
import { createContext } from '~/src/utils/reactUtils'
|
|
13
14
|
import { isBoolean } from '~/src/utils/typeUtils'
|
|
14
15
|
|
|
15
16
|
import {
|
|
@@ -20,30 +21,6 @@ import {
|
|
|
20
21
|
|
|
21
22
|
import * as Styled from './Tooltip.styled'
|
|
22
23
|
|
|
23
|
-
// TODO: (@ed) Evolve it into a commonly reusable function
|
|
24
|
-
// FIXME: duplicate
|
|
25
|
-
function createContext<ContextValue>(
|
|
26
|
-
providerName: string,
|
|
27
|
-
defaultValue: ContextValue,
|
|
28
|
-
) {
|
|
29
|
-
const Context = React.createContext<ContextValue>(defaultValue)
|
|
30
|
-
|
|
31
|
-
function useContext(consumerName: string) {
|
|
32
|
-
const contextValue = React.useContext(Context)
|
|
33
|
-
|
|
34
|
-
if (!contextValue) {
|
|
35
|
-
throw new Error(`'${consumerName}' must be used within '${providerName}'`)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return contextValue
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return [
|
|
42
|
-
Context.Provider,
|
|
43
|
-
useContext,
|
|
44
|
-
] as const
|
|
45
|
-
}
|
|
46
|
-
|
|
47
24
|
function getSideAndAlign(
|
|
48
25
|
placement: TooltipPosition,
|
|
49
26
|
): Pick<TooltipPrimitive.TooltipContentProps, 'side' | 'align'> {
|
|
@@ -123,7 +100,7 @@ const [
|
|
|
123
100
|
*/
|
|
124
101
|
TooltipGlobalContextProvider,
|
|
125
102
|
useTooltipGlobalContext,
|
|
126
|
-
] = createContext<Required<Pick<TooltipProviderProps, 'delayHide'>> | null>('TooltipProvider'
|
|
103
|
+
] = createContext<Required<Pick<TooltipProviderProps, 'delayHide'>> | null>(null, 'TooltipProvider')
|
|
127
104
|
|
|
128
105
|
/**
|
|
129
106
|
* `TooltipProvider` is used to globally provide props to child tooltips.
|
|
@@ -139,9 +116,9 @@ const [
|
|
|
139
116
|
export function TooltipProvider({
|
|
140
117
|
children,
|
|
141
118
|
allowHover = false,
|
|
142
|
-
delayShow =
|
|
119
|
+
delayShow = 300,
|
|
143
120
|
delayHide = 0,
|
|
144
|
-
skipDelayShow =
|
|
121
|
+
skipDelayShow = 500,
|
|
145
122
|
}: TooltipProviderProps) {
|
|
146
123
|
const contextValue = useMemo(() => ({
|
|
147
124
|
delayHide,
|
|
@@ -33,7 +33,7 @@ interface TooltipProviderOptions {
|
|
|
33
33
|
allowHover?: boolean
|
|
34
34
|
/**
|
|
35
35
|
* The delay from when the mouse enters a tooltip trigger until the tooltip opens.
|
|
36
|
-
* @default
|
|
36
|
+
* @default 300
|
|
37
37
|
*/
|
|
38
38
|
delayShow?: number
|
|
39
39
|
/**
|
|
@@ -43,7 +43,7 @@ interface TooltipProviderOptions {
|
|
|
43
43
|
delayHide?: number
|
|
44
44
|
/**
|
|
45
45
|
* How much time a user has to enter another trigger without incurring a delay again.
|
|
46
|
-
* @default
|
|
46
|
+
* @default 500
|
|
47
47
|
*/
|
|
48
48
|
skipDelayShow?: number
|
|
49
49
|
}
|
|
@@ -91,7 +91,7 @@ interface TooltipOptions {
|
|
|
91
91
|
/**
|
|
92
92
|
* The delay from when the mouse enters a tooltip trigger until the tooltip opens.
|
|
93
93
|
* Inherits from the nearest `TooltipProvider`.
|
|
94
|
-
* @default
|
|
94
|
+
* @default 300
|
|
95
95
|
*/
|
|
96
96
|
delayShow?: number
|
|
97
97
|
/**
|