@channel.io/bezier-react 2.0.2 → 2.0.4

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 (123) hide show
  1. package/dist/cjs/components/AlphaAvatar/Avatar.js +121 -0
  2. package/dist/cjs/components/AlphaAvatar/Avatar.js.map +1 -0
  3. package/dist/cjs/components/AlphaAvatar/Avatar.module.scss.js +8 -0
  4. package/dist/cjs/components/AlphaAvatar/Avatar.module.scss.js.map +1 -0
  5. package/dist/cjs/components/AlphaAvatar/assets/default-avatar.svg.js +8 -0
  6. package/dist/cjs/components/AlphaAvatar/assets/default-avatar.svg.js.map +1 -0
  7. package/dist/cjs/components/AlphaAvatar/useProgressiveImage.js +48 -0
  8. package/dist/cjs/components/AlphaAvatar/useProgressiveImage.js.map +1 -0
  9. package/dist/cjs/components/AlphaAvatarGroup/AvatarGroup.js +153 -0
  10. package/dist/cjs/components/AlphaAvatarGroup/AvatarGroup.js.map +1 -0
  11. package/dist/cjs/components/AlphaAvatarGroup/AvatarGroup.module.scss.js +8 -0
  12. package/dist/cjs/components/AlphaAvatarGroup/AvatarGroup.module.scss.js.map +1 -0
  13. package/dist/cjs/components/AlphaButton/Button.js +78 -0
  14. package/dist/cjs/components/AlphaButton/Button.js.map +1 -0
  15. package/dist/cjs/components/AlphaButton/Button.module.scss.js +8 -0
  16. package/dist/cjs/components/AlphaButton/Button.module.scss.js.map +1 -0
  17. package/dist/cjs/components/AlphaFloatingButton/FloatingButton.js +77 -0
  18. package/dist/cjs/components/AlphaFloatingButton/FloatingButton.js.map +1 -0
  19. package/dist/cjs/components/AlphaFloatingButton/FloatingButton.module.scss.js +8 -0
  20. package/dist/cjs/components/AlphaFloatingButton/FloatingButton.module.scss.js.map +1 -0
  21. package/dist/cjs/components/BaseButton/BaseButton.js +2 -1
  22. package/dist/cjs/components/BaseButton/BaseButton.js.map +1 -1
  23. package/dist/cjs/components/Button/Button.js +1 -5
  24. package/dist/cjs/components/Button/Button.js.map +1 -1
  25. package/dist/cjs/index.js +16 -7
  26. package/dist/cjs/index.js.map +1 -1
  27. package/dist/cjs/packages/bezier-tokens/dist/esm/global.js +2 -2
  28. package/dist/cjs/packages/bezier-tokens/dist/esm/global.js.map +1 -1
  29. package/dist/cjs/styles.css +1 -1
  30. package/dist/esm/components/AlphaAvatar/Avatar.mjs +115 -0
  31. package/dist/esm/components/AlphaAvatar/Avatar.mjs.map +1 -0
  32. package/dist/esm/components/AlphaAvatar/Avatar.module.scss.mjs +4 -0
  33. package/dist/esm/components/AlphaAvatar/Avatar.module.scss.mjs.map +1 -0
  34. package/dist/esm/components/AlphaAvatar/assets/default-avatar.svg.mjs +4 -0
  35. package/dist/esm/components/AlphaAvatar/assets/default-avatar.svg.mjs.map +1 -0
  36. package/dist/esm/components/AlphaAvatar/useProgressiveImage.mjs +44 -0
  37. package/dist/esm/components/AlphaAvatar/useProgressiveImage.mjs.map +1 -0
  38. package/dist/esm/components/AlphaAvatarGroup/AvatarGroup.mjs +149 -0
  39. package/dist/esm/components/AlphaAvatarGroup/AvatarGroup.mjs.map +1 -0
  40. package/dist/esm/components/AlphaAvatarGroup/AvatarGroup.module.scss.mjs +4 -0
  41. package/dist/esm/components/AlphaAvatarGroup/AvatarGroup.module.scss.mjs.map +1 -0
  42. package/dist/esm/components/AlphaButton/Button.mjs +76 -0
  43. package/dist/esm/components/AlphaButton/Button.mjs.map +1 -0
  44. package/dist/esm/components/AlphaButton/Button.module.scss.mjs +4 -0
  45. package/dist/esm/components/AlphaButton/Button.module.scss.mjs.map +1 -0
  46. package/dist/esm/components/AlphaFloatingButton/FloatingButton.mjs +75 -0
  47. package/dist/esm/components/AlphaFloatingButton/FloatingButton.mjs.map +1 -0
  48. package/dist/esm/components/AlphaFloatingButton/FloatingButton.module.scss.mjs +4 -0
  49. package/dist/esm/components/AlphaFloatingButton/FloatingButton.module.scss.mjs.map +1 -0
  50. package/dist/esm/components/BaseButton/BaseButton.mjs +2 -1
  51. package/dist/esm/components/BaseButton/BaseButton.mjs.map +1 -1
  52. package/dist/esm/components/Button/Button.mjs +1 -5
  53. package/dist/esm/components/Button/Button.mjs.map +1 -1
  54. package/dist/esm/index.mjs +4 -0
  55. package/dist/esm/index.mjs.map +1 -1
  56. package/dist/esm/packages/bezier-tokens/dist/esm/global.mjs +2 -2
  57. package/dist/esm/packages/bezier-tokens/dist/esm/global.mjs.map +1 -1
  58. package/dist/esm/styles.css +1 -1
  59. package/dist/types/components/AlphaAvatar/Avatar.d.ts +22 -0
  60. package/dist/types/components/AlphaAvatar/Avatar.d.ts.map +1 -0
  61. package/dist/types/components/AlphaAvatar/Avatar.types.d.ts +42 -0
  62. package/dist/types/components/AlphaAvatar/Avatar.types.d.ts.map +1 -0
  63. package/dist/types/components/AlphaAvatar/index.d.ts +3 -0
  64. package/dist/types/components/AlphaAvatar/index.d.ts.map +1 -0
  65. package/dist/types/components/AlphaAvatar/useProgressiveImage.d.ts +2 -0
  66. package/dist/types/components/AlphaAvatar/useProgressiveImage.d.ts.map +1 -0
  67. package/dist/types/components/AlphaAvatarGroup/AvatarGroup.d.ts +24 -0
  68. package/dist/types/components/AlphaAvatarGroup/AvatarGroup.d.ts.map +1 -0
  69. package/dist/types/components/AlphaAvatarGroup/AvatarGroup.types.d.ts +28 -0
  70. package/dist/types/components/AlphaAvatarGroup/AvatarGroup.types.d.ts.map +1 -0
  71. package/dist/types/components/AlphaAvatarGroup/index.d.ts +3 -0
  72. package/dist/types/components/AlphaAvatarGroup/index.d.ts.map +1 -0
  73. package/dist/types/components/AlphaButton/Button.d.ts +4 -0
  74. package/dist/types/components/AlphaButton/Button.d.ts.map +1 -0
  75. package/dist/types/components/AlphaButton/Button.types.d.ts +44 -0
  76. package/dist/types/components/AlphaButton/Button.types.d.ts.map +1 -0
  77. package/dist/types/components/AlphaButton/index.d.ts +3 -0
  78. package/dist/types/components/AlphaButton/index.d.ts.map +1 -0
  79. package/dist/types/components/AlphaFloatingButton/FloatingButton.d.ts +4 -0
  80. package/dist/types/components/AlphaFloatingButton/FloatingButton.d.ts.map +1 -0
  81. package/dist/types/components/AlphaFloatingButton/FloatingButton.types.d.ts +43 -0
  82. package/dist/types/components/AlphaFloatingButton/FloatingButton.types.d.ts.map +1 -0
  83. package/dist/types/components/AlphaFloatingButton/index.d.ts +3 -0
  84. package/dist/types/components/AlphaFloatingButton/index.d.ts.map +1 -0
  85. package/dist/types/components/BaseButton/BaseButton.d.ts.map +1 -1
  86. package/dist/types/components/Button/Button.d.ts.map +1 -1
  87. package/dist/types/index.d.ts +4 -0
  88. package/dist/types/index.d.ts.map +1 -1
  89. package/package.json +3 -3
  90. package/src/components/AlphaAvatar/AlphaAvatar.stories.tsx +63 -0
  91. package/src/components/AlphaAvatar/Avatar.module.scss +54 -0
  92. package/src/components/AlphaAvatar/Avatar.test.tsx +111 -0
  93. package/src/components/AlphaAvatar/Avatar.tsx +159 -0
  94. package/src/components/AlphaAvatar/Avatar.types.ts +64 -0
  95. package/src/components/AlphaAvatar/__snapshots__/Avatar.test.tsx.snap +93 -0
  96. package/src/components/AlphaAvatar/assets/default-avatar.svg +11 -0
  97. package/src/components/AlphaAvatar/index.ts +8 -0
  98. package/src/components/AlphaAvatar/useProgressiveImage.test.ts +96 -0
  99. package/src/components/AlphaAvatar/useProgressiveImage.ts +60 -0
  100. package/src/components/AlphaAvatarGroup/AlphaAvatarGroup.stories.tsx +55 -0
  101. package/src/components/AlphaAvatarGroup/AvatarGroup.module.scss +53 -0
  102. package/src/components/AlphaAvatarGroup/AvatarGroup.test.tsx +93 -0
  103. package/src/components/AlphaAvatarGroup/AvatarGroup.tsx +229 -0
  104. package/src/components/AlphaAvatarGroup/AvatarGroup.types.ts +43 -0
  105. package/src/components/AlphaAvatarGroup/__mocks__/avatarList.ts +39 -0
  106. package/src/components/AlphaAvatarGroup/__snapshots__/AvatarGroup.test.tsx.snap +215 -0
  107. package/src/components/AlphaAvatarGroup/index.ts +2 -0
  108. package/src/components/AlphaButton/AlphaButton.stories.tsx +29 -0
  109. package/src/components/AlphaButton/Button.module.scss +267 -0
  110. package/src/components/AlphaButton/Button.tsx +124 -0
  111. package/src/components/AlphaButton/Button.types.ts +73 -0
  112. package/src/components/AlphaButton/index.ts +7 -0
  113. package/src/components/AlphaFloatingButton/AlphaFloatingButton.stories.tsx +29 -0
  114. package/src/components/AlphaFloatingButton/FloatingButton.module.scss +204 -0
  115. package/src/components/AlphaFloatingButton/FloatingButton.tsx +123 -0
  116. package/src/components/AlphaFloatingButton/FloatingButton.types.ts +71 -0
  117. package/src/components/AlphaFloatingButton/index.ts +7 -0
  118. package/src/components/BaseButton/BaseButton.tsx +5 -2
  119. package/src/components/Button/Button.module.scss +4 -0
  120. package/src/components/Button/Button.stories.tsx +1 -1
  121. package/src/components/Button/Button.tsx +0 -3
  122. package/src/components/LegacyStack/LegacyStack.stories.tsx +7 -10
  123. package/src/index.ts +4 -0
@@ -0,0 +1,229 @@
1
+ import React, { forwardRef, useCallback, useMemo } from 'react'
2
+
3
+ import { MoreIcon } from '@channel.io/bezier-icons'
4
+ import classNames from 'classnames'
5
+
6
+ import { isLastIndex } from '~/src/utils/array'
7
+ import { createContext } from '~/src/utils/react'
8
+ import { px } from '~/src/utils/style'
9
+
10
+ import {
11
+ type AlphaAvatarProps,
12
+ type AlphaAvatarSize,
13
+ useAlphaAvatarRadiusToken,
14
+ } from '~/src/components/AlphaAvatar'
15
+ import { Icon } from '~/src/components/Icon'
16
+ import { SmoothCornersBox } from '~/src/components/SmoothCornersBox'
17
+ import { Text } from '~/src/components/Text'
18
+
19
+ import {
20
+ type AvatarGroupContextValue,
21
+ type AvatarGroupProps,
22
+ } from './AvatarGroup.types'
23
+
24
+ import styles from './AvatarGroup.module.scss'
25
+
26
+ const [AvatarGroupContextProvider, useAvatarGroupContext] = createContext<
27
+ AvatarGroupContextValue | undefined
28
+ >(undefined)
29
+
30
+ export { useAvatarGroupContext }
31
+
32
+ const MAX_AVATAR_LIST_COUNT = 99
33
+ const AVATAR_GROUP_DEFAULT_SPACING = 4
34
+ export const AVATAR_GROUP_ELLIPSIS_ICON_TEST_ID =
35
+ 'bezier-avatar-group-ellipsis-icon'
36
+
37
+ function getRestAvatarListCountText(count: number, max: number) {
38
+ const restCount = count - max
39
+ return `+${restCount > MAX_AVATAR_LIST_COUNT ? MAX_AVATAR_LIST_COUNT : restCount}`
40
+ }
41
+
42
+ // TODO: Not specified
43
+ function getProperIconSize(size: AlphaAvatarSize) {
44
+ return (
45
+ {
46
+ 16: 'xxs',
47
+ 20: 'xxs',
48
+ 24: 'xs',
49
+ 30: 's',
50
+ 36: 'm',
51
+ 42: 'm',
52
+ 48: 'l',
53
+ 72: 'l',
54
+ 90: 'l',
55
+ 120: 'l',
56
+ } as const
57
+ )[size]
58
+ }
59
+
60
+ // TODO: Not specified
61
+ function getProperTypoSize(size: AlphaAvatarSize) {
62
+ return (
63
+ {
64
+ 16: '12',
65
+ 20: '12',
66
+ 24: '13',
67
+ 30: '15',
68
+ 36: '16',
69
+ 42: '18',
70
+ 48: '24',
71
+ 72: '24',
72
+ 90: '24',
73
+ 120: '24',
74
+ } as const
75
+ )[size]
76
+ }
77
+
78
+ /**
79
+ * `AvatarGroup` is a component for grouping `Avatar` components
80
+ * @example
81
+ *
82
+ * ```tsx
83
+ * <AvatarGroup
84
+ * max={2}
85
+ * size="24"
86
+ * spacing={4}
87
+ * ellipsisType="icon"
88
+ * >
89
+ * <Avatar />
90
+ * <Avatar />
91
+ * <Avatar />
92
+ * </AvatarGroup>
93
+ * ```
94
+ */
95
+ export const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(
96
+ function AvatarGroup(
97
+ {
98
+ max = 5,
99
+ size = '24',
100
+ spacing = AVATAR_GROUP_DEFAULT_SPACING,
101
+ ellipsisType = 'icon',
102
+ style,
103
+ className,
104
+ children,
105
+ ...rest
106
+ },
107
+ forwardedRef
108
+ ) {
109
+ const AVATAR_BORDER_RADIUS = useAlphaAvatarRadiusToken()
110
+ const avatarListCount = React.Children.count(children)
111
+
112
+ const renderAvatarElement = useCallback(
113
+ (avatar: React.ReactElement<AlphaAvatarProps>) => {
114
+ const key =
115
+ avatar.key ?? `${avatar.props.name}-${avatar.props.avatarUrl}`
116
+ const shouldShowBorder = max > 1 && avatarListCount > 1 && spacing < 0
117
+ const showBorder = avatar.props.showBorder || shouldShowBorder
118
+ return React.cloneElement(avatar, { key, showBorder })
119
+ },
120
+ [avatarListCount, max, spacing]
121
+ )
122
+
123
+ const AvatarListComponent = useMemo(() => {
124
+ return React.Children.toArray(children)
125
+ .slice(0, max)
126
+ .map((avatar, index, arr) => {
127
+ if (!React.isValidElement<AlphaAvatarProps>(avatar)) {
128
+ return null
129
+ }
130
+
131
+ const AvatarElement = renderAvatarElement(avatar)
132
+
133
+ if (!isLastIndex(arr, index) || avatarListCount <= max) {
134
+ return AvatarElement
135
+ }
136
+
137
+ if (ellipsisType === 'icon') {
138
+ return (
139
+ <div
140
+ key="ellipsis"
141
+ className={styles.AvatarEllipsisIconWrapper}
142
+ data-testid={AVATAR_GROUP_ELLIPSIS_ICON_TEST_ID}
143
+ >
144
+ <SmoothCornersBox
145
+ borderRadius={AVATAR_BORDER_RADIUS}
146
+ backgroundColor="bgtxt-absolute-black-lightest"
147
+ className={styles.AvatarEllipsisIcon}
148
+ >
149
+ <Icon
150
+ source={MoreIcon}
151
+ size={getProperIconSize(size)}
152
+ color="bgtxt-absolute-white-dark"
153
+ />
154
+ </SmoothCornersBox>
155
+ {AvatarElement}
156
+ </div>
157
+ )
158
+ }
159
+
160
+ if (ellipsisType === 'count') {
161
+ return (
162
+ <React.Fragment key="ellipsis">
163
+ {AvatarElement}
164
+ <div
165
+ style={
166
+ {
167
+ '--b-avatar-group-ellipsis-ml': px(
168
+ Math.max(spacing, AVATAR_GROUP_DEFAULT_SPACING)
169
+ ),
170
+ } as React.CSSProperties
171
+ }
172
+ className={classNames(styles.AvatarEllipsisCountWrapper)}
173
+ >
174
+ <Text
175
+ typo={getProperTypoSize(size)}
176
+ color="txt-black-dark"
177
+ className={styles.AvatarEllipsisCount}
178
+ >
179
+ {getRestAvatarListCountText(avatarListCount, max)}
180
+ </Text>
181
+ </div>
182
+ </React.Fragment>
183
+ )
184
+ }
185
+
186
+ return null
187
+ })
188
+ }, [
189
+ avatarListCount,
190
+ max,
191
+ children,
192
+ renderAvatarElement,
193
+ ellipsisType,
194
+ AVATAR_BORDER_RADIUS,
195
+ size,
196
+ spacing,
197
+ ])
198
+
199
+ return (
200
+ <AvatarGroupContextProvider
201
+ value={useMemo(
202
+ () => ({
203
+ size,
204
+ }),
205
+ [size]
206
+ )}
207
+ >
208
+ <div
209
+ role="group"
210
+ ref={forwardedRef}
211
+ className={classNames(
212
+ styles.AvatarGroup,
213
+ styles[`size-${size}`],
214
+ className
215
+ )}
216
+ style={
217
+ {
218
+ '--b-avatar-group-spacing': px(spacing),
219
+ ...style,
220
+ } as React.CSSProperties
221
+ }
222
+ {...rest}
223
+ >
224
+ {AvatarListComponent}
225
+ </div>
226
+ </AvatarGroupContextProvider>
227
+ )
228
+ }
229
+ )
@@ -0,0 +1,43 @@
1
+ import type {
2
+ BezierComponentProps,
3
+ ChildrenProps,
4
+ SizeProps,
5
+ } from '~/src/types/props'
6
+
7
+ import {
8
+ type AlphaAvatarProps,
9
+ type AlphaAvatarSize,
10
+ } from '~/src/components/AlphaAvatar'
11
+
12
+ type AvatarGroupEllipsisType = 'icon' | 'count'
13
+
14
+ interface AvatarGroupOwnProps {
15
+ /**
16
+ * Maximum number of avatars to display.
17
+ * If the number of avatars exceeds this number, ellipsis will be displayed.
18
+ * @default 5
19
+ */
20
+ max: number
21
+
22
+ /**
23
+ * Spacing between the avatars.
24
+ * Spacing could be negative, which will make the avatars overlap each other.
25
+ * @default 4
26
+ */
27
+ spacing?: number
28
+
29
+ /**
30
+ * Controls how the ellipsis is displayed.
31
+ * @default 'icon'
32
+ */
33
+ ellipsisType?: AvatarGroupEllipsisType
34
+ }
35
+
36
+ export interface AvatarGroupContextValue
37
+ extends Pick<AlphaAvatarProps, 'size'> {}
38
+
39
+ export interface AvatarGroupProps
40
+ extends BezierComponentProps<'div'>,
41
+ ChildrenProps,
42
+ SizeProps<AlphaAvatarSize>,
43
+ AvatarGroupOwnProps {}
@@ -0,0 +1,39 @@
1
+ const MOCK_AVATAR_LIST = [
2
+ {
3
+ id: 1,
4
+ avatarUrl: 'https://bit.ly/code-beast',
5
+ name: 'Christian Nwamba',
6
+ },
7
+ {
8
+ id: 2,
9
+ avatarUrl: 'https://bit.ly/tioluwani-kolawole',
10
+ name: 'Kola Tioluwani',
11
+ },
12
+ {
13
+ id: 3,
14
+ avatarUrl: 'https://bit.ly/kent-c-dodds',
15
+ name: 'Kent Dodds',
16
+ },
17
+ {
18
+ id: 4,
19
+ avatarUrl: 'https://bit.ly/ryan-florence',
20
+ name: 'Ryan Florence',
21
+ },
22
+ {
23
+ id: 5,
24
+ avatarUrl: 'https://bit.ly/dan-abramov',
25
+ name: 'Dan Abrahmov',
26
+ },
27
+ {
28
+ id: 6,
29
+ avatarUrl: 'https://bit.ly/prosper-baba',
30
+ name: 'Prosper Otemuyiwa',
31
+ },
32
+ {
33
+ id: 7,
34
+ avatarUrl: 'https://bit.ly/sage-adebayo',
35
+ name: 'Segun Adebayo',
36
+ },
37
+ ]
38
+
39
+ export default MOCK_AVATAR_LIST
@@ -0,0 +1,215 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`AvatarGroup Ellipsis type - Count Snapshot 1`] = `
4
+ <div
5
+ class="AvatarGroup size-24"
6
+ role="group"
7
+ style="--b-avatar-group-spacing: 4px;"
8
+ >
9
+ <div
10
+ class="Avatar size-24"
11
+ data-disabled="false"
12
+ data-testid="bezier-avatar-wrapper"
13
+ >
14
+ <div
15
+ aria-label="Christian Nwamba"
16
+ class="SmoothCornersBox AvatarImage"
17
+ data-state="disabled"
18
+ data-testid="bezier-avatar"
19
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
20
+ />
21
+ </div>
22
+ <div
23
+ class="Avatar size-24"
24
+ data-disabled="false"
25
+ data-testid="bezier-avatar-wrapper"
26
+ >
27
+ <div
28
+ aria-label="Kola Tioluwani"
29
+ class="SmoothCornersBox AvatarImage"
30
+ data-state="disabled"
31
+ data-testid="bezier-avatar"
32
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
33
+ />
34
+ </div>
35
+ <div
36
+ class="Avatar size-24"
37
+ data-disabled="false"
38
+ data-testid="bezier-avatar-wrapper"
39
+ >
40
+ <div
41
+ aria-label="Kent Dodds"
42
+ class="SmoothCornersBox AvatarImage"
43
+ data-state="disabled"
44
+ data-testid="bezier-avatar"
45
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
46
+ />
47
+ </div>
48
+ <div
49
+ class="Avatar size-24"
50
+ data-disabled="false"
51
+ data-testid="bezier-avatar-wrapper"
52
+ >
53
+ <div
54
+ aria-label="Ryan Florence"
55
+ class="SmoothCornersBox AvatarImage"
56
+ data-state="disabled"
57
+ data-testid="bezier-avatar"
58
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
59
+ />
60
+ </div>
61
+ <div
62
+ class="Avatar size-24"
63
+ data-disabled="false"
64
+ data-testid="bezier-avatar-wrapper"
65
+ >
66
+ <div
67
+ aria-label="Dan Abrahmov"
68
+ class="SmoothCornersBox AvatarImage"
69
+ data-state="disabled"
70
+ data-testid="bezier-avatar"
71
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
72
+ />
73
+ </div>
74
+ <div
75
+ class="Avatar size-24"
76
+ data-disabled="false"
77
+ data-testid="bezier-avatar-wrapper"
78
+ >
79
+ <div
80
+ aria-label="Prosper Otemuyiwa"
81
+ class="SmoothCornersBox AvatarImage"
82
+ data-state="disabled"
83
+ data-testid="bezier-avatar"
84
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
85
+ />
86
+ </div>
87
+ <div
88
+ class="AvatarEllipsisCountWrapper"
89
+ style="--b-avatar-group-ellipsis-ml: 4px;"
90
+ >
91
+ <span
92
+ class="Text typo-13 margin AvatarEllipsisCount"
93
+ data-testid="bezier-text"
94
+ style="--b-text-color: var(--txt-black-dark);"
95
+ >
96
+ +1
97
+ </span>
98
+ </div>
99
+ </div>
100
+ `;
101
+
102
+ exports[`AvatarGroup Ellipsis type - Icon Snapshot 1`] = `
103
+ <div
104
+ class="AvatarGroup size-24"
105
+ role="group"
106
+ style="--b-avatar-group-spacing: 4px;"
107
+ >
108
+ <div
109
+ class="Avatar size-24"
110
+ data-disabled="false"
111
+ data-testid="bezier-avatar-wrapper"
112
+ >
113
+ <div
114
+ aria-label="Christian Nwamba"
115
+ class="SmoothCornersBox AvatarImage"
116
+ data-state="disabled"
117
+ data-testid="bezier-avatar"
118
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
119
+ />
120
+ </div>
121
+ <div
122
+ class="Avatar size-24"
123
+ data-disabled="false"
124
+ data-testid="bezier-avatar-wrapper"
125
+ >
126
+ <div
127
+ aria-label="Kola Tioluwani"
128
+ class="SmoothCornersBox AvatarImage"
129
+ data-state="disabled"
130
+ data-testid="bezier-avatar"
131
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
132
+ />
133
+ </div>
134
+ <div
135
+ class="Avatar size-24"
136
+ data-disabled="false"
137
+ data-testid="bezier-avatar-wrapper"
138
+ >
139
+ <div
140
+ aria-label="Kent Dodds"
141
+ class="SmoothCornersBox AvatarImage"
142
+ data-state="disabled"
143
+ data-testid="bezier-avatar"
144
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
145
+ />
146
+ </div>
147
+ <div
148
+ class="Avatar size-24"
149
+ data-disabled="false"
150
+ data-testid="bezier-avatar-wrapper"
151
+ >
152
+ <div
153
+ aria-label="Ryan Florence"
154
+ class="SmoothCornersBox AvatarImage"
155
+ data-state="disabled"
156
+ data-testid="bezier-avatar"
157
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
158
+ />
159
+ </div>
160
+ <div
161
+ class="Avatar size-24"
162
+ data-disabled="false"
163
+ data-testid="bezier-avatar-wrapper"
164
+ >
165
+ <div
166
+ aria-label="Dan Abrahmov"
167
+ class="SmoothCornersBox AvatarImage"
168
+ data-state="disabled"
169
+ data-testid="bezier-avatar"
170
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
171
+ />
172
+ </div>
173
+ <div
174
+ class="AvatarEllipsisIconWrapper"
175
+ data-testid="bezier-avatar-group-ellipsis-icon"
176
+ >
177
+ <div
178
+ class="SmoothCornersBox AvatarEllipsisIcon"
179
+ data-state="disabled"
180
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bgtxt-absolute-black-lightest);"
181
+ >
182
+ <svg
183
+ class="Icon margin"
184
+ data-testid="bezier-icon"
185
+ fill="none"
186
+ height="16"
187
+ style="--b-icon-color: var(--bgtxt-absolute-white-dark);"
188
+ viewBox="0 0 24 24"
189
+ width="16"
190
+ xmlns="http://www.w3.org/2000/svg"
191
+ >
192
+ <path
193
+ clip-rule="evenodd"
194
+ d="M2.5 12a2.257 2.257 0 0 0 2.25 2.25A2.257 2.257 0 0 0 7 12a2.257 2.257 0 0 0-2.25-2.25A2.257 2.257 0 0 0 2.5 12m9.5 2.25A2.257 2.257 0 0 1 9.75 12 2.257 2.257 0 0 1 12 9.75 2.257 2.257 0 0 1 14.25 12 2.257 2.257 0 0 1 12 14.25m7.25 0A2.257 2.257 0 0 1 17 12a2.257 2.257 0 0 1 2.25-2.25A2.257 2.257 0 0 1 21.5 12a2.257 2.257 0 0 1-2.25 2.25"
195
+ fill="currentColor"
196
+ fill-rule="evenodd"
197
+ />
198
+ </svg>
199
+ </div>
200
+ <div
201
+ class="Avatar size-24"
202
+ data-disabled="false"
203
+ data-testid="bezier-avatar-wrapper"
204
+ >
205
+ <div
206
+ aria-label="Prosper Otemuyiwa"
207
+ class="SmoothCornersBox AvatarImage"
208
+ data-state="disabled"
209
+ data-testid="bezier-avatar"
210
+ style="--b-smooth-corners-box-border-radius: 42%; --b-smooth-corners-box-shadow-blur-radius: 0px; --b-smooth-corners-box-shadow-spread-radius: 0px; --b-smooth-corners-box-padding: 0px; --b-smooth-corners-box-margin: 0px; --b-smooth-corners-box-background-color: var(--bg-white-normal); --b-smooth-corners-box-background-image: url(https://www.google.com);"
211
+ />
212
+ </div>
213
+ </div>
214
+ </div>
215
+ `;
@@ -0,0 +1,2 @@
1
+ export { AvatarGroup as AlphaAvatarGroup } from './AvatarGroup'
2
+ export { type AvatarGroupProps as AlphaAvatarGroupProps } from './AvatarGroup.types'
@@ -0,0 +1,29 @@
1
+ import { ArrowRightIcon, PlusIcon } from '@channel.io/bezier-icons'
2
+ import { type Meta, type StoryObj } from '@storybook/react'
3
+
4
+ import {
5
+ AlphaButton,
6
+ type AlphaButtonProps,
7
+ } from '~/src/components/AlphaButton'
8
+
9
+ const meta: Meta<typeof AlphaButton> = {
10
+ component: AlphaButton,
11
+ argTypes: {
12
+ onClick: { action: 'onClick' },
13
+ },
14
+ }
15
+ export default meta
16
+
17
+ export const Playground: StoryObj<AlphaButtonProps> = {
18
+ args: {
19
+ text: 'Invite',
20
+ disabled: false,
21
+ active: false,
22
+ loading: false,
23
+ prefixIcon: PlusIcon,
24
+ suffixIcon: ArrowRightIcon,
25
+ size: 'm',
26
+ variant: 'primary',
27
+ color: 'blue',
28
+ },
29
+ }