@channel.io/bezier-react 2.1.0 → 2.2.1

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 (122) hide show
  1. package/dist/cjs/components/AlphaButton/Button.js +3 -3
  2. package/dist/cjs/components/AlphaButton/Button.js.map +1 -1
  3. package/dist/cjs/components/AlphaButton/Button.module.scss.js +1 -1
  4. package/dist/cjs/components/AlphaFloatingButton/FloatingButton.js +3 -3
  5. package/dist/cjs/components/AlphaFloatingButton/FloatingButton.js.map +1 -1
  6. package/dist/cjs/components/AlphaFloatingButton/FloatingButton.module.scss.js +1 -1
  7. package/dist/cjs/components/AlphaFloatingIconButton/FloatingIconButton.js +3 -3
  8. package/dist/cjs/components/AlphaFloatingIconButton/FloatingIconButton.js.map +1 -1
  9. package/dist/cjs/components/AlphaFloatingIconButton/FloatingIconButton.module.scss.js +1 -1
  10. package/dist/cjs/components/AlphaIconButton/IconButton.js +3 -3
  11. package/dist/cjs/components/AlphaIconButton/IconButton.js.map +1 -1
  12. package/dist/cjs/components/AlphaIconButton/IconButton.module.scss.js +1 -1
  13. package/dist/cjs/components/{AlphaSpinner/Spinner.js → AlphaLoader/Loader.js} +10 -10
  14. package/dist/cjs/components/AlphaLoader/Loader.js.map +1 -0
  15. package/dist/cjs/components/AlphaLoader/Loader.module.scss.js +8 -0
  16. package/dist/cjs/components/AlphaLoader/Loader.module.scss.js.map +1 -0
  17. package/dist/cjs/components/AlphaToggleButton/ToggleButton.js +3 -3
  18. package/dist/cjs/components/AlphaToggleButton/ToggleButton.js.map +1 -1
  19. package/dist/cjs/components/AlphaToggleButton/ToggleButton.module.scss.js +1 -1
  20. package/dist/cjs/components/TextField/TextField.js +1 -1
  21. package/dist/cjs/components/TextField/TextField.js.map +1 -1
  22. package/dist/cjs/components/TextField/TextField.module.scss.js +1 -1
  23. package/dist/cjs/hooks/useMergeRefs.js +1 -0
  24. package/dist/cjs/hooks/useMergeRefs.js.map +1 -1
  25. package/dist/cjs/index.js +4 -4
  26. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -1
  27. package/dist/cjs/styles.css +1 -1
  28. package/dist/esm/components/AlphaButton/Button.mjs +3 -3
  29. package/dist/esm/components/AlphaButton/Button.mjs.map +1 -1
  30. package/dist/esm/components/AlphaButton/Button.module.scss.mjs +1 -1
  31. package/dist/esm/components/AlphaFloatingButton/FloatingButton.mjs +3 -3
  32. package/dist/esm/components/AlphaFloatingButton/FloatingButton.mjs.map +1 -1
  33. package/dist/esm/components/AlphaFloatingButton/FloatingButton.module.scss.mjs +1 -1
  34. package/dist/esm/components/AlphaFloatingIconButton/FloatingIconButton.mjs +3 -3
  35. package/dist/esm/components/AlphaFloatingIconButton/FloatingIconButton.mjs.map +1 -1
  36. package/dist/esm/components/AlphaFloatingIconButton/FloatingIconButton.module.scss.mjs +1 -1
  37. package/dist/esm/components/AlphaIconButton/IconButton.mjs +3 -3
  38. package/dist/esm/components/AlphaIconButton/IconButton.mjs.map +1 -1
  39. package/dist/esm/components/AlphaIconButton/IconButton.module.scss.mjs +1 -1
  40. package/dist/esm/components/{AlphaSpinner/Spinner.mjs → AlphaLoader/Loader.mjs} +7 -7
  41. package/dist/esm/components/AlphaLoader/Loader.mjs.map +1 -0
  42. package/dist/esm/components/AlphaLoader/Loader.module.scss.mjs +4 -0
  43. package/dist/esm/components/AlphaLoader/Loader.module.scss.mjs.map +1 -0
  44. package/dist/esm/components/AlphaToggleButton/ToggleButton.mjs +3 -3
  45. package/dist/esm/components/AlphaToggleButton/ToggleButton.mjs.map +1 -1
  46. package/dist/esm/components/AlphaToggleButton/ToggleButton.module.scss.mjs +1 -1
  47. package/dist/esm/components/TextField/TextField.mjs +1 -1
  48. package/dist/esm/components/TextField/TextField.mjs.map +1 -1
  49. package/dist/esm/components/TextField/TextField.module.scss.mjs +1 -1
  50. package/dist/esm/hooks/useMergeRefs.mjs +1 -0
  51. package/dist/esm/hooks/useMergeRefs.mjs.map +1 -1
  52. package/dist/esm/index.mjs +1 -1
  53. package/dist/esm/node_modules/tslib/tslib.es6.mjs.map +1 -1
  54. package/dist/esm/styles.css +1 -1
  55. package/dist/types/components/AlphaAvatarGroup/AvatarGroup.types.d.ts.map +1 -1
  56. package/dist/types/components/AlphaLoader/Loader.d.ts +5 -0
  57. package/dist/types/components/AlphaLoader/Loader.d.ts.map +1 -0
  58. package/dist/types/components/AlphaLoader/Loader.types.d.ts +13 -0
  59. package/dist/types/components/AlphaLoader/Loader.types.d.ts.map +1 -0
  60. package/dist/types/components/AlphaLoader/index.d.ts +3 -0
  61. package/dist/types/components/AlphaLoader/index.d.ts.map +1 -0
  62. package/dist/types/components/Icon/Icon.types.d.ts +2 -2
  63. package/dist/types/components/Icon/Icon.types.d.ts.map +1 -1
  64. package/dist/types/hooks/useMergeRefs.d.ts.map +1 -1
  65. package/dist/types/index.d.ts +1 -1
  66. package/dist/types/index.d.ts.map +1 -1
  67. package/package.json +17 -14
  68. package/src/components/AlphaAvatarGroup/AvatarGroup.types.ts +1 -4
  69. package/src/components/AlphaButton/Button.module.scss +1 -1
  70. package/src/components/AlphaButton/Button.tsx +3 -3
  71. package/src/components/AlphaDialogPrimitive/AlphaDialogPrimitive.stories.tsx +1 -0
  72. package/src/components/AlphaFloatingButton/FloatingButton.module.scss +1 -1
  73. package/src/components/AlphaFloatingButton/FloatingButton.tsx +3 -3
  74. package/src/components/AlphaFloatingIconButton/FloatingIconButton.module.scss +1 -1
  75. package/src/components/AlphaFloatingIconButton/FloatingIconButton.tsx +3 -3
  76. package/src/components/AlphaIconButton/IconButton.module.scss +1 -1
  77. package/src/components/AlphaIconButton/IconButton.tsx +3 -3
  78. package/src/components/AlphaLoader/AlphaLoader.stories.tsx +23 -0
  79. package/src/components/AlphaLoader/Loader.module.scss +75 -0
  80. package/src/components/AlphaLoader/Loader.test.tsx +34 -0
  81. package/src/components/AlphaLoader/Loader.tsx +47 -0
  82. package/src/components/{AlphaSpinner/Spinner.types.ts → AlphaLoader/Loader.types.ts} +6 -6
  83. package/src/components/AlphaLoader/index.ts +2 -0
  84. package/src/components/AlphaToggleButton/ToggleButton.module.scss +1 -1
  85. package/src/components/AlphaToggleButton/ToggleButton.tsx +3 -3
  86. package/src/components/AlphaTooltipPrimitive/AlphaTooltipPrimitive.stories.tsx +1 -0
  87. package/src/components/Banner/Banner.mdx +14 -28
  88. package/src/components/Banner/Banner.stories.tsx +1 -0
  89. package/src/components/Button/Button.mdx +19 -37
  90. package/src/components/Button/Button.stories.tsx +1 -0
  91. package/src/components/ButtonGroup/ButtonGroup.mdx +4 -7
  92. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +2 -0
  93. package/src/components/Icon/Icon.mdx +7 -7
  94. package/src/components/Icon/Icon.stories.tsx +2 -0
  95. package/src/components/Icon/Icon.types.ts +2 -2
  96. package/src/components/LegacyStack/LegacyStack.mdx +16 -29
  97. package/src/components/LegacyStack/LegacyStack.stories.tsx +1 -0
  98. package/src/components/ProgressBar/ProgressBar.mdx +8 -14
  99. package/src/components/ProgressBar/ProgressBar.stories.tsx +2 -0
  100. package/src/components/Slider/Slider.stories.tsx +1 -1
  101. package/src/components/TextField/TextField.module.scss +2 -1
  102. package/src/components/TextField/TextField.test.tsx +16 -1
  103. package/src/components/TextField/TextField.tsx +1 -1
  104. package/src/hooks/useMergeRefs.ts +1 -0
  105. package/src/index.ts +1 -1
  106. package/dist/cjs/components/AlphaSpinner/Spinner.js.map +0 -1
  107. package/dist/cjs/components/AlphaSpinner/Spinner.module.scss.js +0 -8
  108. package/dist/cjs/components/AlphaSpinner/Spinner.module.scss.js.map +0 -1
  109. package/dist/esm/components/AlphaSpinner/Spinner.mjs.map +0 -1
  110. package/dist/esm/components/AlphaSpinner/Spinner.module.scss.mjs +0 -4
  111. package/dist/esm/components/AlphaSpinner/Spinner.module.scss.mjs.map +0 -1
  112. package/dist/types/components/AlphaSpinner/Spinner.d.ts +0 -5
  113. package/dist/types/components/AlphaSpinner/Spinner.d.ts.map +0 -1
  114. package/dist/types/components/AlphaSpinner/Spinner.types.d.ts +0 -13
  115. package/dist/types/components/AlphaSpinner/Spinner.types.d.ts.map +0 -1
  116. package/dist/types/components/AlphaSpinner/index.d.ts +0 -3
  117. package/dist/types/components/AlphaSpinner/index.d.ts.map +0 -1
  118. package/src/components/AlphaSpinner/AlphaSpinner.stories.tsx +0 -23
  119. package/src/components/AlphaSpinner/Spinner.module.scss +0 -75
  120. package/src/components/AlphaSpinner/Spinner.test.tsx +0 -34
  121. package/src/components/AlphaSpinner/Spinner.tsx +0 -49
  122. package/src/components/AlphaSpinner/index.ts +0 -2
@@ -45,6 +45,7 @@ const meta: Meta<typeof Banner> = {
45
45
  },
46
46
  },
47
47
  },
48
+ tags: ['!autodocs'],
48
49
  }
49
50
  export default meta
50
51
 
@@ -1,5 +1,7 @@
1
- import { ArgsTable, Canvas, Story } from '@storybook/addon-docs'
2
- import { Button } from '~/src/components/Button'
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/addon-docs'
2
+ import * as ButtonStories from './Button.stories'
3
+
4
+ <Meta of={ButtonStories} />
3
5
 
4
6
  # Button
5
7
 
@@ -9,13 +11,9 @@ import { Button } from '~/src/components/Button'
9
11
 
10
12
  버튼은 크게 4가지 사이즈로 나뉩니다. 그 중 M이 가장 보편적이며, 공간 절약을 위해 S가 쓰입니다. List나 Input 등 액션이 필요할 때는 XS도 사용할 수 있습니다. 가입, 초대 UX 등 굉장히 강조해야 할 버튼의 경우, L, XL 사이즈를 사용할 수 있습니다.
11
13
 
12
- <Canvas>
13
- <Story id="components-button--overview-cta" />
14
- </Canvas>
14
+ <Canvas of={ButtonStories.OverviewCTA} />
15
15
 
16
- <Canvas>
17
- <Story id="components-button--overview-floating" />
18
- </Canvas>
16
+ <Canvas of={ButtonStories.OverviewFloating} />
19
17
 
20
18
  ## Usage
21
19
 
@@ -24,13 +22,9 @@ import { Button } from '~/src/components/Button'
24
22
  - 한 화면 내에서 CTA 버튼은 가능한 한, 가장 중요한 버튼 1개만 primary로 지정합니다. 후순위로 colored button을 같이 넣어야 할 경우에는 secondary로 넣습니다. 그 외에는 secondary, tetiary button을 조합하여 넣습니다.
25
23
  - 버튼 사이의 간격은 0 또는 6으로 합니다. 둘 이상의 버튼을 활용할 때는, `<ButtonGroup>` 컴포넌트를 활용하는 것을 권장합니다.
26
24
 
27
- <Canvas>
28
- <Story id="components-button--usage-cta" />
29
- </Canvas>
25
+ <Canvas of={ButtonStories.UsageCTA} />
30
26
 
31
- <Canvas>
32
- <Story id="components-button--usage-cta-2" />
33
- </Canvas>
27
+ <Canvas of={ButtonStories.UsageCTA2} />
34
28
 
35
29
  ButtonGroup에 대해 더 알아보려면 [스토리](/docs/components-buttongroup--playground)를 참조하세요.
36
30
 
@@ -38,35 +32,27 @@ ButtonGroup에 대해 더 알아보려면 [스토리](/docs/components-buttongro
38
32
 
39
33
  - 보통의 경우, tertiary button을 적절한 icon과 함께 사용합니다.
40
34
 
41
- <Canvas>
42
- <Story id="components-button--usage-web-links" />
43
- </Canvas>
35
+ <Canvas of={ButtonStories.UsageWebLinks} />
44
36
 
45
37
  ### Recipe: Composite Usage
46
38
 
47
39
  - XS 크기의 버튼은 ListItem, SectionLabel 등 다른 컴포넌트에 함께 사용될 수 있습니다. 컴포넌트 좌우측에서 액션으로 사용됩니다.
48
40
 
49
- <Story id="components-button--usage-composite" />
41
+ <Canvas of={ButtonStories.UsageComposite} />
50
42
 
51
43
  ### Recipe: Button with various contents
52
44
 
53
45
  - 기본적으로 `leftContent`, `rightContent` prop에 `BezierIcon`을 지정하여 좌우측에 아이콘이 들어가는 형태를 표현합니다.
54
46
 
55
- <Canvas>
56
- <Story id="components-button--usage-various-contents-composite" />
57
- </Canvas>
47
+ <Canvas of={ButtonStories.UsageVariousContentsComposite} />
58
48
 
59
49
  - 아이콘만 들어가는 버튼의 경우, `leftContent` prop만 사용합니다.
60
50
 
61
- <Canvas>
62
- <Story id="components-button--usage-various-contents-icon-only" />
63
- </Canvas>
51
+ <Canvas of={ButtonStories.UsageVariousContentsIconOnly} />
64
52
 
65
53
  - 아이콘 이외에 커스텀 컴포넌트가 들어가야 하는 상황에는, `leftContent`, `rightContent` prop에 `JSX.Element` 값을 지정할 수 있습니다.
66
54
 
67
- <Canvas>
68
- <Story id="components-button--usage-various-contents-custom" />
69
- </Canvas>
55
+ <Canvas of={ButtonStories.UsageVariousContentsCustom} />
70
56
 
71
57
  ### Recipe: Button with asynchronous actions
72
58
 
@@ -95,9 +81,7 @@ const AsyncActionButton = () => {
95
81
  }
96
82
  ```
97
83
 
98
- <Canvas>
99
- <Story id="components-button--usage-async" />
100
- </Canvas>
84
+ <Canvas of={ButtonStories.UsageAsync} />
101
85
 
102
86
  ### Recipe: Button with dropdown
103
87
 
@@ -125,9 +109,7 @@ const OpenDropdownButton = () => {
125
109
  }
126
110
  ```
127
111
 
128
- <Canvas>
129
- <Story id="components-button--usage-dropdown" />
130
- </Canvas>
112
+ <Canvas of={ButtonStories.UsageDropdown} />
131
113
 
132
114
  ## Variants
133
115
 
@@ -135,23 +117,23 @@ const OpenDropdownButton = () => {
135
117
 
136
118
  - `ButtonColorVariant` enum을 통해 정의되며, `colorVariant` prop으로 지정할 수 있습니다.
137
119
 
138
- <Story id="components-button--variants-color" />
120
+ <Canvas of={ButtonStories.VariantsColor} />
139
121
 
140
122
  ### Style Variants
141
123
 
142
124
  - `ButtonStyleVariant` enum을 통해 정의되며, `styleVariant` prop으로 지정할 수 있습니다.
143
125
 
144
- <Story id="components-button--variants-style" />
126
+ <Canvas of={ButtonStories.VariantsStyle} />
145
127
 
146
128
  ### Size
147
129
 
148
130
  - `ButtonSize` enum을 통해 정의되며, `size` prop으로 지정할 수 있습니다.
149
131
 
150
- <Story id="components-button--variants-size" />
132
+ <Canvas of={ButtonStories.VariantsSize} />
151
133
 
152
134
  ## API
153
135
 
154
- <ArgsTable of={Button} />
136
+ <ArgTypes of={ButtonStories} />
155
137
 
156
138
  ## Version
157
139
 
@@ -53,6 +53,7 @@ const meta: Meta<typeof Button> = {
53
53
  argTypes: {
54
54
  onClick: { action: 'onClick' },
55
55
  },
56
+ tags: ['!autodocs'],
56
57
  }
57
58
  export default meta
58
59
 
@@ -1,6 +1,5 @@
1
- import { ArgsTable, Canvas, Meta, Story } from '@storybook/addon-docs'
2
- import { ButtonGroup } from './ButtonGroup'
3
- import { Composition } from './ButtonGroup.stories'
1
+ import { ArgTypes, Canvas } from '@storybook/addon-docs'
2
+ import * as ButtonGroupStories from './ButtonGroup.stories'
4
3
 
5
4
  # ButtonGroup
6
5
 
@@ -10,13 +9,11 @@ import { Composition } from './ButtonGroup.stories'
10
9
 
11
10
  버튼 사이의 간격은 0px 혹은 6px 이며, 디폴트값은 6px 입니다.
12
11
 
13
- <Canvas>
14
- <Story id="components-buttongroup--playground" />
15
- </Canvas>
12
+ <Canvas of={ButtonGroupStories.Primary} />
16
13
 
17
14
  ## API
18
15
 
19
- <ArgsTable of={ButtonGroup} />
16
+ <ArgTypes of={ButtonGroupStories} />
20
17
 
21
18
  ## Version
22
19
 
@@ -17,7 +17,9 @@ const meta: Meta<typeof ButtonGroup> = {
17
17
  page: mdx,
18
18
  },
19
19
  },
20
+ tags: ['!autodocs'],
20
21
  }
22
+
21
23
  export default meta
22
24
 
23
25
  const Template: StoryFn<ButtonGroupProps> = (props) => (
@@ -1,6 +1,6 @@
1
- import { ArgsTable, Canvas, Story } from '@storybook/addon-docs'
1
+ import { Story, ArgTypes, Canvas } from '@storybook/addon-docs'
2
2
  import { ChannelBtnSmileFilledIcon } from '@channel.io/bezier-icons'
3
- import { Icon } from './Icon'
3
+ import * as IconStories from './Icon.stories'
4
4
 
5
5
  # Icon
6
6
 
@@ -10,7 +10,7 @@ import { Icon } from './Icon'
10
10
 
11
11
  아이콘 단독으로 사용되거나, `bezier-react`의 다른 컴포넌트를 구성하는 기본 요소입니다.
12
12
 
13
- <Story id="components-icon--overview" />
13
+ <Canvas of={IconStories.Overview} />
14
14
 
15
15
  ### Naming
16
16
 
@@ -51,7 +51,7 @@ import {
51
51
  `Icon` 컴포넌트에 color variant는 따로 정해져 있지 않습니다.
52
52
  Semantic 색상을 `color` prop에 지정하여 아이콘이 어떤 색상으로 렌더링할지 결정합니다.
53
53
 
54
- <Story id="components-icon--usage-color" />
54
+ <Canvas of={IconStories.UsageColor} />
55
55
 
56
56
  ```tsx
57
57
  <Icon
@@ -66,7 +66,7 @@ Semantic 색상을 `color` prop에 지정하여 아이콘이 어떤 색상으로
66
66
 
67
67
  아이콘의 크기를 지정할 때는 `IconSize` enum을 사용합니다.
68
68
 
69
- <Story id="components-icon--usage-size" />
69
+ <Canvas of={IconStories.UsageSize} />
70
70
 
71
71
  ```tsx
72
72
  <Icon
@@ -131,7 +131,7 @@ Semantic 색상을 `color` prop에 지정하여 아이콘이 어떤 색상으로
131
131
  아이콘 주위에 margin이 필요한 경우, `styled(Icon)` 처럼 스타일을 overriding하여 margin을 작성할 수 있으나,
132
132
  `marginTop`, `marginRight` 등의 prop을 지원하기 때문에 overriding 없이 작성할 수 있습니다.
133
133
 
134
- <Story id="components-icon--tips-margin" />
134
+ <Canvas of={IconStories.TipsMargin} />
135
135
 
136
136
  ```tsx
137
137
  <Icon
@@ -146,7 +146,7 @@ Semantic 색상을 `color` prop에 지정하여 아이콘이 어떤 색상으로
146
146
 
147
147
  ## API
148
148
 
149
- <ArgsTable of={Icon} />
149
+ <ArgTypes of={IconStories} />
150
150
 
151
151
  ## Version
152
152
 
@@ -48,7 +48,9 @@ const meta: Meta<typeof Icon> = {
48
48
  page: mdx,
49
49
  },
50
50
  },
51
+ tags: ['!autodocs'],
51
52
  }
53
+
52
54
  export default meta
53
55
 
54
56
  export const Primary: StoryObj<IconProps> = {
@@ -1,4 +1,4 @@
1
- import type React from 'react'
1
+ import { type BezierIcon } from '@channel.io/bezier-icons'
2
2
 
3
3
  import {
4
4
  type BezierComponentProps,
@@ -21,7 +21,7 @@ interface IconOwnProps {
21
21
  * <Icon source={HeartFilledIcon} {...} />
22
22
  * ```
23
23
  */
24
- source: React.ElementType<React.SVGProps<SVGSVGElement>>
24
+ source: BezierIcon
25
25
  }
26
26
 
27
27
  export interface IconProps
@@ -1,4 +1,4 @@
1
- import { ArgsTable, Canvas, Story } from '@storybook/addon-docs'
1
+ import { ArgTypes, Canvas, Story } from '@storybook/addon-docs'
2
2
  import {
3
3
  LegacyHStack,
4
4
  LegacyVStack,
@@ -6,6 +6,7 @@ import {
6
6
  LegacyStackItem,
7
7
  LegacySpacer,
8
8
  } from '~/src/components/LegacyStack'
9
+ import * as LegacyStackStories from './LegacyStack.stories'
9
10
 
10
11
  # LegacyStack
11
12
 
@@ -21,9 +22,7 @@ Stack은 flex layout을 제공하는 컴포넌트입니다.
21
22
 
22
23
  Flexbox 내의 각 item을 `StackItem`으로 구성합니다. Flex layout 내에서 각 item의 weight, base size, item 간의 spacing을 컨트롤할 수 있습니다.
23
24
 
24
- <Canvas>
25
- <Story id="components-legacystack--overview" />
26
- </Canvas>
25
+ <Canvas of={LegacyStackStories.Overview} />
27
26
 
28
27
  ## Usage
29
28
 
@@ -46,13 +45,9 @@ Flexbox 내의 각 item을 `StackItem`으로 구성합니다. Flex layout 내에
46
45
 
47
46
  기본 컴포넌트인 `Stack`에 `direction` prop을 사용하여 방향을 결정할 수 있으나, 방향이 고정된 경우에는 `HStack`과 `VStack`을 바로 이용하는 것이 좋습니다.
48
47
 
49
- <Canvas>
50
- <Story id="components-legacystack--direction-horizontal" />
51
- </Canvas>
48
+ <Canvas of={LegacyStackStories.DirectionHorizontal} />
52
49
 
53
- <Canvas>
54
- <Story id="components-legacystack--direction-vertical" />
55
- </Canvas>
50
+ <Canvas of={LegacyStackStories.DirectionVertical} />
56
51
 
57
52
  ### Alignment
58
53
 
@@ -60,17 +55,15 @@ Flex container의 **주 방향** (`HStack`은 가로, `VStack`은 세로) 의
60
55
 
61
56
  기본적으로, `Stack` container에 지정하는 prop이 모든 child의 기본값이 됩니다. 각 `StackItem`에도 `justify`, `align` prop을 지정하여 parent `Stack`의 기본값을 overriding할 수 있습니다.
62
57
 
63
- <Story id="components-legacystack--alignment-justify" />
58
+ <Canvas of={LegacyStackStories.AlignmentJustify} />
64
59
 
65
- <Story id="components-legacystack--alignment-align" />
60
+ <Canvas of={LegacyStackStories.AlignmentAlign} />
66
61
 
67
62
  ### Spacing
68
63
 
69
64
  `Stack` 컴포넌트의 `spacing` prop으로 item 간의 기본 간격을 조정합니다. `StackItem`에 `marginBefore`, `marginAfter` prop으로 기본 간격을 오버라이딩할 수 있습니다.
70
65
 
71
- <Canvas>
72
- <Story id="components-legacystack--spacing" />
73
- </Canvas>
66
+ <Canvas of={LegacyStackStories.Spacing} />
74
67
 
75
68
  ### Weight
76
69
 
@@ -80,43 +73,37 @@ Flex layout의 특징은, container의 크기에 맞춰 item의 크기가 적절
80
73
 
81
74
  - Item 하나가 container의 여유 공간을 모두 차지하는 경우입니다. 이 경우, 해당 item에게 `grow shrink weight={1}` prop을 지정합니다.
82
75
 
83
- <Canvas>
84
- <Story id="components-legacystack--expanded" />
85
- </Canvas>
76
+ <Canvas of={LegacyStackStories.Expanded} />
86
77
 
87
78
  - CSS의 `justify-content: space-between`과 같이, item 사이에 공간을 두고자 하는 경우가 있습니다. 이 경우에는 `<Spacer />` 컴포넌트를 활용합니다. `Spacer`는 기본적으로 `grow shrink weight={1}` 을 가진 빈 `StackItem`입니다.
88
79
 
89
- <Canvas>
90
- <Story id="components-legacystack--weight-spacer" />
91
- </Canvas>
80
+ <Canvas of={LegacyStackStories.WeightSpacer} />
92
81
 
93
82
  - Item이 container의 크기와 무관하게 (특히, container 크기가 충분하지 않은 경우) 일정한 크기를 차지하고자 하는 경우, 기본값인 `grow={false} shrink={false} weight={0}` prop을 지정합니다. 그리고, 의도하는 크기를 `size` prop으로 지정합니다.
94
83
 
95
- <Canvas>
96
- <Story id="components-legacystack--weight-fixed" />
97
- </Canvas>
84
+ <Canvas of={LegacyStackStories.WeightFixed} />
98
85
 
99
86
  ## API
100
87
 
101
88
  ### Stack
102
89
 
103
- <ArgsTable of={LegacyStack} />
90
+ <ArgTypes of={LegacyStack} />
104
91
 
105
92
  ### HStack
106
93
 
107
- <ArgsTable of={LegacyHStack} />
94
+ <ArgTypes of={LegacyHStack} />
108
95
 
109
96
  ### VStack
110
97
 
111
- <ArgsTable of={LegacyVStack} />
98
+ <ArgTypes of={LegacyVStack} />
112
99
 
113
100
  ### StackItem
114
101
 
115
- <ArgsTable of={LegacyStackItem} />
102
+ <ArgTypes of={LegacyStackItem} />
116
103
 
117
104
  ### Spacer
118
105
 
119
- <ArgsTable of={LegacySpacer} />
106
+ <ArgTypes of={LegacySpacer} />
120
107
 
121
108
  ## Version
122
109
 
@@ -60,6 +60,7 @@ const meta: Meta<
60
60
  },
61
61
  },
62
62
  },
63
+ tags: ['!autodocs'],
63
64
  }
64
65
  export default meta
65
66
 
@@ -1,5 +1,5 @@
1
- import { ArgsTable, Canvas, Story } from '@storybook/addon-docs'
2
- import { ProgressBar } from '~/src/components/ProgressBar'
1
+ import { ArgTypes, Canvas, Story } from '@storybook/addon-docs'
2
+ import * as ProgressBarStories from './ProgressBar.stories'
3
3
 
4
4
  # ProgressBar
5
5
 
@@ -7,9 +7,7 @@ import { ProgressBar } from '~/src/components/ProgressBar'
7
7
 
8
8
  진행도를 나타낼 때 사용합니다.
9
9
 
10
- <Canvas>
11
- <Story id="components-progressbar--overview" />
12
- </Canvas>
10
+ <Canvas of={ProgressBarStories.Overview} />
13
11
 
14
12
  ## Usage
15
13
 
@@ -17,9 +15,7 @@ import { ProgressBar } from '~/src/components/ProgressBar'
17
15
 
18
16
  `width` prop을 통해 ProgressBar의 너비를 지정할 수 있습니다. 기본값은 36px입니다.
19
17
 
20
- <Canvas>
21
- <Story id="components-progressbar--usage-width" />
22
- </Canvas>
18
+ <Canvas of={ProgressBarStories.UsageWidth} />
23
19
 
24
20
  ### Value
25
21
 
@@ -27,9 +23,7 @@ import { ProgressBar } from '~/src/components/ProgressBar'
27
23
 
28
24
  진행도를 나타내는 `value`는 0보다 크거나 같고 1보다 작거나 같은 수입니다. 0보다 작은 값은 0으로, 1보다 큰 값은 1로 처리합니다.
29
25
 
30
- <Canvas>
31
- <Story id="components-progressbar--usage-value" />
32
- </Canvas>
26
+ <Canvas of={ProgressBarStories.UsageValue} />
33
27
 
34
28
  ## Variants
35
29
 
@@ -39,7 +33,7 @@ S, M 2개의 size가 있으며, 기본값은 M입니다.
39
33
 
40
34
  `size` prop을 통해 ProgressBar의 높이를 선택할 수 있습니다.
41
35
 
42
- <Story id="components-progressbar--size-variant" />
36
+ <Canvas of={ProgressBarStories.SizeVariant} />
43
37
 
44
38
  ### Color
45
39
 
@@ -47,13 +41,13 @@ Green, Monochrome, GreenAlt 3개의 color가 있으며, 기본값은 Green입니
47
41
 
48
42
  `variant` prop을 통해 ProgressBar의 색상을 선택할 수 있습니다.
49
43
 
50
- <Story id="components-progressbar--variant" />
44
+ <Canvas of={ProgressBarStories.Variant} />
51
45
 
52
46
  ## API
53
47
 
54
48
  ### ProgressBar
55
49
 
56
- <ArgsTable of={ProgressBar} />
50
+ <ArgTypes of={ProgressBarStories} />
57
51
 
58
52
  ## Version
59
53
 
@@ -47,7 +47,9 @@ const meta: Meta<typeof ProgressBar> = {
47
47
  },
48
48
  },
49
49
  },
50
+ tags: ['!autodocs'],
50
51
  }
52
+
51
53
  export default meta
52
54
 
53
55
  export const Primary: StoryObj<ProgressBarProps> = {
@@ -7,7 +7,7 @@ const meta: Meta<typeof Slider> = {
7
7
  argTypes: {
8
8
  value: {
9
9
  control: {
10
- type: 'array',
10
+ type: 'object',
11
11
  },
12
12
  },
13
13
  minStepsBetweenThumbs: {
@@ -71,7 +71,8 @@
71
71
  box-shadow: var(--input-box-shadow-focused);
72
72
  }
73
73
 
74
- &:where(:has(.TextFieldInput:focus, :hover)) .CloseIcon {
74
+ &:where(:has(.TextFieldInput:focus, :hover, .CloseIconWrapper:focus))
75
+ .CloseIcon {
75
76
  visibility: visible;
76
77
  }
77
78
 
@@ -237,7 +237,8 @@ describe('TextField', () => {
237
237
  describe('show remove button only when it is filled and focused/hovered', () => {
238
238
  /**
239
239
  * FIXME: This test is not working properly.
240
- * @see https://github.com/testing-library/jest-dom/issues/444
240
+ * Jest-dom does not support css which is not inline.
241
+ * @see https://github.com/testing-library/jest-dom/issues/113#issuecomment-496971128
241
242
  */
242
243
  // it('disappear when empty & focused/hovered', async () => {
243
244
  // const { getByTestId } = renderComponent({ value: '', allowClear: true })
@@ -296,5 +297,19 @@ describe('TextField', () => {
296
297
  )
297
298
  expect(clearButton).toBeVisible()
298
299
  })
300
+
301
+ it('should focus the clear button when Tab key is pressed', async () => {
302
+ const { getByTestId } = renderComponent({
303
+ value: 'test',
304
+ allowClear: true,
305
+ })
306
+ const rendered = getByTestId(TEXT_INPUT_TEST_ID)
307
+ const input = rendered.getElementsByTagName('input')[0]
308
+
309
+ input.focus()
310
+ await user.tab()
311
+
312
+ expect(document.activeElement).toHaveClass('CloseIconWrapper')
313
+ })
299
314
  })
300
315
  })
@@ -409,7 +409,7 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
409
409
  {activeClear && (
410
410
  <BaseButton
411
411
  className={styles.CloseIconWrapper}
412
- tabIndex={-1}
412
+ tabIndex={0}
413
413
  onClick={handleClear}
414
414
  >
415
415
  <Icon
@@ -19,6 +19,7 @@ function assignRef<Node>(ref: Ref<Node>, value: Node | null) {
19
19
 
20
20
  try {
21
21
  ref.current = value
22
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
22
23
  } catch (error) {
23
24
  throw new Error(`Cannot assign value '${value}' to ref '${ref}'`)
24
25
  }
package/src/index.ts CHANGED
@@ -12,7 +12,7 @@ export * from '~/src/components/AlphaDialogPrimitive'
12
12
  export * from '~/src/components/AlphaFloatingButton'
13
13
  export * from '~/src/components/AlphaFloatingIconButton'
14
14
  export * from '~/src/components/AlphaIconButton'
15
- export * from '~/src/components/AlphaSpinner'
15
+ export * from '~/src/components/AlphaLoader'
16
16
  export * from '~/src/components/AlphaToggleButton'
17
17
  export * from '~/src/components/AlphaToggleButtonGroup'
18
18
  export * from '~/src/components/AlphaTooltipPrimitive'
@@ -1 +0,0 @@
1
- {"version":3,"file":"Spinner.js","sources":["../../../../src/components/AlphaSpinner/Spinner.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nimport classNames from 'classnames'\n\nimport { type SpinnerProps } from './Spinner.types'\n\nimport styles from './Spinner.module.scss'\n\nexport const SPINNER_TEST_ID = 'bezier-spinner'\n\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(\n function Spinner(\n { className, size, variant = 'secondary', ...rest },\n forwardedRef\n ) {\n return (\n <span\n className={classNames(\n styles.Spinner,\n size && styles[`size-${size}`],\n styles[`variant-${variant}`],\n className\n )}\n ref={forwardedRef}\n data-testid={SPINNER_TEST_ID}\n {...rest}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6.5\"\n className={styles.track}\n />\n\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6.5\"\n className={styles.indicator}\n />\n </svg>\n </span>\n )\n }\n)\n"],"names":["SPINNER_TEST_ID","Spinner","forwardRef","className","size","variant","rest","forwardedRef","React","createElement","Object","assign","classNames","styles","ref","xmlns","viewBox","cx","cy","r","track","indicator"],"mappings":";;;;;;AAQO,MAAMA,eAAe,GAAG,iBAAgB;MAElCC,OAAO,gBAAGC,gBAAU,CAC/B,SAASD,OAAOA,CACd;EAAEE,SAAS;EAAEC,IAAI;AAAEC,EAAAA,OAAO,GAAG,WAAW;EAAE,GAAGC,IAAAA;AAAK,CAAC,EACnDC,YAAY,EACZ;AACA,EAAA,oBACEC,KAAA,CAAAC,aAAA,CAAAC,MAAAA,EAAAA,MAAA,CAAAC,MAAA,CAAA;IACER,SAAS,EAAES,aAAU,CACnBC,sBAAM,CAACZ,OAAO,EACdG,IAAI,IAAIS,sBAAM,CAAC,CAAA,KAAA,EAAQT,IAAI,CAAE,CAAA,CAAC,EAC9BS,sBAAM,CAAC,CAAA,QAAA,EAAWR,OAAO,CAAE,CAAA,CAAC,EAC5BF,SACF,CAAE;AACFW,IAAAA,GAAG,EAAEP,YAAa;IAClB,aAAaP,EAAAA,eAAAA;AAAgB,GAAA,EACzBM,IAAI,CAAA,eAERE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEM,IAAAA,KAAK,EAAC,4BAA4B;AAClCC,IAAAA,OAAO,EAAC,WAAA;GAERR,eAAAA,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEQ,IAAAA,EAAE,EAAC,GAAG;AACNC,IAAAA,EAAE,EAAC,GAAG;AACNC,IAAAA,CAAC,EAAC,KAAK;IACPhB,SAAS,EAAEU,sBAAM,CAACO,KAAAA;AAAM,GACzB,CAAC,eAEFZ,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEQ,IAAAA,EAAE,EAAC,GAAG;AACNC,IAAAA,EAAE,EAAC,GAAG;AACNC,IAAAA,CAAC,EAAC,KAAK;IACPhB,SAAS,EAAEU,sBAAM,CAACQ,SAAAA;GACnB,CACE,CACD,CAAC,CAAA;AAEX,CACF;;;;;"}
@@ -1,8 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var styles = {"Spinner":"b-JiZuz","rotate":"b--s0vl","track":"b-yJ2yV","indicator":"b-ZDWx3","size-s":"b-RnjP3","size-m":"b-ZRPEJ","variant-primary":"b-awyMq","variant-secondary":"b-ur-vE","variant-on-overlay":"b-5H4Ga"};
6
-
7
- exports.default = styles;
8
- //# sourceMappingURL=Spinner.module.scss.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Spinner.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Spinner.mjs","sources":["../../../../src/components/AlphaSpinner/Spinner.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nimport classNames from 'classnames'\n\nimport { type SpinnerProps } from './Spinner.types'\n\nimport styles from './Spinner.module.scss'\n\nexport const SPINNER_TEST_ID = 'bezier-spinner'\n\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(\n function Spinner(\n { className, size, variant = 'secondary', ...rest },\n forwardedRef\n ) {\n return (\n <span\n className={classNames(\n styles.Spinner,\n size && styles[`size-${size}`],\n styles[`variant-${variant}`],\n className\n )}\n ref={forwardedRef}\n data-testid={SPINNER_TEST_ID}\n {...rest}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6.5\"\n className={styles.track}\n />\n\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6.5\"\n className={styles.indicator}\n />\n </svg>\n </span>\n )\n }\n)\n"],"names":["SPINNER_TEST_ID","Spinner","forwardRef","className","size","variant","rest","forwardedRef","React","createElement","Object","assign","classNames","styles","ref","xmlns","viewBox","cx","cy","r","track","indicator"],"mappings":";;;;AAQO,MAAMA,eAAe,GAAG,iBAAgB;MAElCC,OAAO,gBAAGC,UAAU,CAC/B,SAASD,OAAOA,CACd;EAAEE,SAAS;EAAEC,IAAI;AAAEC,EAAAA,OAAO,GAAG,WAAW;EAAE,GAAGC,IAAAA;AAAK,CAAC,EACnDC,YAAY,EACZ;AACA,EAAA,oBACEC,cAAA,CAAAC,aAAA,CAAAC,MAAAA,EAAAA,MAAA,CAAAC,MAAA,CAAA;IACER,SAAS,EAAES,UAAU,CACnBC,MAAM,CAACZ,OAAO,EACdG,IAAI,IAAIS,MAAM,CAAC,CAAA,KAAA,EAAQT,IAAI,CAAE,CAAA,CAAC,EAC9BS,MAAM,CAAC,CAAA,QAAA,EAAWR,OAAO,CAAE,CAAA,CAAC,EAC5BF,SACF,CAAE;AACFW,IAAAA,GAAG,EAAEP,YAAa;IAClB,aAAaP,EAAAA,eAAAA;AAAgB,GAAA,EACzBM,IAAI,CAAA,eAERE,cAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEM,IAAAA,KAAK,EAAC,4BAA4B;AAClCC,IAAAA,OAAO,EAAC,WAAA;GAERR,eAAAA,cAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEQ,IAAAA,EAAE,EAAC,GAAG;AACNC,IAAAA,EAAE,EAAC,GAAG;AACNC,IAAAA,CAAC,EAAC,KAAK;IACPhB,SAAS,EAAEU,MAAM,CAACO,KAAAA;AAAM,GACzB,CAAC,eAEFZ,cAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEQ,IAAAA,EAAE,EAAC,GAAG;AACNC,IAAAA,EAAE,EAAC,GAAG;AACNC,IAAAA,CAAC,EAAC,KAAK;IACPhB,SAAS,EAAEU,MAAM,CAACQ,SAAAA;GACnB,CACE,CACD,CAAC,CAAA;AAEX,CACF;;;;"}
@@ -1,4 +0,0 @@
1
- var styles = {"Spinner":"b-JiZuz","rotate":"b--s0vl","track":"b-yJ2yV","indicator":"b-ZDWx3","size-s":"b-RnjP3","size-m":"b-ZRPEJ","variant-primary":"b-awyMq","variant-secondary":"b-ur-vE","variant-on-overlay":"b-5H4Ga"};
2
-
3
- export { styles as default };
4
- //# sourceMappingURL=Spinner.module.scss.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Spinner.module.scss.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- import { type SpinnerProps } from './Spinner.types';
3
- export declare const SPINNER_TEST_ID = "bezier-spinner";
4
- export declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<HTMLSpanElement>>;
5
- //# sourceMappingURL=Spinner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../../src/components/AlphaSpinner/Spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAA;AAIzC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAInD,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAE/C,eAAO,MAAM,OAAO,sFAsCnB,CAAA"}
@@ -1,13 +0,0 @@
1
- import { type BezierComponentProps, type ColorProps, type SizeProps } from "../../types/props";
2
- type SpinnerSize = 's' | 'm';
3
- interface SpinnerOwnProps {
4
- /**
5
- * The style variant of Spinner.
6
- * @default 'secondary'
7
- */
8
- variant?: 'primary' | 'secondary' | 'on-overlay';
9
- }
10
- export interface SpinnerProps extends Omit<BezierComponentProps<'span'>, keyof ColorProps>, SizeProps<SpinnerSize>, ColorProps, SpinnerOwnProps {
11
- }
12
- export {};
13
- //# sourceMappingURL=Spinner.types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Spinner.types.d.ts","sourceRoot":"","sources":["../../../../src/components/AlphaSpinner/Spinner.types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,SAAS,EACf,0BAAyB;AAE1B,KAAK,WAAW,GAAG,GAAG,GAAG,GAAG,CAAA;AAE5B,UAAU,eAAe;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,CAAA;CACjD;AAED,MAAM,WAAW,YACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,UAAU,CAAC,EAC1D,SAAS,CAAC,WAAW,CAAC,EACtB,UAAU,EACV,eAAe;CAAG"}
@@ -1,3 +0,0 @@
1
- export { Spinner as AlphaSpinner } from './Spinner';
2
- export { type SpinnerProps as AlphaSpinnerProps } from './Spinner.types';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/AlphaSpinner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,KAAK,YAAY,IAAI,iBAAiB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -1,23 +0,0 @@
1
- import React from 'react'
2
-
3
- import { type Meta, type StoryFn } from '@storybook/react'
4
-
5
- import { Spinner } from './Spinner'
6
- import { type SpinnerProps } from './Spinner.types'
7
-
8
- const meta: Meta<typeof Spinner> = {
9
- component: Spinner,
10
- }
11
-
12
- export default meta
13
-
14
- const Template: StoryFn<SpinnerProps> = ({ ...args }) => <Spinner {...args} />
15
-
16
- export const Primary = {
17
- render: Template,
18
-
19
- args: {
20
- size: 'm',
21
- variant: 'secondary',
22
- },
23
- }