@zohodesk/components 1.0.0-temp-241 → 1.0.0-temp-243
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.
- package/README.md +48 -0
- package/assets/Appearance/dark/mode/Component_DarkMode.module.css +176 -172
- package/assets/Appearance/dark/mode/Component_v1_DarkMode.module.css +8 -8
- package/assets/Appearance/dark/themes/blue/blue_CTA_DarkModifyCategory.module.css +12 -465
- package/assets/Appearance/dark/themes/blue/blue_CTA_DarkTheme.module.css +31 -31
- package/assets/Appearance/dark/themes/blue/blue_ComponentTheme_DarkTheme.module.css +7 -4
- package/assets/Appearance/dark/themes/green/green_CTA_DarkModifyCategory.module.css +12 -465
- package/assets/Appearance/dark/themes/green/green_CTA_DarkTheme.module.css +31 -31
- package/assets/Appearance/dark/themes/green/green_ComponentTheme_DarkTheme.module.css +7 -4
- package/assets/Appearance/dark/themes/orange/orange_CTA_DarkModifyCategory.module.css +12 -465
- package/assets/Appearance/dark/themes/orange/orange_CTA_DarkTheme.module.css +31 -31
- package/assets/Appearance/dark/themes/orange/orange_ComponentTheme_DarkTheme.module.css +7 -4
- package/assets/Appearance/dark/themes/red/red_CTA_DarkModifyCategory.module.css +12 -465
- package/assets/Appearance/dark/themes/red/red_CTA_DarkTheme.module.css +31 -31
- package/assets/Appearance/dark/themes/red/red_ComponentTheme_DarkTheme.module.css +7 -4
- package/assets/Appearance/dark/themes/yellow/yellow_CTA_DarkModifyCategory.module.css +12 -465
- package/assets/Appearance/dark/themes/yellow/yellow_CTA_DarkTheme.module.css +31 -31
- package/assets/Appearance/dark/themes/yellow/yellow_ComponentTheme_DarkTheme.module.css +7 -4
- package/assets/Appearance/light/mode/Component_LightMode.module.css +175 -171
- package/assets/Appearance/light/mode/Component_v1_LightMode.module.css +8 -8
- package/assets/Appearance/light/themes/blue/blue_CTA_LightModifyCategory.module.css +12 -465
- package/assets/Appearance/light/themes/blue/blue_CTA_LightTheme.module.css +31 -31
- package/assets/Appearance/light/themes/blue/blue_ComponentTheme_LightTheme.module.css +7 -4
- package/assets/Appearance/light/themes/green/green_CTA_LightModifyCategory.module.css +12 -465
- package/assets/Appearance/light/themes/green/green_CTA_LightTheme.module.css +31 -31
- package/assets/Appearance/light/themes/green/green_ComponentTheme_LightTheme.module.css +7 -4
- package/assets/Appearance/light/themes/orange/orange_CTA_LightModifyCategory.module.css +12 -465
- package/assets/Appearance/light/themes/orange/orange_CTA_LightTheme.module.css +31 -31
- package/assets/Appearance/light/themes/orange/orange_ComponentTheme_LightTheme.module.css +7 -4
- package/assets/Appearance/light/themes/red/red_CTA_LightModifyCategory.module.css +12 -465
- package/assets/Appearance/light/themes/red/red_CTA_LightTheme.module.css +31 -31
- package/assets/Appearance/light/themes/red/red_ComponentTheme_LightTheme.module.css +7 -4
- package/assets/Appearance/light/themes/yellow/yellow_CTA_LightModifyCategory.module.css +12 -465
- package/assets/Appearance/light/themes/yellow/yellow_CTA_LightTheme.module.css +31 -31
- package/assets/Appearance/light/themes/yellow/yellow_ComponentTheme_LightTheme.module.css +7 -4
- package/assets/Appearance/pureDark/mode/Component_PureDarkMode.module.css +177 -173
- package/assets/Appearance/pureDark/mode/Component_v1_PureDarkMode.module.css +8 -8
- package/assets/Appearance/pureDark/themes/blue/blue_CTA_PureDarkModifyCategory.module.css +12 -465
- package/assets/Appearance/pureDark/themes/blue/blue_CTA_PureDarkTheme.module.css +31 -31
- package/assets/Appearance/pureDark/themes/blue/blue_ComponentTheme_PureDarkTheme.module.css +7 -4
- package/assets/Appearance/pureDark/themes/green/green_CTA_PureDarkModifyCategory.module.css +12 -465
- package/assets/Appearance/pureDark/themes/green/green_CTA_PureDarkTheme.module.css +31 -31
- package/assets/Appearance/pureDark/themes/green/green_ComponentTheme_PureDarkTheme.module.css +7 -4
- package/assets/Appearance/pureDark/themes/orange/orange_CTA_PureDarkModifyCategory.module.css +12 -465
- package/assets/Appearance/pureDark/themes/orange/orange_CTA_PureDarkTheme.module.css +31 -31
- package/assets/Appearance/pureDark/themes/orange/orange_ComponentTheme_PureDarkTheme.module.css +7 -4
- package/assets/Appearance/pureDark/themes/red/red_CTA_PureDarkModifyCategory.module.css +12 -465
- package/assets/Appearance/pureDark/themes/red/red_CTA_PureDarkTheme.module.css +31 -31
- package/assets/Appearance/pureDark/themes/red/red_ComponentTheme_PureDarkTheme.module.css +7 -4
- package/assets/Appearance/pureDark/themes/yellow/yellow_CTA_PureDarkModifyCategory.module.css +12 -465
- package/assets/Appearance/pureDark/themes/yellow/yellow_CTA_PureDarkTheme.module.css +31 -31
- package/assets/Appearance/pureDark/themes/yellow/yellow_ComponentTheme_PureDarkTheme.module.css +7 -4
- package/es/Button/__tests__/__snapshots__/Button.spec.js.snap +2 -2
- package/es/Button/css/Button.module.css +60 -6
- package/es/Button/css/cssJSLogic.js +2 -2
- package/es/Card/__tests__/Card.spec.js +48 -0
- package/es/Card/__tests__/CardContent.spec.js +61 -0
- package/es/Card/__tests__/CardHeader.spec.js +33 -0
- package/es/Card/__tests__/__snapshots__/Card.spec.js.snap +125 -0
- package/es/Card/__tests__/__snapshots__/CardContent.spec.js.snap +177 -0
- package/es/Card/__tests__/__snapshots__/CardHeader.spec.js.snap +51 -0
- package/es/ListItem/ListItem.js +10 -3
- package/es/ListItem/ListItemWithAvatar.js +15 -6
- package/es/ListItem/ListItemWithCheckBox.js +13 -6
- package/es/ListItem/ListItemWithIcon.js +14 -5
- package/es/ListItem/ListItemWithRadio.js +13 -6
- package/es/ListItem/__tests__/ListItem.spec.js +19 -0
- package/es/ListItem/__tests__/ListItemWithAvatar.spec.js +19 -0
- package/es/ListItem/__tests__/ListItemWithCheckBox.spec.js +19 -0
- package/es/ListItem/__tests__/ListItemWithIcon.spec.js +17 -0
- package/es/ListItem/__tests__/ListItemWithRadio.spec.js +19 -0
- package/es/ListItem/__tests__/__snapshots__/ListItem.spec.js.snap +78 -0
- package/es/ListItem/__tests__/__snapshots__/ListItemWithAvatar.spec.js.snap +140 -46
- package/es/ListItem/__tests__/__snapshots__/ListItemWithCheckBox.spec.js.snap +251 -49
- package/es/ListItem/__tests__/__snapshots__/ListItemWithIcon.spec.js.snap +144 -50
- package/es/ListItem/__tests__/__snapshots__/ListItemWithRadio.spec.js.snap +252 -52
- package/es/ListItem/props/propTypes.js +15 -5
- package/es/MultiSelect/MultiSelect.js +8 -1
- package/es/MultiSelect/Suggestions.js +2 -1
- package/es/MultiSelect/__tests__/__snapshots__/MultiSelectHeader.spec.js.snap +6 -6
- package/es/MultiSelect/props/propTypes.js +2 -3
- package/es/Popup/Popup.js +76 -72
- package/es/Select/GroupSelect.js +4 -2
- package/es/Select/Select.js +7 -1
- package/es/Select/SelectWithAvatar.js +17 -4
- package/es/Select/SelectWithIcon.js +15 -5
- package/es/Select/props/defaultProps.js +2 -0
- package/es/Select/props/propTypes.js +5 -0
- package/es/Typography/__tests__/Typography.spec.js +225 -0
- package/es/Typography/__tests__/__snapshots__/Typography.spec.js.snap +1226 -0
- package/es/common/common.module.css +1 -1
- package/es/utils/dropDownUtils.js +13 -4
- package/es/v1/Switch/__tests__/Switch.spec.js +41 -6
- package/es/v1/Switch/__tests__/__snapshots__/Switch.spec.js.snap +176 -5
- package/lib/Button/__tests__/__snapshots__/Button.spec.js.snap +2 -2
- package/lib/Button/css/Button.module.css +60 -6
- package/lib/Button/css/cssJSLogic.js +1 -1
- package/lib/Card/__tests__/Card.spec.js +54 -6
- package/lib/Card/__tests__/CardContent.spec.js +68 -0
- package/lib/Card/__tests__/CardHeader.spec.js +40 -0
- package/lib/Card/__tests__/__snapshots__/Card.spec.js.snap +125 -0
- package/lib/Card/__tests__/__snapshots__/CardContent.spec.js.snap +177 -0
- package/lib/Card/__tests__/__snapshots__/CardHeader.spec.js.snap +51 -0
- package/lib/ListItem/ListItem.js +10 -3
- package/lib/ListItem/ListItemWithAvatar.js +15 -6
- package/lib/ListItem/ListItemWithCheckBox.js +15 -6
- package/lib/ListItem/ListItemWithIcon.js +13 -5
- package/lib/ListItem/ListItemWithRadio.js +15 -6
- package/lib/ListItem/__tests__/ListItem.spec.js +23 -0
- package/lib/ListItem/__tests__/ListItemWithAvatar.spec.js +23 -0
- package/lib/ListItem/__tests__/ListItemWithCheckBox.spec.js +23 -0
- package/lib/ListItem/__tests__/ListItemWithIcon.spec.js +21 -0
- package/lib/ListItem/__tests__/ListItemWithRadio.spec.js +23 -0
- package/lib/ListItem/__tests__/__snapshots__/ListItem.spec.js.snap +78 -0
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithAvatar.spec.js.snap +140 -46
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithCheckBox.spec.js.snap +251 -49
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithIcon.spec.js.snap +144 -50
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithRadio.spec.js.snap +252 -52
- package/lib/ListItem/props/propTypes.js +15 -6
- package/lib/MultiSelect/MultiSelect.js +6 -2
- package/lib/MultiSelect/Suggestions.js +2 -1
- package/lib/MultiSelect/__tests__/__snapshots__/MultiSelectHeader.spec.js.snap +6 -6
- package/lib/MultiSelect/props/propTypes.js +3 -4
- package/lib/Popup/Popup.js +76 -73
- package/lib/Select/GroupSelect.js +4 -3
- package/lib/Select/Select.js +7 -1
- package/lib/Select/SelectWithAvatar.js +17 -7
- package/lib/Select/SelectWithIcon.js +15 -5
- package/lib/Select/props/defaultProps.js +2 -1
- package/lib/Select/props/propTypes.js +5 -0
- package/lib/Typography/__tests__/Typography.spec.js +232 -0
- package/lib/Typography/__tests__/__snapshots__/Typography.spec.js.snap +1226 -0
- package/lib/common/common.module.css +1 -1
- package/lib/utils/dropDownUtils.js +17 -4
- package/lib/v1/Switch/__tests__/Switch.spec.js +41 -6
- package/lib/v1/Switch/__tests__/__snapshots__/Switch.spec.js.snap +176 -5
- package/package.json +10 -10
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`CardContent Should render with name - both 1`] = `
|
|
4
|
+
<DocumentFragment>
|
|
5
|
+
<div
|
|
6
|
+
class="grow basis shrinkOff scrollboth"
|
|
7
|
+
data-id="CardContent"
|
|
8
|
+
data-scroll="true"
|
|
9
|
+
data-selector-id="cardContent"
|
|
10
|
+
data-test-id="CardContent"
|
|
11
|
+
>
|
|
12
|
+
<div>
|
|
13
|
+
Test Animation
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
</DocumentFragment>
|
|
17
|
+
`;
|
|
18
|
+
|
|
19
|
+
exports[`CardContent Should render with name - both 2`] = `
|
|
20
|
+
<DocumentFragment>
|
|
21
|
+
<div
|
|
22
|
+
class="grow basis shrinkOff scrolly preventScrollBubbleBoth"
|
|
23
|
+
data-id="CardContent"
|
|
24
|
+
data-scroll="true"
|
|
25
|
+
data-selector-id="cardContent"
|
|
26
|
+
data-test-id="CardContent"
|
|
27
|
+
>
|
|
28
|
+
<div>
|
|
29
|
+
Test
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</DocumentFragment>
|
|
33
|
+
`;
|
|
34
|
+
|
|
35
|
+
exports[`CardContent Should render with name - horizontal 1`] = `
|
|
36
|
+
<DocumentFragment>
|
|
37
|
+
<div
|
|
38
|
+
class="grow basis shrinkOff scrollx"
|
|
39
|
+
data-id="CardContent"
|
|
40
|
+
data-scroll="true"
|
|
41
|
+
data-selector-id="cardContent"
|
|
42
|
+
data-test-id="CardContent"
|
|
43
|
+
>
|
|
44
|
+
<div>
|
|
45
|
+
Test Animation
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</DocumentFragment>
|
|
49
|
+
`;
|
|
50
|
+
|
|
51
|
+
exports[`CardContent Should render with name - horizontal 2`] = `
|
|
52
|
+
<DocumentFragment>
|
|
53
|
+
<div
|
|
54
|
+
class="grow basis shrinkOff scrolly preventScrollBubbleX"
|
|
55
|
+
data-id="CardContent"
|
|
56
|
+
data-scroll="true"
|
|
57
|
+
data-selector-id="cardContent"
|
|
58
|
+
data-test-id="CardContent"
|
|
59
|
+
>
|
|
60
|
+
<div>
|
|
61
|
+
Test
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</DocumentFragment>
|
|
65
|
+
`;
|
|
66
|
+
|
|
67
|
+
exports[`CardContent Should render with name - none 1`] = `
|
|
68
|
+
<DocumentFragment>
|
|
69
|
+
<div
|
|
70
|
+
class="grow basis shrinkOff scrollnone"
|
|
71
|
+
data-id="CardContent"
|
|
72
|
+
data-scroll="true"
|
|
73
|
+
data-selector-id="cardContent"
|
|
74
|
+
data-test-id="CardContent"
|
|
75
|
+
>
|
|
76
|
+
<div>
|
|
77
|
+
Test Animation
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</DocumentFragment>
|
|
81
|
+
`;
|
|
82
|
+
|
|
83
|
+
exports[`CardContent Should render with name - vertical 1`] = `
|
|
84
|
+
<DocumentFragment>
|
|
85
|
+
<div
|
|
86
|
+
class="grow basis shrinkOff scrolly"
|
|
87
|
+
data-id="CardContent"
|
|
88
|
+
data-scroll="true"
|
|
89
|
+
data-selector-id="cardContent"
|
|
90
|
+
data-test-id="CardContent"
|
|
91
|
+
>
|
|
92
|
+
<div>
|
|
93
|
+
Test Animation
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</DocumentFragment>
|
|
97
|
+
`;
|
|
98
|
+
|
|
99
|
+
exports[`CardContent Should render with name - vertical 2`] = `
|
|
100
|
+
<DocumentFragment>
|
|
101
|
+
<div
|
|
102
|
+
class="grow basis shrinkOff scrolly preventScrollBubbleY"
|
|
103
|
+
data-id="CardContent"
|
|
104
|
+
data-scroll="true"
|
|
105
|
+
data-selector-id="cardContent"
|
|
106
|
+
data-test-id="CardContent"
|
|
107
|
+
>
|
|
108
|
+
<div>
|
|
109
|
+
Test
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</DocumentFragment>
|
|
113
|
+
`;
|
|
114
|
+
|
|
115
|
+
exports[`CardContent rendering children 1`] = `
|
|
116
|
+
<DocumentFragment>
|
|
117
|
+
<div
|
|
118
|
+
class="grow basis shrinkOff scrolly"
|
|
119
|
+
data-id="CardContent"
|
|
120
|
+
data-selector-id="cardContent"
|
|
121
|
+
data-test-id="CardContent"
|
|
122
|
+
>
|
|
123
|
+
Test
|
|
124
|
+
</div>
|
|
125
|
+
</DocumentFragment>
|
|
126
|
+
`;
|
|
127
|
+
|
|
128
|
+
exports[`CardContent rendering customClass is true 1`] = `
|
|
129
|
+
<DocumentFragment>
|
|
130
|
+
<div
|
|
131
|
+
class="cardCustomClass grow basis shrinkOff scrolly"
|
|
132
|
+
data-id="CardContent"
|
|
133
|
+
data-selector-id="cardContent"
|
|
134
|
+
data-test-id="CardContent"
|
|
135
|
+
>
|
|
136
|
+
Test
|
|
137
|
+
</div>
|
|
138
|
+
</DocumentFragment>
|
|
139
|
+
`;
|
|
140
|
+
|
|
141
|
+
exports[`CardContent rendering isScrollAttribute is true 1`] = `
|
|
142
|
+
<DocumentFragment>
|
|
143
|
+
<div
|
|
144
|
+
class="grow basis shrinkOff scrolly"
|
|
145
|
+
data-id="CardContent"
|
|
146
|
+
data-scroll="true"
|
|
147
|
+
data-selector-id="cardContent"
|
|
148
|
+
data-test-id="CardContent"
|
|
149
|
+
>
|
|
150
|
+
Test
|
|
151
|
+
</div>
|
|
152
|
+
</DocumentFragment>
|
|
153
|
+
`;
|
|
154
|
+
|
|
155
|
+
exports[`CardContent rendering shrink is true 1`] = `
|
|
156
|
+
<DocumentFragment>
|
|
157
|
+
<div
|
|
158
|
+
class="grow basis shrinkOn scrolly"
|
|
159
|
+
data-id="CardContent"
|
|
160
|
+
data-selector-id="cardContent"
|
|
161
|
+
data-test-id="CardContent"
|
|
162
|
+
>
|
|
163
|
+
Test
|
|
164
|
+
</div>
|
|
165
|
+
</DocumentFragment>
|
|
166
|
+
`;
|
|
167
|
+
|
|
168
|
+
exports[`CardContent rendering the defult props 1`] = `
|
|
169
|
+
<DocumentFragment>
|
|
170
|
+
<div
|
|
171
|
+
class="grow basis shrinkOff scrolly"
|
|
172
|
+
data-id="CardContent"
|
|
173
|
+
data-selector-id="cardContent"
|
|
174
|
+
data-test-id="CardContent"
|
|
175
|
+
/>
|
|
176
|
+
</DocumentFragment>
|
|
177
|
+
`;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`CardHeader rendering the Children is true 1`] = `
|
|
4
|
+
<DocumentFragment>
|
|
5
|
+
<div
|
|
6
|
+
class="notScroll shrinkOff"
|
|
7
|
+
data-id="CardHeader"
|
|
8
|
+
data-selector-id="cardHeader"
|
|
9
|
+
data-test-id="CardHeader"
|
|
10
|
+
>
|
|
11
|
+
Children
|
|
12
|
+
</div>
|
|
13
|
+
</DocumentFragment>
|
|
14
|
+
`;
|
|
15
|
+
|
|
16
|
+
exports[`CardHeader rendering the customClass 1`] = `
|
|
17
|
+
<DocumentFragment>
|
|
18
|
+
<div
|
|
19
|
+
class="notScroll cardHeader-class shrinkOff"
|
|
20
|
+
data-id="CardHeader"
|
|
21
|
+
data-selector-id="cardHeader"
|
|
22
|
+
data-test-id="CardHeader"
|
|
23
|
+
>
|
|
24
|
+
Children
|
|
25
|
+
</div>
|
|
26
|
+
</DocumentFragment>
|
|
27
|
+
`;
|
|
28
|
+
|
|
29
|
+
exports[`CardHeader rendering the defult props 1`] = `
|
|
30
|
+
<DocumentFragment>
|
|
31
|
+
<div
|
|
32
|
+
class="notScroll shrinkOff"
|
|
33
|
+
data-id="CardHeader"
|
|
34
|
+
data-selector-id="cardHeader"
|
|
35
|
+
data-test-id="CardHeader"
|
|
36
|
+
/>
|
|
37
|
+
</DocumentFragment>
|
|
38
|
+
`;
|
|
39
|
+
|
|
40
|
+
exports[`CardHeader rendering the isScroll is true 1`] = `
|
|
41
|
+
<DocumentFragment>
|
|
42
|
+
<div
|
|
43
|
+
class="scroll shrinkOff"
|
|
44
|
+
data-id="CardHeader"
|
|
45
|
+
data-selector-id="cardHeader"
|
|
46
|
+
data-test-id="CardHeader"
|
|
47
|
+
>
|
|
48
|
+
Children
|
|
49
|
+
</div>
|
|
50
|
+
</DocumentFragment>
|
|
51
|
+
`;
|
package/es/ListItem/ListItem.js
CHANGED
|
@@ -7,6 +7,9 @@ import { ListItem_Props } from "./props/propTypes";
|
|
|
7
7
|
/**** Components ****/
|
|
8
8
|
|
|
9
9
|
import { Icon } from '@zohodesk/icons';
|
|
10
|
+
/*** Utils ****/
|
|
11
|
+
|
|
12
|
+
import { renderNode, isRenderable } from '@zohodesk/utils';
|
|
10
13
|
/**** CSS ****/
|
|
11
14
|
|
|
12
15
|
import style from "./ListItem.module.css";
|
|
@@ -71,7 +74,8 @@ export default class ListItem extends React.Component {
|
|
|
71
74
|
customClass,
|
|
72
75
|
customProps,
|
|
73
76
|
needMultiLineText,
|
|
74
|
-
secondaryValue
|
|
77
|
+
secondaryValue,
|
|
78
|
+
renderValueRightPlaceholderNode
|
|
75
79
|
} = this.props;
|
|
76
80
|
let {
|
|
77
81
|
ListItemProps = {},
|
|
@@ -79,7 +83,8 @@ export default class ListItem extends React.Component {
|
|
|
79
83
|
} = customProps;
|
|
80
84
|
let {
|
|
81
85
|
customListItem = '',
|
|
82
|
-
customTickIcon = ''
|
|
86
|
+
customTickIcon = '',
|
|
87
|
+
customValueRightPlaceholder = ''
|
|
83
88
|
} = customClass;
|
|
84
89
|
const listA11y = {
|
|
85
90
|
ariaHidden: true,
|
|
@@ -123,7 +128,9 @@ export default class ListItem extends React.Component {
|
|
|
123
128
|
shrink: true,
|
|
124
129
|
adjust: true,
|
|
125
130
|
className: needMultiLineText ? style.multiLineValue : style.value
|
|
126
|
-
}, value) : null,
|
|
131
|
+
}, value) : null, isRenderable(renderValueRightPlaceholderNode) ? /*#__PURE__*/React.createElement(Box, {
|
|
132
|
+
className: customValueRightPlaceholder
|
|
133
|
+
}, renderNode(renderValueRightPlaceholderNode)) : null, children ? /*#__PURE__*/React.createElement(Box, {
|
|
127
134
|
shrink: true,
|
|
128
135
|
adjust: true,
|
|
129
136
|
className: style.children
|
|
@@ -9,6 +9,9 @@ import { ListItemWithAvatar_Props } from "./props/propTypes";
|
|
|
9
9
|
import Avatar from "../Avatar/Avatar";
|
|
10
10
|
import AvatarTeam from "../AvatarTeam/AvatarTeam";
|
|
11
11
|
import { Icon } from '@zohodesk/icons';
|
|
12
|
+
/*** Utils ****/
|
|
13
|
+
|
|
14
|
+
import { renderNode, isRenderable } from '@zohodesk/utils';
|
|
12
15
|
/**** CSS ****/
|
|
13
16
|
|
|
14
17
|
import style from "./ListItem.module.css";
|
|
@@ -76,6 +79,7 @@ export default class ListItemWithAvatar extends React.PureComponent {
|
|
|
76
79
|
customProps,
|
|
77
80
|
needMultiLineText,
|
|
78
81
|
secondaryValue,
|
|
82
|
+
renderValueRightPlaceholderNode,
|
|
79
83
|
lhsAlignContent
|
|
80
84
|
} = this.props;
|
|
81
85
|
let {
|
|
@@ -87,7 +91,8 @@ export default class ListItemWithAvatar extends React.PureComponent {
|
|
|
87
91
|
let {
|
|
88
92
|
customListItem = '',
|
|
89
93
|
customAvatar = '',
|
|
90
|
-
customAvatarTeam = ''
|
|
94
|
+
customAvatarTeam = '',
|
|
95
|
+
customValueRightPlaceholder = ''
|
|
91
96
|
} = customClass;
|
|
92
97
|
const listA11y = {
|
|
93
98
|
ariaHidden: true,
|
|
@@ -148,16 +153,20 @@ export default class ListItemWithAvatar extends React.PureComponent {
|
|
|
148
153
|
...AvatarProps
|
|
149
154
|
}))) : null, /*#__PURE__*/React.createElement(Box, {
|
|
150
155
|
flexible: true,
|
|
151
|
-
|
|
152
|
-
}, /*#__PURE__*/React.createElement(
|
|
153
|
-
|
|
156
|
+
className: style.leftBox
|
|
157
|
+
}, /*#__PURE__*/React.createElement(Box, {
|
|
158
|
+
className: style.titleBox
|
|
154
159
|
}, value ? /*#__PURE__*/React.createElement(Box, {
|
|
160
|
+
shrink: true,
|
|
161
|
+
adjust: true,
|
|
155
162
|
"data-title": isDisabled ? null : title,
|
|
156
163
|
className: needMultiLineText ? style.multiLineValue : style.value
|
|
157
|
-
}, value) : null,
|
|
164
|
+
}, value) : null, isRenderable(renderValueRightPlaceholderNode) ? /*#__PURE__*/React.createElement(Box, {
|
|
165
|
+
className: customValueRightPlaceholder
|
|
166
|
+
}, renderNode(renderValueRightPlaceholderNode)) : null), secondaryValue ? /*#__PURE__*/React.createElement(Box, {
|
|
158
167
|
"data-title": isDisabled ? null : secondaryValue,
|
|
159
168
|
className: `${style.secondaryField} ${needMultiLineText ? style.multiLine : style.secondaryValue}`
|
|
160
|
-
}, secondaryValue) : null)
|
|
169
|
+
}, secondaryValue) : null), needTick && active ? /*#__PURE__*/React.createElement(Box, {
|
|
161
170
|
className: style.tickIcon,
|
|
162
171
|
"aria-hidden": ariaHidden,
|
|
163
172
|
dataId: `${dataIdString}_tickIcon`,
|
|
@@ -4,6 +4,7 @@ import { ListItemWithCheckBoxDefaultProps } from "./props/defaultProps";
|
|
|
4
4
|
import { ListItemWithCheckBox_Props } from "./props/propTypes";
|
|
5
5
|
import CheckBox from "../CheckBox/CheckBox";
|
|
6
6
|
import { Box, Container } from "../Layout";
|
|
7
|
+
import { renderNode, isRenderable } from '@zohodesk/utils';
|
|
7
8
|
import style from "./ListItem.module.css";
|
|
8
9
|
export default class ListItemWithCheckBox extends React.Component {
|
|
9
10
|
constructor(props) {
|
|
@@ -61,6 +62,7 @@ export default class ListItemWithCheckBox extends React.Component {
|
|
|
61
62
|
customProps,
|
|
62
63
|
needMultiLineText,
|
|
63
64
|
secondaryValue,
|
|
65
|
+
renderValueRightPlaceholderNode,
|
|
64
66
|
lhsAlignContent,
|
|
65
67
|
lhsJustifyContent
|
|
66
68
|
} = this.props;
|
|
@@ -75,7 +77,8 @@ export default class ListItemWithCheckBox extends React.Component {
|
|
|
75
77
|
let {
|
|
76
78
|
customListItem = '',
|
|
77
79
|
customCheckBox = '',
|
|
78
|
-
customLabel = ''
|
|
80
|
+
customLabel = '',
|
|
81
|
+
customValueRightPlaceholder = ''
|
|
79
82
|
} = customClass;
|
|
80
83
|
return /*#__PURE__*/React.createElement(ListContainer, {
|
|
81
84
|
a11y: listA11y,
|
|
@@ -112,16 +115,20 @@ export default class ListItemWithCheckBox extends React.Component {
|
|
|
112
115
|
}
|
|
113
116
|
}))), /*#__PURE__*/React.createElement(Box, {
|
|
114
117
|
flexible: true,
|
|
115
|
-
|
|
116
|
-
}, /*#__PURE__*/React.createElement(
|
|
117
|
-
|
|
118
|
+
className: style.leftBox
|
|
119
|
+
}, /*#__PURE__*/React.createElement(Box, {
|
|
120
|
+
className: style.titleBox
|
|
118
121
|
}, value ? /*#__PURE__*/React.createElement(Box, {
|
|
122
|
+
shrink: true,
|
|
123
|
+
adjust: true,
|
|
119
124
|
"data-title": isDisabled ? null : title,
|
|
120
125
|
className: needMultiLineText ? style.multiLineValue : style.value
|
|
121
|
-
}, value) : null,
|
|
126
|
+
}, value) : null, isRenderable(renderValueRightPlaceholderNode) ? /*#__PURE__*/React.createElement(Box, {
|
|
127
|
+
className: customValueRightPlaceholder
|
|
128
|
+
}, renderNode(renderValueRightPlaceholderNode)) : null), secondaryValue ? /*#__PURE__*/React.createElement(Box, {
|
|
122
129
|
"data-title": isDisabled ? null : secondaryValue,
|
|
123
130
|
className: `${style.secondaryField} ${needMultiLineText ? style.multiLine : style.secondaryValue}`
|
|
124
|
-
}, secondaryValue) : null))
|
|
131
|
+
}, secondaryValue) : null));
|
|
125
132
|
}
|
|
126
133
|
|
|
127
134
|
}
|
|
@@ -5,6 +5,9 @@ import { Icon } from '@zohodesk/icons';
|
|
|
5
5
|
import ListContainer from "./ListContainer";
|
|
6
6
|
import { ListItemWithIconDefaultProps } from "./props/defaultProps";
|
|
7
7
|
import { ListItemWithIcon_Props } from "./props/propTypes";
|
|
8
|
+
/*** Utils ****/
|
|
9
|
+
|
|
10
|
+
import { renderNode, isRenderable } from '@zohodesk/utils';
|
|
8
11
|
/**** CSS ****/
|
|
9
12
|
|
|
10
13
|
import style from "./ListItem.module.css";
|
|
@@ -69,9 +72,11 @@ export default class ListItemWithIcon extends React.Component {
|
|
|
69
72
|
disableTitle,
|
|
70
73
|
a11y,
|
|
71
74
|
customClass,
|
|
75
|
+
customValueRightPlaceholderClass,
|
|
72
76
|
customProps,
|
|
73
77
|
needMultiLineText,
|
|
74
78
|
secondaryValue,
|
|
79
|
+
renderValueRightPlaceholderNode,
|
|
75
80
|
lhsAlignContent,
|
|
76
81
|
lhsJustifyContent
|
|
77
82
|
} = this.props;
|
|
@@ -127,17 +132,21 @@ export default class ListItemWithIcon extends React.Component {
|
|
|
127
132
|
className: iconClass
|
|
128
133
|
}) : null, /*#__PURE__*/React.createElement(Box, {
|
|
129
134
|
flexible: true,
|
|
130
|
-
|
|
131
|
-
}, /*#__PURE__*/React.createElement(
|
|
132
|
-
|
|
135
|
+
className: style.leftBox
|
|
136
|
+
}, /*#__PURE__*/React.createElement(Box, {
|
|
137
|
+
className: style.titleBox
|
|
133
138
|
}, value ? /*#__PURE__*/React.createElement(Box, {
|
|
139
|
+
shrink: true,
|
|
140
|
+
adjust: true,
|
|
134
141
|
className: needMultiLineText ? style.multiLineValue : style.value,
|
|
135
142
|
"data-title": isDisabled ? null : title,
|
|
136
143
|
dataId: `${dataIdString}_Text`
|
|
137
|
-
}, value) : null,
|
|
144
|
+
}, value) : null, isRenderable(renderValueRightPlaceholderNode) ? /*#__PURE__*/React.createElement(Box, {
|
|
145
|
+
className: customValueRightPlaceholderClass
|
|
146
|
+
}, renderNode(renderValueRightPlaceholderNode)) : null), secondaryValue ? /*#__PURE__*/React.createElement(Box, {
|
|
138
147
|
"data-title": isDisabled ? null : secondaryValue,
|
|
139
148
|
className: `${style.secondaryField} ${needMultiLineText ? style.multiLine : style.secondaryValue}`
|
|
140
|
-
}, secondaryValue) : null)
|
|
149
|
+
}, secondaryValue) : null), needTick && active ? /*#__PURE__*/React.createElement(Box, {
|
|
141
150
|
className: style.tickIcon,
|
|
142
151
|
"aria-hidden": ariaHidden,
|
|
143
152
|
dataId: `${dataIdString}_tickIcon`,
|
|
@@ -4,6 +4,7 @@ import { Box, Container } from "../Layout";
|
|
|
4
4
|
import ListContainer from "./ListContainer";
|
|
5
5
|
import { ListItemWithRadioDefaultProps } from "./props/defaultProps";
|
|
6
6
|
import { ListItemWithRadio_Props } from "./props/propTypes";
|
|
7
|
+
import { renderNode, isRenderable } from '@zohodesk/utils';
|
|
7
8
|
import style from "./ListItem.module.css";
|
|
8
9
|
export default class ListItemWithRadio extends React.Component {
|
|
9
10
|
constructor(props) {
|
|
@@ -62,6 +63,7 @@ export default class ListItemWithRadio extends React.Component {
|
|
|
62
63
|
customProps,
|
|
63
64
|
needMultiLineText,
|
|
64
65
|
secondaryValue,
|
|
66
|
+
renderValueRightPlaceholderNode,
|
|
65
67
|
lhsAlignContent,
|
|
66
68
|
lhsJustifyContent
|
|
67
69
|
} = this.props;
|
|
@@ -76,7 +78,8 @@ export default class ListItemWithRadio extends React.Component {
|
|
|
76
78
|
let {
|
|
77
79
|
customListItem = '',
|
|
78
80
|
customRadio = '',
|
|
79
|
-
customRadioWrap = ''
|
|
81
|
+
customRadioWrap = '',
|
|
82
|
+
customValueRightPlaceholder = ''
|
|
80
83
|
} = customClass;
|
|
81
84
|
return /*#__PURE__*/React.createElement(ListContainer, {
|
|
82
85
|
a11y: listA11y,
|
|
@@ -115,16 +118,20 @@ export default class ListItemWithRadio extends React.Component {
|
|
|
115
118
|
}
|
|
116
119
|
}))), /*#__PURE__*/React.createElement(Box, {
|
|
117
120
|
flexible: true,
|
|
118
|
-
|
|
119
|
-
}, /*#__PURE__*/React.createElement(
|
|
120
|
-
|
|
121
|
+
className: style.leftBox
|
|
122
|
+
}, /*#__PURE__*/React.createElement(Box, {
|
|
123
|
+
className: style.titleBox
|
|
121
124
|
}, value ? /*#__PURE__*/React.createElement(Box, {
|
|
125
|
+
shrink: true,
|
|
126
|
+
adjust: true,
|
|
122
127
|
"data-title": disableTitle ? null : title,
|
|
123
128
|
className: needMultiLineText ? style.multiLineValue : style.value
|
|
124
|
-
}, value) : null,
|
|
129
|
+
}, value) : null, isRenderable(renderValueRightPlaceholderNode) ? /*#__PURE__*/React.createElement(Box, {
|
|
130
|
+
className: customValueRightPlaceholder
|
|
131
|
+
}, renderNode(renderValueRightPlaceholderNode)) : null), secondaryValue ? /*#__PURE__*/React.createElement(Box, {
|
|
125
132
|
"data-title": isDisabled ? null : secondaryValue,
|
|
126
133
|
className: `${style.secondaryField} ${needMultiLineText ? style.multiLine : style.secondaryValue}`
|
|
127
|
-
}, secondaryValue) : null))
|
|
134
|
+
}, secondaryValue) : null));
|
|
128
135
|
}
|
|
129
136
|
|
|
130
137
|
}
|
|
@@ -8,4 +8,23 @@ describe('ListItem', () => {
|
|
|
8
8
|
} = render( /*#__PURE__*/React.createElement(ListItem, null));
|
|
9
9
|
expect(asFragment()).toMatchSnapshot();
|
|
10
10
|
});
|
|
11
|
+
test('ListItem with renderValueRightPlaceholderNode', () => {
|
|
12
|
+
const {
|
|
13
|
+
asFragment
|
|
14
|
+
} = render( /*#__PURE__*/React.createElement(ListItem, {
|
|
15
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder")
|
|
16
|
+
}));
|
|
17
|
+
expect(asFragment()).toMatchSnapshot();
|
|
18
|
+
});
|
|
19
|
+
test('ListItem with renderValueRightPlaceholderNode & it\'s custom class', () => {
|
|
20
|
+
const {
|
|
21
|
+
asFragment
|
|
22
|
+
} = render( /*#__PURE__*/React.createElement(ListItem, {
|
|
23
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder"),
|
|
24
|
+
customClass: {
|
|
25
|
+
customValueRightPlaceholder: "customValueRightPlaceholderClass"
|
|
26
|
+
}
|
|
27
|
+
}));
|
|
28
|
+
expect(asFragment()).toMatchSnapshot();
|
|
29
|
+
});
|
|
11
30
|
});
|
|
@@ -43,4 +43,23 @@ describe('ListItemWithAvatar', () => {
|
|
|
43
43
|
}));
|
|
44
44
|
expect(asFragment()).toMatchSnapshot();
|
|
45
45
|
});
|
|
46
|
+
test('ListItemWithAvatar with renderValueRightPlaceholderNode', () => {
|
|
47
|
+
const {
|
|
48
|
+
asFragment
|
|
49
|
+
} = render( /*#__PURE__*/React.createElement(ListItemWithAvatar, {
|
|
50
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder")
|
|
51
|
+
}));
|
|
52
|
+
expect(asFragment()).toMatchSnapshot();
|
|
53
|
+
});
|
|
54
|
+
test('ListItemWithAvatar with renderValueRightPlaceholderNode & it\'s custom class', () => {
|
|
55
|
+
const {
|
|
56
|
+
asFragment
|
|
57
|
+
} = render( /*#__PURE__*/React.createElement(ListItemWithAvatar, {
|
|
58
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder"),
|
|
59
|
+
customClass: {
|
|
60
|
+
customValueRightPlaceholder: "customValueRightPlaceholderClass"
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
expect(asFragment()).toMatchSnapshot();
|
|
64
|
+
});
|
|
46
65
|
});
|
|
@@ -43,4 +43,23 @@ describe('ListItemWithCheckBox', () => {
|
|
|
43
43
|
}));
|
|
44
44
|
expect(asFragment()).toMatchSnapshot();
|
|
45
45
|
});
|
|
46
|
+
test('ListItemWithCheckBox with renderValueRightPlaceholderNode', () => {
|
|
47
|
+
const {
|
|
48
|
+
asFragment
|
|
49
|
+
} = render( /*#__PURE__*/React.createElement(ListItemWithCheckBox, {
|
|
50
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder")
|
|
51
|
+
}));
|
|
52
|
+
expect(asFragment()).toMatchSnapshot();
|
|
53
|
+
});
|
|
54
|
+
test('ListItemWithCheckBox with renderValueRightPlaceholderNode & it\'s custom class', () => {
|
|
55
|
+
const {
|
|
56
|
+
asFragment
|
|
57
|
+
} = render( /*#__PURE__*/React.createElement(ListItemWithCheckBox, {
|
|
58
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder"),
|
|
59
|
+
customClass: {
|
|
60
|
+
customValueRightPlaceholder: "customValueRightPlaceholderClass"
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
expect(asFragment()).toMatchSnapshot();
|
|
64
|
+
});
|
|
46
65
|
});
|
|
@@ -43,4 +43,21 @@ describe('ListItemWithIcon', () => {
|
|
|
43
43
|
}));
|
|
44
44
|
expect(asFragment()).toMatchSnapshot();
|
|
45
45
|
});
|
|
46
|
+
test('ListItemWithIcon with renderValueRightPlaceholderNode', () => {
|
|
47
|
+
const {
|
|
48
|
+
asFragment
|
|
49
|
+
} = render( /*#__PURE__*/React.createElement(ListItemWithIcon, {
|
|
50
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder")
|
|
51
|
+
}));
|
|
52
|
+
expect(asFragment()).toMatchSnapshot();
|
|
53
|
+
});
|
|
54
|
+
test('ListItemWithIcon with renderValueRightPlaceholderNode & it\'s custom class', () => {
|
|
55
|
+
const {
|
|
56
|
+
asFragment
|
|
57
|
+
} = render( /*#__PURE__*/React.createElement(ListItemWithIcon, {
|
|
58
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder"),
|
|
59
|
+
customValueRightPlaceholderClass: "customValueRightPlaceholderClass"
|
|
60
|
+
}));
|
|
61
|
+
expect(asFragment()).toMatchSnapshot();
|
|
62
|
+
});
|
|
46
63
|
});
|
|
@@ -43,4 +43,23 @@ describe('ListItemWithRadio', () => {
|
|
|
43
43
|
}));
|
|
44
44
|
expect(asFragment()).toMatchSnapshot();
|
|
45
45
|
});
|
|
46
|
+
test('ListItemWithRadio with renderValueRightPlaceholderNode', () => {
|
|
47
|
+
const {
|
|
48
|
+
asFragment
|
|
49
|
+
} = render( /*#__PURE__*/React.createElement(ListItemWithRadio, {
|
|
50
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder")
|
|
51
|
+
}));
|
|
52
|
+
expect(asFragment()).toMatchSnapshot();
|
|
53
|
+
});
|
|
54
|
+
test('ListItemWithRadio with renderValueRightPlaceholderNode & it\'s custom class', () => {
|
|
55
|
+
const {
|
|
56
|
+
asFragment
|
|
57
|
+
} = render( /*#__PURE__*/React.createElement(ListItemWithRadio, {
|
|
58
|
+
renderValueRightPlaceholderNode: () => /*#__PURE__*/React.createElement("div", null, "Custom Placeholder"),
|
|
59
|
+
customClass: {
|
|
60
|
+
customValueRightPlaceholder: "customValueRightPlaceholderClass"
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
expect(asFragment()).toMatchSnapshot();
|
|
64
|
+
});
|
|
46
65
|
});
|
|
@@ -1,5 +1,83 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
|
+
exports[`ListItem ListItem with renderValueRightPlaceholderNode & it's custom class 1`] = `
|
|
4
|
+
<DocumentFragment>
|
|
5
|
+
<li
|
|
6
|
+
class="list medium default withBorder flex rowdir vCenter"
|
|
7
|
+
data-a11y-inset-focus="true"
|
|
8
|
+
data-id="listItem"
|
|
9
|
+
data-selector-id="listItem"
|
|
10
|
+
data-test-id="listItem"
|
|
11
|
+
role="option"
|
|
12
|
+
tabindex="0"
|
|
13
|
+
>
|
|
14
|
+
<div
|
|
15
|
+
class="leftBox grow basis shrinkOff"
|
|
16
|
+
data-id="boxComponent"
|
|
17
|
+
data-selector-id="box"
|
|
18
|
+
data-test-id="boxComponent"
|
|
19
|
+
>
|
|
20
|
+
<div
|
|
21
|
+
class="titleBox shrinkOff"
|
|
22
|
+
data-id="boxComponent"
|
|
23
|
+
data-selector-id="box"
|
|
24
|
+
data-test-id="boxComponent"
|
|
25
|
+
>
|
|
26
|
+
<div
|
|
27
|
+
class="customValueRightPlaceholderClass shrinkOff"
|
|
28
|
+
data-id="boxComponent"
|
|
29
|
+
data-selector-id="box"
|
|
30
|
+
data-test-id="boxComponent"
|
|
31
|
+
>
|
|
32
|
+
<div>
|
|
33
|
+
Custom Placeholder
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</li>
|
|
39
|
+
</DocumentFragment>
|
|
40
|
+
`;
|
|
41
|
+
|
|
42
|
+
exports[`ListItem ListItem with renderValueRightPlaceholderNode 1`] = `
|
|
43
|
+
<DocumentFragment>
|
|
44
|
+
<li
|
|
45
|
+
class="list medium default withBorder flex rowdir vCenter"
|
|
46
|
+
data-a11y-inset-focus="true"
|
|
47
|
+
data-id="listItem"
|
|
48
|
+
data-selector-id="listItem"
|
|
49
|
+
data-test-id="listItem"
|
|
50
|
+
role="option"
|
|
51
|
+
tabindex="0"
|
|
52
|
+
>
|
|
53
|
+
<div
|
|
54
|
+
class="leftBox grow basis shrinkOff"
|
|
55
|
+
data-id="boxComponent"
|
|
56
|
+
data-selector-id="box"
|
|
57
|
+
data-test-id="boxComponent"
|
|
58
|
+
>
|
|
59
|
+
<div
|
|
60
|
+
class="titleBox shrinkOff"
|
|
61
|
+
data-id="boxComponent"
|
|
62
|
+
data-selector-id="box"
|
|
63
|
+
data-test-id="boxComponent"
|
|
64
|
+
>
|
|
65
|
+
<div
|
|
66
|
+
class="shrinkOff"
|
|
67
|
+
data-id="boxComponent"
|
|
68
|
+
data-selector-id="box"
|
|
69
|
+
data-test-id="boxComponent"
|
|
70
|
+
>
|
|
71
|
+
<div>
|
|
72
|
+
Custom Placeholder
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</li>
|
|
78
|
+
</DocumentFragment>
|
|
79
|
+
`;
|
|
80
|
+
|
|
3
81
|
exports[`ListItem rendering the defult props 1`] = `
|
|
4
82
|
<DocumentFragment>
|
|
5
83
|
<li
|