@bodynarf/react.components 1.8.22 → 1.9.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 (277) hide show
  1. package/bodynarf-react.components-1.9.3.tgz +0 -0
  2. package/common.scss +3 -2
  3. package/components/accordion/component/index.d.ts +2 -3
  4. package/components/accordion/component/index.d.ts.map +1 -1
  5. package/components/accordion/component/index.js +4 -4
  6. package/components/accordion/types.d.ts +1 -1
  7. package/components/accordion/types.d.ts.map +1 -1
  8. package/components/anchor/component/index.d.ts +1 -1
  9. package/components/anchor/component/index.d.ts.map +1 -1
  10. package/components/anchor/component/index.js +6 -6
  11. package/components/anchor/components/anchorWithIcon/index.d.ts +3 -3
  12. package/components/anchor/components/anchorWithIcon/index.d.ts.map +1 -1
  13. package/components/anchor/components/anchorWithIcon/index.js +14 -9
  14. package/components/anchor/components/simpleAnchor/index.d.ts +3 -3
  15. package/components/anchor/components/simpleAnchor/index.d.ts.map +1 -1
  16. package/components/anchor/components/simpleAnchor/index.js +8 -2
  17. package/components/anchor/types.d.ts +2 -6
  18. package/components/anchor/types.d.ts.map +1 -1
  19. package/components/breadcrumbs/component/index.d.ts +34 -0
  20. package/components/breadcrumbs/component/index.d.ts.map +1 -0
  21. package/components/breadcrumbs/component/index.js +21 -0
  22. package/components/breadcrumbs/index.d.ts +3 -0
  23. package/components/breadcrumbs/index.d.ts.map +1 -0
  24. package/components/breadcrumbs/index.js +2 -0
  25. package/components/breadcrumbs/types.d.ts +13 -0
  26. package/components/breadcrumbs/types.d.ts.map +1 -0
  27. package/components/button/component/index.d.ts +1 -1
  28. package/components/button/component/index.d.ts.map +1 -1
  29. package/components/button/component/index.js +4 -8
  30. package/components/button/components/buttonWithIcon/index.d.ts +3 -2
  31. package/components/button/components/buttonWithIcon/index.d.ts.map +1 -1
  32. package/components/button/components/buttonWithIcon/index.js +14 -9
  33. package/components/button/components/simpleButton/index.d.ts +3 -2
  34. package/components/button/components/simpleButton/index.d.ts.map +1 -1
  35. package/components/button/components/simpleButton/index.js +8 -2
  36. package/components/button/types.d.ts +1 -1
  37. package/components/button/types.d.ts.map +1 -1
  38. package/components/button/types.js +0 -3
  39. package/components/dropdown/component/index.d.ts +1 -1
  40. package/components/dropdown/component/index.d.ts.map +1 -1
  41. package/components/dropdown/component/index.js +5 -8
  42. package/components/dropdown/component/style.scss +5 -1
  43. package/components/dropdown/components/compact/index.d.ts +2 -3
  44. package/components/dropdown/components/compact/index.d.ts.map +1 -1
  45. package/components/dropdown/components/compact/index.js +12 -9
  46. package/components/dropdown/components/item/index.d.ts +1 -1
  47. package/components/dropdown/components/item/index.d.ts.map +1 -1
  48. package/components/dropdown/components/item/index.js +34 -2
  49. package/components/dropdown/components/label/component/index.d.ts +27 -0
  50. package/components/dropdown/components/label/component/index.d.ts.map +1 -0
  51. package/components/dropdown/components/label/component/index.js +16 -0
  52. package/components/dropdown/components/label/components/empty/index.d.ts +8 -0
  53. package/components/dropdown/components/label/components/empty/index.d.ts.map +1 -0
  54. package/components/dropdown/components/label/components/empty/index.js +16 -0
  55. package/components/dropdown/components/label/components/selected/index.d.ts +8 -0
  56. package/components/dropdown/components/label/components/selected/index.d.ts.map +1 -0
  57. package/components/dropdown/components/label/components/selected/index.js +20 -0
  58. package/components/dropdown/components/label/components/selectedWithIcon/index.d.ts +8 -0
  59. package/components/dropdown/components/label/components/selectedWithIcon/index.d.ts.map +1 -0
  60. package/components/dropdown/components/label/components/selectedWithIcon/index.js +28 -0
  61. package/components/dropdown/components/label/components/withSearch/index.d.ts +16 -0
  62. package/components/dropdown/components/label/components/withSearch/index.d.ts.map +1 -0
  63. package/components/dropdown/components/label/components/withSearch/index.js +33 -0
  64. package/components/dropdown/components/label/components/withSearch/style.scss +29 -0
  65. package/components/dropdown/components/label/index.d.ts +1 -1
  66. package/components/dropdown/components/label/index.d.ts.map +1 -1
  67. package/components/dropdown/components/label/index.js +41 -9
  68. package/components/dropdown/components/withLabel/index.d.ts +2 -3
  69. package/components/dropdown/components/withLabel/index.d.ts.map +1 -1
  70. package/components/dropdown/components/withLabel/index.js +14 -12
  71. package/components/dropdown/types.d.ts +13 -2
  72. package/components/dropdown/types.d.ts.map +1 -1
  73. package/components/icon/component/index.d.ts +2 -2
  74. package/components/icon/component/index.d.ts.map +1 -1
  75. package/components/icon/component/index.js +9 -5
  76. package/components/icon/types.d.ts +2 -4
  77. package/components/icon/types.d.ts.map +1 -1
  78. package/components/index.d.ts +0 -1
  79. package/components/index.d.ts.map +1 -1
  80. package/components/index.js +0 -1
  81. package/components/paginator/component/index.d.ts +2 -2
  82. package/components/paginator/component/index.d.ts.map +1 -1
  83. package/components/paginator/component/index.js +19 -14
  84. package/components/paginator/types.d.ts +3 -5
  85. package/components/paginator/types.d.ts.map +1 -1
  86. package/components/primitives/checkbox/component/index.d.ts +2 -3
  87. package/components/primitives/checkbox/component/index.d.ts.map +1 -1
  88. package/components/primitives/checkbox/component/index.js +15 -17
  89. package/components/primitives/checkbox/types.d.ts +2 -2
  90. package/components/primitives/checkbox/types.d.ts.map +1 -1
  91. package/components/primitives/color/component/index.d.ts.map +1 -1
  92. package/components/primitives/color/components/picker/index.d.ts +11 -29
  93. package/components/primitives/color/components/picker/index.d.ts.map +1 -1
  94. package/components/primitives/color/components/picker/index.js +15 -12
  95. package/components/primitives/color/components/withLabel/index.d.ts +1 -1
  96. package/components/primitives/color/components/withLabel/index.d.ts.map +1 -1
  97. package/components/primitives/color/components/withLabel/index.js +8 -30
  98. package/components/primitives/color/components/withoutLabel/index.d.ts +1 -1
  99. package/components/primitives/color/components/withoutLabel/index.d.ts.map +1 -1
  100. package/components/primitives/color/components/withoutLabel/index.js +3 -13
  101. package/components/primitives/color/types.d.ts +1 -1
  102. package/components/primitives/color/types.d.ts.map +1 -1
  103. package/components/primitives/date/component/index.d.ts +2 -3
  104. package/components/primitives/date/component/index.d.ts.map +1 -1
  105. package/components/primitives/date/component/index.js +12 -27
  106. package/components/primitives/date/types.d.ts +2 -2
  107. package/components/primitives/date/types.d.ts.map +1 -1
  108. package/components/primitives/index.d.ts +0 -1
  109. package/components/primitives/index.d.ts.map +1 -1
  110. package/components/primitives/index.js +0 -1
  111. package/components/primitives/internal/componentWithLabel/index.d.ts +17 -0
  112. package/components/primitives/internal/componentWithLabel/index.d.ts.map +1 -0
  113. package/components/primitives/internal/componentWithLabel/index.js +26 -0
  114. package/components/primitives/internal/hint/index.d.ts +12 -0
  115. package/components/primitives/internal/hint/index.d.ts.map +1 -0
  116. package/components/primitives/internal/hint/index.js +47 -0
  117. package/components/primitives/multiline/component/index.d.ts +1 -1
  118. package/components/primitives/multiline/component/index.d.ts.map +1 -1
  119. package/components/primitives/multiline/component/index.js +5 -8
  120. package/components/primitives/multiline/components/withLabel/index.d.ts +5 -0
  121. package/components/primitives/multiline/components/withLabel/index.d.ts.map +1 -0
  122. package/components/primitives/multiline/components/withLabel/index.js +29 -0
  123. package/components/primitives/multiline/components/withoutLabel/index.d.ts +5 -0
  124. package/components/primitives/multiline/components/withoutLabel/index.d.ts.map +1 -0
  125. package/components/primitives/multiline/components/withoutLabel/index.js +28 -0
  126. package/components/primitives/multiline/types.d.ts +1 -1
  127. package/components/primitives/multiline/types.d.ts.map +1 -1
  128. package/components/primitives/number/component/index.d.ts +1 -1
  129. package/components/primitives/number/component/index.d.ts.map +1 -1
  130. package/components/primitives/number/component/index.js +5 -8
  131. package/components/primitives/number/components/withLabel/index.d.ts +2 -3
  132. package/components/primitives/number/components/withLabel/index.d.ts.map +1 -1
  133. package/components/primitives/number/components/withLabel/index.js +12 -27
  134. package/components/primitives/number/components/withoutLabel/index.d.ts +2 -3
  135. package/components/primitives/number/components/withoutLabel/index.d.ts.map +1 -1
  136. package/components/primitives/number/components/withoutLabel/index.js +11 -9
  137. package/components/primitives/number/types.d.ts +1 -1
  138. package/components/primitives/number/types.d.ts.map +1 -1
  139. package/components/primitives/password/component/index.d.ts +1 -1
  140. package/components/primitives/password/component/index.d.ts.map +1 -1
  141. package/components/primitives/password/component/index.js +5 -6
  142. package/components/primitives/password/components/withLabel/index.d.ts +2 -3
  143. package/components/primitives/password/components/withLabel/index.d.ts.map +1 -1
  144. package/components/primitives/password/components/withLabel/index.js +14 -30
  145. package/components/primitives/password/components/withoutLabel/index.d.ts +2 -3
  146. package/components/primitives/password/components/withoutLabel/index.d.ts.map +1 -1
  147. package/components/primitives/password/components/withoutLabel/index.js +13 -11
  148. package/components/primitives/password/types.d.ts +1 -1
  149. package/components/primitives/password/types.d.ts.map +1 -1
  150. package/components/primitives/text/component/index.d.ts +1 -1
  151. package/components/primitives/text/component/index.d.ts.map +1 -1
  152. package/components/primitives/text/component/index.js +5 -8
  153. package/components/primitives/text/components/withLabel/index.d.ts +5 -0
  154. package/components/primitives/text/components/withLabel/index.d.ts.map +1 -0
  155. package/components/primitives/text/components/withLabel/index.js +29 -0
  156. package/components/primitives/text/components/withoutLabel/index.d.ts +5 -0
  157. package/components/primitives/text/components/withoutLabel/index.d.ts.map +1 -0
  158. package/components/primitives/text/components/withoutLabel/index.js +28 -0
  159. package/components/primitives/text/types.d.ts +1 -1
  160. package/components/primitives/text/types.d.ts.map +1 -1
  161. package/components/search/component/index.d.ts +2 -2
  162. package/components/search/component/index.d.ts.map +1 -1
  163. package/components/search/component/index.js +16 -10
  164. package/components/search/types.d.ts +2 -2
  165. package/components/search/types.d.ts.map +1 -1
  166. package/components/table/component/index.d.ts +44 -0
  167. package/components/table/component/index.d.ts.map +1 -0
  168. package/components/table/component/index.js +29 -0
  169. package/components/table/component/style.scss +21 -0
  170. package/components/table/components/heading/index.d.ts +13 -0
  171. package/components/table/components/heading/index.d.ts.map +1 -0
  172. package/components/table/components/heading/index.js +21 -0
  173. package/components/table/index.d.ts +3 -0
  174. package/components/table/index.d.ts.map +1 -0
  175. package/components/table/index.js +2 -0
  176. package/components/table/types.d.ts +18 -0
  177. package/components/table/types.d.ts.map +1 -0
  178. package/components/tabs/component/index.d.ts +3 -4
  179. package/components/tabs/component/index.d.ts.map +1 -1
  180. package/components/tabs/component/index.js +14 -8
  181. package/components/tabs/components/item/index.d.ts +1 -1
  182. package/components/tabs/components/item/index.d.ts.map +1 -1
  183. package/components/tabs/components/item/index.js +4 -3
  184. package/components/tabs/types.d.ts +1 -12
  185. package/components/tabs/types.d.ts.map +1 -1
  186. package/components/tabs/types.js +0 -12
  187. package/components/tag/component/index.d.ts +2 -3
  188. package/components/tag/component/index.d.ts.map +1 -1
  189. package/components/tag/component/index.js +13 -7
  190. package/components/tag/types.d.ts +1 -1
  191. package/components/tag/types.d.ts.map +1 -1
  192. package/hooks/usePagination.d.ts.map +1 -1
  193. package/hooks/usePagination.js +11 -2
  194. package/hooks/useUnmount.d.ts +8 -0
  195. package/hooks/useUnmount.d.ts.map +1 -0
  196. package/hooks/useUnmount.js +22 -0
  197. package/index.d.ts +1 -0
  198. package/index.d.ts.map +1 -1
  199. package/index.js +1 -0
  200. package/package.json +11 -4
  201. package/readme.md +2 -0
  202. package/tsconfig.tsbuildinfo +1 -1
  203. package/types/baseElementProps.d.ts +11 -0
  204. package/types/baseElementProps.d.ts.map +1 -0
  205. package/types/baseElementProps.js +1 -0
  206. package/{components/primitives/types/baseProps.d.ts → types/baseInputElementProps.d.ts} +10 -4
  207. package/types/baseInputElementProps.d.ts.map +1 -0
  208. package/types/baseInputElementProps.js +1 -0
  209. package/types/dataAttributes.d.ts +9 -0
  210. package/types/dataAttributes.d.ts.map +1 -0
  211. package/types/dataAttributes.js +1 -0
  212. package/types/elementColor.d.ts +18 -0
  213. package/types/elementColor.d.ts.map +1 -0
  214. package/types/elementColor.js +18 -0
  215. package/types/elementIcon.d.ts +22 -0
  216. package/types/elementIcon.d.ts.map +1 -0
  217. package/types/elementIcon.js +1 -0
  218. package/types/elementPosition.d.ts +12 -0
  219. package/types/elementPosition.d.ts.map +1 -0
  220. package/types/elementPosition.js +10 -0
  221. package/types/elementSize.d.ts +12 -0
  222. package/types/elementSize.d.ts.map +1 -0
  223. package/types/elementSize.js +12 -0
  224. package/types/hintConfiguration.d.ts +13 -0
  225. package/types/hintConfiguration.d.ts.map +1 -0
  226. package/types/hintConfiguration.js +1 -0
  227. package/types/index.d.ts +11 -0
  228. package/types/index.d.ts.map +1 -0
  229. package/types/index.js +10 -0
  230. package/{components/primitives/types/label.d.ts → types/labelConfiguration.d.ts} +3 -3
  231. package/types/labelConfiguration.d.ts.map +1 -0
  232. package/types/labelConfiguration.js +1 -0
  233. package/{components/primitives/types → types}/validation/index.d.ts +1 -1
  234. package/types/validation/index.d.ts.map +1 -0
  235. package/{components/primitives/types → types}/validation/index.js +1 -1
  236. package/{components/primitives/types → types}/validation/state.d.ts +2 -2
  237. package/types/validation/state.d.ts.map +1 -0
  238. package/{components/primitives/types → types}/validation/state.js +0 -1
  239. package/{components/primitives/types → types}/validation/status.d.ts +1 -1
  240. package/types/validation/status.d.ts.map +1 -0
  241. package/{components/primitives/types → types}/validation/status.js +1 -2
  242. package/utils/dataAttributes.d.ts +1 -1
  243. package/utils/dataAttributes.d.ts.map +1 -1
  244. package/utils/index.d.ts +1 -1
  245. package/utils/index.d.ts.map +1 -1
  246. package/utils/index.js +1 -1
  247. package/utils/validation.d.ts +11 -0
  248. package/utils/validation.d.ts.map +1 -0
  249. package/utils/validation.js +20 -0
  250. package/components/primitives/multiline/components/multilineWithLabel/index.d.ts +0 -6
  251. package/components/primitives/multiline/components/multilineWithLabel/index.d.ts.map +0 -1
  252. package/components/primitives/multiline/components/multilineWithLabel/index.js +0 -44
  253. package/components/primitives/multiline/components/multilineWithoutLabel/index.d.ts +0 -6
  254. package/components/primitives/multiline/components/multilineWithoutLabel/index.d.ts.map +0 -1
  255. package/components/primitives/multiline/components/multilineWithoutLabel/index.js +0 -26
  256. package/components/primitives/text/components/textWithLabel/index.d.ts +0 -6
  257. package/components/primitives/text/components/textWithLabel/index.d.ts.map +0 -1
  258. package/components/primitives/text/components/textWithLabel/index.js +0 -44
  259. package/components/primitives/text/components/textWithoutLabel/index.d.ts +0 -6
  260. package/components/primitives/text/components/textWithoutLabel/index.d.ts.map +0 -1
  261. package/components/primitives/text/components/textWithoutLabel/index.js +0 -26
  262. package/components/primitives/types/baseProps.d.ts.map +0 -1
  263. package/components/primitives/types/index.d.ts +0 -4
  264. package/components/primitives/types/index.d.ts.map +0 -1
  265. package/components/primitives/types/index.js +0 -3
  266. package/components/primitives/types/label.d.ts.map +0 -1
  267. package/components/primitives/types/validation/index.d.ts.map +0 -1
  268. package/components/primitives/types/validation/state.d.ts.map +0 -1
  269. package/components/primitives/types/validation/status.d.ts.map +0 -1
  270. package/components/types.d.ts +0 -78
  271. package/components/types.d.ts.map +0 -1
  272. package/components/types.js +0 -41
  273. package/utils/formValidation.d.ts +0 -16
  274. package/utils/formValidation.d.ts.map +0 -1
  275. package/utils/formValidation.js +0 -35
  276. /package/components/{primitives/types/baseProps.js → breadcrumbs/types.js} +0 -0
  277. /package/components/{primitives/types/label.js → table/types.js} +0 -0
@@ -1,6 +1,38 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getClassName, isNullOrUndefined } from "@bodynarf/utils";
3
+ import { ElementPosition } from "../../../../types";
4
+ import Icon from "../../../icon/component";
2
5
  /** Single item in dropdown component */
3
6
  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));
7
+ if (!isNullOrUndefined(item.icon)) {
8
+ return _jsx(DropdownItemWithIcon, { item: item, selected: selected, onClick: onClick });
9
+ }
10
+ const className = getClassName([
11
+ "bbr-dropdown-item",
12
+ "dropdown-item",
13
+ selected ? "is-active" : "",
14
+ "is-flex is-align-items-center",
15
+ ]);
16
+ return (_jsx("li", { onClick: onClick, className: className, "data-dropdown-item-value": item.value, title: item.title, children: item.displayValue }, item.id));
5
17
  };
6
18
  export default DropdownItem;
19
+ /** Single item in dropdown component with icon */
20
+ const DropdownItemWithIcon = ({ item, selected, onClick }) => {
21
+ const icon = item.icon;
22
+ const className = getClassName([
23
+ "bbr-dropdown-item",
24
+ "dropdown-item",
25
+ selected ? "is-active" : "",
26
+ "is-flex is-align-items-center",
27
+ ]);
28
+ const iconClassName = getClassName([
29
+ icon.className,
30
+ icon.position === ElementPosition.Right
31
+ ? "bbr-icon--right"
32
+ : "bbr-icon--left",
33
+ ]);
34
+ if (icon.position === ElementPosition.Right) {
35
+ return (_jsxs("li", { onClick: onClick, className: className, "data-dropdown-item-value": item.value, title: item.title, children: [item.displayValue, _jsx(Icon, { name: icon.name, size: icon.size, className: iconClassName })] }, item.id));
36
+ }
37
+ return (_jsxs("li", { onClick: onClick, className: className, "data-dropdown-item-value": item.value, title: item.title, children: [_jsx(Icon, { name: icon.name, size: icon.size, className: iconClassName }), item.displayValue] }, item.id));
38
+ };
@@ -0,0 +1,27 @@
1
+ import { FC, MouseEvent } from "react";
2
+ import { SelectableItem } from "../../../..";
3
+ /** Props type of `DropdownLabel` */
4
+ export interface DropdownLabelProps {
5
+ /** Caption when no items selected */
6
+ caption: string;
7
+ /** Can user deselect */
8
+ deselectable: boolean;
9
+ /** Is search through items enabled */
10
+ searchable: boolean;
11
+ /** Selected item */
12
+ selectedItem?: SelectableItem;
13
+ /** Element classnames */
14
+ className?: string;
15
+ /** Click handler*/
16
+ onClick: (event: MouseEvent<HTMLElement>) => void;
17
+ /** Last user search */
18
+ lastSearch: string | null;
19
+ /** Is items list visible */
20
+ isListVisible: boolean;
21
+ /** Handler of search value change by user */
22
+ onSearchChange: (value: string) => void;
23
+ }
24
+ /** Label component */
25
+ declare const DropdownLabel: FC<DropdownLabelProps>;
26
+ export default DropdownLabel;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/dropdown/components/label/component/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMjD,oCAAoC;AACpC,MAAM,WAAW,kBAAkB;IAC/B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAEhB,wBAAwB;IACxB,YAAY,EAAE,OAAO,CAAC;IAEtB,sCAAsC;IACtC,UAAU,EAAE,OAAO,CAAC;IAEpB,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,WAAW,CAAC,KAAK,IAAI,CAAC;IAElD,uBAAuB;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,4BAA4B;IAC5B,aAAa,EAAE,OAAO,CAAC;IAEvB,6CAA6C;IAC7C,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,sBAAsB;AACtB,QAAA,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAkCzC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { isNullOrUndefined } from "@bodynarf/utils";
3
+ import SelectedItemLabel from "../components/selected";
4
+ import EmptyLabel from "../components/empty";
5
+ import DropdownLabelWithSearch from "../components/withSearch";
6
+ /** Label component */
7
+ const DropdownLabel = ({ caption, selectedItem, onClick, deselectable, className, searchable, onSearchChange, lastSearch, isListVisible, }) => {
8
+ if (searchable) {
9
+ return _jsx(DropdownLabelWithSearch, { caption: caption, onClick: onClick, className: className, onSearchChange: onSearchChange, deselectable: deselectable, selectedItem: selectedItem, lastSearch: lastSearch, isListVisible: isListVisible });
10
+ }
11
+ if (isNullOrUndefined(selectedItem)) {
12
+ return _jsx(EmptyLabel, { caption: caption, onClick: onClick, className: className });
13
+ }
14
+ return _jsx(SelectedItemLabel, { deselectable: deselectable, className: className, onClick: onClick, selectedItem: selectedItem });
15
+ };
16
+ export default DropdownLabel;
@@ -0,0 +1,8 @@
1
+ import { FC } from "react";
2
+ import { DropdownLabelProps } from "../../component";
3
+ /** Props type of `EmptyLabel` */
4
+ declare type EmptyLabelProps = Pick<DropdownLabelProps, "caption" | "onClick" | "className">;
5
+ /** Empty dropdown 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/dropdown/components/label/components/empty/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAO3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,iCAAiC;AACjC,aAAK,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC;AAErF,wDAAwD;AACxD,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 dropdown 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 { DropdownLabelProps } from "../../component";
3
+ /** Props type of `SelectedItemLabel` */
4
+ declare type SelectedItemLabelProps = Pick<DropdownLabelProps, "selectedItem" | "onClick" | "deselectable" | "className">;
5
+ /** Dropdown label when item is selected */
6
+ declare const SelectedItemLabel: FC<SelectedItemLabelProps>;
7
+ export default SelectedItemLabel;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/dropdown/components/label/components/selected/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAQ3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,wCAAwC;AACxC,aAAK,sBAAsB,GAAG,IAAI,CAC9B,kBAAkB,EAChB,cAAc,GAAG,SAAS,GAC1B,cAAc,GAAG,WAAW,CACjC,CAAC;AAEF,2CAA2C;AAC3C,QAAA,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAqCjD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getClassName, isNullOrEmpty, isNullOrUndefined } from "@bodynarf/utils";
3
+ import { ElementSize } from "../../../../../../types";
4
+ import Icon from "../../../../../icon";
5
+ import SelectedItemLabelWithIcon from "../selectedWithIcon";
6
+ /** Dropdown label when item is selected */
7
+ const SelectedItemLabel = ({ selectedItem, onClick, deselectable, className, }) => {
8
+ if (!isNullOrUndefined(selectedItem.icon)) {
9
+ return _jsx(SelectedItemLabelWithIcon, { deselectable: deselectable, onClick: onClick, className: className, selectedItem: selectedItem });
10
+ }
11
+ const elClassName = getClassName([
12
+ "dropdown-trigger",
13
+ "bbr-dropdown__label",
14
+ isNullOrEmpty(className) ? "" : `${className}--md`,
15
+ "button"
16
+ ]);
17
+ return (_jsxs("label", { className: elClassName, onClick: onClick, children: [deselectable &&
18
+ _jsx(Icon, { name: "plus-lg", size: ElementSize.Medium }), _jsx("span", { className: deselectable ? "px-2" : "pr-2", title: selectedItem.title, children: selectedItem.displayValue }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
19
+ };
20
+ export default SelectedItemLabel;
@@ -0,0 +1,8 @@
1
+ import { FC } from "react";
2
+ import { DropdownLabelProps } from "../../component";
3
+ /** Props type of `SelectedItemLabelWithIcon` */
4
+ declare type SelectedItemLabelWithIconProps = Pick<DropdownLabelProps, "selectedItem" | "onClick" | "deselectable" | "className">;
5
+ /** Dropdown label when item is selected and it's have icon */
6
+ declare const SelectedItemLabelWithIcon: FC<SelectedItemLabelWithIconProps>;
7
+ export default SelectedItemLabelWithIcon;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/dropdown/components/label/components/selectedWithIcon/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAO3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,gDAAgD;AAChD,aAAK,8BAA8B,GAAG,IAAI,CACtC,kBAAkB,EAChB,cAAc,GAAG,SAAS,GAC1B,cAAc,GAAG,WAAW,CACjC,CAAC;AAEF,8DAA8D;AAC9D,QAAA,MAAM,yBAAyB,EAAE,EAAE,CAAC,8BAA8B,CAoEjE,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getClassName, isNullOrEmpty } from "@bodynarf/utils";
3
+ import { ElementPosition, ElementSize } from "../../../../../../types";
4
+ import Icon from "../../../../../icon";
5
+ /** Dropdown label when item is selected and it's have icon */
6
+ const SelectedItemLabelWithIcon = ({ selectedItem, onClick, deselectable, className, }) => {
7
+ const elClassName = getClassName([
8
+ "dropdown-trigger",
9
+ "bbr-dropdown__label",
10
+ isNullOrEmpty(className) ? "" : `${className}--md`,
11
+ "button"
12
+ ]);
13
+ const icon = selectedItem.icon;
14
+ const iconClassName = getClassName([
15
+ icon.className,
16
+ icon.position === ElementPosition.Right
17
+ ? "bbr-icon--right"
18
+ : "bbr-icon--left",
19
+ "bbr-dropdown-item__icon"
20
+ ]);
21
+ if (icon.position === ElementPosition.Right) {
22
+ return (_jsxs("label", { className: elClassName, onClick: onClick, children: [deselectable &&
23
+ _jsx(Icon, { name: "plus-lg", size: ElementSize.Medium }), _jsxs("span", { className: deselectable ? "px-2" : "pr-2", title: selectedItem.title, children: [selectedItem.displayValue, _jsx(Icon, { name: icon.name, size: icon.size, className: iconClassName })] }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
24
+ }
25
+ return (_jsxs("label", { className: elClassName, onClick: onClick, children: [deselectable &&
26
+ _jsx(Icon, { name: "plus-lg", size: ElementSize.Medium }), _jsxs("span", { className: deselectable ? "mx-2" : "mr-2", title: selectedItem.title, children: [_jsx(Icon, { name: icon.name, size: icon.size, className: iconClassName }), selectedItem.displayValue] }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
27
+ };
28
+ export default SelectedItemLabelWithIcon;
@@ -0,0 +1,16 @@
1
+ import { FC } from "react";
2
+ import { DropdownLabelProps } from "../../component";
3
+ import "./style.scss";
4
+ /** Props type of `DropdownLabelWithSearch` */
5
+ declare type DropdownLabelWithSearchProps = Pick<DropdownLabelProps, "caption" | "className" | "onClick" | "selectedItem" | "deselectable"> & {
6
+ /** Last user search */
7
+ lastSearch: string | null;
8
+ /** Is items list visible */
9
+ isListVisible: boolean;
10
+ /** Handler of search value change by user */
11
+ onSearchChange: (value: string) => void;
12
+ };
13
+ /** Label component with search */
14
+ declare const DropdownLabelWithSearch: FC<DropdownLabelWithSearchProps>;
15
+ export default DropdownLabelWithSearch;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/dropdown/components/label/components/withSearch/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,EAAE,EAA2B,MAAM,OAAO,CAAC;AAOjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,cAAc,CAAC;AAEtB,8CAA8C;AAC9C,aAAK,4BAA4B,GAAG,IAAI,CACpC,kBAAkB,EAClB,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,cAAc,GAAG,cAAc,CACxE,GAAG;IACA,uBAAuB;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,4BAA4B;IAC5B,aAAa,EAAE,OAAO,CAAC;IAEvB,6CAA6C;IAC7C,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,kCAAkC;AAClC,QAAA,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CAyD7D,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback } from "react";
3
+ import { getClassName, isNullOrEmpty, isNullOrUndefined } from "@bodynarf/utils";
4
+ import { ElementSize } from "../../../../../../types";
5
+ import Icon from "../../../../../icon";
6
+ import "./style.scss";
7
+ /** Label component with search */
8
+ const DropdownLabelWithSearch = ({ caption, className, deselectable, lastSearch, onSearchChange, isListVisible, onClick, selectedItem, }) => {
9
+ const elClassName = getClassName([
10
+ "dropdown-trigger",
11
+ "bbr-dropdown__label",
12
+ isNullOrEmpty(className) ? "" : `${className}--md`,
13
+ "button",
14
+ "bbr-dropdown__search"
15
+ ]);
16
+ const onChange = useCallback((event) => onSearchChange(event.target.value), [onSearchChange]);
17
+ const inputClassName = getClassName([
18
+ "input",
19
+ deselectable && !isNullOrUndefined(selectedItem) ? "px-2" : "pl-0"
20
+ ]);
21
+ const containerOnClick = useCallback((event) => {
22
+ event.stopPropagation();
23
+ const target = event.target;
24
+ if (target.nodeName !== "I" && isListVisible) {
25
+ return;
26
+ }
27
+ onClick(event);
28
+ }, [isListVisible, onClick]);
29
+ return (_jsxs("div", { className: elClassName, onClick: containerOnClick, children: [deselectable && !isNullOrUndefined(selectedItem)
30
+ &&
31
+ _jsx(Icon, { name: "plus-lg", size: ElementSize.Medium }), _jsx("input", { type: "text", onChange: onChange, placeholder: caption, className: inputClassName, value: selectedItem?.displayValue ?? lastSearch ?? "" }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
32
+ };
33
+ export default DropdownLabelWithSearch;
@@ -0,0 +1,29 @@
1
+ .bbr-dropdown__search {
2
+ input {
3
+ border-left: 0;
4
+ border-right: 0;
5
+ border-radius: 0;
6
+ box-shadow: none !important;
7
+
8
+ background: transparent;
9
+
10
+ &::-webkit-input-placeholder {
11
+ color: gray;
12
+ font-style: italic;
13
+ }
14
+
15
+ &:focus, &:hover, &:active {
16
+ border-color: inherit !important;
17
+ }
18
+ }
19
+
20
+ &:hover {
21
+ input {
22
+ border-color: inherit !important;
23
+ }
24
+ }
25
+ }
26
+
27
+ .bbr-dropdown.is-active .bbr-dropdown__search {
28
+ background: rgba(0, 0, 0, 0.05);
29
+ }
@@ -1,5 +1,5 @@
1
1
  import { MouseEvent } from "react";
2
- import { SelectableItem } from "../../../dropdown";
2
+ import { SelectableItem } from "../..";
3
3
  export interface DropdownLabelProps {
4
4
  /** Caption when no items selected */
5
5
  caption: string;
@@ -1 +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"}
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,OAAO,CAAC;AAEvC,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,WA4CvB,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1,22 +1,54 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { getClassName, isNullOrEmpty, isNullOrUndefined } from "@bodynarf/utils";
3
- import { ElementSize } from "../../..";
3
+ import { ElementPosition, ElementSize } from "../../../../types";
4
4
  import Icon from "../../../icon";
5
5
  /** Label component */
6
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;
7
+ if (isNullOrUndefined(selectedItem)) {
8
+ return _jsx(EmptyLabel, { caption: caption, deselectable: deselectable, onClick: onClick, className: className });
9
+ }
10
+ if (!isNullOrUndefined(selectedItem.icon)) {
11
+ return _jsx(SelectedItemLabelWithIcon, { caption: caption, deselectable: deselectable, onClick: onClick, className: className, selectedItem: selectedItem });
12
+ }
12
13
  const elClassName = getClassName([
13
14
  "dropdown-trigger",
14
15
  "bbr-dropdown__label",
15
16
  isNullOrEmpty(className) ? "" : `${className}--md`,
16
- itemSelected ? "" : "bbr-dropdown__label--default",
17
17
  "button"
18
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 })] }));
19
+ return (_jsxs("label", { className: elClassName, onClick: onClick, children: [deselectable &&
20
+ _jsx(Icon, { name: "plus-lg", size: ElementSize.Medium }), _jsx("span", { className: deselectable ? "px-2" : "pr-2", title: selectedItem.title, children: selectedItem.displayValue }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
21
21
  };
22
22
  export default DropdownLabel;
23
+ const EmptyLabel = ({ caption, onClick, className, }) => {
24
+ const elClassName = getClassName([
25
+ "dropdown-trigger",
26
+ "bbr-dropdown__label",
27
+ isNullOrEmpty(className) ? "" : `${className}--md`,
28
+ "bbr-dropdown__label--default",
29
+ "button"
30
+ ]);
31
+ return (_jsxs("label", { className: elClassName, onClick: onClick, children: [_jsx("span", { className: "mr-2", children: caption }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
32
+ };
33
+ const SelectedItemLabelWithIcon = ({ selectedItem, onClick, deselectable, className, }) => {
34
+ const elClassName = getClassName([
35
+ "dropdown-trigger",
36
+ "bbr-dropdown__label",
37
+ isNullOrEmpty(className) ? "" : `${className}--md`,
38
+ "button"
39
+ ]);
40
+ const icon = selectedItem.icon;
41
+ const iconClassName = getClassName([
42
+ icon.className,
43
+ icon.position === ElementPosition.Right
44
+ ? "bbr-icon--right"
45
+ : "bbr-icon--left",
46
+ "bbr-dropdown-item__icon"
47
+ ]);
48
+ if (icon.position === ElementPosition.Right) {
49
+ return (_jsxs("label", { className: elClassName, onClick: onClick, children: [deselectable &&
50
+ _jsx(Icon, { name: "plus-lg", size: ElementSize.Medium }), _jsxs("span", { className: deselectable ? "px-2" : "pr-2", title: selectedItem.title, children: [selectedItem.displayValue, _jsx(Icon, { name: icon.name, size: icon.size, className: iconClassName })] }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
51
+ }
52
+ return (_jsxs("label", { className: elClassName, onClick: onClick, children: [deselectable &&
53
+ _jsx(Icon, { name: "plus-lg", size: ElementSize.Medium }), _jsxs("span", { className: deselectable ? "mx-2" : "mr-2", title: selectedItem.title, children: [_jsx(Icon, { name: icon.name, size: icon.size, className: iconClassName }), selectedItem.displayValue] }), _jsx(Icon, { name: "arrow-down", size: ElementSize.Medium })] }));
54
+ };
@@ -1,5 +1,4 @@
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;
1
+ import { DropdownProps } from "../..";
2
+ declare const DropdownWithLabel: ({ items, value, onSelect, validationState, deselectable, hideOnOuterClick, listMaxHeight, label, placeholder, disabled, className, title, data, hint, }: DropdownProps) => JSX.Element;
4
3
  export default DropdownWithLabel;
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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,yIAOpB,aAAa,KAAG,WAoLlB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/dropdown/components/withLabel/index.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAItC,QAAA,MAAM,iBAAiB,4JASpB,aAAa,KAAG,WAiMlB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1,14 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useId, useState } from "react";
3
3
  import { isNullOrUndefined, isNullOrEmpty, getClassName } from "@bodynarf/utils";
4
- import { getValidationValues } from "../../../../utils";
4
+ import { getStyleClassName, mapDataAttributes } from "../../../../utils";
5
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 = false, className, hideOnOuterClick, listMaxHeight, label, placeholder, disabled = false, }) => {
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, }) => {
9
10
  const id = useId();
10
11
  const [isListVisible, setListVisible] = useState(false);
11
- const [isValidationDefined, styleClassName, validationMessages] = getValidationValues(undefined, validationState);
12
12
  const onItemClick = useCallback((event) => {
13
13
  if (disabled) {
14
14
  return;
@@ -50,16 +50,20 @@ const DropdownWithLabel = ({ items, value, onSelect, validationState, deselectab
50
50
  useComponentOutsideClick(`[data-dropdown-id="${id}"]`, isListVisible, () => setListVisible(false), hideOnOuterClick);
51
51
  const classNames = getClassName([
52
52
  "bbr-dropdown",
53
+ className,
53
54
  disabled ? "bbr-dropdown--disabled" : "",
54
55
  isListVisible ? "is-active" : "",
55
56
  isNullOrEmpty(listMaxHeight) ? "bbr-dropdown--height-default" : "",
56
- className,
57
57
  "dropdown"
58
58
  ]);
59
59
  const labelClassName = getClassName([
60
60
  "label",
61
61
  label.className
62
62
  ]);
63
+ const labelComponentClassName = getStyleClassName(undefined, validationState);
64
+ const dataAttributes = isNullOrUndefined(data)
65
+ ? undefined
66
+ : mapDataAttributes(data);
63
67
  if (label.horizontal) {
64
68
  const labelContainerClassName = getClassName([
65
69
  "field-label",
@@ -70,14 +74,12 @@ const DropdownWithLabel = ({ items, value, onSelect, validationState, deselectab
70
74
  "field-body",
71
75
  label.horizontalFieldContainerClassName
72
76
  ]);
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, selectedItem: value, onClick: onLabelClick }), _jsx("div", { className: "dropdown-menu", children: items.length > 0
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
74
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)) })
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") })] }) })] }));
79
+ : _jsx("span", { className: "dropdown-content dropdown-item", children: "No items found" }) })] }, id), _jsx(InternalHint, { hint: hint, validationState: validationState })] }) })] }));
77
80
  }
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, selectedItem: value, onClick: onLabelClick }), _jsx("div", { className: "dropdown-menu", children: items.length > 0
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
79
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)) })
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") })] }));
83
+ : _jsx("span", { className: "dropdown-content dropdown-item", children: "No items found" }) })] }, id), _jsx(InternalHint, { hint: hint, validationState: validationState })] }));
82
84
  };
83
85
  export default DropdownWithLabel;
@@ -1,4 +1,4 @@
1
- import { BaseElementProps, InputLabel, ValidationState } from "..";
1
+ import { BaseElementProps, HintConfiguration, ValidationState, LabelConfiguration, ElementIcon } from "../../types";
2
2
  /** Dropdown item */
3
3
  export interface SelectableItem {
4
4
  /** Unique item identifier */
@@ -7,6 +7,10 @@ export interface SelectableItem {
7
7
  value: string;
8
8
  /** Displaying text */
9
9
  displayValue: string;
10
+ /** Element title */
11
+ title?: string;
12
+ /** Element icon configuration */
13
+ icon?: ElementIcon;
10
14
  }
11
15
  /** Dropdown component props type */
12
16
  export interface DropdownProps extends BaseElementProps {
@@ -39,8 +43,15 @@ export interface DropdownProps extends BaseElementProps {
39
43
  */
40
44
  disabled?: boolean;
41
45
  /** Label configuration */
42
- label?: InputLabel;
46
+ label?: LabelConfiguration;
43
47
  /** Current validation state */
44
48
  validationState?: ValidationState;
49
+ /**
50
+ * Field hint configuration.
51
+ * Provides additional information to user to help fill the field
52
+ *
53
+ * (!) Hint will be overridden by the validation state, if specified
54
+ */
55
+ hint?: HintConfiguration;
45
56
  }
46
57
  //# 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,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"}
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,8 +1,8 @@
1
1
  /// <reference types="react" />
2
2
  import "./style.scss";
3
- import { IconProps } from "../../icon";
3
+ import { IconProps } from "../..";
4
4
  /**
5
5
  * Icon component. Based on bootstrap icons
6
6
  */
7
- export default function Icon({ name, size, className, }: IconProps): JSX.Element;
7
+ export default function Icon({ name, size, className, title, data, }: IconProps): JSX.Element;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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,7 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { getClassName } from "@bodynarf/utils";
2
+ import { getClassName, isNullOrUndefined } from "@bodynarf/utils";
3
+ import { ElementSize } from "../../../types";
4
+ import { mapDataAttributes } from "../../../utils";
3
5
  import "./style.scss";
4
- import { ElementSize } from "../..";
5
6
  const sizeToClassMap = new Map([
6
7
  [ElementSize.Small, "bbr-icon--size-small"],
7
8
  [ElementSize.Normal, ""],
@@ -11,13 +12,16 @@ const sizeToClassMap = new Map([
11
12
  /**
12
13
  * Icon component. Based on bootstrap icons
13
14
  */
14
- export default function Icon({ name, size = ElementSize.Normal, className, }) {
15
+ export default function Icon({ name, size = ElementSize.Normal, className, title, data, }) {
15
16
  const classNames = getClassName([
16
17
  "bbr-icon",
17
18
  "bi",
18
19
  `bi-${name}`,
20
+ className,
19
21
  sizeToClassMap.has(size) ? sizeToClassMap.get(size) : "",
20
- className
21
22
  ]);
22
- return (_jsx("i", { className: classNames }));
23
+ const dataAttributes = isNullOrUndefined(data)
24
+ ? undefined
25
+ : mapDataAttributes(data);
26
+ return (_jsx("i", { className: classNames, title: title, ...dataAttributes }));
23
27
  }
@@ -1,6 +1,6 @@
1
- import { ElementSize } from "..";
1
+ import { BaseElementProps, ElementSize } from "../../types";
2
2
  /** Icon component props */
3
- export interface IconProps {
3
+ export interface IconProps extends BaseElementProps {
4
4
  /**
5
5
  * Icon name. Must be without `bi-`
6
6
  * @example ["Arrow repeat", "arrow-repeat"]
@@ -8,8 +8,6 @@ export interface IconProps {
8
8
  * // For class name check bootstrap icons website
9
9
  */
10
10
  name: string;
11
- /** Additional classname */
12
- className?: string;
13
11
  /** Icon size */
14
12
  size?: ElementSize;
15
13
  }
@@ -1 +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"}
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,4 +1,3 @@
1
- export * from "./types";
2
1
  export * from "./accordion";
3
2
  export * from "./anchor";
4
3
  export * from "./button";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,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"}
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"}
@@ -1,4 +1,3 @@
1
- export * from "./types";
2
1
  export * from "./accordion";
3
2
  export * from "./anchor";
4
3
  export * from "./button";
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
- import { PaginatorProps } from "../../paginator";
2
+ import { PaginatorProps } from "../..";
3
3
  /**
4
4
  * Paginator component.
5
5
  * Used for visualization of paging configuration
6
6
  */
7
- export default function Paginator({ count, onPageChange, currentPage, position, size, className, rounded, showNextButtons, nearPagesCount }: PaginatorProps): JSX.Element;
7
+ export default function Paginator({ count, onPageChange, currentPage, position, size, rounded, showNextButtons, nearPagesCount, className, title, data, }: PaginatorProps): JSX.Element;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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,EACR,IAAI,EAAE,SAAS,EACf,OAAe,EAAE,eAAuB,EACxC,cAAc,EACjB,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CA4G9B"}
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"}