playbook_ui 15.5.0.pre.alpha.play250612607 → 15.5.0.pre.alpha.play265012819
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_background/_background.tsx +6 -6
- data/app/pb_kits/playbook/pb_background/background.test.js +5 -1
- data/app/pb_kits/playbook/pb_background/docs/_background_light.html.erb +1 -1
- data/app/pb_kits/playbook/pb_background/docs/_background_light.jsx +0 -1
- data/app/pb_kits/playbook/pb_background/docs/_background_light.md +1 -0
- data/app/pb_kits/playbook/pb_background/docs/example.yml +2 -2
- data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx +6 -0
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.html.erb +31 -0
- data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +34 -22
- data/app/pb_kits/playbook/pb_home_address_street/city_emphasis.html.erb +16 -12
- data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.html.erb +1 -1
- data/app/pb_kits/playbook/pb_home_address_street/none_emphasis.html.erb +16 -12
- data/app/pb_kits/playbook/pb_home_address_street/street_emphasis.html.erb +16 -12
- data/app/pb_kits/playbook/pb_legend/_legend.tsx +6 -1
- data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +10 -0
- data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.tsx +66 -15
- data/app/pb_kits/playbook/pb_multiple_users/docs/_multiple_users_with_tooltip.jsx +42 -0
- data/app/pb_kits/playbook/pb_multiple_users/docs/_multiple_users_with_tooltip.md +1 -0
- data/app/pb_kits/playbook/pb_multiple_users/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_multiple_users/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_multiple_users/multiple_users.test.js +25 -0
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +44 -10
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_validation.html.erb +34 -4
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_validation.jsx +16 -7
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +15 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -0
- data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.tsx +13 -2
- data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +6 -1
- data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +34 -7
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_input_display.html.erb +30 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_input_display.jsx +37 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_input_display.md +3 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +6 -1
- data/app/pb_kits/playbook/utilities/DEPRECATION_WARNINGS.md +82 -0
- data/app/pb_kits/playbook/utilities/deprecated.ts +50 -0
- data/dist/chunks/_typeahead-CLnLoImA.js +6 -0
- data/dist/chunks/vendor.js +2 -2
- data/dist/menu.yml +3 -2
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +11 -3
- data/dist/chunks/_typeahead-DUmTKJUc.js +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7274f6a2b091dc7d9718a017466fe6391fc6cee3d00e061ed60950ce7317c27d
|
|
4
|
+
data.tar.gz: 36a7d0eaf4c6b1664edd536706c51da8a45b0f5bd9697410e1641453518f5a60
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 225961e5b905c1feba56f35f1ae44f735c732483bce2cbd485bcaefa42dedef92ade6478d185b12e683e61cc1ebe202406a9377416fa14b28a2ce11826719b17
|
|
7
|
+
data.tar.gz: 496f6a11b737c6c24c11c126eba020684b63ca078deecc3f8c8b99339ebb73677c137679b0630ab9abae1198edead577e3b77ce2929a9236e0b621cea79b7e8e
|
|
@@ -102,16 +102,16 @@ const Background = (props: BackgroundProps): React.ReactElement => {
|
|
|
102
102
|
useEffect(() => {
|
|
103
103
|
const updateResponsiveProps = () => {
|
|
104
104
|
setResponsiveProps({
|
|
105
|
-
backgroundSize: getResponsiveValue(
|
|
106
|
-
backgroundPosition: getResponsiveValue(
|
|
107
|
-
backgroundRepeat: getResponsiveValue(
|
|
108
|
-
backgroundColor: getResponsiveValue(
|
|
109
|
-
imageUrl: getResponsiveValue(
|
|
105
|
+
backgroundSize: getResponsiveValue(backgroundSize),
|
|
106
|
+
backgroundPosition: getResponsiveValue(backgroundPosition),
|
|
107
|
+
backgroundRepeat: getResponsiveValue(backgroundRepeat),
|
|
108
|
+
backgroundColor: getResponsiveValue(backgroundColor),
|
|
109
|
+
imageUrl: getResponsiveValue(imageUrl),
|
|
110
110
|
});
|
|
111
111
|
};
|
|
112
112
|
window.addEventListener('resize', updateResponsiveProps);
|
|
113
113
|
return () => window.removeEventListener('resize', updateResponsiveProps);
|
|
114
|
-
}, [
|
|
114
|
+
}, [backgroundSize, backgroundPosition, backgroundRepeat, backgroundColor, imageUrl]);
|
|
115
115
|
|
|
116
116
|
|
|
117
117
|
// Extract currently applicable responsive values.
|
|
@@ -4,7 +4,6 @@ import Background from './_background'
|
|
|
4
4
|
|
|
5
5
|
const props = {
|
|
6
6
|
data: { testid: 'background' },
|
|
7
|
-
backgroundColor: null,
|
|
8
7
|
}
|
|
9
8
|
|
|
10
9
|
it('Should be accessible', async () => {
|
|
@@ -42,3 +41,8 @@ test('applies correct overlay class when imageOverlay prop is provided', () => {
|
|
|
42
41
|
const kit = renderKit(Background, props, { imageOverlay: 'opacity_6' });
|
|
43
42
|
expect(kit).toHaveClass('imageoverlay_opacity_6');
|
|
44
43
|
});
|
|
44
|
+
|
|
45
|
+
test('Sets backgroundColor to light as default when no backgroundColor prop is provided', () => {
|
|
46
|
+
const kit = renderKit(Background, props);
|
|
47
|
+
expect(kit).toHaveClass('pb_background_color_light');
|
|
48
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
By default, the Background kit sets background color to 'light' as seen here.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
examples:
|
|
2
2
|
|
|
3
3
|
rails:
|
|
4
|
-
- background_light:
|
|
4
|
+
- background_light: Default
|
|
5
5
|
- background_white: White
|
|
6
6
|
- background_gradient: Gradient
|
|
7
7
|
- background_image: Image
|
|
@@ -11,7 +11,7 @@ examples:
|
|
|
11
11
|
- background_size: Size
|
|
12
12
|
|
|
13
13
|
react:
|
|
14
|
-
- background_light:
|
|
14
|
+
- background_light: Default
|
|
15
15
|
- background_white: White
|
|
16
16
|
- background_gradient: Gradient
|
|
17
17
|
- background_image: Image
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useState, useEffect } from "react";
|
|
2
2
|
import { globalProps } from "../utilities/globalProps";
|
|
3
3
|
import { buildAriaProps, buildDataProps, buildHtmlProps } from "../utilities/props";
|
|
4
|
+
import { deprecatedKitWarning } from "../utilities/deprecated";
|
|
4
5
|
|
|
5
6
|
import HighchartsReact from "highcharts-react-official";
|
|
6
7
|
import Highcharts from "highcharts";
|
|
@@ -168,6 +169,11 @@ if (Array.isArray(axisTitle) && axisTitle.length > 1 && axisTitle[1].name) {
|
|
|
168
169
|
|
|
169
170
|
const [options, setOptions] = useState({});
|
|
170
171
|
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
// Warn about deprecated kit (only once per page load, dev mode only)
|
|
174
|
+
deprecatedKitWarning('BarGraph', '[Playbook] The "BarGraph" kit is deprecated. Please use "PbBarGraph" instead.');
|
|
175
|
+
}, []);
|
|
176
|
+
|
|
171
177
|
useEffect(() => {
|
|
172
178
|
setOptions(merge(staticOptions, customOptions));
|
|
173
179
|
}, [chartData]);
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
<%
|
|
2
|
+
options = [
|
|
3
|
+
{
|
|
4
|
+
label: "United States",
|
|
5
|
+
value: "unitedStates",
|
|
6
|
+
id: "us"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
label: "United Kingdom",
|
|
10
|
+
value: "unitedKingdom",
|
|
11
|
+
id: "gb"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
label: "Pakistan",
|
|
15
|
+
value: "pakistan",
|
|
16
|
+
id: "pk"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
%>
|
|
20
|
+
|
|
21
|
+
|
|
1
22
|
<%= pb_rails("button", props: { text: "Open Complex Dialog", data:{"open-dialog": "dialog-complex"} }) %>
|
|
2
23
|
|
|
3
24
|
<%= pb_rails("dialog", props: { id:"dialog-complex", size: "lg", full_height: true }) do %>
|
|
@@ -10,6 +31,16 @@
|
|
|
10
31
|
<%= pb_rails("rich_text_editor", props: {id: "default", value: "Add your text here"}) %>
|
|
11
32
|
<%= pb_rails("caption", props: { text: "Type in a word or term too help find tickets later. ex. training, phone setup, hr", margin_bottom: "xs", margin_top: "sm" }) %>
|
|
12
33
|
<%= pb_rails("typeahead", props: { placeholder: "Tags.."}) %>
|
|
34
|
+
<%= pb_rails("dropdown", props: {options: options, autocomplete: true}) %>
|
|
35
|
+
<%= pb_rails("typeahead", props: {
|
|
36
|
+
id: "typeahead-default",
|
|
37
|
+
placeholder: "Select one...",
|
|
38
|
+
options: options,
|
|
39
|
+
name: :foo,
|
|
40
|
+
margin_top: "sm",
|
|
41
|
+
is_multi: false
|
|
42
|
+
})
|
|
43
|
+
%>
|
|
13
44
|
|
|
14
45
|
<% end %>
|
|
15
46
|
<%= pb_rails("dialog/dialog_footer", props: {cancel_button: "Back", confirm_button: "Send my Issue", confirm_button_id:"confirm-complex", id: "dialog-complex"}) %>
|
|
@@ -96,20 +96,24 @@ const HomeAddressStreet = (props: HomeAddressStreetProps): React.ReactElement =>
|
|
|
96
96
|
{hasAllEmptyProps && '—'}
|
|
97
97
|
{emphasis == 'street' && !hasAllEmptyProps &&
|
|
98
98
|
<div>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
99
|
+
{(address || houseStyle) && (
|
|
100
|
+
<Title
|
|
101
|
+
className="pb_home_address_street_address"
|
|
102
|
+
dark={dark}
|
|
103
|
+
size={4}
|
|
104
|
+
>
|
|
105
|
+
{joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
|
|
106
|
+
</Title>
|
|
107
|
+
)}
|
|
108
|
+
{addressCont && (
|
|
109
|
+
<Title
|
|
110
|
+
className="pb_home_address_street_address"
|
|
111
|
+
dark={dark}
|
|
112
|
+
size={4}
|
|
113
|
+
>
|
|
114
|
+
{titleize(addressCont)}
|
|
115
|
+
</Title>
|
|
116
|
+
)}
|
|
113
117
|
<Body color="light">
|
|
114
118
|
{`${city ? `${titleize(city)}, ` : ''}${uppercaseState}${zipcode ? ` ${zipcode}` : ''}`}
|
|
115
119
|
</Body>
|
|
@@ -117,10 +121,14 @@ const HomeAddressStreet = (props: HomeAddressStreetProps): React.ReactElement =>
|
|
|
117
121
|
}
|
|
118
122
|
{emphasis == 'city' && !hasAllEmptyProps &&
|
|
119
123
|
<div>
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
{(address || houseStyle) && (
|
|
125
|
+
<Body color="light">
|
|
126
|
+
{joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
|
|
127
|
+
</Body>
|
|
128
|
+
)}
|
|
129
|
+
{addressCont && (
|
|
130
|
+
<Body color="light">{titleize(addressCont)}</Body>
|
|
131
|
+
)}
|
|
124
132
|
<div>
|
|
125
133
|
<Title
|
|
126
134
|
className="pb_home_address_street_address"
|
|
@@ -141,10 +149,14 @@ const HomeAddressStreet = (props: HomeAddressStreetProps): React.ReactElement =>
|
|
|
141
149
|
}
|
|
142
150
|
{emphasis == 'none' && !hasAllEmptyProps &&
|
|
143
151
|
<div>
|
|
144
|
-
|
|
145
|
-
{
|
|
146
|
-
|
|
147
|
-
|
|
152
|
+
{(address || houseStyle) && (
|
|
153
|
+
<Body dark={dark}>
|
|
154
|
+
{joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
|
|
155
|
+
</Body>
|
|
156
|
+
)}
|
|
157
|
+
{addressCont && (
|
|
158
|
+
<Body dark={dark}>{formatStreetAdr(addressCont)}</Body>
|
|
159
|
+
)}
|
|
148
160
|
<div>
|
|
149
161
|
<Body
|
|
150
162
|
color="light"
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
<% if object.address_house_style.present? %>
|
|
2
|
+
<%= pb_rails "body", props: {
|
|
3
|
+
classname: "pb_home_address_street_address",
|
|
4
|
+
color: "light",
|
|
5
|
+
text: object.address_house_style,
|
|
6
|
+
dark: object.dark
|
|
7
|
+
} %>
|
|
8
|
+
<% end %>
|
|
9
|
+
<% if object.address_house_style2.present? %>
|
|
10
|
+
<%= pb_rails "body", props: {
|
|
11
|
+
classname: "pb_home_address_street_address",
|
|
12
|
+
color: "light",
|
|
13
|
+
text: object.address_house_style2,
|
|
14
|
+
dark: object.dark
|
|
15
|
+
} %>
|
|
16
|
+
<% end %>
|
|
13
17
|
<div>
|
|
14
18
|
<%= pb_rails "title", props: {
|
|
15
19
|
tag: "span",
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
<% if object.address_house_style.present? %>
|
|
2
|
+
<%= pb_rails "body", props: {
|
|
3
|
+
classname: "pb_home_address_street_address",
|
|
4
|
+
size: 4,
|
|
5
|
+
text: object.address_house_style,
|
|
6
|
+
dark: object.dark
|
|
7
|
+
} %>
|
|
8
|
+
<% end %>
|
|
9
|
+
<% if object.address_house_style2.present? %>
|
|
10
|
+
<%= pb_rails "body", props: {
|
|
11
|
+
classname: "pb_home_address_street_address",
|
|
12
|
+
size: 4,
|
|
13
|
+
text: object.address_house_style2,
|
|
14
|
+
dark: object.dark
|
|
15
|
+
} %>
|
|
16
|
+
<% end %>
|
|
13
17
|
<%= pb_rails "body", props: {
|
|
14
18
|
color: "light",
|
|
15
19
|
text: object.city_state_zip,
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
<% if object.address_house_style.present? %>
|
|
2
|
+
<%= pb_rails "title", props: {
|
|
3
|
+
classname: "pb_home_address_street_address",
|
|
4
|
+
size: 4,
|
|
5
|
+
text: object.address_house_style,
|
|
6
|
+
dark: object.dark
|
|
7
|
+
} %>
|
|
8
|
+
<% end %>
|
|
9
|
+
<% if object.address_house_style2.present? %>
|
|
10
|
+
<%= pb_rails "title", props: {
|
|
11
|
+
classname: "pb_home_address_street_address",
|
|
12
|
+
size: 4,
|
|
13
|
+
text: object.address_house_style2,
|
|
14
|
+
dark: object.dark
|
|
15
|
+
} %>
|
|
16
|
+
<% end %>
|
|
13
17
|
<%= pb_rails "body", props: {
|
|
14
18
|
color: "light",
|
|
15
19
|
text: object.city_state_zip,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { useEffect } from 'react'
|
|
2
2
|
import classnames from 'classnames'
|
|
3
3
|
|
|
4
4
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
|
5
5
|
import { globalProps } from '../utilities/globalProps'
|
|
6
|
+
import { deprecatedKitWarning } from '../utilities/deprecated'
|
|
6
7
|
|
|
7
8
|
import Body from '../pb_body/_body'
|
|
8
9
|
import Title from '../pb_title/_title'
|
|
@@ -32,6 +33,10 @@ const Legend = (props: LegendProps) => {
|
|
|
32
33
|
text,
|
|
33
34
|
} = props
|
|
34
35
|
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
deprecatedKitWarning('Legend')
|
|
38
|
+
}, [])
|
|
39
|
+
|
|
35
40
|
const ariaProps = buildAriaProps(aria)
|
|
36
41
|
const dataProps = buildDataProps(data)
|
|
37
42
|
const htmlProps = buildHtmlProps(htmlOptions)
|
|
@@ -36,6 +36,16 @@ $pb_multiple_users_size_xxs: map-get($avatar-sizes, "xxs");
|
|
|
36
36
|
height: $pb_multiple_users_size_xxs;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
|
|
40
|
+
.user_tooltip {
|
|
41
|
+
margin-left: $pb_multiple_users_overlap !important;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.user_count_tooltip {
|
|
45
|
+
margin-left: $pb_multiple_users_overlap !important;
|
|
46
|
+
position: relative;
|
|
47
|
+
}
|
|
48
|
+
|
|
39
49
|
.pb_multiple_users_item {
|
|
40
50
|
margin-left: $pb_multiple_users_overlap;
|
|
41
51
|
margin-right: 0;
|
|
@@ -5,17 +5,19 @@ import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../uti
|
|
|
5
5
|
import { globalProps } from '../utilities/globalProps'
|
|
6
6
|
|
|
7
7
|
import Avatar from '../pb_avatar/_avatar'
|
|
8
|
+
import Tooltip from '../pb_tooltip/_tooltip'
|
|
8
9
|
|
|
9
10
|
type MultipleUsersProps = {
|
|
10
11
|
aria?: { [key: string]: string },
|
|
11
12
|
className?: string,
|
|
12
13
|
dark?: boolean,
|
|
13
14
|
data?: { [key: string]: string },
|
|
14
|
-
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
|
15
|
+
htmlOptions?: { [key: string]: string | number | boolean | (() => void) },
|
|
15
16
|
id?: string,
|
|
16
17
|
maxDisplayedUsers?: number,
|
|
17
18
|
reverse?: boolean,
|
|
18
19
|
size?: "md" | "lg" | "sm" | "xl" | "xs" | "xxs",
|
|
20
|
+
withTooltip?: boolean,
|
|
19
21
|
users: Array<{ [key: string]: string }>,
|
|
20
22
|
}
|
|
21
23
|
|
|
@@ -30,6 +32,7 @@ const MultipleUsers = (props: MultipleUsersProps): React.ReactElement => {
|
|
|
30
32
|
maxDisplayedUsers = 4,
|
|
31
33
|
reverse = false,
|
|
32
34
|
size = 'xs',
|
|
35
|
+
withTooltip = false,
|
|
33
36
|
users,
|
|
34
37
|
} = props
|
|
35
38
|
|
|
@@ -62,22 +65,70 @@ const MultipleUsers = (props: MultipleUsersProps): React.ReactElement => {
|
|
|
62
65
|
className={classes}
|
|
63
66
|
id={id}
|
|
64
67
|
>
|
|
65
|
-
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
{withTooltip ?
|
|
69
|
+
<>
|
|
70
|
+
{usersToDisplay.map((avatarData, index) => (
|
|
71
|
+
<Tooltip
|
|
72
|
+
key={"user_tooltip_" + index}
|
|
73
|
+
placement='top'
|
|
74
|
+
text={avatarData.tooltip ? avatarData.tooltip : ''}
|
|
75
|
+
zIndex={10}
|
|
76
|
+
>
|
|
77
|
+
<Avatar
|
|
78
|
+
{...avatarData}
|
|
79
|
+
className={"pb_multiple_users_item" + (withTooltip ? " user_tooltip" : "")}
|
|
80
|
+
dark={dark}
|
|
81
|
+
imageAlt={avatarData.name}
|
|
82
|
+
key={index}
|
|
83
|
+
size={size}
|
|
84
|
+
/>
|
|
85
|
+
</Tooltip>
|
|
86
|
+
))}
|
|
75
87
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
88
|
+
{users.length > maxDisplayedUsers &&
|
|
89
|
+
<Tooltip
|
|
90
|
+
placement='top'
|
|
91
|
+
text={
|
|
92
|
+
<div>
|
|
93
|
+
{
|
|
94
|
+
usersToDisplay.length < users.length ?
|
|
95
|
+
users.slice(displayCount).map((u, i) => (
|
|
96
|
+
<div key={i}>{u.tooltip}</div>
|
|
97
|
+
))
|
|
98
|
+
:
|
|
99
|
+
''
|
|
100
|
+
}
|
|
101
|
+
</div>
|
|
102
|
+
}
|
|
103
|
+
zIndex={10}
|
|
104
|
+
>
|
|
105
|
+
<div className={itemClasses + (withTooltip ? " user_count_tooltip" : "")}>
|
|
106
|
+
{`+${users.length - displayCount}`}
|
|
107
|
+
</div>
|
|
108
|
+
</Tooltip>
|
|
109
|
+
}
|
|
110
|
+
</>
|
|
111
|
+
:
|
|
112
|
+
<>
|
|
113
|
+
{usersToDisplay.map((avatarData, index) => (
|
|
114
|
+
<Avatar
|
|
115
|
+
{...avatarData}
|
|
116
|
+
className="pb_multiple_users_item"
|
|
117
|
+
dark={dark}
|
|
118
|
+
imageAlt={avatarData.name}
|
|
119
|
+
key={index}
|
|
120
|
+
size={size}
|
|
121
|
+
/>
|
|
122
|
+
))}
|
|
123
|
+
|
|
124
|
+
{users.length > maxDisplayedUsers &&
|
|
125
|
+
<div className={itemClasses}>
|
|
126
|
+
{`+${users.length - 3}`}
|
|
127
|
+
</div>
|
|
128
|
+
}
|
|
129
|
+
</>
|
|
80
130
|
}
|
|
131
|
+
|
|
81
132
|
</div>
|
|
82
133
|
)
|
|
83
134
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import MultipleUsers from '../../pb_multiple_users/_multiple_users'
|
|
3
|
+
|
|
4
|
+
const MultipleUsersWithTooltip = (props) => {
|
|
5
|
+
return (
|
|
6
|
+
<div>
|
|
7
|
+
<MultipleUsers
|
|
8
|
+
users={[
|
|
9
|
+
{
|
|
10
|
+
name: 'Patrick Welch',
|
|
11
|
+
imageUrl: 'https://randomuser.me/api/portraits/men/9.jpg',
|
|
12
|
+
tooltip: "Patrick Welch - Online"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'Lucille Sanchez',
|
|
16
|
+
imageUrl: 'https://randomuser.me/api/portraits/women/6.jpg',
|
|
17
|
+
tooltip: "Lucille Sanchez - Offline"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'Beverly Reyes',
|
|
21
|
+
imageUrl: 'https://randomuser.me/api/portraits/women/74.jpg',
|
|
22
|
+
tooltip: "Beverly Reyes - Online"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'Keith Craig',
|
|
26
|
+
imageUrl: 'https://randomuser.me/api/portraits/men/40.jpg',
|
|
27
|
+
tooltip: "Keith Craig - Away"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'Alicia Cooper',
|
|
31
|
+
imageUrl: 'https://randomuser.me/api/portraits/women/46.jpg',
|
|
32
|
+
tooltip: "Alicia Cooper - Busy"
|
|
33
|
+
},
|
|
34
|
+
]}
|
|
35
|
+
withTooltip
|
|
36
|
+
{...props}
|
|
37
|
+
/>
|
|
38
|
+
</div>
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
``
|
|
42
|
+
export default MultipleUsersWithTooltip
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Use the `withTooltip` boolean prop to enable setting user-specific tooltip content via the `tooltip` property in the users array.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { default as MultipleUsersDefault } from './_multiple_users_default.jsx'
|
|
2
2
|
export { default as MultipleUsersReverse } from './_multiple_users_reverse.jsx'
|
|
3
3
|
export { default as MultipleUsersSize } from './_multiple_users_size.jsx'
|
|
4
|
+
export { default as MultipleUsersWithTooltip } from './_multiple_users_with_tooltip.jsx'
|
|
@@ -49,4 +49,29 @@ test('should render aria-label', () => {
|
|
|
49
49
|
|
|
50
50
|
const kit = screen.getByTestId(testId)
|
|
51
51
|
expect(kit).toHaveAttribute('aria-label', testId)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
test('should render withTooltip prop', () => {
|
|
55
|
+
render(
|
|
56
|
+
<MultipleUsers
|
|
57
|
+
data={{ testid: testId }}
|
|
58
|
+
users={[
|
|
59
|
+
{
|
|
60
|
+
name: 'Patrick Welch',
|
|
61
|
+
imageUrl: 'https://randomuser.me/api/portraits/men/9.jpg',
|
|
62
|
+
tooltip: "Patrick Welch - Online"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Lucille Sanchez',
|
|
66
|
+
imageUrl: 'https://randomuser.me/api/portraits/women/6.jpg',
|
|
67
|
+
tooltip: "Lucille Sanchez - Offline"
|
|
68
|
+
},
|
|
69
|
+
]}
|
|
70
|
+
withTooltip
|
|
71
|
+
/>
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
const kit = screen.getByTestId(testId)
|
|
75
|
+
const childWithTooltip = kit.querySelector('.pb_tooltip_kit')
|
|
76
|
+
expect(childWithTooltip).not.toBeNull()
|
|
52
77
|
})
|