@bodynarf/react.components 1.7.1 → 1.7.2
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/components → components}/accordion/component/index.d.ts +7 -4
- package/components/accordion/component/index.d.ts.map +1 -0
- package/components/accordion/component/index.js +35 -0
- package/components/accordion/index.d.ts +3 -0
- package/components/accordion/index.d.ts.map +1 -0
- package/{dist/components/anchor/index.d.ts → components/accordion/index.js} +2 -2
- package/{dist/components → components}/accordion/types.d.ts +18 -16
- package/components/accordion/types.d.ts.map +1 -0
- package/components/accordion/types.js +1 -0
- package/components/anchor/component/index.d.ts +6 -0
- package/components/anchor/component/index.d.ts.map +1 -0
- package/components/anchor/component/index.js +20 -0
- package/{dist/components → components}/anchor/components/anchorWithIcon/index.d.ts +5 -3
- package/components/anchor/components/anchorWithIcon/index.d.ts.map +1 -0
- package/components/anchor/components/anchorWithIcon/index.js +16 -0
- package/{dist/components → components}/anchor/components/simpleAnchor/index.d.ts +5 -3
- package/components/anchor/components/simpleAnchor/index.d.ts.map +1 -0
- package/components/anchor/components/simpleAnchor/index.js +5 -0
- package/components/anchor/index.d.ts +3 -0
- package/components/anchor/index.d.ts.map +1 -0
- package/{dist/components/button/index.d.ts → components/anchor/index.js} +2 -2
- package/{dist/components → components}/anchor/types.d.ts +39 -38
- package/components/anchor/types.d.ts.map +1 -0
- package/components/anchor/types.js +1 -0
- package/{dist/components → components}/button/component/index.d.ts +9 -6
- package/components/button/component/index.d.ts.map +1 -0
- package/components/button/component/index.js +36 -0
- package/{dist/components → components}/button/components/buttonWithIcon/index.d.ts +5 -3
- package/components/button/components/buttonWithIcon/index.d.ts.map +1 -0
- package/components/button/components/buttonWithIcon/index.js +19 -0
- package/{dist/components → components}/button/components/simpleButton/index.d.ts +5 -3
- package/components/button/components/simpleButton/index.d.ts.map +1 -0
- package/components/button/components/simpleButton/index.js +5 -0
- package/components/button/index.d.ts +3 -0
- package/components/button/index.d.ts.map +1 -0
- package/{dist/components/dropdown/index.d.ts → components/button/index.js} +2 -2
- package/{dist/components → components}/button/types.d.ts +37 -36
- package/components/button/types.d.ts.map +1 -0
- package/components/button/types.js +4 -0
- package/components/dropdown/component/index.d.ts +7 -0
- package/components/dropdown/component/index.d.ts.map +1 -0
- package/components/dropdown/component/index.js +15 -0
- package/{dist/components → components}/dropdown/components/compact/index.d.ts +5 -3
- package/components/dropdown/components/compact/index.d.ts.map +1 -0
- package/components/dropdown/components/compact/index.js +62 -0
- package/{dist/components → components}/dropdown/components/item/index.d.ts +15 -13
- package/components/dropdown/components/item/index.d.ts.map +1 -0
- package/components/dropdown/components/item/index.js +6 -0
- package/{dist/components → components}/dropdown/components/label/index.d.ts +18 -17
- package/components/dropdown/components/label/index.d.ts.map +1 -0
- package/components/dropdown/components/label/index.js +22 -0
- package/{dist/components → components}/dropdown/components/withLabel/index.d.ts +5 -3
- package/components/dropdown/components/withLabel/index.d.ts.map +1 -0
- package/components/dropdown/components/withLabel/index.js +83 -0
- package/components/dropdown/index.d.ts +3 -0
- package/components/dropdown/index.d.ts.map +1 -0
- package/{dist/components/accordion/index.d.ts → components/dropdown/index.js} +2 -2
- package/{dist/components → components}/dropdown/types.d.ts +46 -45
- package/components/dropdown/types.d.ts.map +1 -0
- package/components/dropdown/types.js +1 -0
- package/components/icon/component/index.d.ts +8 -0
- package/components/icon/component/index.d.ts.map +1 -0
- package/components/icon/component/index.js +23 -0
- package/components/icon/index.d.ts +3 -0
- package/components/icon/index.d.ts.map +1 -0
- package/components/icon/index.js +2 -0
- package/{dist/components → components}/icon/types.d.ts +16 -15
- package/components/icon/types.d.ts.map +1 -0
- package/components/icon/types.js +1 -0
- package/components/index.d.ts +12 -0
- package/components/index.d.ts.map +1 -0
- package/{dist/components/index.d.ts → components/index.js} +11 -11
- package/{dist/components → components}/paginator/component/index.d.ts +8 -6
- package/components/paginator/component/index.d.ts.map +1 -0
- package/components/paginator/component/index.js +47 -0
- package/components/paginator/index.d.ts +4 -0
- package/components/paginator/index.d.ts.map +1 -0
- package/{dist/components/paginator/index.d.ts → components/paginator/index.js} +3 -3
- package/{dist/components → components}/paginator/types.d.ts +28 -27
- package/components/paginator/types.d.ts.map +1 -0
- package/components/paginator/types.js +1 -0
- package/{dist/components → components}/paginator/utils.d.ts +10 -9
- package/components/paginator/utils.d.ts.map +1 -0
- package/components/paginator/utils.js +18 -0
- package/{dist/components → components}/primitives/checkbox/component/index.d.ts +7 -4
- package/components/primitives/checkbox/component/index.d.ts.map +1 -0
- package/components/primitives/checkbox/component/index.js +37 -0
- package/components/primitives/checkbox/index.d.ts +3 -0
- package/components/primitives/checkbox/index.d.ts.map +1 -0
- package/components/primitives/checkbox/index.js +2 -0
- package/{dist/components → components}/primitives/checkbox/types.d.ts +25 -24
- package/components/primitives/checkbox/types.d.ts.map +1 -0
- package/components/primitives/checkbox/types.js +1 -0
- package/{dist/components → components}/primitives/date/component/index.d.ts +7 -4
- package/components/primitives/date/component/index.d.ts.map +1 -0
- package/components/primitives/date/component/index.js +48 -0
- package/components/primitives/date/index.d.ts +3 -0
- package/components/primitives/date/index.d.ts.map +1 -0
- package/components/primitives/date/index.js +2 -0
- package/{dist/components → components}/primitives/date/types.d.ts +9 -8
- package/components/primitives/date/types.d.ts.map +1 -0
- package/components/primitives/date/types.js +1 -0
- package/components/primitives/index.d.ts +8 -0
- package/components/primitives/index.d.ts.map +1 -0
- package/{dist/components/primitives/index.d.ts → components/primitives/index.js} +7 -7
- package/components/primitives/multiline/component/index.d.ts +7 -0
- package/components/primitives/multiline/component/index.d.ts.map +1 -0
- package/components/primitives/multiline/component/index.js +15 -0
- package/{dist/components → components}/primitives/multiline/components/multilineWithLabel/index.d.ts +6 -4
- package/components/primitives/multiline/components/multilineWithLabel/index.d.ts.map +1 -0
- package/components/primitives/multiline/components/multilineWithLabel/index.js +45 -0
- package/{dist/components → components}/primitives/multiline/components/multilineWithoutLabel/index.d.ts +6 -4
- package/components/primitives/multiline/components/multilineWithoutLabel/index.d.ts.map +1 -0
- package/components/primitives/multiline/components/multilineWithoutLabel/index.js +27 -0
- package/components/primitives/multiline/index.d.ts +3 -0
- package/components/primitives/multiline/index.d.ts.map +1 -0
- package/components/primitives/multiline/index.js +2 -0
- package/{dist/components → components}/primitives/multiline/types.d.ts +11 -10
- package/components/primitives/multiline/types.d.ts.map +1 -0
- package/components/primitives/multiline/types.js +1 -0
- package/components/primitives/number/component/index.d.ts +6 -0
- package/components/primitives/number/component/index.d.ts.map +1 -0
- package/components/primitives/number/component/index.js +14 -0
- package/{dist/components → components}/primitives/number/components/withLabel/index.d.ts +6 -4
- package/components/primitives/number/components/withLabel/index.d.ts.map +1 -0
- package/components/primitives/number/components/withLabel/index.js +44 -0
- package/{dist/components → components}/primitives/number/components/withoutLabel/index.d.ts +6 -4
- package/components/primitives/number/components/withoutLabel/index.d.ts.map +1 -0
- package/components/primitives/number/components/withoutLabel/index.js +26 -0
- package/components/primitives/number/index.d.ts +3 -0
- package/components/primitives/number/index.d.ts.map +1 -0
- package/components/primitives/number/index.js +2 -0
- package/{dist/components → components}/primitives/number/types.d.ts +13 -12
- package/components/primitives/number/types.d.ts.map +1 -0
- package/components/primitives/number/types.js +1 -0
- package/components/primitives/password/component/index.d.ts +7 -0
- package/components/primitives/password/component/index.d.ts.map +1 -0
- package/components/primitives/password/component/index.js +13 -0
- package/{dist/components → components}/primitives/password/components/withLabel/index.d.ts +5 -3
- package/components/primitives/password/components/withLabel/index.d.ts.map +1 -0
- package/components/primitives/password/components/withLabel/index.js +51 -0
- package/{dist/components → components}/primitives/password/components/withoutLabel/index.d.ts +5 -3
- package/components/primitives/password/components/withoutLabel/index.d.ts.map +1 -0
- package/components/primitives/password/components/withoutLabel/index.js +33 -0
- package/components/primitives/password/index.d.ts +3 -0
- package/components/primitives/password/index.d.ts.map +1 -0
- package/components/primitives/password/index.js +2 -0
- package/{dist/components → components}/primitives/password/types.d.ts +10 -9
- package/components/primitives/password/types.d.ts.map +1 -0
- package/components/primitives/password/types.js +1 -0
- package/components/primitives/text/component/index.d.ts +7 -0
- package/components/primitives/text/component/index.d.ts.map +1 -0
- package/components/primitives/text/component/index.js +15 -0
- package/{dist/components → components}/primitives/text/components/textWithLabel/index.d.ts +6 -4
- package/components/primitives/text/components/textWithLabel/index.d.ts.map +1 -0
- package/components/primitives/text/components/textWithLabel/index.js +44 -0
- package/{dist/components → components}/primitives/text/components/textWithoutLabel/index.d.ts +6 -4
- package/components/primitives/text/components/textWithoutLabel/index.d.ts.map +1 -0
- package/components/primitives/text/components/textWithoutLabel/index.js +26 -0
- package/components/primitives/text/index.d.ts +3 -0
- package/components/primitives/text/index.d.ts.map +1 -0
- package/components/primitives/text/index.js +2 -0
- package/{dist/components → components}/primitives/text/types.d.ts +7 -6
- package/components/primitives/text/types.d.ts.map +1 -0
- package/components/primitives/text/types.js +1 -0
- package/{dist/components → components}/primitives/types/baseProps.d.ts +30 -29
- package/components/primitives/types/baseProps.d.ts.map +1 -0
- package/components/primitives/types/baseProps.js +1 -0
- package/components/primitives/types/index.d.ts +4 -0
- package/components/primitives/types/index.d.ts.map +1 -0
- package/{dist/components/primitives/types/index.d.ts → components/primitives/types/index.js} +3 -3
- package/{dist/components → components}/primitives/types/label.d.ts +14 -13
- package/components/primitives/types/label.d.ts.map +1 -0
- package/components/primitives/types/label.js +1 -0
- package/components/primitives/types/validation/index.d.ts +3 -0
- package/components/primitives/types/validation/index.d.ts.map +1 -0
- package/{dist/components/primitives/types/validation/index.d.ts → components/primitives/types/validation/index.js} +2 -2
- package/{dist/components → components}/primitives/types/validation/state.d.ts +9 -8
- package/components/primitives/types/validation/state.d.ts.map +1 -0
- package/components/primitives/types/validation/state.js +2 -0
- package/{dist/components → components}/primitives/types/validation/status.d.ts +10 -9
- package/components/primitives/types/validation/status.d.ts.map +1 -0
- package/components/primitives/types/validation/status.js +11 -0
- package/{dist/components → components}/search/component/index.d.ts +6 -3
- package/components/search/component/index.d.ts.map +1 -0
- package/components/search/component/index.js +37 -0
- package/components/search/index.d.ts +3 -0
- package/components/search/index.d.ts.map +1 -0
- package/components/search/index.js +2 -0
- package/{dist/components → components}/search/types.d.ts +27 -26
- package/components/search/types.d.ts.map +1 -0
- package/components/search/types.js +1 -0
- package/{dist/components → components}/tabs/component/index.d.ts +34 -31
- package/components/tabs/component/index.d.ts.map +1 -0
- package/components/tabs/component/index.js +68 -0
- package/{dist/components → components}/tabs/components/item/index.d.ts +13 -11
- package/components/tabs/components/item/index.d.ts.map +1 -0
- package/components/tabs/components/item/index.js +27 -0
- package/components/tabs/index.d.ts +3 -0
- package/components/tabs/index.d.ts.map +1 -0
- package/components/tabs/index.js +2 -0
- package/{dist/components → components}/tabs/types.d.ts +43 -42
- package/components/tabs/types.d.ts.map +1 -0
- package/components/tabs/types.js +34 -0
- package/{dist/components → components}/tag/component/index.d.ts +7 -4
- package/components/tag/component/index.d.ts.map +1 -0
- package/components/tag/component/index.js +28 -0
- package/components/tag/index.d.ts +3 -0
- package/components/tag/index.d.ts.map +1 -0
- package/components/tag/index.js +2 -0
- package/{dist/components → components}/tag/types.d.ts +27 -26
- package/components/tag/types.d.ts.map +1 -0
- package/components/tag/types.js +1 -0
- package/{dist/components → components}/types.d.ts +67 -66
- package/components/types.d.ts.map +1 -0
- package/components/types.js +31 -0
- package/hooks/index.d.ts +3 -0
- package/hooks/index.d.ts.map +1 -0
- package/{dist/hooks/index.d.ts → hooks/index.js} +2 -2
- package/{dist/hooks → hooks}/useComponentOutsideClick.d.ts +11 -10
- package/hooks/useComponentOutsideClick.d.ts.map +1 -0
- package/hooks/useComponentOutsideClick.js +32 -0
- package/{dist/hooks → hooks}/usePagination.d.ts +20 -19
- package/hooks/usePagination.d.ts.map +1 -0
- package/hooks/usePagination.js +28 -0
- package/index.d.ts +4 -0
- package/index.d.ts.map +1 -0
- package/{dist/index.d.ts → index.js} +3 -3
- package/package.json +39 -45
- package/readme.md +56 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/{dist/utils → utils}/dataAttributes.d.ts +8 -7
- package/utils/dataAttributes.d.ts.map +1 -0
- package/utils/dataAttributes.js +19 -0
- package/{dist/utils → utils}/formValidation.d.ts +16 -15
- package/utils/formValidation.d.ts.map +1 -0
- package/utils/formValidation.js +35 -0
- package/utils/index.d.ts +3 -0
- package/utils/index.d.ts.map +1 -0
- package/{dist/utils/index.d.ts → utils/index.js} +2 -2
- package/dist/bbr-components.js +0 -1040
- package/dist/bbr-components.umd.cjs +0 -27
- package/dist/components/anchor/component/index.d.ts +0 -3
- package/dist/components/dropdown/component/index.d.ts +0 -4
- package/dist/components/icon/component/index.d.ts +0 -5
- package/dist/components/icon/index.d.ts +0 -2
- package/dist/components/primitives/checkbox/index.d.ts +0 -2
- package/dist/components/primitives/date/index.d.ts +0 -2
- package/dist/components/primitives/multiline/component/index.d.ts +0 -4
- package/dist/components/primitives/multiline/index.d.ts +0 -2
- package/dist/components/primitives/number/component/index.d.ts +0 -4
- package/dist/components/primitives/number/index.d.ts +0 -2
- package/dist/components/primitives/password/component/index.d.ts +0 -4
- package/dist/components/primitives/password/index.d.ts +0 -2
- package/dist/components/primitives/text/component/index.d.ts +0 -4
- package/dist/components/primitives/text/index.d.ts +0 -2
- package/dist/components/search/index.d.ts +0 -2
- package/dist/components/tabs/index.d.ts +0 -2
- package/dist/components/tag/index.d.ts +0 -2
- package/dist/style.css +0 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useId, useState } from "react";
|
|
3
|
+
import { getClassName, isNullOrEmpty, isNullOrUndefined } from "@bodynarf/utils";
|
|
4
|
+
import { useComponentOutsideClick } from "../../../../hooks";
|
|
5
|
+
import DropdownItem from "../../../dropdown/components/item";
|
|
6
|
+
import DropdownLabel from "../../../dropdown/components/label";
|
|
7
|
+
const DropdownCompact = ({ items, value, onSelect, deselectable, className, hideOnOuterClick, listMaxHeight, placeholder, compact, disabled, }) => {
|
|
8
|
+
const id = useId();
|
|
9
|
+
const [isListVisible, setListVisible] = useState(false);
|
|
10
|
+
const onItemClick = useCallback((event) => {
|
|
11
|
+
if (disabled ?? false) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const target = event.target;
|
|
15
|
+
if (isNullOrUndefined(target)) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const dataValue = target.dataset["dropdownItemValue"];
|
|
19
|
+
if (isNullOrEmpty(dataValue)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const item = items.find(x => x.value === dataValue);
|
|
23
|
+
if (isNullOrUndefined(item)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (value === item) {
|
|
27
|
+
setListVisible(false);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
onSelect(item);
|
|
31
|
+
setListVisible(false);
|
|
32
|
+
}, [setListVisible, value, items, onSelect, disabled]);
|
|
33
|
+
const onLabelClick = useCallback((event) => {
|
|
34
|
+
if (disabled ?? false) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const target = event.target;
|
|
38
|
+
if (isNullOrUndefined(target)) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (target.classList.contains("bi-plus-lg")) {
|
|
42
|
+
onSelect(undefined);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
setListVisible(state => !state);
|
|
46
|
+
}
|
|
47
|
+
}, [onSelect, setListVisible, disabled]);
|
|
48
|
+
useComponentOutsideClick(`[data-dropdown-id="${id}"]`, isListVisible, () => setListVisible(false), hideOnOuterClick);
|
|
49
|
+
const classNames = getClassName([
|
|
50
|
+
"bbr-dropdown",
|
|
51
|
+
(disabled ?? false) ? "bbr-dropdown--disabled" : "",
|
|
52
|
+
(compact ?? false) ? "bbr-dropdown--compact" : "",
|
|
53
|
+
isListVisible ? "is-active" : "",
|
|
54
|
+
isNullOrEmpty(listMaxHeight) ? "bbr-dropdown--height-default" : "",
|
|
55
|
+
className,
|
|
56
|
+
"dropdown"
|
|
57
|
+
]);
|
|
58
|
+
return (_jsxs("div", { className: classNames, "data-dropdown-id": id, children: [_jsx(DropdownLabel, { caption: placeholder, deselectable: deselectable === true, selectedItem: value, onClick: onLabelClick }), _jsx("div", { className: "dropdown-menu", children: items.length > 0
|
|
59
|
+
? _jsx("ul", { className: "dropdown-content", style: { maxHeight: listMaxHeight }, children: items.map(item => _jsx(DropdownItem, { item: item, selected: value?.value === item.value, onClick: onItemClick }, item.id)) })
|
|
60
|
+
: _jsx("span", { className: "dropdown-content dropdown-item", children: "No items found" }) })] }, id));
|
|
61
|
+
};
|
|
62
|
+
export default DropdownCompact;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
selected
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { SelectableItem } from "../../../dropdown";
|
|
3
|
+
/** Dropdown item props */
|
|
4
|
+
interface DropdownItemProps {
|
|
5
|
+
/** Item to present in dropdown */
|
|
6
|
+
item: SelectableItem;
|
|
7
|
+
/** Is item selected*/
|
|
8
|
+
selected: boolean;
|
|
9
|
+
/** Item click handler */
|
|
10
|
+
onClick: (event: React.MouseEvent<HTMLLIElement>) => void;
|
|
11
|
+
}
|
|
12
|
+
/** Single item in dropdown component */
|
|
13
|
+
declare const DropdownItem: ({ item, selected, onClick }: DropdownItemProps) => JSX.Element;
|
|
14
|
+
export default DropdownItem;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/dropdown/components/item/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,0BAA0B;AAC1B,UAAU,iBAAiB;IACvB,kCAAkC;IAClC,IAAI,EAAE,cAAc,CAAC;IAErB,sBAAsB;IACtB,QAAQ,EAAE,OAAO,CAAC;IAElB,yBAAyB;IACzB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED,wCAAwC;AACxC,QAAA,MAAM,YAAY,gCAAiC,iBAAiB,KAAG,WAYtE,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/** Single item in dropdown component */
|
|
3
|
+
const DropdownItem = ({ item, selected, onClick }) => {
|
|
4
|
+
return (_jsx("li", { className: `bbr-dropdown-item dropdown-item${selected ? " is-active" : ""}`, onClick: onClick, "data-dropdown-item-value": item.value, title: item.displayValue, children: item.displayValue }, item.id));
|
|
5
|
+
};
|
|
6
|
+
export default DropdownItem;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { MouseEvent } from "react";
|
|
2
|
-
import { SelectableItem } from
|
|
3
|
-
export interface DropdownLabelProps {
|
|
4
|
-
/** Caption when no items selected */
|
|
5
|
-
caption: string;
|
|
6
|
-
/** Can user deselect */
|
|
7
|
-
deselectable: boolean;
|
|
8
|
-
/** Selected item */
|
|
9
|
-
selectedItem?: SelectableItem;
|
|
10
|
-
/** Element classnames */
|
|
11
|
-
className?: string;
|
|
12
|
-
/** Click handler*/
|
|
13
|
-
onClick: (event: MouseEvent<HTMLLabelElement>) => void;
|
|
14
|
-
}
|
|
15
|
-
/** Label component */
|
|
16
|
-
declare const DropdownLabel: ({ caption, selectedItem, onClick, deselectable, className, }: DropdownLabelProps) => JSX.Element;
|
|
17
|
-
export default DropdownLabel;
|
|
1
|
+
import { MouseEvent } from "react";
|
|
2
|
+
import { SelectableItem } from "../../../dropdown";
|
|
3
|
+
export interface DropdownLabelProps {
|
|
4
|
+
/** Caption when no items selected */
|
|
5
|
+
caption: string;
|
|
6
|
+
/** Can user deselect */
|
|
7
|
+
deselectable: boolean;
|
|
8
|
+
/** Selected item */
|
|
9
|
+
selectedItem?: SelectableItem;
|
|
10
|
+
/** Element classnames */
|
|
11
|
+
className?: string;
|
|
12
|
+
/** Click handler*/
|
|
13
|
+
onClick: (event: MouseEvent<HTMLLabelElement>) => void;
|
|
14
|
+
}
|
|
15
|
+
/** Label component */
|
|
16
|
+
declare const DropdownLabel: ({ caption, selectedItem, onClick, deselectable, className, }: DropdownLabelProps) => JSX.Element;
|
|
17
|
+
export default DropdownLabel;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/dropdown/components/label/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAOnC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IAC/B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAEhB,wBAAwB;IACxB,YAAY,EAAE,OAAO,CAAC;IAEtB,oBAAoB;IACpB,YAAY,CAAC,EAAE,cAAc,CAAC;IAE9B,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mBAAmB;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC1D;AAED,sBAAsB;AACtB,QAAA,MAAM,aAAa,iEAIhB,kBAAkB,KAAG,WAkCvB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getClassName, isNullOrEmpty, isNullOrUndefined } from "@bodynarf/utils";
|
|
3
|
+
import { ElementSize } from "../../..";
|
|
4
|
+
import Icon from "../../../icon";
|
|
5
|
+
/** Label component */
|
|
6
|
+
const DropdownLabel = ({ caption, selectedItem, onClick, deselectable, className, }) => {
|
|
7
|
+
const itemSelected = !isNullOrUndefined(selectedItem);
|
|
8
|
+
const text = itemSelected
|
|
9
|
+
? selectedItem?.displayValue
|
|
10
|
+
: caption;
|
|
11
|
+
const deselectVisible = deselectable && itemSelected;
|
|
12
|
+
const elClassName = getClassName([
|
|
13
|
+
"dropdown-trigger",
|
|
14
|
+
"bbr-dropdown__label",
|
|
15
|
+
isNullOrEmpty(className) ? "" : `${className}--md`,
|
|
16
|
+
itemSelected ? "" : "bbr-dropdown__label--default",
|
|
17
|
+
"button"
|
|
18
|
+
]);
|
|
19
|
+
return (_jsxs("label", { className: elClassName, onClick: onClick, children: [deselectVisible &&
|
|
20
|
+
_jsx(Icon, { name: "plus-lg", size: ElementSize.Medium }), _jsx("span", { className: deselectVisible ? "mx-2" : "mr-2", title: itemSelected ? text : undefined, children: text }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
|
|
21
|
+
};
|
|
22
|
+
export default DropdownLabel;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { DropdownProps } from "../../../dropdown";
|
|
3
|
+
declare const DropdownWithLabel: ({ items, value, onSelect, validationState, deselectable, className, hideOnOuterClick, listMaxHeight, label, placeholder, disabled }: DropdownProps) => JSX.Element;
|
|
4
|
+
export default DropdownWithLabel;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/dropdown/components/withLabel/index.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIzD,QAAA,MAAM,iBAAiB,wIAOpB,aAAa,KAAG,WAoLlB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useId, useState } from "react";
|
|
3
|
+
import { isNullOrUndefined, isNullOrEmpty, getClassName } from "@bodynarf/utils";
|
|
4
|
+
import { getValidationValues } from "../../../../utils";
|
|
5
|
+
import { useComponentOutsideClick } from "../../../../hooks";
|
|
6
|
+
import DropdownItem from "../../../dropdown/components/item";
|
|
7
|
+
import DropdownLabel from "../../../dropdown/components/label";
|
|
8
|
+
const DropdownWithLabel = ({ items, value, onSelect, validationState, deselectable, className, hideOnOuterClick, listMaxHeight, label, placeholder, disabled }) => {
|
|
9
|
+
const id = useId();
|
|
10
|
+
const [isListVisible, setListVisible] = useState(false);
|
|
11
|
+
const [isValidationDefined, styleClassName, validationMessages] = getValidationValues(undefined, validationState);
|
|
12
|
+
const onItemClick = useCallback((event) => {
|
|
13
|
+
if (disabled ?? false) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const target = event.target;
|
|
17
|
+
if (isNullOrUndefined(target)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const dataValue = target.dataset["dropdownItemValue"];
|
|
21
|
+
if (isNullOrEmpty(dataValue)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const item = items.find(x => x.value === dataValue);
|
|
25
|
+
if (isNullOrUndefined(item)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (value === item) {
|
|
29
|
+
setListVisible(false);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
onSelect(item);
|
|
33
|
+
setListVisible(false);
|
|
34
|
+
}, [setListVisible, value, items, onSelect, disabled]);
|
|
35
|
+
const onLabelClick = useCallback((event) => {
|
|
36
|
+
if (disabled ?? false) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const target = event.target;
|
|
40
|
+
if (isNullOrUndefined(target)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (target.classList.contains("bi-plus-lg")) {
|
|
44
|
+
onSelect(undefined);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
setListVisible(state => !state);
|
|
48
|
+
}
|
|
49
|
+
}, [onSelect, setListVisible, disabled]);
|
|
50
|
+
useComponentOutsideClick(`[data-dropdown-id="${id}"]`, isListVisible, () => setListVisible(false), hideOnOuterClick);
|
|
51
|
+
const classNames = getClassName([
|
|
52
|
+
"bbr-dropdown",
|
|
53
|
+
(disabled ?? false) ? "bbr-dropdown--disabled" : "",
|
|
54
|
+
isListVisible ? "is-active" : "",
|
|
55
|
+
isNullOrEmpty(listMaxHeight) ? "bbr-dropdown--height-default" : "",
|
|
56
|
+
className,
|
|
57
|
+
"dropdown"
|
|
58
|
+
]);
|
|
59
|
+
const labelClassName = getClassName([
|
|
60
|
+
"label",
|
|
61
|
+
label.className
|
|
62
|
+
]);
|
|
63
|
+
if (label.horizontal) {
|
|
64
|
+
const labelContainerClassName = getClassName([
|
|
65
|
+
"field-label",
|
|
66
|
+
"is-normal",
|
|
67
|
+
label.horizontalContainerClassName
|
|
68
|
+
]);
|
|
69
|
+
const fieldContainerClassName = getClassName([
|
|
70
|
+
"field-body",
|
|
71
|
+
label.horizontalFieldContainerClassName
|
|
72
|
+
]);
|
|
73
|
+
return (_jsxs("div", { className: "bbr-dropdown__root-container--with-label bbr-input field is-horizontal", children: [_jsx("div", { className: labelContainerClassName, children: _jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }) }), _jsx("div", { className: fieldContainerClassName, children: _jsxs("div", { className: "field", children: [_jsxs("div", { className: classNames, "data-dropdown-id": id, children: [_jsx(DropdownLabel, { className: styleClassName, caption: placeholder, deselectable: deselectable === true, selectedItem: value, onClick: onLabelClick }), _jsx("div", { className: "dropdown-menu", children: items.length > 0
|
|
74
|
+
? _jsx("ul", { className: "dropdown-content", style: { maxHeight: listMaxHeight }, children: items.map(item => _jsx(DropdownItem, { item: item, selected: value?.value === item.value, onClick: onItemClick }, item.id)) })
|
|
75
|
+
: _jsx("span", { className: "dropdown-content dropdown-item", children: "No items found" }) })] }, id), isValidationDefined && validationMessages.length > 0 &&
|
|
76
|
+
_jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }) })] }));
|
|
77
|
+
}
|
|
78
|
+
return (_jsxs("div", { className: "field", children: [_jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }), _jsxs("div", { className: classNames, "data-dropdown-id": id, children: [_jsx(DropdownLabel, { className: styleClassName, caption: placeholder, deselectable: deselectable === true, selectedItem: value, onClick: onLabelClick }), _jsx("div", { className: "dropdown-menu", children: items.length > 0
|
|
79
|
+
? _jsx("ul", { className: "dropdown-content", style: { maxHeight: listMaxHeight }, children: items.map(item => _jsx(DropdownItem, { item: item, selected: value?.value === item.value, onClick: onItemClick }, item.id)) })
|
|
80
|
+
: _jsx("span", { className: "dropdown-content dropdown-item", children: "No items found" }) })] }, id), isValidationDefined && validationMessages.length > 0 &&
|
|
81
|
+
_jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }));
|
|
82
|
+
};
|
|
83
|
+
export default DropdownWithLabel;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,cAAc,SAAS,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { default } from "./component";
|
|
2
|
-
export * from "./types";
|
|
1
|
+
export { default } from "./component";
|
|
2
|
+
export * from "./types";
|
|
@@ -1,45 +1,46 @@
|
|
|
1
|
-
import { BaseElementProps, InputLabel, ValidationState } from
|
|
2
|
-
/** Dropdown item */
|
|
3
|
-
export interface SelectableItem {
|
|
4
|
-
/** Unique item identifier */
|
|
5
|
-
id: string;
|
|
6
|
-
/** Item value */
|
|
7
|
-
value: string;
|
|
8
|
-
/** Displaying text */
|
|
9
|
-
displayValue: string;
|
|
10
|
-
}
|
|
11
|
-
/** Dropdown component props type */
|
|
12
|
-
export interface DropdownProps extends BaseElementProps {
|
|
13
|
-
/** Items which can be selected */
|
|
14
|
-
items: Array<SelectableItem>;
|
|
15
|
-
/** Input element placeholder */
|
|
16
|
-
placeholder: string;
|
|
17
|
-
/**
|
|
18
|
-
* Action to update selected value, which stored outside
|
|
19
|
-
*/
|
|
20
|
-
onSelect: (item?: SelectableItem) => void;
|
|
21
|
-
/**
|
|
22
|
-
* Selected value.
|
|
23
|
-
* Must be stored outside
|
|
24
|
-
*/
|
|
25
|
-
value?: SelectableItem;
|
|
26
|
-
/** Hide dropdown list when its opened and user click outside */
|
|
27
|
-
hideOnOuterClick: boolean;
|
|
28
|
-
/** Can user deselect */
|
|
29
|
-
deselectable?: boolean;
|
|
30
|
-
/** Custom dropdown list max-height property */
|
|
31
|
-
listMaxHeight?: string;
|
|
32
|
-
/**
|
|
33
|
-
* Should dropdown be compact
|
|
34
|
-
* Will have width by maximum current selection item width
|
|
35
|
-
*/
|
|
36
|
-
compact?: boolean;
|
|
37
|
-
/**
|
|
38
|
-
* Is element disabled
|
|
39
|
-
*/
|
|
40
|
-
disabled?: boolean;
|
|
41
|
-
/** Label configuration */
|
|
42
|
-
label?: InputLabel;
|
|
43
|
-
/** Current validation state */
|
|
44
|
-
validationState?: ValidationState;
|
|
45
|
-
}
|
|
1
|
+
import { BaseElementProps, InputLabel, ValidationState } from "..";
|
|
2
|
+
/** Dropdown item */
|
|
3
|
+
export interface SelectableItem {
|
|
4
|
+
/** Unique item identifier */
|
|
5
|
+
id: string;
|
|
6
|
+
/** Item value */
|
|
7
|
+
value: string;
|
|
8
|
+
/** Displaying text */
|
|
9
|
+
displayValue: string;
|
|
10
|
+
}
|
|
11
|
+
/** Dropdown component props type */
|
|
12
|
+
export interface DropdownProps extends BaseElementProps {
|
|
13
|
+
/** Items which can be selected */
|
|
14
|
+
items: Array<SelectableItem>;
|
|
15
|
+
/** Input element placeholder */
|
|
16
|
+
placeholder: string;
|
|
17
|
+
/**
|
|
18
|
+
* Action to update selected value, which stored outside
|
|
19
|
+
*/
|
|
20
|
+
onSelect: (item?: SelectableItem) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Selected value.
|
|
23
|
+
* Must be stored outside
|
|
24
|
+
*/
|
|
25
|
+
value?: SelectableItem;
|
|
26
|
+
/** Hide dropdown list when its opened and user click outside */
|
|
27
|
+
hideOnOuterClick: boolean;
|
|
28
|
+
/** Can user deselect */
|
|
29
|
+
deselectable?: boolean;
|
|
30
|
+
/** Custom dropdown list max-height property */
|
|
31
|
+
listMaxHeight?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Should dropdown be compact
|
|
34
|
+
* Will have width by maximum current selection item width
|
|
35
|
+
*/
|
|
36
|
+
compact?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Is element disabled
|
|
39
|
+
*/
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
/** Label configuration */
|
|
42
|
+
label?: InputLabel;
|
|
43
|
+
/** Current validation state */
|
|
44
|
+
validationState?: ValidationState;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhF,oBAAoB;AACpB,MAAM,WAAW,cAAc;IAC3B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IAEX,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,oCAAoC;AACpC,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACnD,kCAAkC;IAClC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAE7B,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IAEpB;;MAEE;IACF,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAE1C;;;MAGE;IACF,KAAK,CAAC,EAAE,cAAc,CAAC;IAEvB,gEAAgE;IAChE,gBAAgB,EAAE,OAAO,CAAC;IAE1B,wBAAwB;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,+BAA+B;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;CACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import "./style.scss";
|
|
3
|
+
import { IconProps } from "../../icon";
|
|
4
|
+
/**
|
|
5
|
+
* Icon component. Based on bootstrap icons
|
|
6
|
+
*/
|
|
7
|
+
export default function Icon({ name, size, className, }: IconProps): JSX.Element;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/icon/component/index.tsx"],"names":[],"mappings":";AAEA,OAAO,cAAc,CAAC;AAItB,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AASjD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EACzB,IAAI,EAAE,IAAyB,EAC/B,SAAS,GACZ,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CAYzB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { getClassName } from "@bodynarf/utils";
|
|
3
|
+
import "./style.scss";
|
|
4
|
+
import { ElementSize } from "../..";
|
|
5
|
+
const sizeToClassMap = new Map([
|
|
6
|
+
[ElementSize.Small, "bbr-icon--size-small"],
|
|
7
|
+
[ElementSize.Normal, ""],
|
|
8
|
+
[ElementSize.Medium, "bbr-icon--size-medium"],
|
|
9
|
+
[ElementSize.Large, "bbr-icon--size-large"]
|
|
10
|
+
]);
|
|
11
|
+
/**
|
|
12
|
+
* Icon component. Based on bootstrap icons
|
|
13
|
+
*/
|
|
14
|
+
export default function Icon({ name, size = ElementSize.Normal, className, }) {
|
|
15
|
+
const classNames = getClassName([
|
|
16
|
+
"bbr-icon",
|
|
17
|
+
"bi",
|
|
18
|
+
`bi-${name}`,
|
|
19
|
+
sizeToClassMap.has(size) ? sizeToClassMap.get(size) : "",
|
|
20
|
+
className
|
|
21
|
+
]);
|
|
22
|
+
return (_jsx("i", { className: classNames }));
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/icon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,cAAc,SAAS,CAAC"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { ElementSize } from
|
|
2
|
-
/** Icon component props */
|
|
3
|
-
export interface IconProps {
|
|
4
|
-
/**
|
|
5
|
-
* Icon name. Must be without `bi-`
|
|
6
|
-
* @example ["Arrow repeat", "arrow-repeat"]
|
|
7
|
-
* // Icon name to icon class name.
|
|
8
|
-
* // For class name check bootstrap icons website
|
|
9
|
-
*/
|
|
10
|
-
name: string;
|
|
11
|
-
/** Additional classname */
|
|
12
|
-
className?: string;
|
|
13
|
-
/** Icon size */
|
|
14
|
-
size?: ElementSize;
|
|
15
|
-
}
|
|
1
|
+
import { ElementSize } from "..";
|
|
2
|
+
/** Icon component props */
|
|
3
|
+
export interface IconProps {
|
|
4
|
+
/**
|
|
5
|
+
* Icon name. Must be without `bi-`
|
|
6
|
+
* @example ["Arrow repeat", "arrow-repeat"]
|
|
7
|
+
* // Icon name to icon class name.
|
|
8
|
+
* // For class name check bootstrap icons website
|
|
9
|
+
*/
|
|
10
|
+
name: string;
|
|
11
|
+
/** Additional classname */
|
|
12
|
+
className?: string;
|
|
13
|
+
/** Icon size */
|
|
14
|
+
size?: ElementSize;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/icon/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,2BAA2B;AAC3B,MAAM,WAAW,SAAS;IACtB;;;;;MAKE;IACF,IAAI,EAAE,MAAM,CAAC;IAEb,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gBAAgB;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./accordion";
|
|
2
|
+
export * from "./anchor";
|
|
3
|
+
export * from "./button";
|
|
4
|
+
export * from "./dropdown";
|
|
5
|
+
export * from "./icon";
|
|
6
|
+
export * from "./paginator";
|
|
7
|
+
export * from "./search";
|
|
8
|
+
export * from "./tabs";
|
|
9
|
+
export * from "./tag";
|
|
10
|
+
export * from "./primitives";
|
|
11
|
+
export * from "./types";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AAEtB,cAAc,cAAc,CAAC;AAE7B,cAAc,SAAS,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export * from "./accordion";
|
|
2
|
-
export * from "./anchor";
|
|
3
|
-
export * from "./button";
|
|
4
|
-
export * from "./dropdown";
|
|
5
|
-
export * from "./icon";
|
|
6
|
-
export * from "./paginator";
|
|
7
|
-
export * from "./search";
|
|
8
|
-
export * from "./tabs";
|
|
9
|
-
export * from "./tag";
|
|
10
|
-
export * from "./primitives";
|
|
11
|
-
export * from "./types";
|
|
1
|
+
export * from "./accordion";
|
|
2
|
+
export * from "./anchor";
|
|
3
|
+
export * from "./button";
|
|
4
|
+
export * from "./dropdown";
|
|
5
|
+
export * from "./icon";
|
|
6
|
+
export * from "./paginator";
|
|
7
|
+
export * from "./search";
|
|
8
|
+
export * from "./tabs";
|
|
9
|
+
export * from "./tag";
|
|
10
|
+
export * from "./primitives";
|
|
11
|
+
export * from "./types";
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { PaginatorProps } from "../../paginator";
|
|
3
|
+
/**
|
|
4
|
+
* Paginator component.
|
|
5
|
+
* Used for visualization of pagging configuration
|
|
6
|
+
*/
|
|
7
|
+
export default function Paginator({ count, onPageChange, currentPage, position, rounded, size, className, showNextButtons, nearPagesCount }: PaginatorProps): JSX.Element;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/paginator/component/index.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAuB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhF;;;EAGE;AACF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAC9B,KAAK,EAAE,YAAY,EAAE,WAAW,EAChC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAClC,eAAe,EAAE,cAAc,EAClC,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CA4G9B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useMemo } from "react";
|
|
3
|
+
import { getClassName, isNullOrEmpty } from "@bodynarf/utils";
|
|
4
|
+
import { generatePageNumbers } from "../../paginator";
|
|
5
|
+
/**
|
|
6
|
+
* Paginator component.
|
|
7
|
+
* Used for visualization of pagging configuration
|
|
8
|
+
*/
|
|
9
|
+
export default function Paginator({ count, onPageChange, currentPage, position, rounded, size, className, showNextButtons, nearPagesCount }) {
|
|
10
|
+
const page = currentPage || 0;
|
|
11
|
+
const pageChange = useCallback((event) => {
|
|
12
|
+
const target = event.target;
|
|
13
|
+
const pageRaw = target.dataset["page"];
|
|
14
|
+
if (isNullOrEmpty(pageRaw)) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const page = +pageRaw;
|
|
18
|
+
if (page !== currentPage && page > 0 && page <= count) {
|
|
19
|
+
onPageChange(page);
|
|
20
|
+
}
|
|
21
|
+
}, [onPageChange, currentPage, count]);
|
|
22
|
+
const pageNumbers = useMemo(() => generatePageNumbers(page, count, nearPagesCount), [page, count]);
|
|
23
|
+
const canGoBack = useMemo(() => page > 1, [page]);
|
|
24
|
+
const canGoForward = useMemo(() => page < count, [page, count]);
|
|
25
|
+
if (pageNumbers.length <= 1) {
|
|
26
|
+
return _jsx(_Fragment, {});
|
|
27
|
+
}
|
|
28
|
+
const classNames = getClassName([
|
|
29
|
+
"bbr-paginator",
|
|
30
|
+
"pagination",
|
|
31
|
+
paginationPositionToClassMap.has(position || "") ? paginationPositionToClassMap.get(position || "") : "",
|
|
32
|
+
rounded == true ? "is-rounded" : "",
|
|
33
|
+
isNullOrEmpty(size) ? "" : `is-${size}`,
|
|
34
|
+
className
|
|
35
|
+
]);
|
|
36
|
+
return (_jsxs("nav", { className: classNames, role: "navigation", "aria-label": "pagination", children: [showNextButtons === true &&
|
|
37
|
+
_jsxs(_Fragment, { children: [_jsx("a", { className: `pagination-previous${canGoBack ? "" : " is-disabled"}`, "data-page": page - 1, onClick: pageChange, children: "Previous" }), _jsx("a", { className: `pagination-next${canGoForward ? "" : " is-disabled"}`, "data-page": page + 1, onClick: pageChange, children: "Next page" })] }), _jsxs("ul", { className: "pagination-list", children: [page !== 1 && !pageNumbers.includes(1) &&
|
|
38
|
+
_jsxs(_Fragment, { children: [_jsx("li", { children: _jsx("a", { className: "pagination-link", "aria-label": "Goto page 1", "data-page": 1, onClick: pageChange, children: "1" }) }), _jsx("li", { children: _jsx("span", { className: "pagination-ellipsis", children: "\u2026" }) })] }), pageNumbers.map(x => _jsx("li", { children: _jsx("a", { className: `pagination-link${page === x ? " is-current" : ""}`, "aria-label": `Goto page ${x}`, "data-page": x, onClick: pageChange, children: x }) }, x)), page != count && !pageNumbers.includes(count) &&
|
|
39
|
+
_jsxs(_Fragment, { children: [_jsx("li", { children: _jsx("span", { className: "pagination-ellipsis", children: "\u2026" }) }), _jsx("li", { children: _jsx("a", { className: "pagination-link", "aria-label": `Goto page ${count}`, "data-page": count, onClick: pageChange, children: count }) })] })] })] }));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Position setting to css class name map
|
|
43
|
+
*/
|
|
44
|
+
const paginationPositionToClassMap = new Map([
|
|
45
|
+
["center", "is-centered"],
|
|
46
|
+
["right", "is-right"]
|
|
47
|
+
]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/paginator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { default } from "./component";
|
|
2
|
-
export * from "./types";
|
|
3
|
-
export * from "./utils";
|
|
1
|
+
export { default } from "./component";
|
|
2
|
+
export * from "./types";
|
|
3
|
+
export * from "./utils";
|