@hitachivantara/uikit-react-core 5.24.5 → 5.24.6
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/dist/cjs/components/BaseDropdown/BaseDropdown.cjs +5 -0
- package/dist/cjs/components/BaseDropdown/BaseDropdown.cjs.map +1 -1
- package/dist/cjs/components/Dropdown/Dropdown.cjs +1 -0
- package/dist/cjs/components/Dropdown/Dropdown.cjs.map +1 -1
- package/dist/cjs/components/Focus/Focus.cjs +25 -39
- package/dist/cjs/components/Focus/Focus.cjs.map +1 -1
- package/dist/cjs/components/Focus/Focus.styles.cjs +43 -40
- package/dist/cjs/components/Focus/Focus.styles.cjs.map +1 -1
- package/dist/cjs/components/List/List.cjs +38 -28
- package/dist/cjs/components/List/List.cjs.map +1 -1
- package/dist/cjs/components/List/List.styles.cjs +38 -149
- package/dist/cjs/components/List/List.styles.cjs.map +1 -1
- package/dist/cjs/components/MultiButton/MultiButton.cjs +15 -11
- package/dist/cjs/components/MultiButton/MultiButton.cjs.map +1 -1
- package/dist/cjs/components/MultiButton/MultiButton.styles.cjs +109 -151
- package/dist/cjs/components/MultiButton/MultiButton.styles.cjs.map +1 -1
- package/dist/cjs/components/SimpleGrid/SimpleGrid.cjs +11 -3
- package/dist/cjs/components/SimpleGrid/SimpleGrid.cjs.map +1 -1
- package/dist/cjs/components/SimpleGrid/SimpleGrid.styles.cjs +29 -28
- package/dist/cjs/components/SimpleGrid/SimpleGrid.styles.cjs.map +1 -1
- package/dist/cjs/components/VerticalNavigation/NavigationSlider/NavigationSlider.styles.cjs +1 -1
- package/dist/cjs/index.cjs +6 -6
- package/dist/esm/components/BaseDropdown/BaseDropdown.js +5 -0
- package/dist/esm/components/BaseDropdown/BaseDropdown.js.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +1 -0
- package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/Focus/Focus.js +27 -41
- package/dist/esm/components/Focus/Focus.js.map +1 -1
- package/dist/esm/components/Focus/Focus.styles.js +43 -38
- package/dist/esm/components/Focus/Focus.styles.js.map +1 -1
- package/dist/esm/components/List/List.js +39 -28
- package/dist/esm/components/List/List.js.map +1 -1
- package/dist/esm/components/List/List.styles.js +38 -147
- package/dist/esm/components/List/List.styles.js.map +1 -1
- package/dist/esm/components/MultiButton/MultiButton.js +18 -13
- package/dist/esm/components/MultiButton/MultiButton.js.map +1 -1
- package/dist/esm/components/MultiButton/MultiButton.styles.js +109 -149
- package/dist/esm/components/MultiButton/MultiButton.styles.js.map +1 -1
- package/dist/esm/components/SimpleGrid/SimpleGrid.js +12 -4
- package/dist/esm/components/SimpleGrid/SimpleGrid.js.map +1 -1
- package/dist/esm/components/SimpleGrid/SimpleGrid.styles.js +29 -26
- package/dist/esm/components/SimpleGrid/SimpleGrid.styles.js.map +1 -1
- package/dist/esm/components/VerticalNavigation/NavigationSlider/NavigationSlider.styles.js +1 -1
- package/dist/esm/index.js +238 -238
- package/dist/types/index.d.ts +395 -374
- package/package.json +5 -5
- package/dist/cjs/components/Focus/focusClasses.cjs +0 -8
- package/dist/cjs/components/Focus/focusClasses.cjs.map +0 -1
- package/dist/cjs/components/List/listClasses.cjs +0 -8
- package/dist/cjs/components/List/listClasses.cjs.map +0 -1
- package/dist/cjs/components/MultiButton/multiButtonClasses.cjs +0 -8
- package/dist/cjs/components/MultiButton/multiButtonClasses.cjs.map +0 -1
- package/dist/esm/components/Focus/focusClasses.js +0 -8
- package/dist/esm/components/Focus/focusClasses.js.map +0 -1
- package/dist/esm/components/List/listClasses.js +0 -8
- package/dist/esm/components/List/listClasses.js.map +0 -1
- package/dist/esm/components/MultiButton/multiButtonClasses.js +0 -8
- package/dist/esm/components/MultiButton/multiButtonClasses.js.map +0 -1
|
@@ -1,43 +1,48 @@
|
|
|
1
|
-
import _styled from "@emotion/styled/base";
|
|
2
1
|
import { outlineStyles } from "../../utils/focusUtils.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
position: "absolute",
|
|
29
|
-
zIndex: "1",
|
|
30
|
-
...outlineStyles,
|
|
31
|
-
"@media (-webkit-min-device-pixel-ratio:0)": {
|
|
32
|
-
...outlineStyles
|
|
2
|
+
import { createClasses } from "../../utils/classes.js";
|
|
3
|
+
const {
|
|
4
|
+
staticClasses,
|
|
5
|
+
useClasses
|
|
6
|
+
} = createClasses("HvFocus", {
|
|
7
|
+
root: {},
|
|
8
|
+
selected: {},
|
|
9
|
+
disabled: {},
|
|
10
|
+
focusDisabled: {
|
|
11
|
+
outline: "none",
|
|
12
|
+
"& *:focus": {
|
|
13
|
+
outline: "none"
|
|
14
|
+
},
|
|
15
|
+
"& *": {
|
|
16
|
+
outline: "none !important"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
focused: {
|
|
20
|
+
...outlineStyles,
|
|
21
|
+
"@media (-webkit-min-device-pixel-ratio:0)": {
|
|
22
|
+
...outlineStyles
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
externalReference: {
|
|
26
|
+
position: "relative"
|
|
33
27
|
},
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
28
|
+
falseFocus: {
|
|
29
|
+
width: "98%",
|
|
30
|
+
height: "98%",
|
|
31
|
+
position: "absolute",
|
|
32
|
+
zIndex: "1",
|
|
33
|
+
...outlineStyles,
|
|
34
|
+
"@media (-webkit-min-device-pixel-ratio:0)": {
|
|
35
|
+
...outlineStyles
|
|
36
|
+
},
|
|
37
|
+
top: 0,
|
|
38
|
+
left: "0.5%",
|
|
39
|
+
backgroundColor: "transparent",
|
|
40
|
+
pointerEvents: "none"
|
|
41
|
+
},
|
|
42
|
+
focus: {}
|
|
43
|
+
});
|
|
39
44
|
export {
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
staticClasses,
|
|
46
|
+
useClasses
|
|
42
47
|
};
|
|
43
48
|
//# sourceMappingURL=Focus.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Focus.styles.js","sources":["../../../../src/components/Focus/Focus.styles.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Focus.styles.js","sources":["../../../../src/components/Focus/Focus.styles.tsx"],"sourcesContent":["import { outlineStyles } from \"@core/utils/focusUtils\";\nimport { createClasses } from \"@core/utils/classes\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvFocus\", {\n root: {},\n selected: {},\n disabled: {},\n focusDisabled: {\n outline: \"none\",\n \"& *:focus\": {\n outline: \"none\",\n },\n \"& *\": {\n outline: \"none !important\",\n },\n },\n focused: {\n ...outlineStyles,\n \"@media (-webkit-min-device-pixel-ratio:0)\": {\n ...outlineStyles,\n },\n },\n externalReference: {\n position: \"relative\",\n },\n falseFocus: {\n width: \"98%\",\n height: \"98%\",\n position: \"absolute\",\n zIndex: \"1\",\n ...outlineStyles,\n \"@media (-webkit-min-device-pixel-ratio:0)\": {\n ...outlineStyles,\n },\n top: 0,\n left: \"0.5%\",\n backgroundColor: \"transparent\",\n pointerEvents: \"none\",\n },\n focus: {},\n});\n"],"names":["staticClasses","useClasses","createClasses","root","selected","disabled","focusDisabled","outline","focused","outlineStyles","externalReference","position","falseFocus","width","height","zIndex","top","left","backgroundColor","pointerEvents","focus"],"mappings":";;AAGa,MAAA;AAAA,EAAEA;AAAAA,EAAeC;AAAW,IAAIC,cAAc,WAAW;AAAA,EACpEC,MAAM,CAAC;AAAA,EACPC,UAAU,CAAC;AAAA,EACXC,UAAU,CAAC;AAAA,EACXC,eAAe;AAAA,IACbC,SAAS;AAAA,IACT,aAAa;AAAA,MACXA,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACLA,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACAC,SAAS;AAAA,IACP,GAAGC;AAAAA,IACH,6CAA6C;AAAA,MAC3C,GAAGA;AAAAA,IACL;AAAA,EACF;AAAA,EACAC,mBAAmB;AAAA,IACjBC,UAAU;AAAA,EACZ;AAAA,EACAC,YAAY;AAAA,IACVC,OAAO;AAAA,IACPC,QAAQ;AAAA,IACRH,UAAU;AAAA,IACVI,QAAQ;AAAA,IACR,GAAGN;AAAAA,IACH,6CAA6C;AAAA,MAC3C,GAAGA;AAAAA,IACL;AAAA,IACAO,KAAK;AAAA,IACLC,MAAM;AAAA,IACNC,iBAAiB;AAAA,IACjBC,eAAe;AAAA,EACjB;AAAA,EACAC,OAAO,CAAC;AACV,CAAC;"}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { useRef, useEffect, useMemo, forwardRef, isValidElement } from "react";
|
|
2
|
+
import { FixedSizeList } from "react-window";
|
|
3
|
+
import { DropRightXS } from "@hitachivantara/uikit-react-icons";
|
|
2
4
|
import { useDefaultProps } from "../../hooks/useDefaultProps.js";
|
|
3
|
-
import { clsx } from "clsx";
|
|
4
5
|
import { setId } from "../../utils/setId.js";
|
|
5
6
|
import { wrapperTooltip } from "../../utils/wrapperTooltip.js";
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
7
|
+
import { useClasses } from "./List.styles.js";
|
|
8
|
+
import { staticClasses } from "./List.styles.js";
|
|
8
9
|
import { useSelectableList } from "./useSelectableList.js";
|
|
9
10
|
import { parseList } from "./utils.js";
|
|
10
11
|
import { jsx, jsxs, Fragment } from "@emotion/react/jsx-runtime";
|
|
12
|
+
import { HvRadio } from "../Radio/Radio.js";
|
|
13
|
+
import { HvLink } from "../Link/Link.js";
|
|
11
14
|
import { HvListContainer } from "../ListContainer/ListContainer.js";
|
|
12
15
|
import { HvTypography } from "../Typography/Typography.js";
|
|
16
|
+
import { HvCheckBox } from "../CheckBox/CheckBox.js";
|
|
17
|
+
import { HvListItem } from "../ListContainer/ListItem/ListItem.js";
|
|
13
18
|
const DEFAULT_LABELS = {
|
|
14
19
|
selectAll: "Select All",
|
|
15
20
|
selectionConjunction: "/"
|
|
@@ -17,7 +22,7 @@ const DEFAULT_LABELS = {
|
|
|
17
22
|
const HvList = (props) => {
|
|
18
23
|
const {
|
|
19
24
|
id,
|
|
20
|
-
classes,
|
|
25
|
+
classes: classesProp,
|
|
21
26
|
className,
|
|
22
27
|
multiSelect = false,
|
|
23
28
|
hasTooltips = false,
|
|
@@ -34,6 +39,10 @@ const HvList = (props) => {
|
|
|
34
39
|
virtualized = false,
|
|
35
40
|
...others
|
|
36
41
|
} = useDefaultProps("HvList", props);
|
|
42
|
+
const {
|
|
43
|
+
classes,
|
|
44
|
+
cx
|
|
45
|
+
} = useClasses(classesProp);
|
|
37
46
|
const [list, setList, selection] = useSelectableList(valuesProp);
|
|
38
47
|
const listRef = useRef(null);
|
|
39
48
|
useEffect(() => {
|
|
@@ -97,37 +106,37 @@ const HvList = (props) => {
|
|
|
97
106
|
}), ` ${selectionConjunction} `, list.length]
|
|
98
107
|
})
|
|
99
108
|
});
|
|
100
|
-
return /* @__PURE__ */ jsx(
|
|
109
|
+
return /* @__PURE__ */ jsx(HvCheckBox, {
|
|
101
110
|
id: setId(id, "select-all"),
|
|
102
111
|
label: selectionLabel,
|
|
103
112
|
onChange: handleSelectAll,
|
|
104
|
-
className:
|
|
113
|
+
className: classes.selectAllSelector,
|
|
105
114
|
indeterminate: anySelected2 && !allSelected,
|
|
106
115
|
checked: allSelected
|
|
107
116
|
});
|
|
108
117
|
};
|
|
109
118
|
const renderItemText = (item) => {
|
|
110
119
|
const ItemText = wrapperTooltip(hasTooltips, item.label, item.label);
|
|
111
|
-
return !multiSelect && item.path ? /* @__PURE__ */ jsx(
|
|
120
|
+
return !multiSelect && item.path ? /* @__PURE__ */ jsx(HvLink, {
|
|
112
121
|
route: item.path,
|
|
113
122
|
classes: {
|
|
114
|
-
a:
|
|
123
|
+
a: classes.link
|
|
115
124
|
},
|
|
116
125
|
children: /* @__PURE__ */ jsx(ItemText, {})
|
|
117
126
|
}, item.label) : /* @__PURE__ */ jsx(ItemText, {});
|
|
118
127
|
};
|
|
119
128
|
const renderMultiSelectItem = (item, itemId) => {
|
|
120
129
|
if (useSelector) {
|
|
121
|
-
const Selection = wrapperTooltip(hasTooltips, /* @__PURE__ */ jsx(
|
|
130
|
+
const Selection = wrapperTooltip(hasTooltips, /* @__PURE__ */ jsx(HvCheckBox, {
|
|
122
131
|
id: setId(itemId, "selector"),
|
|
123
132
|
label: item.label,
|
|
124
133
|
checked: item.selected,
|
|
125
134
|
disabled: item.disabled,
|
|
126
135
|
onChange: (evt) => handleSelect(evt, item),
|
|
127
136
|
classes: {
|
|
128
|
-
root:
|
|
129
|
-
container:
|
|
130
|
-
label:
|
|
137
|
+
root: classes.selectorRoot,
|
|
138
|
+
container: classes.selectorContainer,
|
|
139
|
+
label: classes.truncate
|
|
131
140
|
}
|
|
132
141
|
}), item.label);
|
|
133
142
|
return /* @__PURE__ */ jsx(Selection, {});
|
|
@@ -136,15 +145,15 @@ const HvList = (props) => {
|
|
|
136
145
|
};
|
|
137
146
|
const renderSingleSelectItem = (item, itemId) => {
|
|
138
147
|
if (useSelector) {
|
|
139
|
-
const Selection = wrapperTooltip(hasTooltips, /* @__PURE__ */ jsx(
|
|
148
|
+
const Selection = wrapperTooltip(hasTooltips, /* @__PURE__ */ jsx(HvRadio, {
|
|
140
149
|
id: setId(itemId, "selector"),
|
|
141
150
|
label: item.label,
|
|
142
151
|
checked: item.selected,
|
|
143
152
|
disabled: item.disabled,
|
|
144
153
|
classes: {
|
|
145
|
-
root:
|
|
146
|
-
container:
|
|
147
|
-
label:
|
|
154
|
+
root: classes.selectorRoot,
|
|
155
|
+
container: classes.selectorContainer,
|
|
156
|
+
label: classes.truncate
|
|
148
157
|
}
|
|
149
158
|
}), item.label);
|
|
150
159
|
return /* @__PURE__ */ jsx(Selection, {});
|
|
@@ -158,22 +167,23 @@ const HvList = (props) => {
|
|
|
158
167
|
if (!useSelector && item.icon) {
|
|
159
168
|
startAdornment = renderLeftIcon(item);
|
|
160
169
|
}
|
|
161
|
-
return /* @__PURE__ */ jsx(
|
|
170
|
+
return /* @__PURE__ */ jsx(HvListItem, {
|
|
162
171
|
id: itemId,
|
|
163
172
|
role: selectable ? "option" : "menuitem",
|
|
164
173
|
disabled: item.disabled || void 0,
|
|
165
|
-
className:
|
|
174
|
+
className: classes.item,
|
|
166
175
|
classes: {
|
|
167
|
-
selected:
|
|
176
|
+
selected: cx({
|
|
177
|
+
[classes.itemSelector]: useSelector || multiSelect
|
|
178
|
+
})
|
|
168
179
|
},
|
|
169
180
|
selected: multiSelect || selected ? selected : void 0,
|
|
170
181
|
onClick: (evt) => handleSelect(evt, item),
|
|
171
182
|
startAdornment,
|
|
172
|
-
endAdornment: item.showNavIcon && /* @__PURE__ */ jsx(
|
|
173
|
-
className:
|
|
183
|
+
endAdornment: item.showNavIcon && /* @__PURE__ */ jsx(DropRightXS, {
|
|
184
|
+
className: classes.box,
|
|
174
185
|
iconSize: "XS"
|
|
175
186
|
}),
|
|
176
|
-
$applySelected: useSelector || multiSelect,
|
|
177
187
|
...otherProps,
|
|
178
188
|
children: multiSelect ? renderMultiSelectItem(item, itemId) : renderSingleSelectItem(item, itemId)
|
|
179
189
|
}, i);
|
|
@@ -210,7 +220,7 @@ const HvList = (props) => {
|
|
|
210
220
|
...rest
|
|
211
221
|
}, ref) => /* @__PURE__ */ jsx(HvListContainer, {
|
|
212
222
|
id,
|
|
213
|
-
className:
|
|
223
|
+
className: cx(classes.root, className),
|
|
214
224
|
role: selectable ? "listbox" : "menu",
|
|
215
225
|
interactive: true,
|
|
216
226
|
condensed,
|
|
@@ -219,11 +229,11 @@ const HvList = (props) => {
|
|
|
219
229
|
ref,
|
|
220
230
|
...rest
|
|
221
231
|
}));
|
|
222
|
-
}, [id, useSelector, className, classes, condensed, selectable, multiSelect]);
|
|
232
|
+
}, [cx, id, useSelector, className, classes, condensed, selectable, multiSelect]);
|
|
223
233
|
return /* @__PURE__ */ jsxs(Fragment, {
|
|
224
234
|
children: [multiSelect && useSelector && showSelectAll && renderSelectAll(), filteredList.length > 0 && !virtualized && /* @__PURE__ */ jsx(HvListContainer, {
|
|
225
235
|
id,
|
|
226
|
-
className:
|
|
236
|
+
className: cx(classes.root, className),
|
|
227
237
|
role: selectable ? "listbox" : "menu",
|
|
228
238
|
interactive: true,
|
|
229
239
|
condensed,
|
|
@@ -231,9 +241,9 @@ const HvList = (props) => {
|
|
|
231
241
|
"aria-multiselectable": selectable && multiSelect || void 0,
|
|
232
242
|
...others,
|
|
233
243
|
children: filteredList.map((item, i) => renderListItem(item, i))
|
|
234
|
-
}), filteredList.length > 0 && virtualized && /* @__PURE__ */ jsx(
|
|
244
|
+
}), filteredList.length > 0 && virtualized && /* @__PURE__ */ jsx(FixedSizeList, {
|
|
235
245
|
ref: listRef,
|
|
236
|
-
className:
|
|
246
|
+
className: classes.virtualizedRoot,
|
|
237
247
|
height: (height || 0) + 5,
|
|
238
248
|
width: "100%",
|
|
239
249
|
itemCount: filteredList.length,
|
|
@@ -245,6 +255,7 @@ const HvList = (props) => {
|
|
|
245
255
|
});
|
|
246
256
|
};
|
|
247
257
|
export {
|
|
248
|
-
HvList
|
|
258
|
+
HvList,
|
|
259
|
+
staticClasses as listClasses
|
|
249
260
|
};
|
|
250
261
|
//# sourceMappingURL=List.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.js","sources":["../../../../src/components/List/List.tsx"],"sourcesContent":["import { forwardRef, isValidElement, useEffect, useMemo, useRef } from \"react\";\nimport { useDefaultProps } from \"@core/hooks/useDefaultProps\";\n\nimport { clsx } from \"clsx\";\n\nimport { HvBaseProps } from \"@core/types/generic\";\nimport { HvListContainer } from \"@core/components/ListContainer\";\nimport { HvTypography } from \"@core/components/Typography\";\nimport { setId } from \"@core/utils/setId\";\nimport { wrapperTooltip } from \"@core/utils/wrapperTooltip\";\n\nimport {\n StyledFixedSizeList,\n StyledSelectAllCheckBox,\n StyledLink,\n StyledMultiSelectCheckBox,\n StyledSingleSelectRadio,\n StyledListItem,\n StyledDropRightXS,\n} from \"./List.styles\";\nimport listClasses, { HvListClasses } from \"./listClasses\";\nimport { useSelectableList } from \"./useSelectableList\";\nimport { parseList } from \"./utils\";\nimport { HvListLabels, HvListValue } from \"./types\";\n\nexport interface HvListProps\n extends HvBaseProps<HTMLUListElement, \"onChange\" | \"onClick\"> {\n /**\n * A list containing the elements to be rendered.\n *\n * - id: The id of the item.\n * - label: The label of the element to be rendered.\n * - selected: The selection state of the element.\n * - disabled: The disabled state of the element.\n * - isHidden: Is item visible.\n * - icon: The icon.\n * - showNavIcon: If true renders the navigation icon on the right.\n * - path: The path to navigate to.\n */\n values: HvListValue[];\n /** If true renders a multi select list. */\n multiSelect?: boolean;\n /**\n * If true renders select all option for multi selection lists with selectors.\n * note: It will only be rendered if multiSelect and useSelector props are set to true.\n */\n showSelectAll?: boolean;\n /** An object containing all the labels for the dropdown. */\n labels?: HvListLabels;\n /** If true renders list items with radio or checkbox selectors. */\n useSelector?: boolean;\n /** Call back fired when list item is selected. Returns selection state. */\n onChange?: (value: HvListValue[]) => void;\n /** Call back fired when list item is selected. Returns selected item. */\n onClick?: (\n event: React.ChangeEvent<HTMLLIElement>,\n value: HvListValue\n ) => void;\n /** If `true` the list items will show the selection state. */\n selectable?: boolean;\n /** If `true`, selection can be toggled when single selection. */\n singleSelectionToggle?: boolean;\n /** If `true` the list will be rendered without vertical spacing. */\n condensed?: boolean;\n /** If `true` the dropdown will show tooltips when user mouseenter text in list */\n hasTooltips?: boolean;\n /** Experimental. Height of the dropdown, in case you want to control it from a prop. Styles can also be used through dropdownListContainer class. Required in case virtualized is used */\n height?: number;\n /** Experimental. Uses dropdown in a virtualized form, where not all options are rendered initially. Good for use cases with a lot of options. */\n virtualized?: boolean;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvListClasses;\n}\n\nconst DEFAULT_LABELS = {\n selectAll: \"Select All\",\n selectionConjunction: \"/\",\n};\n\n/**\n * Component used to show a set of related data to the user.\n */\nexport const HvList = (props: HvListProps) => {\n const {\n id,\n classes,\n className,\n multiSelect = false,\n hasTooltips = false,\n showSelectAll = false,\n labels = DEFAULT_LABELS,\n useSelector = false,\n selectable = true,\n singleSelectionToggle = true,\n condensed = false,\n onChange,\n onClick,\n values: valuesProp = [],\n height,\n virtualized = false,\n ...others\n } = useDefaultProps(\"HvList\", props);\n\n const [list, setList, selection] = useSelectableList(valuesProp);\n const listRef = useRef<any>(null);\n\n useEffect(() => {\n const passedProps = { multiSelect, selectable, singleSelectionToggle };\n const parsedList: HvListValue[] = parseList(\n undefined,\n passedProps,\n undefined,\n valuesProp\n );\n\n setList(parsedList);\n }, [valuesProp, multiSelect, selectable, singleSelectionToggle, setList]);\n\n const handleSelect = (evt, item) => {\n if (!item.path) evt.preventDefault();\n if (item.disabled) return;\n\n const passedProps = { multiSelect, selectable, singleSelectionToggle };\n const parsedList = parseList(item, passedProps, undefined, list);\n setList(parsedList);\n\n onClick?.(evt, item);\n onChange?.(parsedList);\n };\n\n const handleSelectAll = () => {\n const passedProps = { multiSelect, selectable, singleSelectionToggle };\n const anySelectableSelected = list.some(\n (elem) => elem.selected || elem.disabled\n );\n const parsedList = parseList(\n undefined,\n passedProps,\n !anySelectableSelected,\n list\n );\n setList(parsedList);\n\n onChange?.(parsedList);\n };\n\n const renderLeftIcon = (item) => {\n return isValidElement(item.icon)\n ? item.icon\n : item.icon?.({\n isSelected: item.selected,\n isDisabled: item.disabled,\n });\n };\n\n const renderSelectAll = () => {\n const { selectAll, selectionConjunction } = labels;\n\n const anySelected = !!selection?.length;\n const allSelected = selection.length === list.length;\n\n const selectionLabel = (\n <HvTypography component=\"span\">\n {!anySelected ? (\n <>\n <b>{selectAll}</b>\n {` (${list.length})`}\n </>\n ) : (\n <>\n <b>{selection.length}</b>\n {`\\xa0${selectionConjunction}\\xa0`}\n {list.length}\n </>\n )}\n </HvTypography>\n );\n\n return (\n <StyledSelectAllCheckBox\n id={setId(id, \"select-all\")}\n label={selectionLabel}\n onChange={handleSelectAll}\n className={clsx(\n listClasses.selectAllSelector,\n classes?.selectAllSelector\n )}\n indeterminate={anySelected && !allSelected}\n checked={allSelected}\n />\n );\n };\n\n const renderItemText = (item) => {\n const ItemText = wrapperTooltip(hasTooltips, item.label, item.label);\n\n return !multiSelect && item.path ? (\n <StyledLink\n key={item.label}\n route={item.path}\n classes={{ a: clsx(listClasses.link, classes?.link) }}\n >\n <ItemText />\n </StyledLink>\n ) : (\n <ItemText />\n );\n };\n\n const renderMultiSelectItem = (item, itemId) => {\n if (useSelector) {\n const Selection = wrapperTooltip(\n hasTooltips,\n <StyledMultiSelectCheckBox\n id={setId(itemId, \"selector\")}\n label={item.label}\n checked={item.selected}\n disabled={item.disabled}\n onChange={(evt) => handleSelect(evt, item)}\n classes={{\n root: clsx(listClasses.selectorRoot, classes?.selectorRoot),\n container: clsx(\n listClasses.selectorContainer,\n classes?.selectorContainer\n ),\n label: clsx(listClasses.truncate, classes?.truncate),\n }}\n />,\n item.label\n );\n return <Selection />;\n }\n\n return renderItemText(item);\n };\n\n const renderSingleSelectItem = (item, itemId) => {\n if (useSelector) {\n const Selection = wrapperTooltip(\n hasTooltips,\n <StyledSingleSelectRadio\n id={setId(itemId, \"selector\")}\n label={item.label}\n checked={item.selected}\n disabled={item.disabled}\n classes={{\n root: clsx(listClasses.selectorRoot, classes?.selectorRoot),\n container: clsx(\n listClasses.selectorContainer,\n classes?.selectorContainer\n ),\n label: clsx(listClasses.truncate, classes?.truncate),\n }}\n />,\n item.label\n );\n return <Selection />;\n }\n return renderItemText(item);\n };\n\n const renderListItem = (item, i, otherProps = {}) => {\n const itemId = setId(id, \"item\", i);\n const selected = item.selected || false;\n\n let startAdornment = null;\n if (!useSelector && item.icon) {\n startAdornment = renderLeftIcon(item);\n }\n\n return (\n <StyledListItem\n key={i}\n id={itemId}\n role={selectable ? \"option\" : \"menuitem\"}\n disabled={item.disabled || undefined}\n className={clsx(listClasses.item, classes?.item)}\n classes={{\n selected:\n useSelector || multiSelect\n ? clsx(listClasses.itemSelector, classes?.itemSelector)\n : undefined,\n }}\n selected={multiSelect || selected ? selected : undefined}\n onClick={(evt) => handleSelect(evt, item)}\n startAdornment={startAdornment}\n endAdornment={\n item.showNavIcon && (\n <StyledDropRightXS\n className={clsx(listClasses.box, classes?.box)}\n iconSize=\"XS\"\n />\n )\n }\n $applySelected={useSelector || multiSelect}\n {...otherProps}\n >\n {multiSelect\n ? renderMultiSelectItem(item, itemId)\n : renderSingleSelectItem(item, itemId)}\n </StyledListItem>\n );\n };\n\n const filteredList = list.filter((it) => !it.isHidden);\n const anySelected = list\n .map((item) => item.selected && !item.disabled)\n .reduce((result, selected) => result || selected, false);\n\n const selectedItemIndex = list.findIndex((item) => item.selected);\n useEffect(() => {\n if (selectedItemIndex >= 0 && listRef.current !== null) {\n listRef.current.scrollToItem(selectedItemIndex);\n }\n }, [listRef, selectedItemIndex]);\n\n const ListItem = ({ index, style }) => {\n const item = filteredList[index];\n const tabIndex =\n item.tabIndex ||\n (!anySelected && index === 0) ||\n (item.selected && !item.disabled)\n ? 0\n : -1;\n\n return renderListItem(item, index, {\n style: {\n ...style,\n top: `${parseFloat(style.top) + 5}px`,\n left: `${parseFloat(style.left) + 5}px`,\n width: `calc(${parseFloat(style.width)}% - 10px)`,\n },\n tabIndex,\n interactive: true,\n condensed,\n disableGutters: useSelector,\n });\n };\n\n const renderFixedList = useMemo(() => {\n return forwardRef(({ ...rest }, ref) => (\n <HvListContainer\n id={id}\n className={clsx(className, listClasses.root, classes?.root)}\n role={selectable ? \"listbox\" : \"menu\"}\n interactive\n condensed={condensed}\n disableGutters={useSelector}\n aria-multiselectable={(selectable && multiSelect) || undefined}\n ref={ref}\n {...rest}\n />\n ));\n }, [id, useSelector, className, classes, condensed, selectable, multiSelect]);\n\n return (\n <>\n {multiSelect && useSelector && showSelectAll && renderSelectAll()}\n\n {filteredList.length > 0 && !virtualized && (\n <HvListContainer\n id={id}\n className={clsx(className, listClasses.root, classes?.root)}\n role={selectable ? \"listbox\" : \"menu\"}\n interactive\n condensed={condensed}\n disableGutters={useSelector}\n aria-multiselectable={(selectable && multiSelect) || undefined}\n {...others}\n >\n {filteredList.map((item, i) => renderListItem(item, i))}\n </HvListContainer>\n )}\n {filteredList.length > 0 && virtualized && (\n <StyledFixedSizeList\n ref={listRef}\n className={clsx(\n listClasses.virtualizedRoot,\n classes?.virtualizedRoot\n )}\n height={(height || 0) + 5}\n width=\"100%\"\n itemCount={filteredList.length}\n itemSize={condensed ? 32 : 40}\n innerElementType={renderFixedList}\n {...others}\n >\n {ListItem}\n </StyledFixedSizeList>\n )}\n </>\n );\n};\n"],"names":["DEFAULT_LABELS","selectAll","selectionConjunction","HvList","props","id","classes","className","multiSelect","hasTooltips","showSelectAll","labels","useSelector","selectable","singleSelectionToggle","condensed","onChange","onClick","values","valuesProp","height","virtualized","others","useDefaultProps","list","setList","selection","useSelectableList","listRef","useRef","useEffect","passedProps","parsedList","parseList","undefined","handleSelect","evt","item","path","preventDefault","disabled","handleSelectAll","anySelectableSelected","some","elem","selected","renderLeftIcon","isValidElement","icon","isSelected","isDisabled","renderSelectAll","anySelected","length","allSelected","selectionLabel","HvTypography","component","children","_jsxs","_Fragment","_jsx","StyledSelectAllCheckBox","setId","label","clsx","listClasses","selectAllSelector","indeterminate","checked","renderItemText","ItemText","wrapperTooltip","StyledLink","route","a","link","renderMultiSelectItem","itemId","Selection","StyledMultiSelectCheckBox","root","selectorRoot","container","selectorContainer","truncate","renderSingleSelectItem","StyledSingleSelectRadio","renderListItem","i","otherProps","startAdornment","StyledListItem","role","itemSelector","endAdornment","showNavIcon","StyledDropRightXS","box","iconSize","$applySelected","filteredList","filter","it","isHidden","map","reduce","result","selectedItemIndex","findIndex","current","scrollToItem","ListItem","index","style","tabIndex","top","parseFloat","left","width","interactive","disableGutters","renderFixedList","useMemo","forwardRef","rest","ref","HvListContainer","StyledFixedSizeList","virtualizedRoot","itemCount","itemSize","innerElementType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"List.js","sources":["../../../../src/components/List/List.tsx"],"sourcesContent":["import { forwardRef, isValidElement, useEffect, useMemo, useRef } from \"react\";\n\nimport { FixedSizeList } from \"react-window\";\n\nimport { DropRightXS } from \"@hitachivantara/uikit-react-icons\";\n\nimport { useDefaultProps } from \"@core/hooks/useDefaultProps\";\nimport { HvBaseProps } from \"@core/types/generic\";\nimport { HvListContainer, HvListItem } from \"@core/components/ListContainer\";\nimport { HvTypography } from \"@core/components/Typography\";\nimport { setId } from \"@core/utils/setId\";\nimport { wrapperTooltip } from \"@core/utils/wrapperTooltip\";\nimport { ExtractNames } from \"@core/utils/classes\";\nimport { HvCheckBox } from \"@core/components/CheckBox\";\nimport { HvLink } from \"@core/components/Link\";\nimport { HvRadio } from \"@core/components/Radio\";\n\nimport { staticClasses, useClasses } from \"./List.styles\";\nimport { useSelectableList } from \"./useSelectableList\";\nimport { parseList } from \"./utils\";\nimport { HvListLabels, HvListValue } from \"./types\";\n\nexport { staticClasses as listClasses };\n\nexport type HvListClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvListProps\n extends HvBaseProps<HTMLUListElement, \"onChange\" | \"onClick\"> {\n /**\n * A list containing the elements to be rendered.\n *\n * - id: The id of the item.\n * - label: The label of the element to be rendered.\n * - selected: The selection state of the element.\n * - disabled: The disabled state of the element.\n * - isHidden: Is item visible.\n * - icon: The icon.\n * - showNavIcon: If true renders the navigation icon on the right.\n * - path: The path to navigate to.\n */\n values: HvListValue[];\n /** If true renders a multi select list. */\n multiSelect?: boolean;\n /**\n * If true renders select all option for multi selection lists with selectors.\n * note: It will only be rendered if multiSelect and useSelector props are set to true.\n */\n showSelectAll?: boolean;\n /** An object containing all the labels for the dropdown. */\n labels?: HvListLabels;\n /** If true renders list items with radio or checkbox selectors. */\n useSelector?: boolean;\n /** Call back fired when list item is selected. Returns selection state. */\n onChange?: (value: HvListValue[]) => void;\n /** Call back fired when list item is selected. Returns selected item. */\n onClick?: (\n event: React.ChangeEvent<HTMLLIElement>,\n value: HvListValue\n ) => void;\n /** If `true` the list items will show the selection state. */\n selectable?: boolean;\n /** If `true`, selection can be toggled when single selection. */\n singleSelectionToggle?: boolean;\n /** If `true` the list will be rendered without vertical spacing. */\n condensed?: boolean;\n /** If `true` the dropdown will show tooltips when user mouseenter text in list */\n hasTooltips?: boolean;\n /** Experimental. Height of the dropdown, in case you want to control it from a prop. Styles can also be used through dropdownListContainer class. Required in case virtualized is used */\n height?: number;\n /** Experimental. Uses dropdown in a virtualized form, where not all options are rendered initially. Good for use cases with a lot of options. */\n virtualized?: boolean;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvListClasses;\n}\n\nconst DEFAULT_LABELS = {\n selectAll: \"Select All\",\n selectionConjunction: \"/\",\n};\n\n/**\n * Component used to show a set of related data to the user.\n */\nexport const HvList = (props: HvListProps) => {\n const {\n id,\n classes: classesProp,\n className,\n multiSelect = false,\n hasTooltips = false,\n showSelectAll = false,\n labels = DEFAULT_LABELS,\n useSelector = false,\n selectable = true,\n singleSelectionToggle = true,\n condensed = false,\n onChange,\n onClick,\n values: valuesProp = [],\n height,\n virtualized = false,\n ...others\n } = useDefaultProps(\"HvList\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n const [list, setList, selection] = useSelectableList(valuesProp);\n const listRef = useRef<any>(null);\n\n useEffect(() => {\n const passedProps = { multiSelect, selectable, singleSelectionToggle };\n const parsedList: HvListValue[] = parseList(\n undefined,\n passedProps,\n undefined,\n valuesProp\n );\n\n setList(parsedList);\n }, [valuesProp, multiSelect, selectable, singleSelectionToggle, setList]);\n\n const handleSelect = (evt, item) => {\n if (!item.path) evt.preventDefault();\n if (item.disabled) return;\n\n const passedProps = { multiSelect, selectable, singleSelectionToggle };\n const parsedList = parseList(item, passedProps, undefined, list);\n setList(parsedList);\n\n onClick?.(evt, item);\n onChange?.(parsedList);\n };\n\n const handleSelectAll = () => {\n const passedProps = { multiSelect, selectable, singleSelectionToggle };\n const anySelectableSelected = list.some(\n (elem) => elem.selected || elem.disabled\n );\n const parsedList = parseList(\n undefined,\n passedProps,\n !anySelectableSelected,\n list\n );\n setList(parsedList);\n\n onChange?.(parsedList);\n };\n\n const renderLeftIcon = (item) => {\n return isValidElement(item.icon)\n ? item.icon\n : item.icon?.({\n isSelected: item.selected,\n isDisabled: item.disabled,\n });\n };\n\n const renderSelectAll = () => {\n const { selectAll, selectionConjunction } = labels;\n\n const anySelected = !!selection?.length;\n const allSelected = selection.length === list.length;\n\n const selectionLabel = (\n <HvTypography component=\"span\">\n {!anySelected ? (\n <>\n <b>{selectAll}</b>\n {` (${list.length})`}\n </>\n ) : (\n <>\n <b>{selection.length}</b>\n {`\\xa0${selectionConjunction}\\xa0`}\n {list.length}\n </>\n )}\n </HvTypography>\n );\n\n return (\n <HvCheckBox\n id={setId(id, \"select-all\")}\n label={selectionLabel}\n onChange={handleSelectAll}\n className={classes.selectAllSelector}\n indeterminate={anySelected && !allSelected}\n checked={allSelected}\n />\n );\n };\n\n const renderItemText = (item) => {\n const ItemText = wrapperTooltip(hasTooltips, item.label, item.label);\n\n return !multiSelect && item.path ? (\n <HvLink key={item.label} route={item.path} classes={{ a: classes.link }}>\n <ItemText />\n </HvLink>\n ) : (\n <ItemText />\n );\n };\n\n const renderMultiSelectItem = (item, itemId) => {\n if (useSelector) {\n const Selection = wrapperTooltip(\n hasTooltips,\n <HvCheckBox\n id={setId(itemId, \"selector\")}\n label={item.label}\n checked={item.selected}\n disabled={item.disabled}\n onChange={(evt) => handleSelect(evt, item)}\n classes={{\n root: classes.selectorRoot,\n container: classes.selectorContainer,\n label: classes.truncate,\n }}\n />,\n item.label\n );\n return <Selection />;\n }\n\n return renderItemText(item);\n };\n\n const renderSingleSelectItem = (item, itemId) => {\n if (useSelector) {\n const Selection = wrapperTooltip(\n hasTooltips,\n <HvRadio\n id={setId(itemId, \"selector\")}\n label={item.label}\n checked={item.selected}\n disabled={item.disabled}\n classes={{\n root: classes.selectorRoot,\n container: classes.selectorContainer,\n label: classes.truncate,\n }}\n />,\n item.label\n );\n return <Selection />;\n }\n return renderItemText(item);\n };\n\n const renderListItem = (item, i, otherProps = {}) => {\n const itemId = setId(id, \"item\", i);\n const selected = item.selected || false;\n\n let startAdornment = null;\n if (!useSelector && item.icon) {\n startAdornment = renderLeftIcon(item);\n }\n\n return (\n <HvListItem\n key={i}\n id={itemId}\n role={selectable ? \"option\" : \"menuitem\"}\n disabled={item.disabled || undefined}\n className={classes.item}\n classes={{\n selected: cx({\n [classes.itemSelector]: useSelector || multiSelect,\n }),\n }}\n selected={multiSelect || selected ? selected : undefined}\n onClick={(evt) => handleSelect(evt, item)}\n startAdornment={startAdornment}\n endAdornment={\n item.showNavIcon && (\n <DropRightXS className={classes.box} iconSize=\"XS\" />\n )\n }\n {...otherProps}\n >\n {multiSelect\n ? renderMultiSelectItem(item, itemId)\n : renderSingleSelectItem(item, itemId)}\n </HvListItem>\n );\n };\n\n const filteredList = list.filter((it) => !it.isHidden);\n const anySelected = list\n .map((item) => item.selected && !item.disabled)\n .reduce((result, selected) => result || selected, false);\n\n const selectedItemIndex = list.findIndex((item) => item.selected);\n useEffect(() => {\n if (selectedItemIndex >= 0 && listRef.current !== null) {\n listRef.current.scrollToItem(selectedItemIndex);\n }\n }, [listRef, selectedItemIndex]);\n\n const ListItem = ({ index, style }) => {\n const item = filteredList[index];\n const tabIndex =\n item.tabIndex ||\n (!anySelected && index === 0) ||\n (item.selected && !item.disabled)\n ? 0\n : -1;\n\n return renderListItem(item, index, {\n style: {\n ...style,\n top: `${parseFloat(style.top) + 5}px`,\n left: `${parseFloat(style.left) + 5}px`,\n width: `calc(${parseFloat(style.width)}% - 10px)`,\n },\n tabIndex,\n interactive: true,\n condensed,\n disableGutters: useSelector,\n });\n };\n\n const renderFixedList = useMemo(() => {\n return forwardRef(({ ...rest }, ref) => (\n <HvListContainer\n id={id}\n className={cx(classes.root, className)}\n role={selectable ? \"listbox\" : \"menu\"}\n interactive\n condensed={condensed}\n disableGutters={useSelector}\n aria-multiselectable={(selectable && multiSelect) || undefined}\n ref={ref}\n {...rest}\n />\n ));\n }, [\n cx,\n id,\n useSelector,\n className,\n classes,\n condensed,\n selectable,\n multiSelect,\n ]);\n\n return (\n <>\n {multiSelect && useSelector && showSelectAll && renderSelectAll()}\n\n {filteredList.length > 0 && !virtualized && (\n <HvListContainer\n id={id}\n className={cx(classes.root, className)}\n role={selectable ? \"listbox\" : \"menu\"}\n interactive\n condensed={condensed}\n disableGutters={useSelector}\n aria-multiselectable={(selectable && multiSelect) || undefined}\n {...others}\n >\n {filteredList.map((item, i) => renderListItem(item, i))}\n </HvListContainer>\n )}\n {filteredList.length > 0 && virtualized && (\n <FixedSizeList\n ref={listRef}\n className={classes.virtualizedRoot}\n height={(height || 0) + 5}\n width=\"100%\"\n itemCount={filteredList.length}\n itemSize={condensed ? 32 : 40}\n innerElementType={renderFixedList}\n {...others}\n >\n {ListItem}\n </FixedSizeList>\n )}\n </>\n );\n};\n"],"names":["DEFAULT_LABELS","selectAll","selectionConjunction","HvList","props","id","classes","classesProp","className","multiSelect","hasTooltips","showSelectAll","labels","useSelector","selectable","singleSelectionToggle","condensed","onChange","onClick","values","valuesProp","height","virtualized","others","useDefaultProps","cx","useClasses","list","setList","selection","useSelectableList","listRef","useRef","useEffect","passedProps","parsedList","parseList","undefined","handleSelect","evt","item","path","preventDefault","disabled","handleSelectAll","anySelectableSelected","some","elem","selected","renderLeftIcon","isValidElement","icon","isSelected","isDisabled","renderSelectAll","anySelected","length","allSelected","selectionLabel","HvTypography","component","children","_jsxs","_Fragment","_jsx","HvCheckBox","setId","label","selectAllSelector","indeterminate","checked","renderItemText","ItemText","wrapperTooltip","HvLink","route","a","link","renderMultiSelectItem","itemId","Selection","root","selectorRoot","container","selectorContainer","truncate","renderSingleSelectItem","HvRadio","renderListItem","i","otherProps","startAdornment","HvListItem","role","itemSelector","endAdornment","showNavIcon","DropRightXS","box","iconSize","filteredList","filter","it","isHidden","map","reduce","result","selectedItemIndex","findIndex","current","scrollToItem","ListItem","index","style","tabIndex","top","parseFloat","left","width","interactive","disableGutters","renderFixedList","useMemo","forwardRef","rest","ref","HvListContainer","FixedSizeList","virtualizedRoot","itemCount","itemSize","innerElementType"],"mappings":"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"}
|