playbook_ui 14.5.0.pre.alpha.PLAY1548intltelinputupdatelatest4073 → 14.5.0.pre.alpha.PLAY1601updatereactzoompanpinch4123
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +20 -4
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_clear_selection.jsx +45 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_clear_selection.md +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +1 -1
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +2 -2
- data/app/pb_kits/playbook/pb_filter/Filter/ResultsCount.tsx +4 -2
- data/app/pb_kits/playbook/pb_filter/docs/_filter_default.jsx +1 -1
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +17 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +93 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.md +1 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +169 -65
- data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.test.js +5 -5
- data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.tsx +15 -9
- data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_multiple_users_stacked_size.html.erb +336 -0
- data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_multiple_users_stacked_size.jsx +97 -0
- data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_multiple_users_stacked/multiple_users_stacked.html.erb +28 -6
- data/app/pb_kits/playbook/pb_multiple_users_stacked/multiple_users_stacked.rb +31 -1
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +14 -71
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +6 -15
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_preferred_countries.md +1 -1
- data/app/pb_kits/playbook/pb_phone_number_input/intlTelInput.scss +931 -849
- data/app/pb_kits/playbook/pb_phone_number_input/types.d.ts +1 -4
- data/dist/chunks/{_typeahead-CY44rh9x.js → _typeahead-C9g4qCcE.js} +1 -1
- data/dist/chunks/_weekday_stacked-DZpRml83.js +45 -0
- data/dist/chunks/vendor.js +1 -1
- data/dist/playbook-doc.js +1 -1
- 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 +10 -4
- data/dist/chunks/_weekday_stacked-NcRanohJ.js +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3eef39be443e3cd1b5d31fbf6c45383f7efbcdd3f41194ba4a977c21700bd862
|
4
|
+
data.tar.gz: 47fb682efcfea59eb34f2fcdcb3f15e52a254ee12d7c9974d18fbe2a411ca6b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80c6b66534b581c9c5bf5494928b003eeac846f2346fd9a7a394361abe00fdcfe616f8772df66edbbf8a9cb01f9bfddd6c23ac81ff19df22bd96de4fb5e71de9
|
7
|
+
data.tar.gz: 2698718348044f92ad1589b367d5c51d36a7c371f717855b9da6b4b45caab620291ffa0253c98090dd1b731709286498a6a9c274b1ced957f0d76b5b76a7f1d4
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useState, useRef, useEffect } from "react";
|
1
|
+
import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle } from "react";
|
2
2
|
import classnames from "classnames";
|
3
3
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from "../utilities/props";
|
4
4
|
import { globalProps } from "../utilities/globalProps";
|
@@ -38,7 +38,14 @@ type DropdownProps = {
|
|
38
38
|
triggerRef?: any;
|
39
39
|
};
|
40
40
|
|
41
|
-
|
41
|
+
interface DropdownComponent
|
42
|
+
extends React.ForwardRefExoticComponent<DropdownProps & React.RefAttributes<unknown>> {
|
43
|
+
Option: typeof DropdownOption;
|
44
|
+
Trigger: typeof DropdownTrigger;
|
45
|
+
Container: typeof DropdownContainer;
|
46
|
+
}
|
47
|
+
|
48
|
+
const Dropdown = forwardRef((props: DropdownProps, ref: any) => {
|
42
49
|
const {
|
43
50
|
aria = {},
|
44
51
|
autocomplete = false,
|
@@ -125,7 +132,7 @@ const Dropdown = (props: DropdownProps) => {
|
|
125
132
|
const filteredOptions = optionsWithBlankSelection?.filter((option: GenericObject) => {
|
126
133
|
const label = typeof option.label === 'string' ? option.label.toLowerCase() : option.label;
|
127
134
|
return String(label).toLowerCase().includes(filterItem.toLowerCase());
|
128
|
-
});
|
135
|
+
});
|
129
136
|
|
130
137
|
// For keyboard accessibility: Set focus within dropdown to selected item if it exists
|
131
138
|
useEffect(() => {
|
@@ -175,6 +182,14 @@ const Dropdown = (props: DropdownProps) => {
|
|
175
182
|
dark
|
176
183
|
});
|
177
184
|
|
185
|
+
useImperativeHandle(ref, () => ({
|
186
|
+
clearSelected: () => {
|
187
|
+
setSelected({});
|
188
|
+
setFilterItem("");
|
189
|
+
setIsDropDownClosed(true);
|
190
|
+
onSelect && onSelect(null);
|
191
|
+
},
|
192
|
+
}));
|
178
193
|
|
179
194
|
return (
|
180
195
|
<div {...ariaProps}
|
@@ -258,8 +273,9 @@ const Dropdown = (props: DropdownProps) => {
|
|
258
273
|
</DropdownContext.Provider>
|
259
274
|
</div>
|
260
275
|
)
|
261
|
-
}
|
276
|
+
}) as DropdownComponent
|
262
277
|
|
278
|
+
Dropdown.displayName = "Dropdown";
|
263
279
|
Dropdown.Option = DropdownOption;
|
264
280
|
Dropdown.Trigger = DropdownTrigger;
|
265
281
|
Dropdown.Container = DropdownContainer;
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import React, { useRef } from 'react'
|
2
|
+
import { Button, Dropdown } from 'playbook-ui'
|
3
|
+
|
4
|
+
const options = [
|
5
|
+
{
|
6
|
+
label: "United States",
|
7
|
+
value: "United States",
|
8
|
+
},
|
9
|
+
{
|
10
|
+
label: "Canada",
|
11
|
+
value: "Canada",
|
12
|
+
},
|
13
|
+
{
|
14
|
+
label: "Pakistan",
|
15
|
+
value: "Pakistan",
|
16
|
+
}
|
17
|
+
]
|
18
|
+
|
19
|
+
const DropdownClearSelection = (props) => {
|
20
|
+
const dropdownRef = useRef(null)
|
21
|
+
|
22
|
+
const handleReset = () => {
|
23
|
+
if (dropdownRef.current) {
|
24
|
+
dropdownRef.current.clearSelected()
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
return (
|
29
|
+
<>
|
30
|
+
<Dropdown
|
31
|
+
defaultValue={options[2]}
|
32
|
+
options={options}
|
33
|
+
ref={dropdownRef}
|
34
|
+
{...props}
|
35
|
+
/>
|
36
|
+
<Button
|
37
|
+
marginTop="md"
|
38
|
+
onClick={handleReset}
|
39
|
+
text="Reset"
|
40
|
+
/>
|
41
|
+
</>
|
42
|
+
)
|
43
|
+
}
|
44
|
+
|
45
|
+
export default DropdownClearSelection
|
@@ -0,0 +1 @@
|
|
1
|
+
To use an external control (like a reset button) to clear Dropdown selection, you can make use of the `useRef` hook. You must pass a ref to the Dropdown component and use that ref within the onClick for the external control in the way shown in the code snippet below.
|
@@ -22,6 +22,7 @@ examples:
|
|
22
22
|
- dropdown_error: Dropdown with Error
|
23
23
|
- dropdown_default_value: Default Value
|
24
24
|
- dropdown_blank_selection: Blank Selection
|
25
|
+
- dropdown_clear_selection: Clear Selection
|
25
26
|
# - dropdown_with_autocomplete: Autocomplete
|
26
27
|
# - dropdown_with_autocomplete_and_custom_display: Autocomplete with Custom Display
|
27
28
|
# - dropdown_with_external_control: useDropdown Hook
|
@@ -12,3 +12,4 @@ export { default as DropdownSubcomponentStructure } from './_dropdown_subcompone
|
|
12
12
|
export { default as DropdownError } from './_dropdown_error.jsx'
|
13
13
|
export { default as DropdownDefaultValue } from './_dropdown_default_value.jsx'
|
14
14
|
export { default as DropdownBlankSelection } from './_dropdown_blank_selection.jsx'
|
15
|
+
export { default as DropdownClearSelection } from './_dropdown_clear_selection.jsx'
|
@@ -73,7 +73,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
73
73
|
!autocomplete && "select_only"
|
74
74
|
);
|
75
75
|
|
76
|
-
const customDisplayPlaceholder = selected
|
76
|
+
const customDisplayPlaceholder = selected?.label ? (
|
77
77
|
<b>{selected.label}</b>
|
78
78
|
) : autocomplete ? (
|
79
79
|
""
|
@@ -83,7 +83,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
83
83
|
"Select..."
|
84
84
|
);
|
85
85
|
|
86
|
-
const defaultDisplayPlaceholder = selected
|
86
|
+
const defaultDisplayPlaceholder = selected?.label
|
87
87
|
? selected.label
|
88
88
|
: autocomplete
|
89
89
|
? ""
|
@@ -13,6 +13,7 @@ type ResultsCountProps = {
|
|
13
13
|
const ResultsCount = ({ dark, results, title }: ResultsCountProps): React.ReactElement => {
|
14
14
|
|
15
15
|
const resultTitle = () => {
|
16
|
+
if (results == null) return null
|
16
17
|
return (
|
17
18
|
<TitleCount
|
18
19
|
align="center"
|
@@ -24,6 +25,7 @@ const ResultsCount = ({ dark, results, title }: ResultsCountProps): React.ReactE
|
|
24
25
|
}
|
25
26
|
|
26
27
|
const justResults = () => {
|
28
|
+
if (results == null) return null
|
27
29
|
return (
|
28
30
|
<Caption
|
29
31
|
className="filter-results"
|
@@ -35,13 +37,13 @@ const ResultsCount = ({ dark, results, title }: ResultsCountProps): React.ReactE
|
|
35
37
|
}
|
36
38
|
|
37
39
|
const displayResultsCount = () => {
|
38
|
-
if (results && title) {
|
40
|
+
if (results != null && results >=0 && title) {
|
39
41
|
return (
|
40
42
|
<>
|
41
43
|
{resultTitle()}
|
42
44
|
</>
|
43
45
|
)
|
44
|
-
} else if (results) {
|
46
|
+
} else if (results !=null && results >=0 ) {
|
45
47
|
return (
|
46
48
|
<>
|
47
49
|
{justResults()}
|
@@ -202,6 +202,23 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
202
202
|
};
|
203
203
|
}, []);
|
204
204
|
|
205
|
+
useEffect(() => {
|
206
|
+
if (id) {
|
207
|
+
// Attach the clear function to the window, scoped by the id
|
208
|
+
(window as any)[`clearMultiLevelSelect_${id}`] = () => {
|
209
|
+
const resetData = modifyRecursive(formattedData, false);
|
210
|
+
setFormattedData(resetData);
|
211
|
+
setReturnedArray([]);
|
212
|
+
setDefaultReturn([]);
|
213
|
+
setSingleSelectedItem({ id: [], value: "", item: [] });
|
214
|
+
onSelect([]);
|
215
|
+
};
|
216
|
+
return () => {
|
217
|
+
delete (window as any)[`clearMultiLevelSelect_${id}`];
|
218
|
+
};
|
219
|
+
}
|
220
|
+
}, [formattedData, id, onSelect]);
|
221
|
+
|
205
222
|
// Iterate over tree, find item and set checked or unchecked
|
206
223
|
const modifyValue = (
|
207
224
|
id: string,
|
@@ -0,0 +1,93 @@
|
|
1
|
+
<% treeData = [{
|
2
|
+
label: "Power Home Remodeling",
|
3
|
+
value: "Power Home Remodeling",
|
4
|
+
id: "100",
|
5
|
+
expanded: true,
|
6
|
+
children: [
|
7
|
+
{
|
8
|
+
label: "People",
|
9
|
+
value: "People",
|
10
|
+
id: "101",
|
11
|
+
expanded: true,
|
12
|
+
children: [
|
13
|
+
{
|
14
|
+
label: "Talent Acquisition",
|
15
|
+
value: "Talent Acquisition",
|
16
|
+
id: "102",
|
17
|
+
},
|
18
|
+
{
|
19
|
+
label: "Business Affairs",
|
20
|
+
value: "Business Affairs",
|
21
|
+
id: "103",
|
22
|
+
children: [
|
23
|
+
{
|
24
|
+
label: "Initiatives",
|
25
|
+
value: "Initiatives",
|
26
|
+
id: "104",
|
27
|
+
},
|
28
|
+
{
|
29
|
+
label: "Learning & Development",
|
30
|
+
value: "Learning & Development",
|
31
|
+
id: "105",
|
32
|
+
},
|
33
|
+
],
|
34
|
+
},
|
35
|
+
{
|
36
|
+
label: "People Experience",
|
37
|
+
value: "People Experience",
|
38
|
+
id: "106",
|
39
|
+
},
|
40
|
+
],
|
41
|
+
},
|
42
|
+
{
|
43
|
+
label: "Contact Center",
|
44
|
+
value: "Contact Center",
|
45
|
+
id: "107",
|
46
|
+
children: [
|
47
|
+
{
|
48
|
+
label: "Appointment Management",
|
49
|
+
value: "Appointment Management",
|
50
|
+
id: "108",
|
51
|
+
},
|
52
|
+
{
|
53
|
+
label: "Customer Service",
|
54
|
+
value: "Customer Service",
|
55
|
+
id: "109",
|
56
|
+
},
|
57
|
+
{
|
58
|
+
label: "Energy",
|
59
|
+
value: "Energy",
|
60
|
+
id: "110",
|
61
|
+
},
|
62
|
+
],
|
63
|
+
},
|
64
|
+
],
|
65
|
+
}] %>
|
66
|
+
|
67
|
+
<%= pb_rails("multi_level_select", props: {
|
68
|
+
id: "multi-level-select-reset-example",
|
69
|
+
name: "my_array",
|
70
|
+
tree_data: treeData,
|
71
|
+
return_all_selected: true
|
72
|
+
}) %>
|
73
|
+
|
74
|
+
<%= pb_rails("button", props: { text: "Reset", margin_top: "lg", id:"multilevelselect-reset-button" }) %>
|
75
|
+
|
76
|
+
|
77
|
+
<script>
|
78
|
+
window.addEventListener('DOMContentLoaded', () => {
|
79
|
+
const exampleResetButton = document.querySelector("#multilevelselect-reset-button");
|
80
|
+
|
81
|
+
exampleResetButton.addEventListener("click", () => {
|
82
|
+
clearMultiLevelSelectById('multi-level-select-reset-example');
|
83
|
+
});
|
84
|
+
function clearMultiLevelSelectById(id) {
|
85
|
+
const clearFunction = window[`clearMultiLevelSelect_${id}`];
|
86
|
+
if (clearFunction) {
|
87
|
+
clearFunction();
|
88
|
+
} else {
|
89
|
+
console.warn(`No clear function found for MultiLevelSelect with id: ${id}`);
|
90
|
+
}
|
91
|
+
}
|
92
|
+
})
|
93
|
+
</script>
|
@@ -0,0 +1 @@
|
|
1
|
+
In order to clear the multilevelselect selection using an external trigger (like a reset button), the `clearMultiLevelSelect` function can be used. See the code snippet below to see this in action. The function is scoped by id so an id MUST be used on the multilevelselect kit and passed to the function as shown for it to work.
|
@@ -3,6 +3,76 @@
|
|
3
3
|
@import "../tokens/opacity";
|
4
4
|
@import "../pb_avatar/avatar";
|
5
5
|
|
6
|
+
$sizes: (
|
7
|
+
"avatar": ("sm": 38px, "md": 60px, "lg": 80px, "xl": 100px),
|
8
|
+
"first-item-double": ("sm": 20px, "md": 32px, "lg": 44px, "xl": 56px),
|
9
|
+
"first-item-triple": ("sm": 16px, "md": 24px, "lg": 32px, "xl": 44px),
|
10
|
+
"first-item-quadruple": ("sm": 16px, "md": 28px, "lg": 36px, "xl": 44px),
|
11
|
+
"second-item-double": ("sm": 12px, "md": 16px, "lg": 20px, "xl": 24px),
|
12
|
+
"second-item-triple": ("sm": 12px, "md": 20px, "lg": 24px, "xl": 32px),
|
13
|
+
"second-item-quadruple": ("sm": 12px, "md": 20px, "lg": 28px, "xl": 32px),
|
14
|
+
"third-item-triple": ("sm": 10px, "md": 16px, "lg": 20px, "xl": 24px),
|
15
|
+
"third-item-quadruple": ("sm": 10px, "md": 16px, "lg": 24px, "xl": 24px),
|
16
|
+
"fourth-item": ("sm": 8px, "md": 12px, "lg": 16px, "xl": 16px)
|
17
|
+
);
|
18
|
+
|
19
|
+
$positions: (
|
20
|
+
"second-item-double": (
|
21
|
+
"sm": ("top": null, "bottom": 5px, "right": 4px, "left": null),
|
22
|
+
"md": ("top": null, "bottom": 10px, "right": 8px, "left": null),
|
23
|
+
"lg": ("top": 46px, "bottom": null, "right": 12px, "left": null),
|
24
|
+
"xl": ("top": 58px, "bottom": null, "right": 14px, "left": null)
|
25
|
+
),
|
26
|
+
"second-item-triple": (
|
27
|
+
"sm": ("top": 12px, "bottom": null, "right": 2px, "left": null),
|
28
|
+
"md": ("top": 24px, "bottom": null, "right": 5px, "left": null),
|
29
|
+
"lg": ("top": 32px, "bottom": null, "right": 9px, "left": null),
|
30
|
+
"xl": ("top": 41px, "bottom": null, "right": 11px, "left": null)
|
31
|
+
),
|
32
|
+
"second-item-quadruple": (
|
33
|
+
"sm": ("top": null, "bottom": 9px, "right": 4px, "left": null),
|
34
|
+
"md": ("top": 24px, "bottom": null, "right": 5px, "left": null),
|
35
|
+
"lg": ("top": 31px, "bottom": null, "right": 6px, "left": null),
|
36
|
+
"xl": ("top": 43px, "bottom": null, "right": 9px, "left": null)
|
37
|
+
),
|
38
|
+
"third-item-triple": (
|
39
|
+
"sm": ("top": null, "bottom": 3px, "right": null, "left": 11px),
|
40
|
+
"md": ("top": null, "bottom": 6px, "right": null, "left": 16px),
|
41
|
+
"lg": ("top": null, "bottom": 10px, "right": null, "left": 23px),
|
42
|
+
"xl": ("top": null, "bottom": 13px, "right": null, "left": 27px)
|
43
|
+
),
|
44
|
+
"third-item-quadruple": (
|
45
|
+
"sm": ("top": null, "bottom": 3px, "right": null, "left": 9px),
|
46
|
+
"md": ("top": null, "bottom": 5px, "right": null, "left": 15px),
|
47
|
+
"lg": ("top": null, "bottom": 7px, "right": null, "left": 20px),
|
48
|
+
"xl": ("top": null, "bottom": 11px, "right": null, "left": 27px)
|
49
|
+
),
|
50
|
+
"fourth-item": (
|
51
|
+
"sm": ("top": 5px, "bottom": null, "right": 6px, "left": null),
|
52
|
+
"md": ("top": 7px, "bottom": null, "right": 12px, "left": null),
|
53
|
+
"lg": ("top": 9px, "bottom": null, "right": 16px, "left": null),
|
54
|
+
"xl": ("top": 16px, "bottom": null, "right": 24px, "left": null)
|
55
|
+
),
|
56
|
+
"first-item-double": (
|
57
|
+
"sm": ("top": 4px, "bottom": null, "right": null, "left": 3px),
|
58
|
+
"md": ("top": 6px, "bottom": null, "right": null, "left": 8px),
|
59
|
+
"lg": ("top": 8px, "bottom": null, "right": null, "left": 8px),
|
60
|
+
"xl": ("top": 10px, "bottom": null, "right": null, "left": 10px)
|
61
|
+
),
|
62
|
+
"first-item-triple": (
|
63
|
+
"sm": ("top": 4px, "bottom": null, "right": null, "left": 4px),
|
64
|
+
"md": ("top": 7px, "bottom": null, "right": null, "left": 7px),
|
65
|
+
"lg": ("top": 10px, "bottom": null, "right": null, "left": 10px),
|
66
|
+
"xl": ("top": 12px, "bottom": null, "right": null, "left": 12px)
|
67
|
+
),
|
68
|
+
"first-item-quadruple": (
|
69
|
+
"sm": ("top": 5px, "bottom": null, "right": null, "left": 3px),
|
70
|
+
"md": ("top": 7px, "bottom": null, "right": null, "left": 5px),
|
71
|
+
"lg": ("top": 9px, "bottom": null, "right": null, "left": 7px),
|
72
|
+
"xl": ("top": 16px, "bottom": null, "right": null, "left": 10px)
|
73
|
+
)
|
74
|
+
);
|
75
|
+
|
6
76
|
@mixin avatar-size($size) {
|
7
77
|
height: $size;
|
8
78
|
width: $size;
|
@@ -27,8 +97,8 @@
|
|
27
97
|
$stacked_size: 18px;
|
28
98
|
$max_to_display: 1, 2;
|
29
99
|
display: inline-flex;
|
30
|
-
width:
|
31
|
-
height:
|
100
|
+
width: 28px;
|
101
|
+
height: 28px;
|
32
102
|
flex-basis: $container_size;
|
33
103
|
position: relative;
|
34
104
|
flex-shrink: 0;
|
@@ -48,7 +118,7 @@
|
|
48
118
|
}
|
49
119
|
}
|
50
120
|
&[class*=_single] .pb_multiple_users_stacked_item {
|
51
|
-
@include avatar-size(
|
121
|
+
@include avatar-size(28px);
|
52
122
|
}
|
53
123
|
[class^=pb_avatar_kit].second_item, [class^=pb_badge_kit].second_item {
|
54
124
|
@include position((bottom: 0, right: 0));
|
@@ -71,72 +141,106 @@
|
|
71
141
|
color: transparent;
|
72
142
|
}
|
73
143
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
&.first_item {
|
93
|
-
@include position((top: 4px, left: 3px));
|
94
|
-
@include avatar-size(20px);
|
95
|
-
|
96
|
-
&.triple_bubble {
|
97
|
-
@include position((top: 4px, left: 4px));
|
98
|
-
@include avatar-size(16px);
|
144
|
+
// Iterate over each size to adjust the bubble container only when class contains "_bubble_"
|
145
|
+
@each $size_name, $size_value in $avatar-sizes {
|
146
|
+
&[class*=_bubble_][class*=_size_#{$size_name}] {
|
147
|
+
// Set bubble container size based on the class
|
148
|
+
$bubble_container_size: $size_value;
|
149
|
+
$container_size: $size_value;
|
150
|
+
|
151
|
+
// Apply the bubble container size
|
152
|
+
@include avatar-size($bubble_container_size);
|
153
|
+
width: $bubble_container_size;
|
154
|
+
height: $bubble_container_size;
|
155
|
+
flex-basis: $bubble_container_size;
|
156
|
+
|
157
|
+
background-color: $bg_light;
|
158
|
+
border-radius: 50%;
|
159
|
+
|
160
|
+
&.dark {
|
161
|
+
background-color: $card_dark;
|
99
162
|
}
|
100
|
-
|
101
|
-
|
102
|
-
@include
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
163
|
+
|
164
|
+
[class^=pb_avatar_kit].pb_multiple_users_stacked_item {
|
165
|
+
@include avatar-size($bubble_container_size * 0.45); // Adjust the size of stacked avatars
|
166
|
+
|
167
|
+
&.dark {
|
168
|
+
.avatar_wrapper {
|
169
|
+
border: $border_size solid $border_dark;
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
.avatar_wrapper {
|
174
|
+
border: $border_size solid $white;
|
175
|
+
}
|
113
176
|
}
|
114
|
-
|
115
|
-
|
116
|
-
|
177
|
+
|
178
|
+
[class^=pb_avatar_kit] {
|
179
|
+
// First Item
|
180
|
+
&.first_item {
|
181
|
+
@include position(map-get(map-get($positions, 'first-item-double'), $size_name));
|
182
|
+
@include avatar-size(map-get(map-get($sizes, 'first-item-double'), $size_name));
|
183
|
+
|
184
|
+
&.double_bubble {
|
185
|
+
@include position(map-get(map-get($positions, 'first-item-double'), $size_name));
|
186
|
+
@include avatar-size(map-get(map-get($sizes, 'first-item-double'), $size_name));
|
187
|
+
}
|
188
|
+
|
189
|
+
&.triple_bubble {
|
190
|
+
@include position(map-get(map-get($positions, 'first-item-triple'), $size_name));
|
191
|
+
@include avatar-size(map-get(map-get($sizes, 'first-item-triple'), $size_name));
|
192
|
+
}
|
193
|
+
|
194
|
+
&.quadruple_bubble {
|
195
|
+
@include position(map-get(map-get($positions, 'first-item-quadruple'), $size_name));
|
196
|
+
@include avatar-size(map-get(map-get($sizes, 'first-item-quadruple'), $size_name));
|
197
|
+
}
|
198
|
+
}
|
199
|
+
|
200
|
+
// Second Item
|
201
|
+
&.second_item {
|
202
|
+
@include position(map-get(map-get($positions, 'second-item-double'), $size_name));
|
203
|
+
|
204
|
+
&.double_bubble {
|
205
|
+
@include position(map-get(map-get($positions, 'second-item-double'), $size_name));
|
206
|
+
@include avatar-size(map-get(map-get($sizes, 'second-item-double'), $size_name));
|
207
|
+
}
|
208
|
+
|
209
|
+
&.triple_bubble {
|
210
|
+
@include position(map-get(map-get($positions, 'second-item-triple'), $size_name));
|
211
|
+
@include avatar-size(map-get(map-get($sizes, 'second-item-triple'), $size_name));
|
212
|
+
}
|
213
|
+
|
214
|
+
&.quadruple_bubble {
|
215
|
+
@include position(map-get(map-get($positions, 'second-item-quadruple'), $size_name));
|
216
|
+
@include avatar-size(map-get(map-get($sizes, 'second-item-quadruple'), $size_name));
|
217
|
+
}
|
218
|
+
}
|
219
|
+
|
220
|
+
// Third Item
|
221
|
+
&.third_item {
|
222
|
+
@include position(map-get(map-get($positions, 'third-item-triple'), $size_name));
|
223
|
+
@include avatar-size(map-get(map-get($sizes, 'third-item-triple'), $size_name));
|
224
|
+
|
225
|
+
&.quadruple_bubble {
|
226
|
+
@include position(map-get(map-get($positions, 'third-item-quadruple'), $size_name));
|
227
|
+
@include avatar-size(map-get(map-get($sizes, 'third-item-quadruple'), $size_name));
|
228
|
+
}
|
229
|
+
}
|
230
|
+
|
231
|
+
// Fourth Item
|
232
|
+
&.fourth_item {
|
233
|
+
@include position(map-get(map-get($positions, 'fourth-item'), $size_name));
|
234
|
+
@include avatar-size(map-get(map-get($sizes, 'fourth-item'), $size_name));
|
235
|
+
}
|
117
236
|
}
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
&.quadruple_bubble {
|
125
|
-
@include position((bottom: 3px, left: 9px));
|
237
|
+
|
238
|
+
&[class*=_single_bubble] {
|
239
|
+
[class^=pb_avatar_kit].first_item {
|
240
|
+
@include position((top: 0, left: 0));
|
241
|
+
@include avatar-size($bubble_container_size);
|
242
|
+
}
|
126
243
|
}
|
127
244
|
}
|
128
|
-
|
129
|
-
&.fourth_item {
|
130
|
-
@include position((top: 5px, right: 6px));
|
131
|
-
@include avatar-size(8px);
|
132
|
-
}
|
133
|
-
}
|
134
|
-
}
|
135
|
-
|
136
|
-
&[class*=_single_bubble] {
|
137
|
-
[class^=pb_avatar_kit].first_item {
|
138
|
-
@include position((top: 0, left: 0));
|
139
|
-
@include avatar-size($bubble_container_size);
|
140
245
|
}
|
141
246
|
}
|
142
|
-
}
|
@@ -81,7 +81,7 @@ const MultipleUsersStackedSingleBubble = () => {
|
|
81
81
|
test('should have a single bubble', () => {
|
82
82
|
render(<MultipleUsersStackedSingleBubble />)
|
83
83
|
const kit = screen.getByTestId(testId)
|
84
|
-
expect(kit).toHaveClass("
|
84
|
+
expect(kit).toHaveClass("pb_multiple_users_stacked_kit_single_bubble_size_sm")
|
85
85
|
|
86
86
|
const firstItem = kit.querySelector('.first_item');
|
87
87
|
expect(firstItem).toBeInTheDocument();
|
@@ -113,7 +113,7 @@ const MultipleUsersStackedDoubleBubble = () => {
|
|
113
113
|
test('should have a double bubble', () => {
|
114
114
|
render(<MultipleUsersStackedDoubleBubble />)
|
115
115
|
const kit = screen.getByTestId(testId)
|
116
|
-
expect(kit).toHaveClass("
|
116
|
+
expect(kit).toHaveClass("pb_multiple_users_stacked_kit_bubble_size_sm")
|
117
117
|
|
118
118
|
const firstItem = kit.querySelector('.first_item');
|
119
119
|
expect(firstItem).toBeInTheDocument();
|
@@ -153,7 +153,7 @@ const MultipleUsersStackedTripleBubble = () => {
|
|
153
153
|
test('should have a triple bubble', () => {
|
154
154
|
render(<MultipleUsersStackedTripleBubble />)
|
155
155
|
const kit = screen.getByTestId(testId)
|
156
|
-
expect(kit).toHaveClass("
|
156
|
+
expect(kit).toHaveClass("pb_multiple_users_stacked_kit_bubble_size_sm")
|
157
157
|
|
158
158
|
const firstItem = kit.querySelector('.first_item');
|
159
159
|
expect(firstItem).toBeInTheDocument();
|
@@ -208,7 +208,7 @@ const MultipleUsersStackedQuadrupleBubble = () => {
|
|
208
208
|
test('should have a quadruple bubble', () => {
|
209
209
|
render(<MultipleUsersStackedQuadrupleBubble />)
|
210
210
|
const kit = screen.getByTestId(testId)
|
211
|
-
expect(kit).toHaveClass("
|
211
|
+
expect(kit).toHaveClass("pb_multiple_users_stacked_kit_bubble_size_sm")
|
212
212
|
|
213
213
|
const firstItem = kit.querySelector('.first_item');
|
214
214
|
expect(firstItem).toBeInTheDocument();
|
@@ -224,4 +224,4 @@ test('should have a quadruple bubble', () => {
|
|
224
224
|
|
225
225
|
const fourthItem = kit.querySelector('.fourth_item');
|
226
226
|
expect(fourthItem).toBeInTheDocument();
|
227
|
-
})
|
227
|
+
})
|