@bspk/ui 1.3.4 → 1.3.5

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 (173) hide show
  1. package/dist/components/Avatar/Avatar.d.ts +3 -3
  2. package/dist/components/Avatar/Avatar.js +8 -8
  3. package/dist/components/Avatar/Avatar.js.map +1 -1
  4. package/dist/components/Avatar/AvatarExample.js +1 -1
  5. package/dist/components/Avatar/AvatarExample.js.map +1 -1
  6. package/dist/components/Avatar/avatar.css +5 -1
  7. package/dist/components/Avatar/avatar.css.js +5 -1
  8. package/dist/components/AvatarGroup/AvatarGroup.d.ts +11 -6
  9. package/dist/components/AvatarGroup/AvatarGroup.js +5 -6
  10. package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
  11. package/dist/components/AvatarGroup/AvatarGroupExample.js +36 -9
  12. package/dist/components/AvatarGroup/AvatarGroupExample.js.map +1 -1
  13. package/dist/components/AvatarGroup/Overflow.d.ts +11 -0
  14. package/dist/components/AvatarGroup/Overflow.js +37 -0
  15. package/dist/components/AvatarGroup/Overflow.js.map +1 -0
  16. package/dist/components/AvatarGroup/avatar-group.css +27 -13
  17. package/dist/components/AvatarGroup/avatar-group.css.js +27 -13
  18. package/dist/components/Badge/BadgeExample.js +1 -1
  19. package/dist/components/Badge/BadgeExample.js.map +1 -1
  20. package/dist/components/BadgeDot/BadgeDotExample.js +1 -1
  21. package/dist/components/BadgeDot/BadgeDotExample.js.map +1 -1
  22. package/dist/components/Button/Button.d.ts +2 -2
  23. package/dist/components/Card/Card.d.ts +2 -1
  24. package/dist/components/Card/Card.js +2 -2
  25. package/dist/components/Card/Card.js.map +1 -1
  26. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +4 -4
  27. package/dist/components/CheckboxGroup/CheckboxGroup.js +4 -4
  28. package/dist/components/CheckboxGroupField/CheckboxGroupField.d.ts +1 -1
  29. package/dist/components/CheckboxGroupField/CheckboxGroupField.js +2 -2
  30. package/dist/components/CheckboxGroupField/CheckboxGroupField.js.map +1 -1
  31. package/dist/components/CheckboxOption/CheckboxOption.d.ts +3 -2
  32. package/dist/components/CheckboxOption/CheckboxOption.js +2 -2
  33. package/dist/components/CheckboxOption/CheckboxOption.js.map +1 -1
  34. package/dist/components/DatePickerField/DatePickerField.d.ts +1 -1
  35. package/dist/components/DatePickerField/DatePickerField.js +2 -2
  36. package/dist/components/DatePickerField/DatePickerField.js.map +1 -1
  37. package/dist/components/Fab/Fab.d.ts +2 -2
  38. package/dist/components/Fab/Fab.js.map +1 -1
  39. package/dist/components/FormField/FormField.d.ts +3 -2
  40. package/dist/components/FormField/FormField.js +2 -2
  41. package/dist/components/FormField/FormField.js.map +1 -1
  42. package/dist/components/InputField/InputField.d.ts +1 -1
  43. package/dist/components/InputField/InputField.js +2 -2
  44. package/dist/components/InputField/InputField.js.map +1 -1
  45. package/dist/components/InputNumberField/InputNumberField.d.ts +1 -1
  46. package/dist/components/InputNumberField/InputNumberField.js +2 -2
  47. package/dist/components/InputNumberField/InputNumberField.js.map +1 -1
  48. package/dist/components/InputPhoneField/InputPhoneField.d.ts +1 -1
  49. package/dist/components/InputPhoneField/InputPhoneField.js +2 -2
  50. package/dist/components/InputPhoneField/InputPhoneField.js.map +1 -1
  51. package/dist/components/Layout/Layout.d.ts +2 -2
  52. package/dist/components/Layout/Layout.js.map +1 -1
  53. package/dist/components/ListItem/ListItem.d.ts +1 -1
  54. package/dist/components/Menu/Menu.d.ts +8 -1
  55. package/dist/components/Menu/Menu.js +1 -1
  56. package/dist/components/Menu/Menu.js.map +1 -1
  57. package/dist/components/Menu/MenuExample.js +1 -1
  58. package/dist/components/Menu/MenuExample.js.map +1 -1
  59. package/dist/components/PasswordField/PasswordField.d.ts +1 -1
  60. package/dist/components/PasswordField/PasswordField.js +2 -2
  61. package/dist/components/PasswordField/PasswordField.js.map +1 -1
  62. package/dist/components/ProgressCircle/progress-circle.css +2 -0
  63. package/dist/components/ProgressCircle/progress-circle.css.js +2 -0
  64. package/dist/components/RadioGroup/RadioGroup.js +3 -3
  65. package/dist/components/RadioGroup/RadioGroup.js.map +1 -1
  66. package/dist/components/RadioGroupField/RadioGroupField.d.ts +1 -1
  67. package/dist/components/RadioGroupField/RadioGroupField.js +2 -2
  68. package/dist/components/RadioGroupField/RadioGroupField.js.map +1 -1
  69. package/dist/components/SearchBar/SearchBar.d.ts +2 -2
  70. package/dist/components/SearchBar/SearchBar.js +2 -2
  71. package/dist/components/SearchBar/SearchBar.js.map +1 -1
  72. package/dist/components/Select/Select.d.ts +9 -2
  73. package/dist/components/Select/Select.js +4 -3
  74. package/dist/components/Select/Select.js.map +1 -1
  75. package/dist/components/Select/SelectExample.js +36 -1
  76. package/dist/components/Select/SelectExample.js.map +1 -1
  77. package/dist/components/SelectField/SelectField.d.ts +1 -1
  78. package/dist/components/SelectField/SelectField.js +2 -2
  79. package/dist/components/SelectField/SelectField.js.map +1 -1
  80. package/dist/components/SkeletonText/SkeletonText.js +1 -1
  81. package/dist/components/SkeletonText/SkeletonText.js.map +1 -1
  82. package/dist/components/Slider/slider.css +1 -0
  83. package/dist/components/Slider/slider.css.js +1 -0
  84. package/dist/components/Textarea/Textarea.d.ts +3 -9
  85. package/dist/components/Textarea/Textarea.js +2 -2
  86. package/dist/components/Textarea/Textarea.js.map +1 -1
  87. package/dist/components/TextareaField/TextareaField.d.ts +1 -1
  88. package/dist/components/TextareaField/TextareaField.js +2 -2
  89. package/dist/components/TextareaField/TextareaField.js.map +1 -1
  90. package/dist/components/TimePicker/TimePicker.js +10 -4
  91. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  92. package/dist/components/TimePickerField/TimePickerField.d.ts +1 -1
  93. package/dist/components/TimePickerField/TimePickerField.js +2 -2
  94. package/dist/components/TimePickerField/TimePickerField.js.map +1 -1
  95. package/dist/components/ToggleOption/ToggleOption.d.ts +3 -3
  96. package/dist/components/ToggleOption/ToggleOption.js +2 -2
  97. package/dist/components/ToggleOption/ToggleOption.js.map +1 -1
  98. package/dist/components/Truncated/Truncated.d.ts +2 -2
  99. package/dist/components/Truncated/Truncated.js.map +1 -1
  100. package/dist/components/Txt/Txt.d.ts +2 -2
  101. package/dist/components/Txt/Txt.js.map +1 -1
  102. package/dist/hooks/useArrowNavigation.d.ts +0 -2
  103. package/dist/hooks/useArrowNavigation.js +0 -2
  104. package/dist/hooks/useArrowNavigation.js.map +1 -1
  105. package/dist/hooks/useCheckboxGroupState.d.ts +7 -10
  106. package/dist/hooks/useCheckboxGroupState.js +7 -10
  107. package/dist/hooks/useCheckboxGroupState.js.map +1 -1
  108. package/dist/hooks/useFloating.js +8 -7
  109. package/dist/hooks/useFloating.js.map +1 -1
  110. package/dist/styles/base.css +4 -0
  111. package/dist/styles/base.css.js +4 -0
  112. package/dist/types/common.d.ts +12 -1
  113. package/dist/types/common.js.map +1 -1
  114. package/meta.ts +4 -4
  115. package/package.json +1 -3
  116. package/src/components/Avatar/Avatar.tsx +10 -11
  117. package/src/components/Avatar/AvatarExample.tsx +1 -1
  118. package/src/components/Avatar/avatar.scss +6 -1
  119. package/src/components/AvatarGroup/AvatarGroup.tsx +20 -24
  120. package/src/components/AvatarGroup/AvatarGroupExample.tsx +35 -9
  121. package/src/components/AvatarGroup/Overflow.tsx +91 -0
  122. package/src/components/AvatarGroup/avatar-group.scss +34 -14
  123. package/src/components/Badge/BadgeExample.tsx +1 -1
  124. package/src/components/BadgeDot/BadgeDotExample.tsx +1 -1
  125. package/src/components/Button/Button.tsx +2 -2
  126. package/src/components/Card/Card.tsx +3 -2
  127. package/src/components/CheckboxGroup/CheckboxGroup.tsx +4 -4
  128. package/src/components/CheckboxGroupField/CheckboxGroupField.tsx +3 -2
  129. package/src/components/CheckboxOption/CheckboxOption.tsx +4 -1
  130. package/src/components/DatePickerField/DatePickerField.tsx +8 -1
  131. package/src/components/Fab/Fab.tsx +2 -2
  132. package/src/components/FormField/FormField.tsx +13 -3
  133. package/src/components/InputField/InputField.tsx +15 -2
  134. package/src/components/InputNumberField/InputNumberField.tsx +8 -1
  135. package/src/components/InputPhoneField/InputPhoneField.tsx +8 -1
  136. package/src/components/Layout/Layout.tsx +2 -2
  137. package/src/components/ListItem/ListItem.tsx +1 -1
  138. package/src/components/Menu/Menu.tsx +9 -1
  139. package/src/components/Menu/MenuExample.tsx +1 -1
  140. package/src/components/PasswordField/PasswordField.tsx +15 -2
  141. package/src/components/ProgressCircle/progress-circle.scss +2 -0
  142. package/src/components/RadioGroup/RadioGroup.tsx +18 -20
  143. package/src/components/RadioGroupField/RadioGroupField.tsx +2 -1
  144. package/src/components/SearchBar/SearchBar.tsx +3 -1
  145. package/src/components/Select/Select.tsx +12 -3
  146. package/src/components/Select/SelectExample.tsx +36 -1
  147. package/src/components/SelectField/SelectField.tsx +15 -2
  148. package/src/components/SkeletonText/SkeletonText.tsx +1 -1
  149. package/src/components/Slider/slider.scss +1 -0
  150. package/src/components/Textarea/Textarea.tsx +34 -39
  151. package/src/components/TextareaField/TextareaField.tsx +15 -2
  152. package/src/components/TimePicker/TimePicker.tsx +13 -3
  153. package/src/components/TimePickerField/TimePickerField.tsx +8 -1
  154. package/src/components/ToggleOption/ToggleOption.tsx +20 -19
  155. package/src/components/Truncated/Truncated.tsx +2 -2
  156. package/src/components/Txt/Txt.tsx +2 -2
  157. package/src/hooks/useArrowNavigation.ts +0 -2
  158. package/src/hooks/useCheckboxGroupState.ts +7 -10
  159. package/src/hooks/useFloating.ts +8 -7
  160. package/src/styles/base.scss +4 -0
  161. package/src/types/common.ts +11 -0
  162. package/dist/components/MenuButton/MenuButton.d.ts +0 -19
  163. package/dist/components/MenuButton/MenuButton.js +0 -20
  164. package/dist/components/MenuButton/MenuButton.js.map +0 -1
  165. package/dist/components/MenuButton/index.d.ts +0 -1
  166. package/dist/components/MenuButton/index.js +0 -2
  167. package/dist/components/MenuButton/index.js.map +0 -1
  168. package/dist/components/MenuButton/menu-button.css +0 -16
  169. package/dist/components/MenuButton/menu-button.css.js +0 -21
  170. package/src/components/MenuButton/MenuButton.rtl.test.tsx +0 -15
  171. package/src/components/MenuButton/MenuButton.tsx +0 -29
  172. package/src/components/MenuButton/index.tsx +0 -1
  173. package/src/components/MenuButton/menu-button.scss +0 -16
@@ -1 +1 @@
1
- {"version":3,"file":"useFloating.js","sourceRoot":"","sources":["../../src/hooks/useFloating.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useFloating.js","sourceRoot":"","sources":["../../src/hooks/useFloating.ts"],"names":[],"mappings":"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"}
@@ -93,6 +93,10 @@
93
93
  padding: 0;
94
94
  }
95
95
 
96
+ ol {
97
+ list-style-position: inside;
98
+ }
99
+
96
100
  :root {
97
101
  --z-index-snackbar: 1200;
98
102
  --z-index-focus: 9999;
@@ -96,6 +96,10 @@ style.appendChild(document.createTextNode(`/**
96
96
  padding: 0;
97
97
  }
98
98
 
99
+ ol {
100
+ list-style-position: inside;
101
+ }
102
+
99
103
  :root {
100
104
  --z-index-snackbar: 1200;
101
105
  --z-index-focus: 9999;
@@ -5,12 +5,16 @@
5
5
  *
6
6
  * @bspk/ui/Txt".
7
7
  */
8
- import { JSXElementConstructor, ReactNode, ComponentPropsWithoutRef, AriaRole, ChangeEvent, KeyboardEvent } from 'react';
8
+ import { JSXElementConstructor, ReactNode, ComponentPropsWithoutRef, AriaRole, ChangeEvent, KeyboardEvent, CSSProperties } from 'react';
9
9
  export type AlertVariant = 'error' | 'informational' | 'success' | 'warning';
10
10
  /** Sets a ref to the given element. */
11
11
  export type SetRef<T> = (instance: T | null) => void;
12
12
  export type ElementProps<P extends Record<string, unknown>, E extends JSXElementConstructor<unknown> | keyof JSX.IntrinsicElements, O extends string = ''> = Omit<ComponentPropsWithoutRef<E>, O | keyof P> & P;
13
13
  export type ElementConstructorProps<E extends JSXElementConstructor<unknown> | keyof JSX.IntrinsicElements, O extends string = ''> = Omit<ComponentPropsWithoutRef<E>, O>;
14
+ type CSSVariables = `--${string}`;
15
+ export type CSSWithVariables = CSSProperties | (CSSProperties & {
16
+ [key in CSSVariables]: unknown;
17
+ });
14
18
  export type DataProps = Record<`data-${string}`, string>;
15
19
  export type ButtonSize = 'large' | 'medium' | 'small' | 'x-small';
16
20
  export type CallToActionButton = {
@@ -106,6 +110,12 @@ export type CommonPropsLibrary = {
106
110
  * @type string
107
111
  */
108
112
  role?: AriaRole;
113
+ /**
114
+ * Inline styles to apply to the element.
115
+ *
116
+ * Allows for CSS variables to be passed in as well.
117
+ */
118
+ style?: CSSWithVariables;
109
119
  };
110
120
  export type CommonProps<K extends keyof CommonPropsLibrary> = Pick<CommonPropsLibrary, K>;
111
121
  export type RequiredCommonProps<K extends keyof CommonPropsLibrary> = Required<Pick<CommonPropsLibrary, K>>;
@@ -124,4 +134,5 @@ export type FieldControlProps<ValueType = string, ChangeContext = ChangeEvent<HT
124
134
  onChange: (next: ValueType | undefined, event?: ChangeContext) => void;
125
135
  };
126
136
  export type Brand = 'anywhere' | 'better-homes-gardens' | 'cartus' | 'century-21' | 'coldwell-banker' | 'corcoran' | 'denali-boss' | 'era' | 'sothebys';
137
+ export {};
127
138
  /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;AAgKH,sDAAsD"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;AA2KH,sDAAsD"}
package/meta.ts CHANGED
@@ -223,17 +223,17 @@ async function generateUtilityMeta(utilityFile: string): Promise<UtilityMeta | n
223
223
 
224
224
  const utility = fileName;
225
225
 
226
- const comment = content.match(/\/\*\*[\s\S]+?\*\//);
226
+ const comment = content.match(/\/\*\*\s*\n([^*]|(\*(?!\/)))*\*\//g)?.map(jsDocParse);
227
227
 
228
228
  if (!comment?.[0]) {
229
229
  // console.info(`No JSDoc found for hook ${utility} for ${hooksDir}/${utility}.tsx`);
230
230
  return null;
231
231
  }
232
232
 
233
- const utilityDoc = jsDocParse(comment[0]);
233
+ const utilityDoc = comment.find((doc) => doc.example);
234
234
 
235
- if (!utilityDoc.example) {
236
- // console.info(`No example found for hook ${utility} for ${hooksDir}/${utility}.tsx`);
235
+ if (!utilityDoc?.example) {
236
+ // console.info(`No example found for hook ${utility} for ${hooksDir}/${utility}.tsx`, comment[0]);
237
237
  return null;
238
238
  }
239
239
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bspk/ui",
3
- "version": "1.3.4",
3
+ "version": "1.3.5",
4
4
  "license": "CC-BY-4.0",
5
5
  "type": "module",
6
6
  "files": [
@@ -125,8 +125,6 @@
125
125
  "./ListItem/*": "./dist/components/ListItem/*.js",
126
126
  "./Menu": "./dist/components/Menu/index.js",
127
127
  "./Menu/*": "./dist/components/Menu/*.js",
128
- "./MenuButton": "./dist/components/MenuButton/index.js",
129
- "./MenuButton/*": "./dist/components/MenuButton/*.js",
130
128
  "./Modal": "./dist/components/Modal/index.js",
131
129
  "./Modal/*": "./dist/components/Modal/*.js",
132
130
  "./OTPInput": "./dist/components/OTPInput/index.js",
@@ -63,7 +63,7 @@ export type AvatarProps = CommonProps<'disabled'> & {
63
63
  * When provided the image will be displayed instead of the icon or initials.
64
64
  *
65
65
  * @example
66
- * /profile.jpg
66
+ * /avatar-01.png
67
67
  */
68
68
  image?: string;
69
69
  /**
@@ -92,7 +92,7 @@ export type AvatarProps = CommonProps<'disabled'> & {
92
92
  * <Avatar
93
93
  * color="blue"
94
94
  * icon={<SvgPerson />}
95
- * image="/profile.jpg"
95
+ * image="/avatar-01.png"
96
96
  * initials="AR"
97
97
  * name="Andre Giant"
98
98
  * showTooltip
@@ -112,14 +112,14 @@ export function Avatar({
112
112
  size = 'small',
113
113
  showIcon,
114
114
  image,
115
- name: ariaLabel,
115
+ name,
116
116
  hideTooltip = false,
117
117
  onClick,
118
118
  disabled,
119
119
  ...props
120
120
  }: AvatarProps) {
121
121
  const children = useMemo(() => {
122
- if (image) return <img alt={ariaLabel} aria-hidden={true} src={image} />;
122
+ if (image) return <img alt={name} aria-hidden={true} src={image} />;
123
123
 
124
124
  if (showIcon)
125
125
  return (
@@ -130,8 +130,8 @@ export function Avatar({
130
130
 
131
131
  let initials = initialsProp;
132
132
 
133
- if (ariaLabel && !initials)
134
- initials = ariaLabel
133
+ if (name && !initials)
134
+ initials = name
135
135
  .split(' ')
136
136
  .map((word) => word.charAt(0))
137
137
  .slice(0, 2)
@@ -146,7 +146,7 @@ export function Avatar({
146
146
  );
147
147
 
148
148
  return null;
149
- }, [ariaLabel, showIcon, image, initialsProp]);
149
+ }, [name, showIcon, image, initialsProp]);
150
150
 
151
151
  if (!children) return null;
152
152
 
@@ -155,21 +155,20 @@ export function Avatar({
155
155
  {...props}
156
156
  {...triggerProps}
157
157
  aria-disabled={disabled || undefined}
158
- aria-label={onClick ? ariaLabel : undefined}
159
- aria-labelledby={onClick ? triggerProps['aria-labelledby'] : undefined}
158
+ aria-label={name}
160
159
  aria-roledescription="person"
161
160
  data-bspk="avatar"
162
161
  data-color={color}
163
162
  data-size={size}
164
163
  onClickCapture={disabled ? undefined : onClick}
165
- role={onClick ? 'button' : ''}
164
+ role={onClick ? 'button' : 'img'}
166
165
  tabIndex={onClick && !disabled ? 0 : undefined}
167
166
  >
168
167
  {children}
169
168
  </div>
170
169
  );
171
170
 
172
- return !hideTooltip ? <Tooltip label={ariaLabel}>{avatar}</Tooltip> : avatar({});
171
+ return !hideTooltip ? <Tooltip label={name}>{avatar}</Tooltip> : avatar({});
173
172
  }
174
173
 
175
174
  /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -41,7 +41,7 @@ export const presets: Preset<AvatarProps>[] = [
41
41
  label: 'With Image',
42
42
  propState: {
43
43
  name: 'Andre Giant',
44
- image: '/profile.jpg',
44
+ image: '/avatar-01.png',
45
45
  showIcon: false,
46
46
  },
47
47
  },
@@ -1,9 +1,13 @@
1
1
  [data-bspk='avatar'] {
2
+ /*!
3
+ --avatar-border: is set via inline style
4
+ */
5
+
2
6
  --height: var(--spacing-sizing-10);
3
7
  --font: var(--labels-base);
4
8
  --svg-size: var(--spacing-sizing-10);
5
9
 
6
- border: unset;
10
+ border: var(--avatar-border);
7
11
 
8
12
  &:not([data-color]) {
9
13
  --foreground: var(--foreground-neutral-on-surface);
@@ -128,6 +132,7 @@
128
132
 
129
133
  &:focus:not(:active) {
130
134
  outline: 2px solid var(--stroke-neutral-focus);
135
+ outline-offset: -2px;
131
136
  }
132
137
  }
133
138
 
@@ -1,15 +1,17 @@
1
1
  import './avatar-group.scss';
2
+ import { AvatarGroupOverflow } from './Overflow';
2
3
  import { Avatar, AvatarProps, SizeVariant } from '-/components/Avatar';
4
+ import { CommonProps } from '-/types/common';
3
5
 
4
6
  export type AvatarItem = Pick<AvatarProps, 'color' | 'image' | 'initials' | 'name' | 'showIcon'>;
5
7
 
6
- export type AvatarGroupProps = {
8
+ export type AvatarGroupProps = CommonProps<'style'> & {
7
9
  /**
8
10
  * The avatars to display in the group.
9
11
  *
10
12
  * @example
11
13
  * [
12
- * { name: 'Fezzik', image: '/profile.jpg' },
14
+ * { name: 'Fezzik', image: '/avatar-01.png' },
13
15
  * { name: 'Inigo Montoya', initials: 'IM', color: 'blue' },
14
16
  * { name: 'Miracle Max', initials: 'MM', color: 'green' },
15
17
  * { name: 'Princess Buttercup', showIcon: true },
@@ -24,19 +26,23 @@ export type AvatarGroupProps = {
24
26
  *
25
27
  * @default small
26
28
  */
27
- size?: Extract<SizeVariant, 'large' | 'medium' | 'small' | 'x-small'>;
29
+ size?: SizeVariant;
28
30
  /**
29
- * The maximum number of avatars to display before showing the overflowCount.
31
+ * The maximum number of avatars to display before showing the overflow menu.
30
32
  *
31
33
  * This is used to limit the number of avatars displayed in the group.
32
34
  *
33
35
  * Recommended to set this to a value between 3 and 5 for optimal display.
36
+ *
37
+ * @default 5
38
+ * @min 1
39
+ * @max 5
34
40
  */
35
41
  max?: number;
36
42
  /**
37
43
  * The variant of the avatar group.
38
44
  *
39
- * @default spread
45
+ * @default auto
40
46
  */
41
47
  variant?: 'spread' | 'stacked';
42
48
  };
@@ -62,28 +68,18 @@ export type AvatarGroupProps = {
62
68
  * @name AvatarGroup
63
69
  * @phase UXReview
64
70
  */
65
- export function AvatarGroup({ items, size = 'small', max = 5, variant }: AvatarGroupProps) {
66
- if (!Array.isArray(items) || !items?.length) return null;
67
-
68
- const overFlowCount = items.length - max;
69
- const small = size === 'x-small' || size === 'small';
71
+ export function AvatarGroup({ items, size = 'small', max: maxProp = 5, variant = 'spread', style }: AvatarGroupProps) {
72
+ const max = maxProp > items.length ? items.length : maxProp;
73
+ const overflowItems = items.slice(max);
70
74
 
71
- return (
72
- <div data-bspk="avatar-group" data-max={max} data-size={size} data-variant={variant}>
73
- <div data-gap={variant === 'spread' ? (small ? '01' : '02') : undefined} data-wrap>
75
+ return !Array.isArray(items) || !items?.length ? null : (
76
+ <div data-bspk="avatar-group" data-max={max} data-size={size} data-variant={variant} style={style}>
77
+ <div data-wrap>
74
78
  {items.slice(0, max).map((item, index) => (
75
- <Avatar
76
- data-stacked={variant === 'stacked' ? (small ? '01' : '02') : undefined}
77
- key={index}
78
- {...item}
79
- size={size}
80
- />
79
+ <Avatar key={index} {...item} onClick={() => {}} size={size} />
81
80
  ))}
82
-
83
- {overFlowCount > 0 && (
84
- <div aria-hidden data-bspk="avatar" data-color="white" data-size={size}>
85
- <span data-overflow-count>+{overFlowCount}</span>
86
- </div>
81
+ {overflowItems.length > 0 && (
82
+ <AvatarGroupOverflow items={overflowItems} overflow={overflowItems.length} size={size} />
87
83
  )}
88
84
  </div>
89
85
  </div>
@@ -4,7 +4,6 @@ import { ComponentExample, Preset } from '-/utils/demo';
4
4
 
5
5
  const BLUE = COLOR_VARIANTS[4];
6
6
  const GREEN = COLOR_VARIANTS[5];
7
- const GREY = COLOR_VARIANTS[0];
8
7
  const PURPLE = COLOR_VARIANTS[10];
9
8
 
10
9
  export const presets: Preset<AvatarGroupProps>[] = [
@@ -12,30 +11,57 @@ export const presets: Preset<AvatarGroupProps>[] = [
12
11
  label: 'Stacked',
13
12
  propState: {
14
13
  items: [
15
- { name: 'Fezzik', image: '/profile.jpg' },
14
+ { name: 'Fezzik', image: '/avatar-01.png' },
16
15
  { name: 'Inigo Montoya', initials: 'IM', color: BLUE },
17
16
  { name: 'Miracle Max', initials: 'MM', showIcon: false, color: GREEN },
18
17
  { name: 'Princess Buttercup', showIcon: true, color: PURPLE },
19
18
  ],
20
19
  variant: 'stacked' as AvatarGroupProps['variant'],
20
+ max: 10,
21
21
  },
22
22
  },
23
23
  {
24
- label: 'Stacked + Overflow',
24
+ label: 'Stacked With Overflow',
25
25
  propState: {
26
26
  items: [
27
- { name: 'Fezzik', image: '/profile.jpg' },
28
- { name: 'Inigo Montoya', initials: 'IM', color: BLUE },
29
- { name: 'Miracle Max', initials: 'MM', showIcon: false, color: GREEN },
30
- { name: 'Westley Man In Black', initials: 'WB', color: GREY },
31
- { name: 'Princess Buttercup', showIcon: true, color: PURPLE },
27
+ {
28
+ name: 'Alice Johnson',
29
+ image: '/avatar-01.png',
30
+ },
31
+ {
32
+ name: 'Bob Smith',
33
+ image: '/avatar-02.png',
34
+ },
35
+ {
36
+ name: 'Charlie Brown',
37
+ image: '/avatar-03.png',
38
+ },
39
+ {
40
+ name: 'David Wilson',
41
+ image: '/avatar-04.png',
42
+ },
43
+ {
44
+ name: 'Eva Green',
45
+ image: '/avatar-05.png',
46
+ },
47
+ { name: 'Frank Miller', image: '/avatar-06.png' },
48
+ { name: 'Grace Lee', image: '/avatar-07.png' },
49
+ { name: 'Hannah Kim', image: '/avatar-08.png' },
50
+ { name: 'Ian Clark', image: '/avatar-09.png' },
51
+ { name: 'Julia Adams', image: '/avatar-10.png' },
52
+ { name: 'Katherine Johnson', image: '/avatar-11.png' },
32
53
  ],
33
- max: 3,
34
54
  variant: 'stacked' as AvatarGroupProps['variant'],
55
+ max: 5,
35
56
  },
36
57
  },
37
58
  ];
38
59
 
39
60
  export const AvatarGroupExample: ComponentExample<AvatarGroupProps> = {
40
61
  presets,
62
+ defaultState: {
63
+ variant: 'spread',
64
+ },
65
+ render: ({ props, Component, preset }) => <Component key={preset?.label} {...props} />,
66
+ variants: false,
41
67
  };
@@ -0,0 +1,91 @@
1
+ import { Avatar, AvatarProps, SizeVariant } from '-/components/Avatar';
2
+ import { ListItem } from '-/components/ListItem';
3
+ import { Menu } from '-/components/Menu';
4
+ import { Portal } from '-/components/Portal';
5
+ import { useArrowNavigation } from '-/hooks/useArrowNavigation';
6
+ import { useFloating } from '-/hooks/useFloating';
7
+ import { useOutsideClick } from '-/hooks/useOutsideClick';
8
+ import { handleKeyDown } from '-/utils/handleKeyDown';
9
+ import { scrollListItemsStyle } from '-/utils/scrollListItemsStyle';
10
+ import { useIds } from '-/utils/useIds';
11
+
12
+ type AvatarGroupOverflowProps = {
13
+ /** The number of overflow avatars */
14
+ overflow: number;
15
+ /** The size of the avatar group */
16
+ size: SizeVariant;
17
+ /** The avatars in the overflow */
18
+ items: AvatarProps[];
19
+ };
20
+
21
+ export function AvatarGroupOverflow({ items: itemsProp, overflow, size }: AvatarGroupOverflowProps) {
22
+ const items = useIds(`avatar-overflow`, itemsProp);
23
+ const menuId = `avatar-overflow-menu-${items[0]?.id}`;
24
+
25
+ const { activeElementId, setActiveElementId, arrowKeyCallbacks } = useArrowNavigation({
26
+ ids: items.map((i) => i.id),
27
+ });
28
+
29
+ const closeMenu = () => setActiveElementId(null);
30
+ const open = Boolean(activeElementId);
31
+
32
+ const { elements, floatingStyles } = useFloating({
33
+ hide: !open,
34
+ offsetOptions: 4,
35
+ refWidth: false,
36
+ });
37
+
38
+ useOutsideClick({
39
+ elements: [elements.floating, elements.reference],
40
+ callback: () => closeMenu(),
41
+ disabled: !open,
42
+ });
43
+
44
+ return (
45
+ <>
46
+ <button
47
+ aria-activedescendant={activeElementId || undefined}
48
+ aria-controls={open ? menuId : undefined}
49
+ aria-expanded={open}
50
+ aria-haspopup="menu"
51
+ aria-hidden
52
+ aria-label={`Show ${overflow} more avatar${overflow > 1 ? 's' : ''}`}
53
+ data-bspk="avatar"
54
+ data-bspk-owner="avatar-overflow"
55
+ data-size={size}
56
+ onBlur={() => closeMenu()}
57
+ onClick={() => setActiveElementId(activeElementId === null ? items[0]?.id : null)}
58
+ onKeyDown={handleKeyDown(arrowKeyCallbacks)}
59
+ ref={elements.setReference}
60
+ role="combobox"
61
+ >
62
+ <span data-overflow-count>+{overflow}</span>
63
+ </button>
64
+ {open && (
65
+ <Portal>
66
+ <Menu
67
+ id={menuId}
68
+ innerRef={elements.setFloating}
69
+ role="menu"
70
+ style={{
71
+ ...floatingStyles,
72
+ ...scrollListItemsStyle(5, items.length),
73
+ '--list-item-height': `var(--spacing-sizing-12)`,
74
+ paddingRight: 'var(--spacing-sizing-04)',
75
+ }}
76
+ width="fit-content"
77
+ >
78
+ {items.map((item, index) => (
79
+ <ListItem
80
+ active={activeElementId === item.id}
81
+ key={index}
82
+ label={item.name}
83
+ leading={<Avatar {...item} hideTooltip size="small" />}
84
+ />
85
+ ))}
86
+ </Menu>
87
+ </Portal>
88
+ )}
89
+ </>
90
+ );
91
+ }
@@ -1,28 +1,48 @@
1
1
  [data-bspk='avatar-group'] {
2
- width: 100%;
2
+ width: fit-content;
3
+ max-width: 100%;
4
+ display: flex;
5
+ flex-direction: row;
6
+ align-items: center;
7
+ justify-content: center;
3
8
 
4
9
  [data-wrap] {
5
- width: 100%;
10
+ min-width: fit-content;
6
11
  display: flex;
7
12
  flex-direction: row;
8
- align-items: end;
9
- justify-content: end;
10
- overflow: hidden;
13
+ align-items: center;
14
+ justify-content: center;
11
15
  }
12
16
 
13
- [data-gap='01'] {
14
- gap: var(--spacing-sizing-01);
15
- }
17
+ // data-gap={variant === 'spread' ? (small ? '01' : '02') : undefined}
18
+
19
+ [data-bspk='avatar'] {
20
+ z-index: 1;
21
+
22
+ &:hover {
23
+ z-index: 2;
24
+ }
16
25
 
17
- [data-gap='02'] {
18
- gap: var(--spacing-sizing-02);
26
+ &[data-bspk-owner='avatar-overflow'] {
27
+ --avatar-border: solid 1px var(--stroke-neutral-low);
28
+
29
+ background-color: var(--surface-neutral-t1-base);
30
+ }
19
31
  }
20
32
 
21
- [data-stacked='02']:not(:last-child) {
22
- margin-right: -8px;
33
+ &[data-variant='spread'] {
34
+ --avatar-border: none;
35
+
36
+ [data-bspk='avatar'] + [data-bspk='avatar'] {
37
+ margin-left: var(--spacing-sizing-02);
38
+ }
23
39
  }
24
40
 
25
- [data-stacked='01']:not(:last-child) {
26
- margin-right: -4px;
41
+ &[data-variant='stacked'] {
42
+ --avatar-border: solid 1px var(--stroke-neutral-low);
43
+
44
+ [data-bspk='avatar'] + [data-bspk='avatar'] {
45
+ margin-left: calc(var(--spacing-sizing-02) * -1);
46
+ }
27
47
  }
28
48
  }
@@ -6,7 +6,7 @@ export const BadgeExample: ComponentExample<BadgeProps> = {
6
6
  render: ({ props, Component }) => {
7
7
  return (
8
8
  <Component {...props}>
9
- <Avatar image="/profile.jpg" name="Andre Giant" />
9
+ <Avatar image="/avatar-01.png" name="Andre Giant" />
10
10
  </Component>
11
11
  );
12
12
  },
@@ -13,7 +13,7 @@ export const BadgeDotExample: ComponentExample<BadgeDotProps> = {
13
13
  {props.outline === true ? (
14
14
  <Button label="Button" size="large" />
15
15
  ) : (
16
- <Avatar image="/profile.jpg" name="Andre Giant" />
16
+ <Avatar image="/avatar-01.png" name="Andre Giant" />
17
17
  )}
18
18
  </Component>
19
19
  );
@@ -5,7 +5,7 @@ import { ButtonSize, CommonProps, ElementProps, SetRef } from '-/types/common';
5
5
 
6
6
  export type ButtonVariant = 'primary' | 'secondary' | 'tertiary';
7
7
 
8
- export type ButtonProps<As extends ElementType = 'button'> = CommonProps<'disabled' | 'owner'> & {
8
+ export type ButtonProps<As extends ElementType = ElementType> = CommonProps<'disabled' | 'owner'> & {
9
9
  /**
10
10
  * The label of the button.
11
11
  *
@@ -98,7 +98,7 @@ export type ButtonProps<As extends ElementType = 'button'> = CommonProps<'disabl
98
98
  * @name Button
99
99
  * @phase UXReview
100
100
  */
101
- export function Button<As extends ElementType = 'button'>(
101
+ export function Button<As extends ElementType = ElementType>(
102
102
  props: AriaAttributes & ElementProps<ButtonProps<As>, As>,
103
103
  ): JSX.Element {
104
104
  const {
@@ -1,5 +1,6 @@
1
1
  import './card.scss';
2
2
  import { ReactNode } from 'react';
3
+ import { ElementProps } from '-/types/common';
3
4
 
4
5
  export type CardProps = {
5
6
  /**
@@ -38,9 +39,9 @@ export type CardProps = {
38
39
  * @name Card
39
40
  * @phase UXReview
40
41
  */
41
- export function Card({ children, variant = 'elevated' }: CardProps) {
42
+ export function Card({ children, variant = 'elevated', ...props }: ElementProps<CardProps, 'div'>) {
42
43
  return (
43
- <div data-bspk="card" data-variant={variant}>
44
+ <div {...props} data-bspk="card" data-variant={variant}>
44
45
  {children}
45
46
  </div>
46
47
  );
@@ -41,7 +41,7 @@ export type CheckboxGroupProps = FieldControlProps<string[]> & {
41
41
  * import { CheckboxGroup } from '@bspk/ui/CheckboxGroup';
42
42
  *
43
43
  * function Example() {
44
- * const [values, setValues] = React.useState<string[]>([]);
44
+ * const [value, setValue] = React.useState<string[]>([]);
45
45
  *
46
46
  * return (
47
47
  * <CheckboxGroup
@@ -52,9 +52,9 @@ export type CheckboxGroupProps = FieldControlProps<string[]> & {
52
52
  * { label: 'Option 2', value: 'option2' },
53
53
  * { label: 'Option 3', value: 'option3' },
54
54
  * ]}
55
- * values={values}
56
- * onChange={(nextValues: string[]) => {
57
- * setValues(nextValues);
55
+ * value={value}
56
+ * onChange={(nextValue: string[]) => {
57
+ * setValue(nextValue);
58
58
  * }}
59
59
  * />
60
60
  * );
@@ -19,11 +19,12 @@ export function CheckboxGroupField({
19
19
  helperText,
20
20
  labelTrailing,
21
21
  errorMessage,
22
+ style,
22
23
  ...controlProps
23
24
  }: CheckboxGroupFieldProps) {
24
25
  return (
25
- <Field as="fieldset">
26
- <FieldLabel as="legend" labelTrailing={labelTrailing}>
26
+ <Field as="fieldset" style={style}>
27
+ <FieldLabel as="legend" labelTrailing={labelTrailing} style={style}>
27
28
  {label}
28
29
  </FieldLabel>
29
30
  <CheckboxGroup {...controlProps} />