@bodynarf/react.components 1.9.1 → 1.10.1

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.
Files changed (159) hide show
  1. package/bodynarf-react.components-1.10.0.tgz +0 -0
  2. package/components/accordion/component/index.d.ts +1 -0
  3. package/components/accordion/component/index.d.ts.map +1 -1
  4. package/components/accordion/component/index.js +3 -3
  5. package/components/anchor/component/index.js +2 -2
  6. package/components/anchor/components/anchorWithIcon/index.d.ts +9 -2
  7. package/components/anchor/components/anchorWithIcon/index.d.ts.map +1 -1
  8. package/components/anchor/components/anchorWithIcon/index.js +2 -2
  9. package/components/anchor/components/simpleAnchor/index.d.ts +3 -2
  10. package/components/anchor/components/simpleAnchor/index.d.ts.map +1 -1
  11. package/components/anchor/components/simpleAnchor/index.js +1 -1
  12. package/components/anchor/types.d.ts +3 -11
  13. package/components/anchor/types.d.ts.map +1 -1
  14. package/components/breadcrumbs/component/index.d.ts +7 -32
  15. package/components/breadcrumbs/component/index.d.ts.map +1 -1
  16. package/components/breadcrumbs/component/index.js +22 -6
  17. package/components/breadcrumbs/types.d.ts +30 -1
  18. package/components/breadcrumbs/types.d.ts.map +1 -1
  19. package/components/button/component/index.d.ts.map +1 -1
  20. package/components/button/component/index.js +3 -3
  21. package/components/button/types.d.ts +1 -1
  22. package/components/dropdown/component/style.scss +3 -3
  23. package/components/dropdown/components/compact/index.d.ts +8 -1
  24. package/components/dropdown/components/compact/index.d.ts.map +1 -1
  25. package/components/dropdown/components/compact/index.js +17 -5
  26. package/components/dropdown/components/label/index.d.ts +1 -17
  27. package/components/dropdown/components/label/index.d.ts.map +1 -1
  28. package/components/dropdown/components/label/index.js +1 -54
  29. package/components/dropdown/components/withLabel/index.d.ts +3 -1
  30. package/components/dropdown/components/withLabel/index.d.ts.map +1 -1
  31. package/components/dropdown/components/withLabel/index.js +8 -82
  32. package/components/dropdown/types.d.ts +8 -0
  33. package/components/dropdown/types.d.ts.map +1 -1
  34. package/components/icon/component/index.d.ts +3 -2
  35. package/components/icon/component/index.d.ts.map +1 -1
  36. package/components/icon/component/index.js +4 -3
  37. package/components/icon/types.d.ts +2 -0
  38. package/components/icon/types.d.ts.map +1 -1
  39. package/components/multiselect/component/index.d.ts +8 -0
  40. package/components/multiselect/component/index.d.ts.map +1 -0
  41. package/components/multiselect/component/index.js +13 -0
  42. package/components/multiselect/component/style.scss +20 -0
  43. package/components/multiselect/components/item/index.d.ts +25 -0
  44. package/components/multiselect/components/item/index.d.ts.map +1 -0
  45. package/components/multiselect/components/item/index.js +62 -0
  46. package/components/multiselect/components/label/component/index.d.ts +20 -0
  47. package/components/multiselect/components/label/component/index.d.ts.map +1 -0
  48. package/components/multiselect/components/label/component/index.js +12 -0
  49. package/components/multiselect/components/label/components/empty/index.d.ts +8 -0
  50. package/components/multiselect/components/label/components/empty/index.d.ts.map +1 -0
  51. package/components/multiselect/components/label/components/empty/index.js +16 -0
  52. package/components/multiselect/components/label/components/nonEmpty/index.d.ts +8 -0
  53. package/components/multiselect/components/label/components/nonEmpty/index.d.ts.map +1 -0
  54. package/components/multiselect/components/label/components/nonEmpty/index.js +16 -0
  55. package/components/multiselect/components/label/index.d.ts +2 -0
  56. package/components/multiselect/components/label/index.d.ts.map +1 -0
  57. package/components/multiselect/components/label/index.js +1 -0
  58. package/components/multiselect/components/withLabel/index.d.ts +6 -0
  59. package/components/multiselect/components/withLabel/index.d.ts.map +1 -0
  60. package/components/multiselect/components/withLabel/index.js +11 -0
  61. package/components/multiselect/components/withoutLabel/index.d.ts +10 -0
  62. package/components/multiselect/components/withoutLabel/index.d.ts.map +1 -0
  63. package/components/multiselect/components/withoutLabel/index.js +84 -0
  64. package/components/multiselect/index.d.ts +3 -0
  65. package/components/multiselect/index.d.ts.map +1 -0
  66. package/components/multiselect/index.js +2 -0
  67. package/components/multiselect/types.d.ts +41 -0
  68. package/components/multiselect/types.d.ts.map +1 -0
  69. package/components/multiselect/types.js +1 -0
  70. package/components/paginator/component/index.d.ts.map +1 -1
  71. package/components/paginator/component/index.js +22 -5
  72. package/components/paginator/index.d.ts +0 -1
  73. package/components/paginator/index.d.ts.map +1 -1
  74. package/components/paginator/index.js +0 -1
  75. package/components/primitives/checkbox/component/index.d.ts +2 -1
  76. package/components/primitives/checkbox/component/index.d.ts.map +1 -1
  77. package/components/primitives/checkbox/component/index.js +8 -6
  78. package/components/primitives/checkbox/component/style.scss +22 -3
  79. package/components/primitives/color/components/picker/index.d.ts +3 -3
  80. package/components/primitives/color/components/picker/index.d.ts.map +1 -1
  81. package/components/primitives/color/components/picker/index.js +8 -8
  82. package/components/primitives/color/components/withLabel/index.d.ts +1 -1
  83. package/components/primitives/color/components/withLabel/index.d.ts.map +1 -1
  84. package/components/primitives/color/components/withLabel/index.js +3 -4
  85. package/components/primitives/color/components/withoutLabel/index.d.ts +1 -1
  86. package/components/primitives/color/components/withoutLabel/index.d.ts.map +1 -1
  87. package/components/primitives/color/components/withoutLabel/index.js +2 -3
  88. package/components/primitives/date/component/index.d.ts +3 -2
  89. package/components/primitives/date/component/index.d.ts.map +1 -1
  90. package/components/primitives/date/component/index.js +5 -7
  91. package/components/primitives/date/component/style.scss +11 -0
  92. package/components/primitives/date/types.d.ts +1 -1
  93. package/components/primitives/date/types.d.ts.map +1 -1
  94. package/components/primitives/internal/componentWithLabel/index.d.ts.map +1 -1
  95. package/components/primitives/internal/componentWithLabel/index.js +2 -2
  96. package/components/primitives/internal/hint/index.d.ts +4 -7
  97. package/components/primitives/internal/hint/index.d.ts.map +1 -1
  98. package/components/primitives/internal/hint/index.js +1 -0
  99. package/components/primitives/internal/hint/style.scss +4 -0
  100. package/components/primitives/multiline/component/index.d.ts +0 -1
  101. package/components/primitives/multiline/component/index.d.ts.map +1 -1
  102. package/components/primitives/multiline/component/index.js +0 -1
  103. package/components/primitives/multiline/components/withLabel/index.d.ts +2 -1
  104. package/components/primitives/multiline/components/withLabel/index.d.ts.map +1 -1
  105. package/components/primitives/multiline/components/withLabel/index.js +4 -6
  106. package/components/primitives/multiline/components/withoutLabel/index.d.ts +1 -0
  107. package/components/primitives/multiline/components/withoutLabel/index.d.ts.map +1 -1
  108. package/components/primitives/multiline/components/withoutLabel/index.js +4 -5
  109. package/components/primitives/number/components/withLabel/index.d.ts +2 -1
  110. package/components/primitives/number/components/withLabel/index.d.ts.map +1 -1
  111. package/components/primitives/number/components/withLabel/index.js +4 -6
  112. package/components/primitives/number/components/withoutLabel/index.d.ts +2 -1
  113. package/components/primitives/number/components/withoutLabel/index.d.ts.map +1 -1
  114. package/components/primitives/number/components/withoutLabel/index.js +5 -6
  115. package/components/primitives/password/components/withLabel/index.d.ts +2 -1
  116. package/components/primitives/password/components/withLabel/index.d.ts.map +1 -1
  117. package/components/primitives/password/components/withLabel/index.js +5 -6
  118. package/components/primitives/password/components/withoutLabel/index.d.ts +1 -0
  119. package/components/primitives/password/components/withoutLabel/index.d.ts.map +1 -1
  120. package/components/primitives/password/components/withoutLabel/index.js +6 -7
  121. package/components/primitives/text/component/index.d.ts +0 -1
  122. package/components/primitives/text/component/index.d.ts.map +1 -1
  123. package/components/primitives/text/component/index.js +0 -1
  124. package/components/primitives/text/components/withLabel/index.d.ts +1 -0
  125. package/components/primitives/text/components/withLabel/index.d.ts.map +1 -1
  126. package/components/primitives/text/components/withLabel/index.js +4 -6
  127. package/components/primitives/text/components/withoutLabel/index.d.ts +2 -1
  128. package/components/primitives/text/components/withoutLabel/index.d.ts.map +1 -1
  129. package/components/primitives/text/components/withoutLabel/index.js +5 -6
  130. package/components/search/component/index.d.ts.map +1 -1
  131. package/components/search/component/index.js +6 -8
  132. package/components/table/component/index.d.ts +1 -35
  133. package/components/table/component/index.d.ts.map +1 -1
  134. package/components/table/component/index.js +1 -1
  135. package/components/table/types.d.ts +36 -1
  136. package/components/table/types.d.ts.map +1 -1
  137. package/components/tabs/component/index.d.ts +3 -26
  138. package/components/tabs/component/index.d.ts.map +1 -1
  139. package/components/tabs/component/index.js +3 -3
  140. package/components/tabs/types.d.ts +24 -1
  141. package/components/tabs/types.d.ts.map +1 -1
  142. package/components/tag/component/index.d.ts +1 -0
  143. package/components/tag/component/index.d.ts.map +1 -1
  144. package/components/tag/component/index.js +3 -3
  145. package/components/tag/types.d.ts +3 -3
  146. package/components/tag/types.d.ts.map +1 -1
  147. package/hooks/index.d.ts +1 -0
  148. package/hooks/index.d.ts.map +1 -1
  149. package/hooks/index.js +1 -0
  150. package/hooks/useComponentOutsideClick.d.ts.map +1 -1
  151. package/hooks/useComponentOutsideClick.js +2 -3
  152. package/package.json +2 -2
  153. package/readme.md +5 -3
  154. package/tsconfig.tsbuildinfo +1 -1
  155. package/bodynarf-react.components-1.9.3.tgz +0 -0
  156. package/common.scss +0 -8
  157. package/components/paginator/utils.d.ts +0 -10
  158. package/components/paginator/utils.d.ts.map +0 -1
  159. package/components/paginator/utils.js +0 -18
@@ -1,85 +1,11 @@
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 { getStyleClassName, mapDataAttributes } from "../../../../utils";
5
- import { useComponentOutsideClick } from "../../../../hooks";
6
- import InternalHint from "../../../primitives/internal/hint";
7
- import DropdownItem from "../../components/item";
8
- import DropdownLabel from "../../components/label";
9
- const DropdownWithLabel = ({ items, value, onSelect, validationState, deselectable = false, hideOnOuterClick, listMaxHeight, label, placeholder, disabled = false, className, title, data, hint, }) => {
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useId } from "react";
3
+ import { ElementSize } from "../../../../types";
4
+ import LabelWrapper from "../../../primitives/internal/componentWithLabel";
5
+ import DropdownCompact from "../compact";
6
+ /** Dropdown component with label */
7
+ const DropdownWithLabel = (props) => {
10
8
  const id = useId();
11
- const [isListVisible, setListVisible] = useState(false);
12
- const onItemClick = useCallback((event) => {
13
- if (disabled) {
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) {
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
- className,
54
- disabled ? "bbr-dropdown--disabled" : "",
55
- isListVisible ? "is-active" : "",
56
- isNullOrEmpty(listMaxHeight) ? "bbr-dropdown--height-default" : "",
57
- "dropdown"
58
- ]);
59
- const labelClassName = getClassName([
60
- "label",
61
- label.className
62
- ]);
63
- const labelComponentClassName = getStyleClassName(undefined, validationState);
64
- const dataAttributes = isNullOrUndefined(data)
65
- ? undefined
66
- : mapDataAttributes(data);
67
- if (label.horizontal) {
68
- const labelContainerClassName = getClassName([
69
- "field-label",
70
- "is-normal",
71
- label.horizontalContainerClassName
72
- ]);
73
- const fieldContainerClassName = getClassName([
74
- "field-body",
75
- label.horizontalFieldContainerClassName
76
- ]);
77
- 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, title: title, ...dataAttributes, children: [_jsx(DropdownLabel, { selectedItem: value, caption: placeholder, onClick: onLabelClick, deselectable: deselectable, className: labelComponentClassName }), _jsx("div", { className: "dropdown-menu", children: items.length > 0
78
- ? _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)) })
79
- : _jsx("span", { className: "dropdown-content dropdown-item", children: "No items found" }) })] }, id), _jsx(InternalHint, { hint: hint, validationState: validationState })] }) })] }));
80
- }
81
- return (_jsxs("div", { className: "field", children: [_jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }), _jsxs("div", { className: classNames, "data-dropdown-id": id, title: title, ...dataAttributes, children: [_jsx(DropdownLabel, { selectedItem: value, caption: placeholder, onClick: onLabelClick, deselectable: deselectable, className: labelComponentClassName }), _jsx("div", { className: "dropdown-menu", children: items.length > 0
82
- ? _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)) })
83
- : _jsx("span", { className: "dropdown-content dropdown-item", children: "No items found" }) })] }, id), _jsx(InternalHint, { hint: hint, validationState: validationState })] }));
9
+ return (_jsx(LabelWrapper, { id: id, label: props.label, size: ElementSize.Normal, children: _jsx(DropdownCompact, { ...props, id: id }) }));
84
10
  };
85
11
  export default DropdownWithLabel;
@@ -53,5 +53,13 @@ export interface DropdownProps extends BaseElementProps {
53
53
  * (!) Hint will be overridden by the validation state, if specified
54
54
  */
55
55
  hint?: HintConfiguration;
56
+ /** Caption for dropdown list when there's no data to display */
57
+ noDataText?: string;
58
+ /** Is search through items enabled */
59
+ searchable?: boolean;
60
+ /**
61
+ * Text which would be displayed when search query applied and no items found
62
+ */
63
+ noDataByQuery?: string;
56
64
  }
57
65
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnH,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;IAErB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,IAAI,CAAC,EAAE,WAAW,CAAC;CACtB;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,kBAAkB,CAAC;IAE3B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnH,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;IAErB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,IAAI,CAAC,EAAE,WAAW,CAAC;CACtB;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,kBAAkB,CAAC;IAE3B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAEzB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B"}
@@ -1,8 +1,9 @@
1
- /// <reference types="react" />
1
+ import { FC } from "react";
2
2
  import "./style.scss";
3
3
  import { IconProps } from "../..";
4
4
  /**
5
5
  * Icon component. Based on bootstrap icons
6
6
  */
7
- export default function Icon({ name, size, className, title, data, }: IconProps): JSX.Element;
7
+ declare const Icon: FC<IconProps>;
8
+ export default Icon;
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/icon/component/index.tsx"],"names":[],"mappings":";AAKA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASlC;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EACzB,IAAI,EAAE,IAAyB,EAE/B,SAAS,EAAE,KAAK,EAAE,IAAI,GACzB,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CAqBzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/icon/component/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAO3B,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASlC;;GAEG;AACH,QAAA,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CA2BvB,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -12,7 +12,7 @@ const sizeToClassMap = new Map([
12
12
  /**
13
13
  * Icon component. Based on bootstrap icons
14
14
  */
15
- export default function Icon({ name, size = ElementSize.Normal, className, title, data, }) {
15
+ const Icon = ({ name, size = ElementSize.Normal, className, title, data, onClick, }) => {
16
16
  const classNames = getClassName([
17
17
  "bbr-icon",
18
18
  "bi",
@@ -23,5 +23,6 @@ export default function Icon({ name, size = ElementSize.Normal, className, title
23
23
  const dataAttributes = isNullOrUndefined(data)
24
24
  ? undefined
25
25
  : mapDataAttributes(data);
26
- return (_jsx("i", { className: classNames, title: title, ...dataAttributes }));
27
- }
26
+ return (_jsx("i", { className: classNames, title: title, onClick: onClick, ...dataAttributes }));
27
+ };
28
+ export default Icon;
@@ -10,5 +10,7 @@ export interface IconProps extends BaseElementProps {
10
10
  name: string;
11
11
  /** Icon size */
12
12
  size?: ElementSize;
13
+ /** Click handler */
14
+ onClick?: () => void;
13
15
  }
14
16
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/icon/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,2BAA2B;AAC3B,MAAM,WAAW,SAAU,SAAQ,gBAAgB;IAC/C;;;;;MAKE;IACF,IAAI,EAAE,MAAM,CAAC;IAEb,gBAAgB;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/icon/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,2BAA2B;AAC3B,MAAM,WAAW,SAAU,SAAQ,gBAAgB;IAC/C;;;;;MAKE;IACF,IAAI,EAAE,MAAM,CAAC;IAEb,gBAAgB;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB"}
@@ -0,0 +1,8 @@
1
+ import { FC } from "react";
2
+ import "../../dropdown/component/style.scss";
3
+ import "./style.scss";
4
+ import { MultiselectProps } from "../types";
5
+ /** Multiselect component */
6
+ declare const Multiselect: FC<MultiselectProps>;
7
+ export default Multiselect;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/multiselect/component/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAI3B,OAAO,qCAAqC,CAAC;AAC7C,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAI5C,4BAA4B;AAC5B,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAKrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { isNullOrUndefined } from "@bodynarf/utils";
3
+ import "../../dropdown/component/style.scss";
4
+ import "./style.scss";
5
+ import MultiselectWithoutLabel from "../components/withoutLabel";
6
+ import MultiselectWithLabel from "../components/withLabel";
7
+ /** Multiselect component */
8
+ const Multiselect = (props) => {
9
+ return isNullOrUndefined(props.label)
10
+ ? _jsx(MultiselectWithoutLabel, { ...props })
11
+ : _jsx(MultiselectWithLabel, { ...props });
12
+ };
13
+ export default Multiselect;
@@ -0,0 +1,20 @@
1
+ .bbr-multiselect {
2
+ .dropdown-content {
3
+ overflow: hidden;
4
+
5
+ ul {
6
+ max-height: 13.5rem;
7
+ overflow: auto;
8
+
9
+ li.bbr-dropdown-item {
10
+ .field:not(:last-child) {
11
+ margin-bottom: 0 !important;
12
+ }
13
+
14
+ .bbr-icon {
15
+ transition: none;
16
+ }
17
+ }
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,25 @@
1
+ /// <reference types="react" />
2
+ import { MultiselectItem as MultiselectItemModel, MultiselectProps } from "../../";
3
+ /** Multiselect item props */
4
+ declare type MultiselectItemProps = Pick<MultiselectProps, "checkboxConfig"> & {
5
+ rootId: string;
6
+ /** Item to present in multiselect */
7
+ item: MultiselectItemModel;
8
+ /** Is item selected */
9
+ selected: boolean;
10
+ /**
11
+ * Handler of item selection change event
12
+ * @param item Current item
13
+ * @param checked New checked state
14
+ */
15
+ onChange: (item: MultiselectItemModel, checked: boolean) => void;
16
+ /**
17
+ * Handler of item click event
18
+ * @param item Current item
19
+ */
20
+ onItemClick: (item: MultiselectItemModel) => void;
21
+ };
22
+ /** Single item in multiselect component */
23
+ declare const MultiselectItem: ({ item, selected, rootId, onItemClick, onChange, checkboxConfig, }: MultiselectItemProps) => JSX.Element;
24
+ export default MultiselectItem;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/multiselect/components/item/index.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,eAAe,IAAI,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAEnF,6BAA6B;AAC7B,aAAK,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,GAAG;IACnE,MAAM,EAAE,MAAM,CAAC;IAEf,qCAAqC;IACrC,IAAI,EAAE,oBAAoB,CAAC;IAE3B,uBAAuB;IACvB,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAEjE;;;OAGG;IACH,WAAW,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF,2CAA2C;AAC3C,QAAA,MAAM,eAAe,uEAIlB,oBAAoB,KAAG,WAqDzB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback } from "react";
3
+ import { getClassName, isNullOrUndefined } from "@bodynarf/utils";
4
+ import { ElementPosition } from "../../../../types";
5
+ import Icon from "../../../icon";
6
+ import Checkbox from "../../../primitives/checkbox";
7
+ /** Single item in multiselect component */
8
+ const MultiselectItem = ({ item, selected, rootId, onItemClick, onChange, checkboxConfig, }) => {
9
+ const onChecked = useCallback((value) => onChange(item, value ?? false), [item, onChange]);
10
+ const onClick = useCallback((event) => {
11
+ if (event.target instanceof HTMLLIElement) {
12
+ onItemClick(item);
13
+ }
14
+ else {
15
+ event.stopPropagation();
16
+ }
17
+ }, [item, onItemClick]);
18
+ if (!isNullOrUndefined(item.icon)) {
19
+ return _jsx(MultiselectItemWithIcon, { item: item, rootId: rootId, onChange: onChange, selected: selected, onItemClick: onItemClick });
20
+ }
21
+ const className = getClassName([
22
+ "bbr-dropdown-item",
23
+ "dropdown-item",
24
+ selected ? "is-active" : "",
25
+ "is-flex",
26
+ ]);
27
+ return (_jsxs("li", { className: className, onClick: onClick, title: item.title, "data-dropdown-id": rootId, children: [_jsx(Checkbox, { ...checkboxConfig, defaultValue: selected, onValueChange: onChecked }, item.id + selected), item.displayValue] }));
28
+ };
29
+ export default MultiselectItem;
30
+ /** Single item in multiselect component with icon */
31
+ const MultiselectItemWithIcon = ({ item, selected, rootId, onChange, onItemClick, checkboxConfig, }) => {
32
+ const icon = item.icon;
33
+ const className = getClassName([
34
+ "bbr-dropdown-item",
35
+ "dropdown-item",
36
+ selected ? "is-active" : "",
37
+ "is-flex is-align-items-center",
38
+ ]);
39
+ const iconClassName = getClassName([
40
+ icon.className,
41
+ icon.position === ElementPosition.Right
42
+ ? "bbr-icon--right"
43
+ : "bbr-icon--left",
44
+ ]);
45
+ const onChecked = useCallback((value) => onChange(item, value ?? false), [item, onChange]);
46
+ const onClick = useCallback((event) => {
47
+ if (event.target instanceof HTMLLIElement) {
48
+ onItemClick(item);
49
+ }
50
+ else {
51
+ event.stopPropagation();
52
+ }
53
+ }, [item, onItemClick]);
54
+ const checkboxClassName = getClassName([
55
+ checkboxConfig?.className,
56
+ "mb-1"
57
+ ]);
58
+ if (icon.position === ElementPosition.Right) {
59
+ return (_jsxs("li", { onClick: onClick, className: className, title: item.title, children: [_jsx(Checkbox, { ...checkboxConfig, defaultValue: selected, onValueChange: onChecked, className: checkboxClassName }, item.id + selected), item.displayValue, _jsx(Icon, { name: icon.name, size: icon.size, className: iconClassName })] }));
60
+ }
61
+ return (_jsxs("li", { onClick: onClick, className: className, title: item.title, "data-dropdown-id": rootId, children: [_jsx(Checkbox, { ...checkboxConfig, defaultValue: selected, onValueChange: onChecked, className: checkboxClassName }, item.id + selected), _jsx(Icon, { name: icon.name, size: icon.size, className: iconClassName }), item.displayValue] }));
62
+ };
@@ -0,0 +1,20 @@
1
+ import { FC, MouseEvent } from "react";
2
+ /** Props type of `MultiselectLabel` */
3
+ export interface MultiselectLabelProps {
4
+ /** Caption when no items selected */
5
+ caption: string;
6
+ /** Caption when some items were selected */
7
+ selectionCaption: string;
8
+ /** Amount of selected items */
9
+ selectedItemsCount: number;
10
+ /** Can user deselect */
11
+ deselectable: boolean;
12
+ /** Element classnames */
13
+ className?: string;
14
+ /** Click handler*/
15
+ onClick: (event: MouseEvent<HTMLElement>) => void;
16
+ }
17
+ /** Label component */
18
+ declare const MultiselectLabel: FC<MultiselectLabelProps>;
19
+ export default MultiselectLabel;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/multiselect/components/label/component/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAKvC,uCAAuC;AACvC,MAAM,WAAW,qBAAqB;IAClC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAEhB,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IAEzB,+BAA+B;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAE3B,wBAAwB;IACxB,YAAY,EAAE,OAAO,CAAC;IAEtB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mBAAmB;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CACrD;AAED,sBAAsB;AACtB,QAAA,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAqB/C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import SelectedItemLabel from "../components/nonEmpty";
3
+ import EmptyLabel from "../components/empty";
4
+ /** Label component */
5
+ const MultiselectLabel = ({ caption, selectionCaption, selectedItemsCount, onClick, deselectable, className, }) => {
6
+ if (selectedItemsCount === 0) {
7
+ return _jsx(EmptyLabel, { caption: caption, onClick: onClick, className: className });
8
+ }
9
+ const captionWhenItemsSelected = selectionCaption.format(`${selectedItemsCount}`);
10
+ return _jsx(SelectedItemLabel, { onClick: onClick, className: className, deselectable: deselectable, caption: captionWhenItemsSelected });
11
+ };
12
+ export default MultiselectLabel;
@@ -0,0 +1,8 @@
1
+ import { FC } from "react";
2
+ import { MultiselectLabelProps } from "../../component";
3
+ /** Props type of `EmptyLabel` */
4
+ declare type EmptyLabelProps = Pick<MultiselectLabelProps, "caption" | "onClick" | "className">;
5
+ /** Empty multiselect label component (no item selected) */
6
+ declare const EmptyLabel: FC<EmptyLabelProps>;
7
+ export default EmptyLabel;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/multiselect/components/label/components/empty/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAO3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,iCAAiC;AACjC,aAAK,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC;AAExF,2DAA2D;AAC3D,QAAA,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAsBnC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getClassName, isNullOrEmpty } from "@bodynarf/utils";
3
+ import { ElementSize } from "../../../../../../types";
4
+ import Icon from "../../../../../icon";
5
+ /** Empty multiselect label component (no item selected) */
6
+ const EmptyLabel = ({ caption, onClick, className, }) => {
7
+ const elClassName = getClassName([
8
+ "dropdown-trigger",
9
+ "bbr-dropdown__label",
10
+ isNullOrEmpty(className) ? "" : `${className}--md`,
11
+ "bbr-dropdown__label--default",
12
+ "button"
13
+ ]);
14
+ return (_jsxs("label", { className: elClassName, onClick: onClick, children: [_jsx("span", { className: "mr-2", children: caption }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
15
+ };
16
+ export default EmptyLabel;
@@ -0,0 +1,8 @@
1
+ import { FC } from "react";
2
+ import { MultiselectLabelProps } from "../../component";
3
+ /** Props type of `NonEmptyMultiselectLabel` */
4
+ declare type NonEmptyMultiselectLabelProps = Pick<MultiselectLabelProps, "onClick" | "caption" | "deselectable" | "className">;
5
+ /** Dropdown label when item is selected */
6
+ declare const NonEmptyMultiselectLabel: FC<NonEmptyMultiselectLabelProps>;
7
+ export default NonEmptyMultiselectLabel;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/multiselect/components/label/components/nonEmpty/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAO3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,+CAA+C;AAC/C,aAAK,6BAA6B,GAAG,IAAI,CACrC,qBAAqB,EACnB,SAAS,GAAG,SAAS,GACrB,cAAc,GAAG,WAAW,CACjC,CAAC;AAEF,2CAA2C;AAC3C,QAAA,MAAM,wBAAwB,EAAE,EAAE,CAAC,6BAA6B,CA2B/D,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getClassName, isNullOrEmpty } from "@bodynarf/utils";
3
+ import { ElementSize } from "../../../../../../types";
4
+ import Icon from "../../../../../icon";
5
+ /** Dropdown label when item is selected */
6
+ const NonEmptyMultiselectLabel = ({ onClick, deselectable, className, caption }) => {
7
+ const elClassName = getClassName([
8
+ "dropdown-trigger",
9
+ "bbr-dropdown__label",
10
+ isNullOrEmpty(className) ? "" : `${className}--md`,
11
+ "button"
12
+ ]);
13
+ return (_jsxs("label", { className: elClassName, onClick: onClick, children: [deselectable &&
14
+ _jsx(Icon, { name: "plus-lg", size: ElementSize.Medium }), _jsx("span", { className: deselectable ? "px-2" : "pr-2", children: caption }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
15
+ };
16
+ export default NonEmptyMultiselectLabel;
@@ -0,0 +1,2 @@
1
+ export { default } from "./component";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/multiselect/components/label/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1 @@
1
+ export { default } from "./component";
@@ -0,0 +1,6 @@
1
+ import { FC } from "react";
2
+ import { MultiselectProps } from "../../types";
3
+ /** Multiselect component with label */
4
+ declare const MultiselectWithLabel: FC<MultiselectProps>;
5
+ export default MultiselectWithLabel;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/multiselect/components/withLabel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAS,MAAM,OAAO,CAAC;AAKlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,uCAAuC;AACvC,QAAA,MAAM,oBAAoB,EAAE,EAAE,CAAC,gBAAgB,CAc9C,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useId } from "react";
3
+ import { ElementSize } from "../../../../types";
4
+ import LabelWrapper from "../../../primitives/internal/componentWithLabel";
5
+ import MultiselectWithoutLabel from "../withoutLabel";
6
+ /** Multiselect component with label */
7
+ const MultiselectWithLabel = (props) => {
8
+ const id = useId();
9
+ return (_jsx(LabelWrapper, { id: id, label: props.label, size: ElementSize.Normal, children: _jsx(MultiselectWithoutLabel, { ...props }) }));
10
+ };
11
+ export default MultiselectWithLabel;
@@ -0,0 +1,10 @@
1
+ import { FC } from "react";
2
+ import { MultiselectProps } from "../../types";
3
+ /** Props type of `MultiselectWithoutLabel` */
4
+ declare type MultiselectWithoutLabelProps = MultiselectProps & {
5
+ /** Manual component identifier */
6
+ id?: string;
7
+ };
8
+ declare const MultiselectWithoutLabel: FC<MultiselectWithoutLabelProps>;
9
+ export default MultiselectWithoutLabel;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/multiselect/components/withoutLabel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAA4C,MAAM,OAAO,CAAC;AAUrE,OAAO,EAAE,gBAAgB,EAA2C,MAAM,aAAa,CAAC;AAIxF,8CAA8C;AAC9C,aAAK,4BAA4B,GAAG,gBAAgB,GAAG;IACnD,kCAAkC;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CAiJ7D,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useId, useState } from "react";
3
+ import { getClassName, isNullOrEmpty, isNullOrUndefined } from "@bodynarf/utils";
4
+ import { ElementSize } from "../../../../types";
5
+ import { getStyleClassName, mapDataAttributes } from "../../../../utils";
6
+ import { useComponentOutsideClick } from "../../../../hooks";
7
+ import Search from "../../../search";
8
+ import InternalHint from "../../../primitives/internal/hint";
9
+ import MultiselectItem from "../item";
10
+ import MultiselectLabel from "../label/component";
11
+ const MultiselectWithoutLabel = ({ items, onChange, onClear, hideOnOuterClick, listMaxHeight, placeholder, noDataText = "No items found", selectionCaption = "{0} items selected", noDataByQuery = "No items found by specified search", compact = false, disabled = false, searchable = true, validationState, className, title, data, hint, id: propsId, checkboxConfig, }) => {
12
+ const generatedId = useId();
13
+ const id = propsId ?? generatedId;
14
+ const [isListVisible, setListVisible] = useState(false);
15
+ const [selectedItems, setSelectedItems] = useState(items
16
+ .filter(({ selected }) => selected)
17
+ .map(({ id }) => id)
18
+ ??
19
+ []);
20
+ const onItemClick = useCallback((item) => {
21
+ const isItemSelected = selectedItems.includes(item.id);
22
+ setSelectedItems(x => isItemSelected
23
+ ? x.filter(x => x !== item.id)
24
+ : [...x, item.id]);
25
+ item.selected = isItemSelected;
26
+ onChange(item, isItemSelected);
27
+ }, [onChange, selectedItems]);
28
+ const onItemSelectChange = useCallback((item, selected) => {
29
+ setSelectedItems(x => selected
30
+ ? [...x, item.id]
31
+ : x.filter(x => x !== item.id));
32
+ item.selected = selected;
33
+ onChange(item, selected);
34
+ }, [onChange]);
35
+ const onLabelClick = useCallback((event) => {
36
+ if (disabled) {
37
+ return;
38
+ }
39
+ const target = event.target;
40
+ if (isNullOrUndefined(target)) {
41
+ return;
42
+ }
43
+ if (target.classList.contains("bi-plus-lg")) {
44
+ setSelectedItems([]);
45
+ onClear?.();
46
+ }
47
+ else {
48
+ setListVisible(state => !state);
49
+ }
50
+ }, [onClear, setListVisible, disabled]);
51
+ useComponentOutsideClick(`[data-dropdown-id="${id}"]`, isListVisible, () => setListVisible(false), hideOnOuterClick);
52
+ const classNames = getClassName([
53
+ "bbr-multiselect",
54
+ "bbr-dropdown",
55
+ className,
56
+ disabled ? "bbr-dropdown--disabled" : "",
57
+ compact ? "bbr-dropdown--compact" : "",
58
+ isListVisible ? "is-active" : "",
59
+ isNullOrEmpty(listMaxHeight) ? "bbr-dropdown--height-default" : "",
60
+ "dropdown",
61
+ ]);
62
+ const labelComponentClassName = getStyleClassName(undefined, validationState);
63
+ const selectedItemsCount = selectedItems.length;
64
+ const dataAttributes = isNullOrUndefined(data)
65
+ ? undefined
66
+ : mapDataAttributes(data);
67
+ const deselectable = !isNullOrUndefined(onClear);
68
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: classNames, "data-dropdown-id": id, title: title, ...dataAttributes, children: [_jsx(MultiselectLabel, { caption: placeholder, onClick: onLabelClick, deselectable: deselectable, className: labelComponentClassName, selectionCaption: selectionCaption, selectedItemsCount: selectedItemsCount }), _jsx("div", { className: "dropdown-menu", children: _jsx(DropdownContent, { id: id, items: items, searchable: searchable, noDataText: noDataText, onItemClick: onItemClick, noDataByQuery: noDataByQuery, selectedItems: selectedItems, listMaxHeight: listMaxHeight, checkboxConfig: checkboxConfig, onItemSelectChange: onItemSelectChange }) })] }, id), _jsx(InternalHint, { hint: hint, validationState: validationState })] }));
69
+ };
70
+ export default MultiselectWithoutLabel;
71
+ const DropdownContent = ({ noDataText, id, listMaxHeight, noDataByQuery, items, selectedItems, onItemClick, onItemSelectChange, searchable = true, checkboxConfig, }) => {
72
+ const [search, setSearch] = useState("");
73
+ if (items.length === 0) {
74
+ return (_jsx("div", { className: "dropdown-content", children: _jsx("span", { className: "dropdown-item", children: noDataText }) }));
75
+ }
76
+ const filteredItems = isNullOrEmpty(search)
77
+ ? items
78
+ : items.filter(({ displayValue }) => displayValue.toLocaleLowerCase().includes(search.toLocaleLowerCase()));
79
+ if (filteredItems.length === 0) {
80
+ return (_jsxs("div", { className: "dropdown-content", style: { maxHeight: listMaxHeight }, children: [_jsx("div", { className: "mx-2 my-1", children: _jsx(Search, { caption: "search", onSearch: setSearch, searchType: "byTyping", size: ElementSize.Small }) }), _jsx("span", { className: "dropdown-item", children: noDataByQuery })] }));
81
+ }
82
+ return (_jsxs("div", { className: "dropdown-content", style: { maxHeight: listMaxHeight }, children: [searchable &&
83
+ _jsx("div", { className: "mx-2 my-1", children: _jsx(Search, { caption: "search", onSearch: setSearch, searchType: "byTyping", size: ElementSize.Small }) }), _jsx("ul", { children: filteredItems.map(item => _jsx(MultiselectItem, { item: item, rootId: id, onItemClick: onItemClick, onChange: onItemSelectChange, checkboxConfig: checkboxConfig, selected: selectedItems.includes(item.id) }, item.id)) })] }));
84
+ };
@@ -0,0 +1,3 @@
1
+ export { default } from "./component";
2
+ export * from "./types";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/multiselect/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default } from "./component";
2
+ export * from "./types";
@@ -0,0 +1,41 @@
1
+ import { DropdownProps, SelectableItem } from "../dropdown";
2
+ import { CheckBoxProps } from "../primitives";
3
+ /** Single multiselect item that user can select */
4
+ export declare type MultiselectItem = SelectableItem & {
5
+ /** Is item selected */
6
+ selected: boolean;
7
+ };
8
+ /** Props type of `Multiselect` */
9
+ export declare type MultiselectProps = Omit<DropdownProps, "items" | "onSelect" | "value" | "deselectable" | "searchable"> & {
10
+ /** Items which can be selected */
11
+ items: Array<MultiselectItem>;
12
+ /**
13
+ * Handler of changing select state of item
14
+ * @description `item.selected` will be set by component
15
+ * @param item Item that triggered event
16
+ * @param selected New select flag value
17
+ */
18
+ onChange: (item: MultiselectItem, selected: boolean) => void;
19
+ /**
20
+ * Handler of clear selection event.
21
+ * When no handler specified - clear selection cannot be performed
22
+ */
23
+ onClear?: () => void;
24
+ /**
25
+ * Caption for label when some items are selected
26
+ * @example selectionCaption: "selected: {0}"
27
+ * @description Supports only 1 string parameter for number of selected items. Default is `{0} items selected`
28
+ */
29
+ selectionCaption?: string;
30
+ /**
31
+ * Text which would be displayed when search query applied and no items found
32
+ */
33
+ noDataByQuery?: string;
34
+ /**
35
+ * Is search through items enabled. Default is `true`
36
+ */
37
+ searchable?: boolean;
38
+ /** Customization for checkbox */
39
+ checkboxConfig?: Pick<CheckBoxProps, "block" | "className" | "data" | "fixBackgroundColor" | "hasBackgroundColor" | "style" | "withoutBorder" | "rounded">;
40
+ };
41
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/multiselect/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,mDAAmD;AACnD,oBAAY,eAAe,GAAG,cAAc,GAAG;IAC3C,uBAAuB;IACvB,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,kCAAkC;AAClC,oBAAY,gBAAgB,GAAG,IAAI,CAC/B,aAAa,EACX,OAAO,GAAG,UAAU,GACpB,OAAO,GAAG,cAAc,GACxB,YAAY,CACjB,GAAG;IACA,kCAAkC;IAClC,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IAE9B;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAE7D;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,iCAAiC;IACjC,cAAc,CAAC,EAAE,IAAI,CACjB,aAAa,EACX,OAAO,GAAG,WAAW,GAAG,MAAM,GAC9B,oBAAoB,GAAG,oBAAoB,GAC3C,OAAO,GAAG,eAAe,GACzB,SAAS,CACd,CAAC;CACL,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/paginator/component/index.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,cAAc,EAAuB,MAAM,OAAO,CAAC;AAE5D;;;EAGE;AACF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAC9B,KAAK,EAAE,YAAY,EAAE,WAAe,EACpC,QAA+B,EAC/B,IAAI,EACJ,OAAe,EAAE,eAAuB,EACxC,cAAc,EAEd,SAAS,EAAE,KAAK,EAAE,IAAI,GACzB,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAqH9B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/paginator/component/index.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC;;;EAGE;AACF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAC9B,KAAK,EAAE,YAAY,EAAE,WAAe,EACpC,QAA+B,EAAE,IAAyB,EAC1D,OAAe,EAAE,eAAuB,EACxC,cAAkB,EAElB,SAAS,EAAE,KAAK,EAAE,IAAI,GACzB,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAqH9B"}