@chayns-components/core 5.4.12 → 5.4.13

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 (35) hide show
  1. package/lib/cjs/components/page-provider/PageProvider.js +1 -1
  2. package/lib/cjs/components/page-provider/PageProvider.js.map +1 -1
  3. package/lib/cjs/components/search-box/SearchBox.js +69 -20
  4. package/lib/cjs/components/search-box/SearchBox.js.map +1 -1
  5. package/lib/cjs/components/search-box/search-box-body/SearchBoxBody.js +3 -1
  6. package/lib/cjs/components/search-box/search-box-body/SearchBoxBody.js.map +1 -1
  7. package/lib/cjs/components/search-box/search-box-body/SearchBoxBody.styles.js +6 -4
  8. package/lib/cjs/components/search-box/search-box-body/SearchBoxBody.styles.js.map +1 -1
  9. package/lib/cjs/components/search-box/search-box-item/SearchBoxItem.js +3 -1
  10. package/lib/cjs/components/search-box/search-box-item/SearchBoxItem.js.map +1 -1
  11. package/lib/cjs/components/search-box/search-box-item/SearchBoxItem.styles.js +6 -1
  12. package/lib/cjs/components/search-box/search-box-item/SearchBoxItem.styles.js.map +1 -1
  13. package/lib/cjs/utils/searchBox.js +22 -12
  14. package/lib/cjs/utils/searchBox.js.map +1 -1
  15. package/lib/esm/components/page-provider/PageProvider.js +1 -1
  16. package/lib/esm/components/page-provider/PageProvider.js.map +1 -1
  17. package/lib/esm/components/search-box/SearchBox.js +70 -21
  18. package/lib/esm/components/search-box/SearchBox.js.map +1 -1
  19. package/lib/esm/components/search-box/search-box-body/SearchBoxBody.js +3 -1
  20. package/lib/esm/components/search-box/search-box-body/SearchBoxBody.js.map +1 -1
  21. package/lib/esm/components/search-box/search-box-body/SearchBoxBody.styles.js +6 -4
  22. package/lib/esm/components/search-box/search-box-body/SearchBoxBody.styles.js.map +1 -1
  23. package/lib/esm/components/search-box/search-box-item/SearchBoxItem.js +3 -1
  24. package/lib/esm/components/search-box/search-box-item/SearchBoxItem.js.map +1 -1
  25. package/lib/esm/components/search-box/search-box-item/SearchBoxItem.styles.js +6 -1
  26. package/lib/esm/components/search-box/search-box-item/SearchBoxItem.styles.js.map +1 -1
  27. package/lib/esm/utils/searchBox.js +20 -11
  28. package/lib/esm/utils/searchBox.js.map +1 -1
  29. package/lib/types/components/search-box/SearchBox.d.ts +16 -0
  30. package/lib/types/components/search-box/search-box-body/SearchBoxBody.d.ts +1 -0
  31. package/lib/types/components/search-box/search-box-body/SearchBoxBody.styles.d.ts +4 -2
  32. package/lib/types/components/search-box/search-box-item/SearchBoxItem.d.ts +1 -0
  33. package/lib/types/components/search-box/search-box-item/SearchBoxItem.styles.d.ts +6 -2
  34. package/lib/types/utils/searchBox.d.ts +1 -0
  35. package/package.json +2 -2
@@ -46,7 +46,7 @@ const PageProvider = ({
46
46
  const usableHeight = (0, _pageProvider.useUsableHeight)({
47
47
  shouldReduceByCoverHeight: shouldReduceUsableHeightByCoverHeight
48
48
  });
49
- const shouldUsePadding = !shouldRemovePadding && ![_chaynsApi.RuntimeEnviroment.IntercomPlugin, _chaynsApi.RuntimeEnviroment.PagemakerPlugin, 6].includes(runtimeEnvironment);
49
+ const shouldUsePadding = !shouldRemovePadding && ![_chaynsApi.RuntimeEnviroment.IntercomPlugin, _chaynsApi.RuntimeEnviroment.PagemakerPlugin, 6, 8].includes(runtimeEnvironment);
50
50
  return /*#__PURE__*/_react.default.createElement(_PageProvider.StyledPageProvider, {
51
51
  className: "page-provider",
52
52
  $shouldUsePadding: shouldUsePadding,
@@ -1 +1 @@
1
- {"version":3,"file":"PageProvider.js","names":["_chaynsApi","require","_react","_interopRequireDefault","_styledComponents","_pageProvider","_ColorSchemeProvider","_PageProvider","e","__esModule","default","GlobalStyle","createGlobalStyle","PageProvider","children","color","colorMode","secondaryColor","siteId","style","shouldReduceUsableHeightByCoverHeight","shouldRemovePadding","shouldUseUsableHeight","iconColor","customVariables","runtimeEnvironment","useEnvironment","usableHeight","useUsableHeight","shouldReduceByCoverHeight","shouldUsePadding","RuntimeEnviroment","IntercomPlugin","PagemakerPlugin","includes","createElement","StyledPageProvider","className","$shouldUsePadding","$usableHeight","undefined","height","displayName","_default","exports"],"sources":["../../../../src/components/page-provider/PageProvider.tsx"],"sourcesContent":["import { RuntimeEnviroment, useEnvironment } from 'chayns-api';\nimport React, { FC } from 'react';\nimport { createGlobalStyle } from 'styled-components';\nimport { useUsableHeight } from '../../utils/pageProvider';\nimport ColorSchemeProvider, {\n type ColorSchemeProviderProps,\n} from '../color-scheme-provider/ColorSchemeProvider';\nimport { StyledPageProvider } from './PageProvider.styles';\n\n/**\n * Props for the PageProvider component.\n * @description\n * This interface defines the props that can be passed to the PageProvider component\n * for controlling the layout and styling behavior.\n * @example\n * <PageProvider shouldRemovePadding={true}>\n * {children}\n * </PageProvider>\n */\ninterface PageProviderProps extends ColorSchemeProviderProps {\n /**\n * Controls whether the usable height should be reduced by the cover height\n * @description\n * When true, the usable height will be reduced by the cover image height. This is useful\n * when the page should not be scrollable due to the cover image. The property has no effect\n * when `shouldUseUsableHeight` is false.\n * @default false\n * @optional\n */\n shouldReduceUsableHeightByCoverHeight?: boolean;\n /**\n * Controls whether padding should be removed from the page\n * @description\n * When true, the padding around the page content will be removed. This is useful when the\n * page should not have any padding, for example, when it is embedded in a pagemaker page.\n * @default false\n * @optional\n */\n shouldRemovePadding?: boolean;\n /**\n * Controls whether the component should use the calculated usable height\n * @description\n * When true, the page will cover the entire usable height of the screen. This means that\n * the viewport is not scrollable and the page takes up the full height not required by the\n * title or bottom bar. Optionally, the height of the cover image can be reduced by setting\n * `shouldReduceUsableHeightByCoverHeight` to true.\n * @default false\n * @optional\n */\n shouldUseUsableHeight?: boolean;\n}\n\nconst GlobalStyle = createGlobalStyle`\n *, *::before, *::after {\n box-sizing: border-box;\n }\n`;\n\nconst PageProvider: FC<PageProviderProps> = ({\n children,\n color,\n colorMode,\n secondaryColor,\n siteId,\n style = {},\n shouldReduceUsableHeightByCoverHeight = false,\n shouldRemovePadding = false,\n shouldUseUsableHeight = false,\n iconColor,\n customVariables,\n}) => {\n const { runtimeEnvironment } = useEnvironment();\n\n const usableHeight = useUsableHeight({\n shouldReduceByCoverHeight: shouldReduceUsableHeightByCoverHeight,\n });\n\n const shouldUsePadding =\n !shouldRemovePadding &&\n ![RuntimeEnviroment.IntercomPlugin, RuntimeEnviroment.PagemakerPlugin, 6].includes(\n runtimeEnvironment as number,\n );\n\n return (\n <StyledPageProvider\n className=\"page-provider\"\n $shouldUsePadding={shouldUsePadding}\n $usableHeight={shouldUseUsableHeight ? usableHeight : undefined}\n >\n <ColorSchemeProvider\n color={color}\n secondaryColor={secondaryColor}\n colorMode={colorMode}\n siteId={siteId}\n style={shouldUseUsableHeight ? { ...style, height: '100%' } : style}\n customVariables={customVariables}\n iconColor={iconColor}\n >\n {children}\n </ColorSchemeProvider>\n <GlobalStyle />\n </StyledPageProvider>\n );\n};\nPageProvider.displayName = 'PageProvider';\n\nexport default PageProvider;\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAH,sBAAA,CAAAF,OAAA;AAGA,IAAAM,aAAA,GAAAN,OAAA;AAA2D,SAAAE,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkCA,MAAMG,WAAW,GAAG,IAAAC,mCAAiB;AACrC;AACA;AACA;AACA,CAAC;AAED,MAAMC,YAAmC,GAAGA,CAAC;EACzCC,QAAQ;EACRC,KAAK;EACLC,SAAS;EACTC,cAAc;EACdC,MAAM;EACNC,KAAK,GAAG,CAAC,CAAC;EACVC,qCAAqC,GAAG,KAAK;EAC7CC,mBAAmB,GAAG,KAAK;EAC3BC,qBAAqB,GAAG,KAAK;EAC7BC,SAAS;EACTC;AACJ,CAAC,KAAK;EACF,MAAM;IAAEC;EAAmB,CAAC,GAAG,IAAAC,yBAAc,EAAC,CAAC;EAE/C,MAAMC,YAAY,GAAG,IAAAC,6BAAe,EAAC;IACjCC,yBAAyB,EAAET;EAC/B,CAAC,CAAC;EAEF,MAAMU,gBAAgB,GAClB,CAACT,mBAAmB,IACpB,CAAC,CAACU,4BAAiB,CAACC,cAAc,EAAED,4BAAiB,CAACE,eAAe,EAAE,CAAC,CAAC,CAACC,QAAQ,CAC9ET,kBACJ,CAAC;EAEL,oBACIvB,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,CAAC5B,aAAA,CAAA6B,kBAAkB;IACfC,SAAS,EAAC,eAAe;IACzBC,iBAAiB,EAAER,gBAAiB;IACpCS,aAAa,EAAEjB,qBAAqB,GAAGK,YAAY,GAAGa;EAAU,gBAEhEtC,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,CAAC7B,oBAAA,CAAAI,OAAmB;IAChBK,KAAK,EAAEA,KAAM;IACbE,cAAc,EAAEA,cAAe;IAC/BD,SAAS,EAAEA,SAAU;IACrBE,MAAM,EAAEA,MAAO;IACfC,KAAK,EAAEG,qBAAqB,GAAG;MAAE,GAAGH,KAAK;MAAEsB,MAAM,EAAE;IAAO,CAAC,GAAGtB,KAAM;IACpEK,eAAe,EAAEA,eAAgB;IACjCD,SAAS,EAAEA;EAAU,GAEpBT,QACgB,CAAC,eACtBZ,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,CAACxB,WAAW,MAAE,CACE,CAAC;AAE7B,CAAC;AACDE,YAAY,CAAC6B,WAAW,GAAG,cAAc;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAlC,OAAA,GAE3BG,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"PageProvider.js","names":["_chaynsApi","require","_react","_interopRequireDefault","_styledComponents","_pageProvider","_ColorSchemeProvider","_PageProvider","e","__esModule","default","GlobalStyle","createGlobalStyle","PageProvider","children","color","colorMode","secondaryColor","siteId","style","shouldReduceUsableHeightByCoverHeight","shouldRemovePadding","shouldUseUsableHeight","iconColor","customVariables","runtimeEnvironment","useEnvironment","usableHeight","useUsableHeight","shouldReduceByCoverHeight","shouldUsePadding","RuntimeEnviroment","IntercomPlugin","PagemakerPlugin","includes","createElement","StyledPageProvider","className","$shouldUsePadding","$usableHeight","undefined","height","displayName","_default","exports"],"sources":["../../../../src/components/page-provider/PageProvider.tsx"],"sourcesContent":["import { RuntimeEnviroment, useEnvironment } from 'chayns-api';\nimport React, { FC } from 'react';\nimport { createGlobalStyle } from 'styled-components';\nimport { useUsableHeight } from '../../utils/pageProvider';\nimport ColorSchemeProvider, {\n type ColorSchemeProviderProps,\n} from '../color-scheme-provider/ColorSchemeProvider';\nimport { StyledPageProvider } from './PageProvider.styles';\n\n/**\n * Props for the PageProvider component.\n * @description\n * This interface defines the props that can be passed to the PageProvider component\n * for controlling the layout and styling behavior.\n * @example\n * <PageProvider shouldRemovePadding={true}>\n * {children}\n * </PageProvider>\n */\ninterface PageProviderProps extends ColorSchemeProviderProps {\n /**\n * Controls whether the usable height should be reduced by the cover height\n * @description\n * When true, the usable height will be reduced by the cover image height. This is useful\n * when the page should not be scrollable due to the cover image. The property has no effect\n * when `shouldUseUsableHeight` is false.\n * @default false\n * @optional\n */\n shouldReduceUsableHeightByCoverHeight?: boolean;\n /**\n * Controls whether padding should be removed from the page\n * @description\n * When true, the padding around the page content will be removed. This is useful when the\n * page should not have any padding, for example, when it is embedded in a pagemaker page.\n * @default false\n * @optional\n */\n shouldRemovePadding?: boolean;\n /**\n * Controls whether the component should use the calculated usable height\n * @description\n * When true, the page will cover the entire usable height of the screen. This means that\n * the viewport is not scrollable and the page takes up the full height not required by the\n * title or bottom bar. Optionally, the height of the cover image can be reduced by setting\n * `shouldReduceUsableHeightByCoverHeight` to true.\n * @default false\n * @optional\n */\n shouldUseUsableHeight?: boolean;\n}\n\nconst GlobalStyle = createGlobalStyle`\n *, *::before, *::after {\n box-sizing: border-box;\n }\n`;\n\nconst PageProvider: FC<PageProviderProps> = ({\n children,\n color,\n colorMode,\n secondaryColor,\n siteId,\n style = {},\n shouldReduceUsableHeightByCoverHeight = false,\n shouldRemovePadding = false,\n shouldUseUsableHeight = false,\n iconColor,\n customVariables,\n}) => {\n const { runtimeEnvironment } = useEnvironment();\n\n const usableHeight = useUsableHeight({\n shouldReduceByCoverHeight: shouldReduceUsableHeightByCoverHeight,\n });\n\n const shouldUsePadding =\n !shouldRemovePadding &&\n ![RuntimeEnviroment.IntercomPlugin, RuntimeEnviroment.PagemakerPlugin, 6, 8].includes(\n runtimeEnvironment as number,\n );\n\n return (\n <StyledPageProvider\n className=\"page-provider\"\n $shouldUsePadding={shouldUsePadding}\n $usableHeight={shouldUseUsableHeight ? usableHeight : undefined}\n >\n <ColorSchemeProvider\n color={color}\n secondaryColor={secondaryColor}\n colorMode={colorMode}\n siteId={siteId}\n style={shouldUseUsableHeight ? { ...style, height: '100%' } : style}\n customVariables={customVariables}\n iconColor={iconColor}\n >\n {children}\n </ColorSchemeProvider>\n <GlobalStyle />\n </StyledPageProvider>\n );\n};\nPageProvider.displayName = 'PageProvider';\n\nexport default PageProvider;\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAH,sBAAA,CAAAF,OAAA;AAGA,IAAAM,aAAA,GAAAN,OAAA;AAA2D,SAAAE,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkCA,MAAMG,WAAW,GAAG,IAAAC,mCAAiB;AACrC;AACA;AACA;AACA,CAAC;AAED,MAAMC,YAAmC,GAAGA,CAAC;EACzCC,QAAQ;EACRC,KAAK;EACLC,SAAS;EACTC,cAAc;EACdC,MAAM;EACNC,KAAK,GAAG,CAAC,CAAC;EACVC,qCAAqC,GAAG,KAAK;EAC7CC,mBAAmB,GAAG,KAAK;EAC3BC,qBAAqB,GAAG,KAAK;EAC7BC,SAAS;EACTC;AACJ,CAAC,KAAK;EACF,MAAM;IAAEC;EAAmB,CAAC,GAAG,IAAAC,yBAAc,EAAC,CAAC;EAE/C,MAAMC,YAAY,GAAG,IAAAC,6BAAe,EAAC;IACjCC,yBAAyB,EAAET;EAC/B,CAAC,CAAC;EAEF,MAAMU,gBAAgB,GAClB,CAACT,mBAAmB,IACpB,CAAC,CAACU,4BAAiB,CAACC,cAAc,EAAED,4BAAiB,CAACE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAACC,QAAQ,CACjFT,kBACJ,CAAC;EAEL,oBACIvB,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,CAAC5B,aAAA,CAAA6B,kBAAkB;IACfC,SAAS,EAAC,eAAe;IACzBC,iBAAiB,EAAER,gBAAiB;IACpCS,aAAa,EAAEjB,qBAAqB,GAAGK,YAAY,GAAGa;EAAU,gBAEhEtC,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,CAAC7B,oBAAA,CAAAI,OAAmB;IAChBK,KAAK,EAAEA,KAAM;IACbE,cAAc,EAAEA,cAAe;IAC/BD,SAAS,EAAEA,SAAU;IACrBE,MAAM,EAAEA,MAAO;IACfC,KAAK,EAAEG,qBAAqB,GAAG;MAAE,GAAGH,KAAK;MAAEsB,MAAM,EAAE;IAAO,CAAC,GAAGtB,KAAM;IACpEK,eAAe,EAAEA,eAAgB;IACjCD,SAAS,EAAEA;EAAU,GAEpBT,QACgB,CAAC,eACtBZ,MAAA,CAAAQ,OAAA,CAAAyB,aAAA,CAACxB,WAAW,MAAE,CACE,CAAC;AAE7B,CAAC;AACDE,YAAY,CAAC6B,WAAW,GAAG,cAAc;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAlC,OAAA,GAE3BG,YAAY","ignoreList":[]}
@@ -21,6 +21,35 @@ var _DropdownBodyWrapper = _interopRequireDefault(require("../dropdown-body-wrap
21
21
  var _TagInput = _interopRequireDefault(require("../tag-input/TagInput"));
22
22
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
23
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
24
+ const filterSearchBoxItems = ({
25
+ customFilter,
26
+ items,
27
+ searchString,
28
+ shouldUseCustomFilterOnly
29
+ }) => {
30
+ if (typeof customFilter !== 'function') {
31
+ return (0, _searchBox.searchList)({
32
+ items,
33
+ searchString
34
+ });
35
+ }
36
+ if (shouldUseCustomFilterOnly) {
37
+ const filteredItems = items.filter(customFilter);
38
+ return (0, _searchBox.sortSearchBoxItems)({
39
+ items: filteredItems,
40
+ searchString
41
+ });
42
+ }
43
+ return (0, _searchBox.searchList)({
44
+ items,
45
+ searchString
46
+ }).filter(customFilter);
47
+ };
48
+ const getDropdownSearchString = ({
49
+ selectedId,
50
+ shouldKeepSelectedItemPosition,
51
+ value
52
+ }) => shouldKeepSelectedItemPosition && selectedId ? '' : value;
24
53
  const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
25
54
  container,
26
55
  customFilter,
@@ -28,6 +57,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
28
57
  isInvalid = false,
29
58
  leftIcons,
30
59
  lists,
60
+ maxHeight = 300,
31
61
  onBlur,
32
62
  onChange,
33
63
  onKeyDown,
@@ -37,8 +67,11 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
37
67
  hintText,
38
68
  selectedId,
39
69
  shouldAddInputToList = true,
70
+ shouldKeepSelectedItemPosition = false,
71
+ shouldUseCustomFilterOnly = false,
40
72
  shouldHideFilterButtons = false,
41
73
  shouldShowContentOnEmptyInput = true,
74
+ shouldShowSmallItems = false,
42
75
  shouldShowRoundImage,
43
76
  shouldShowToggleIcon = false,
44
77
  tagInputSettings
@@ -62,6 +95,11 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
62
95
  const isAnimatingRef = (0, _react.useRef)(false);
63
96
  const shouldShowPresetValue = (0, _react.useRef)(typeof presetValue === 'string' && presetValue !== '');
64
97
  const theme = (0, _styledComponents.useTheme)();
98
+ const dropdownSearchString = getDropdownSearchString({
99
+ selectedId,
100
+ shouldKeepSelectedItemPosition,
101
+ value
102
+ });
65
103
  const {
66
104
  isTouch
67
105
  } = (0, _chaynsApi.useDevice)();
@@ -109,9 +147,11 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
109
147
  list,
110
148
  groupName
111
149
  }) => {
112
- const newList = (0, _searchBox.searchList)({
150
+ const newList = filterSearchBoxItems({
151
+ customFilter,
113
152
  items: list,
114
- searchString: value
153
+ searchString: dropdownSearchString,
154
+ shouldUseCustomFilterOnly
115
155
  });
116
156
  if (newList.length > 0) {
117
157
  newMatchingItems.push({
@@ -132,15 +172,15 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
132
172
  }) => ({
133
173
  groupName,
134
174
  list: list.filter(item => {
135
- if (typeof customFilter === 'function') {
136
- return customFilter(item);
175
+ if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {
176
+ return true;
137
177
  }
138
- return !(newMatchingItems.length === 1 && item.text === value);
178
+ return !(newMatchingItems.length === 1 && item.text === dropdownSearchString);
139
179
  })
140
180
  }));
141
181
  setMatchingListsItems(filteredMatchingListItems);
142
182
  return newLists;
143
- }, [groups, lists, customFilter, shouldAddInputToList, value]);
183
+ }, [groups, lists, customFilter, dropdownSearchString, shouldAddInputToList, shouldUseCustomFilterOnly]);
144
184
  const handleOpen = (0, _react.useCallback)(() => {
145
185
  setShouldShowBody(true);
146
186
  }, []);
@@ -224,9 +264,11 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
224
264
  list,
225
265
  groupName
226
266
  }) => {
227
- const newList = (0, _searchBox.searchList)({
267
+ const newList = filterSearchBoxItems({
268
+ customFilter,
228
269
  items: list,
229
- searchString: value
270
+ searchString: dropdownSearchString,
271
+ shouldUseCustomFilterOnly
230
272
  });
231
273
  if (newList.length > 0) {
232
274
  newMatchingItems.push({
@@ -247,10 +289,10 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
247
289
  }) => ({
248
290
  groupName,
249
291
  list: list.filter(item => {
250
- if (typeof customFilter === 'function') {
251
- return customFilter(item);
292
+ if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {
293
+ return true;
252
294
  }
253
- return !(newMatchingItems.length === 1 && item.text === value);
295
+ return !(newMatchingItems.length === 1 && item.text === dropdownSearchString);
254
296
  })
255
297
  }));
256
298
  setMatchingListsItems(filteredMatchingListItems);
@@ -258,7 +300,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
258
300
  handleOpen();
259
301
  }
260
302
  }
261
- }, [shouldShowContentOnEmptyInput, activeList, shouldAddInputToList, hintText, value, customFilter, handleOpen]);
303
+ }, [shouldShowContentOnEmptyInput, activeList, shouldAddInputToList, hintText, dropdownSearchString, customFilter, shouldUseCustomFilterOnly, handleOpen]);
262
304
 
263
305
  /**
264
306
  * This function filters the lists by input
@@ -270,9 +312,11 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
270
312
  list,
271
313
  groupName
272
314
  }) => {
273
- const newList = (0, _searchBox.searchList)({
315
+ const newList = filterSearchBoxItems({
316
+ customFilter,
274
317
  items: list,
275
- searchString: value
318
+ searchString: dropdownSearchString,
319
+ shouldUseCustomFilterOnly
276
320
  });
277
321
  if (newList.length > 0) {
278
322
  newMatchingItems.push({
@@ -300,7 +344,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
300
344
  });
301
345
  });
302
346
  }
303
- }, [inputToListValue, activeList, shouldAddInputToList, shouldShowContentOnEmptyInput, value]);
347
+ }, [inputToListValue, activeList, shouldAddInputToList, shouldShowContentOnEmptyInput, dropdownSearchString, customFilter, shouldUseCustomFilterOnly]);
304
348
  const handleClick = (0, _react.useCallback)(() => {
305
349
  if (shouldShowBody) {
306
350
  handleClose();
@@ -333,9 +377,11 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
333
377
  list,
334
378
  groupName
335
379
  }) => {
336
- const newList = (0, _searchBox.searchList)({
380
+ const newList = filterSearchBoxItems({
381
+ customFilter,
337
382
  items: list,
338
- searchString: event.target.value
383
+ searchString: event.target.value,
384
+ shouldUseCustomFilterOnly
339
385
  });
340
386
  if (newList.length > 0) {
341
387
  filteredLists.push({
@@ -364,7 +410,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
364
410
  if (typeof onChange === 'function') {
365
411
  onChange(event);
366
412
  }
367
- }, [activeList, handleOpen, onChange, shouldAddInputToList, shouldShowContentOnEmptyInput]);
413
+ }, [activeList, customFilter, handleOpen, onChange, shouldAddInputToList, shouldShowContentOnEmptyInput, shouldUseCustomFilterOnly]);
368
414
 
369
415
  /**
370
416
  * This function handles the blur event of the input
@@ -437,6 +483,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
437
483
  id: id,
438
484
  text: text,
439
485
  imageUrl: imageUrl,
486
+ shouldShowSmallItems: shouldShowSmallItems,
440
487
  shouldShowRoundImage: shouldShowRoundImage,
441
488
  onSelect: handleSelect,
442
489
  groupName: groupName,
@@ -448,12 +495,13 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
448
495
  items.push(/*#__PURE__*/_react.default.createElement(_SearchBoxItem.default, {
449
496
  id: "input-value",
450
497
  onSelect: handleSelect,
498
+ shouldShowSmallItems: shouldShowSmallItems,
451
499
  text: `<b>${inputToListValue}</b`,
452
500
  tabIndex: items.length === 0 ? 0 : -1
453
501
  }));
454
502
  }
455
503
  return items;
456
- }, [hintText, matchingListsItems, shouldAddInputToList, inputToListValue, value, hasMultipleGroups, shouldShowRoundImage, handleSelect]);
504
+ }, [hintText, matchingListsItems, shouldAddInputToList, inputToListValue, value, hasMultipleGroups, shouldShowSmallItems, shouldShowRoundImage, handleSelect]);
457
505
  (0, _react.useEffect)(() => {
458
506
  const handleKeyDown = e => {
459
507
  var _contentRef$current, _childrenArray$find;
@@ -584,13 +632,14 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
584
632
  }, /*#__PURE__*/_react.default.createElement(_SearchBoxBody.default, {
585
633
  filterButtons: filterButtons,
586
634
  height: height,
635
+ maxHeight: maxHeight,
587
636
  shouldShow: shouldShowDropdown,
588
637
  key: `search-box-body-${uuid}`,
589
638
  onGroupSelect: handleFilterButtonsGroupSelect,
590
639
  ref: contentRef,
591
640
  selectedGroups: groups,
592
641
  shouldHideFilterButtons: shouldHideFilterButtons
593
- }, content))), [container, content, dropdownDirection, filterButtons, groups, handleBlur, handleChange, handleClose, handleDropdownOutsideClick, handleFocus, height, isInvalid, leftElement, onKeyDown, placeholder, rightElement, shouldHideFilterButtons, shouldShowDropdown, tagInputSettings, uuid, value]);
642
+ }, content))), [container, content, dropdownDirection, filterButtons, groups, handleBlur, handleChange, handleClose, handleDropdownOutsideClick, handleFocus, height, isInvalid, leftElement, maxHeight, onKeyDown, placeholder, rightElement, shouldHideFilterButtons, shouldShowDropdown, tagInputSettings, uuid, value]);
594
643
  });
595
644
  SearchBox.displayName = 'SearchBox';
596
645
  var _default = exports.default = SearchBox;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchBox.js","names":["_chaynsApi","require","_react","_interopRequireWildcard","_styledComponents","_calculate","_searchBox","_Icon","_interopRequireDefault","_Input","_GroupName","_SearchBoxBody","_SearchBoxItem","_SearchBoxItem2","_SearchBox","_uuid","_DropdownBodyWrapper","_TagInput","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SearchBox","forwardRef","container","customFilter","dropdownDirection","isInvalid","leftIcons","lists","onBlur","onChange","onKeyDown","onSelect","placeholder","presetValue","hintText","selectedId","shouldAddInputToList","shouldHideFilterButtons","shouldShowContentOnEmptyInput","shouldShowRoundImage","shouldShowToggleIcon","tagInputSettings","ref","matchingListsItems","setMatchingListsItems","useState","selectedImage","setSelectedImage","value","setValue","height","setHeight","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","shouldShowBody","setShouldShowBody","uuid","useUuid","boxRef","useRef","contentRef","inputRef","tagInputRef","hasFocusRef","isAnimatingRef","shouldShowPresetValue","theme","useTheme","isTouch","useDevice","useEffect","filterButtons","useMemo","items","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","searchList","searchString","undefined","filteredMatchingListItems","map","filter","item","handleOpen","useCallback","handleClose","handleFilterButtonsGroupSelect","keys","textArray","calculateContentHeight","selectedItem","find","imageUrl","createElement","StyledSearchBoxItemImage","src","$shouldShowRoundImage","current","handleFocus","toLowerCase","handleClick","rightElement","StyledSearchBoxIcon","onClick","icons","color","leftElement","StyledSearchBoxLeftWrapper","handleChange","event","filteredLists","target","handleBlur","handleDropdownOutsideClick","_tagInputRef$current","blur","handleSelect","newItem","replace","_tagInputRef$current2","resetValue","content","StyledSearchBoxHintText","index","key","name","listIndex","tabIndex","handleKeyDown","_contentRef$current","_childrenArray$find","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","preventDefault","newIndex","prevElement","newElement","stopPropagation","_element$children$","element","textContent","attributes","_element$children$2","nodeValue","newId","document","addEventListener","removeEventListener","handleKeyPress","keyCode","useImperativeHandle","clear","shouldShowDropdown","trim","StyledSearchBox","onAdd","onFocus","onRemove","shouldAllowMultiple","shouldPreventEnter","tags","anchorElement","direction","onClose","onOutsideClick","shouldShow","onGroupSelect","selectedGroups","displayName","_default","exports"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { useDevice } from 'chayns-api';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport type { IFilterButtonItem } from '../../types/filterButtons';\nimport type { ISearchBoxItem, ISearchBoxItems } from '../../types/searchBox';\nimport { calculateContentHeight } from '../../utils/calculate';\nimport { searchList } from '../../utils/searchBox';\nimport type { Theme } from '../color-scheme-provider/ColorSchemeProvider';\nimport Icon from '../icon/Icon';\nimport Input from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport {\n StyledSearchBox,\n StyledSearchBoxHintText,\n StyledSearchBoxIcon,\n StyledSearchBoxLeftWrapper,\n} from './SearchBox.styles';\nimport { useUuid } from '../../hooks/uuid';\nimport DropdownBodyWrapper from '../dropdown-body-wrapper/DropdownBodyWrapper';\nimport TagInput, { TagInputProps, TagInputRef } from '../tag-input/TagInput';\nimport type { DropdownDirection } from '../../types/dropdown';\n\nexport interface SearchBoxRef {\n clear: VoidFunction;\n}\n\nexport interface TagInputSettings {\n onAdd?: TagInputProps['onAdd'];\n onRemove?: TagInputProps['onRemove'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nexport type SearchBoxProps = {\n /**\n * The element where the content of the `ComboBox` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * An optional callback function to filter the elements to be displayed\n */\n customFilter?: (item: ISearchBoxItem) => boolean;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * If true, the input field is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * An optional icon that is displayed inside the left side of the input.\n */\n leftIcons?: string[];\n /**\n * List of groups with items that can be searched. It is possible to give only one list; if multiple lists are provided, the 'group name' parameter becomes mandatory.\n */\n lists: ISearchBoxItems[];\n /**\n * Function to be executed when the input lost focus.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when the input is changed.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when an item is selected.\n */\n onSelect?: (item: ISearchBoxItem) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Set an input for the search box - it is not an item of a list, just a string.\n */\n presetValue?: string;\n /**\n * Control the selected item. If you use this prop, make sure to update it when the user selects an item.\n */\n selectedId?: string;\n /**\n * If true, the value in the Input is displayed in the list.\n */\n shouldAddInputToList: boolean;\n /**\n * If true, the filter buttons are hidden.\n */\n shouldHideFilterButtons?: boolean;\n /**\n * Whether the full list of items should be displayed if the input is empty.\n */\n shouldShowContentOnEmptyInput?: boolean;\n /**\n * If true, the images of the items are displayed in a round shape.\n */\n shouldShowRoundImage?: boolean;\n /**\n * Whether the icon to open and close the list should be displayed.\n */\n shouldShowToggleIcon?: boolean;\n /**\n * Settings for the TagInput.\n */\n tagInputSettings?: TagInputSettings;\n /**\n * A text that should be displayed if no results are found.\n */\n hintText?: string;\n};\n\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n container,\n customFilter,\n dropdownDirection,\n isInvalid = false,\n leftIcons,\n lists,\n onBlur,\n onChange,\n onKeyDown,\n onSelect,\n placeholder,\n presetValue,\n hintText,\n selectedId,\n shouldAddInputToList = true,\n shouldHideFilterButtons = false,\n shouldShowContentOnEmptyInput = true,\n shouldShowRoundImage,\n shouldShowToggleIcon = false,\n tagInputSettings,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [value, setValue] = useState(\n typeof presetValue === 'string' && presetValue !== '' ? presetValue : '',\n );\n const [height, setHeight] = useState<number>(0);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n const [hasMultipleGroups, setHasMultipleGroups] = useState<boolean>(lists.length > 1);\n const [filteredChildrenArray, setFilteredChildrenArray] = useState<Element[]>();\n const [inputToListValue, setInputToListValue] = useState<string>('');\n const [groups, setGroups] = useState<string[]>(['all']);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const uuid = useUuid();\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const hasFocusRef = useRef<boolean>(false);\n const isAnimatingRef = useRef<boolean>(false);\n const shouldShowPresetValue = useRef<boolean>(\n typeof presetValue === 'string' && presetValue !== '',\n );\n\n const theme = useTheme() as Theme;\n\n const { isTouch } = useDevice();\n\n /**\n * Checks if there are multiple groups in the lists\n */\n useEffect(() => {\n setHasMultipleGroups(lists.length > 1);\n }, [lists]);\n\n const filterButtons = useMemo(() => {\n const items: IFilterButtonItem[] = [];\n\n if (lists.length <= 1) {\n return items;\n }\n\n lists.forEach(({ groupName }) => {\n if (groupName) {\n items.push({\n id: groupName,\n text: groupName,\n });\n }\n });\n\n return items;\n }, [lists]);\n\n /**\n * Filters the lists by the FilterButtons\n */\n const activeList = useMemo(() => {\n let newLists: ISearchBoxItems[] = [];\n\n if (groups[0] === 'all') {\n newLists = lists;\n } else {\n lists.forEach((list) => {\n if (list.groupName && groups.includes(list.groupName)) {\n newLists.push(list);\n }\n });\n }\n\n const newMatchingItems: ISearchBoxItems[] = [];\n\n newLists.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: value });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function') {\n return customFilter(item);\n }\n return !(newMatchingItems.length === 1 && item.text === value);\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [groups, lists, customFilter, shouldAddInputToList, value]);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This hook calculates the height\n */\n useEffect(() => {\n const textArray: string[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n list.forEach(({ text }) => textArray.push(text));\n if (!groupName) {\n return;\n }\n textArray.push(groupName);\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n textArray.push(inputToListValue);\n }\n\n setHeight(calculateContentHeight(textArray));\n }, [inputToListValue, activeList, placeholder, shouldAddInputToList]);\n\n useEffect(() => {\n if (selectedId) {\n activeList.forEach(({ list }) => {\n const selectedItem = list.find(({ id }) => id === selectedId);\n if (selectedItem) {\n setValue(selectedItem.text);\n\n if (selectedItem.imageUrl) {\n setSelectedImage(\n <StyledSearchBoxItemImage\n src={selectedItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />,\n );\n }\n }\n });\n }\n }, [activeList, selectedId, shouldShowRoundImage]);\n\n /**\n * This hook resets the value if the selectedId changes to undefined. This is an own useEffect because the value\n * should not be reset if the list changes and the selectedId is still undefined.\n */\n useEffect(() => {\n if (!selectedId && !shouldShowPresetValue.current) {\n setValue('');\n }\n }, [selectedId]);\n\n useEffect(() => {\n isAnimatingRef.current = shouldShowBody;\n }, [shouldShowBody]);\n\n useEffect(() => {\n if (\n (matchingListsItems.length !== 0 || hintText) &&\n !isAnimatingRef.current &&\n hasFocusRef.current\n ) {\n handleOpen();\n }\n }, [handleOpen, hintText, matchingListsItems.length]);\n\n /**\n * This function handles the focus event of the input and opens the dropdown if the input\n * should show content on an empty input\n */\n const handleFocus = useCallback(() => {\n hasFocusRef.current = true;\n\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: value });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function') {\n return customFilter(item);\n }\n return !(newMatchingItems.length === 1 && item.text === value);\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0 || hintText) {\n handleOpen();\n }\n }\n }, [\n shouldShowContentOnEmptyInput,\n activeList,\n shouldAddInputToList,\n hintText,\n value,\n customFilter,\n handleOpen,\n ]);\n\n /**\n * This function filters the lists by input\n */\n\n useEffect(() => {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: value });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n if (shouldAddInputToList && inputToListValue !== '') {\n newMatchingItems.forEach(({ list }) => {\n list.forEach(({ text }) => {\n if (text.toLowerCase() === inputToListValue.toLowerCase()) {\n setInputToListValue('');\n }\n });\n });\n }\n }, [\n inputToListValue,\n activeList,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n value,\n ]);\n\n const handleClick = useCallback(() => {\n if (shouldShowBody) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, shouldShowBody]);\n\n const rightElement = useMemo(() => {\n if (!shouldShowToggleIcon) {\n return undefined;\n }\n\n return (\n <StyledSearchBoxIcon onClick={handleClick}>\n <Icon icons={['fa fa-chevron-down']} color={theme['006'] as string} />\n </StyledSearchBoxIcon>\n );\n }, [handleClick, shouldShowToggleIcon, theme]);\n\n const leftElement = useMemo(\n () =>\n (leftIcons || selectedImage) && (\n <StyledSearchBoxLeftWrapper>\n {leftIcons && <Icon icons={leftIcons} />}\n {selectedImage && selectedImage}\n </StyledSearchBoxLeftWrapper>\n ),\n [leftIcons, selectedImage],\n );\n\n /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n shouldShowPresetValue.current = false;\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: event.target.value });\n\n if (newList.length > 0) {\n filteredLists.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (filteredLists.length === 0 && shouldAddInputToList) {\n filteredLists.push({\n groupName: undefined,\n list: [],\n });\n }\n\n setSelectedImage(undefined);\n\n if (!shouldShowContentOnEmptyInput && !event.target.value) {\n setMatchingListsItems([]);\n } else {\n setMatchingListsItems(filteredLists);\n }\n\n if (filteredLists.length !== 0) {\n handleOpen();\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n },\n [activeList, handleOpen, onChange, shouldAddInputToList, shouldShowContentOnEmptyInput],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n hasFocusRef.current = false;\n\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n },\n [onBlur],\n );\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return hasFocusRef.current && isTouch;\n }, [isTouch]);\n\n /**\n * This function handles the item selection\n */\n const handleSelect = useCallback(\n (item: ISearchBoxItem) => {\n const newItem = {\n ...item,\n text: item.text.replace('<b>', '').replace('</b>', '').replace('</b', ''),\n };\n\n if (tagInputSettings) {\n setValue('');\n setInputToListValue('');\n tagInputRef.current?.resetValue();\n } else {\n setValue(newItem.text);\n }\n\n handleClose();\n\n setSelectedImage(\n newItem.imageUrl ? (\n <StyledSearchBoxItemImage\n src={newItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />\n ) : undefined,\n );\n\n setMatchingListsItems([]);\n\n if (typeof onSelect === 'function') {\n onSelect(newItem);\n }\n },\n [handleClose, onSelect, shouldShowRoundImage, tagInputSettings],\n );\n\n const content = useMemo(() => {\n if (hintText && matchingListsItems.length === 0) {\n return (\n <StyledSearchBoxHintText>\n {hintText.replace('##value##', value)}\n </StyledSearchBoxHintText>\n );\n }\n\n const items: ReactElement[] = [];\n\n matchingListsItems.forEach(({ groupName, list }, index) => {\n if (hasMultipleGroups) {\n if (list.length <= 0) {\n return;\n }\n\n if (index !== 0) {\n items.push(<GroupName key={groupName} name={groupName ?? ''} />);\n }\n }\n\n list.forEach(({ id, text, imageUrl }, listIndex) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n tabIndex={index === 0 && listIndex === 0 ? 0 : -1}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n text={`<b>${inputToListValue}</b`}\n tabIndex={items.length === 0 ? 0 : -1}\n />,\n );\n }\n\n return items;\n }, [\n hintText,\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n value,\n hasMultipleGroups,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!shouldShowBody || matchingListsItems.length === 0) {\n return;\n }\n\n const children = contentRef.current?.children;\n\n if (!children) {\n return;\n }\n\n const childrenArray = Array.from(children);\n\n const newChildren = childrenArray.find((child) =>\n child.id.startsWith('searchBoxContent__'),\n )?.children;\n\n if (!(newChildren && newChildren.length > 0)) {\n return;\n }\n\n const filteredChildren = Array.from(newChildren).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n\n setFilteredChildrenArray(filteredChildren);\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n\n if (newChildren && newChildren.length > 0) {\n const newIndex =\n focusedIndex !== null\n ? (focusedIndex +\n (e.key === 'ArrowUp' ? -1 : 1) +\n filteredChildren.length) %\n filteredChildren.length\n : 0;\n\n if (focusedIndex !== null) {\n const prevElement = filteredChildren[focusedIndex] as HTMLDivElement;\n prevElement.tabIndex = -1;\n }\n\n setFocusedIndex(newIndex);\n\n const newElement = filteredChildren[newIndex] as HTMLDivElement;\n\n newElement.tabIndex = 0;\n }\n } else if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n\n if (filteredChildren) {\n const element = filteredChildren[focusedIndex ?? 0];\n\n if (!element) {\n return;\n }\n\n const { id, textContent } = element;\n\n let imageUrl: string | undefined;\n\n // Just Ignore, it works\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (element.children[0]?.attributes.src) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n imageUrl = element.children[0]?.attributes.src.nodeValue as string;\n }\n\n const newId = id.replace('search-box-item__', '');\n\n handleSelect({\n id: newId === 'input-value' ? textContent : newId,\n text: textContent ?? '',\n imageUrl,\n });\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n filteredChildrenArray,\n focusedIndex,\n handleSelect,\n matchingListsItems.length,\n shouldShowBody,\n ]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n /**\n * Update the value if preset value changes\n */\n useEffect(() => {\n if (presetValue) {\n setValue(presetValue);\n }\n }, [presetValue]);\n\n const shouldShowDropdown =\n shouldShowBody &&\n (matchingListsItems.length !== 0 || !!hintText) &&\n (value.trim() !== '' || shouldShowContentOnEmptyInput);\n\n return useMemo(\n () => (\n <StyledSearchBox ref={boxRef} key={`search-box-${uuid}`}>\n <div id={`search_box_input${uuid}`}>\n {tagInputSettings ? (\n <TagInput\n leftElement={leftElement}\n onAdd={tagInputSettings.onAdd}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onRemove={tagInputSettings.onRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={tagInputSettings.shouldAllowMultiple}\n shouldPreventEnter\n tags={tagInputSettings.tags}\n />\n ) : (\n <Input\n isInvalid={isInvalid}\n leftElement={leftElement}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n ref={inputRef}\n rightElement={rightElement}\n value={value}\n />\n )}\n </div>\n {boxRef.current && (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={shouldShowDropdown}\n >\n <SearchBoxBody\n filterButtons={filterButtons}\n height={height}\n shouldShow={shouldShowDropdown}\n key={`search-box-body-${uuid}`}\n onGroupSelect={handleFilterButtonsGroupSelect}\n ref={contentRef}\n selectedGroups={groups}\n shouldHideFilterButtons={shouldHideFilterButtons}\n >\n {content}\n </SearchBoxBody>\n </DropdownBodyWrapper>\n )}\n </StyledSearchBox>\n ),\n [\n container,\n content,\n dropdownDirection,\n filterButtons,\n groups,\n handleBlur,\n handleChange,\n handleClose,\n handleDropdownOutsideClick,\n handleFocus,\n height,\n isInvalid,\n leftElement,\n onKeyDown,\n placeholder,\n rightElement,\n shouldHideFilterButtons,\n shouldShowDropdown,\n tagInputSettings,\n uuid,\n value,\n ],\n );\n },\n);\n\nSearchBox.displayName = 'SearchBox';\n\nexport default SearchBox;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SearchBox.js","names":["_chaynsApi","require","_react","_interopRequireWildcard","_styledComponents","_calculate","_searchBox","_Icon","_interopRequireDefault","_Input","_GroupName","_SearchBoxBody","_SearchBoxItem","_SearchBoxItem2","_SearchBox","_uuid","_DropdownBodyWrapper","_TagInput","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","filterSearchBoxItems","customFilter","items","searchString","shouldUseCustomFilterOnly","searchList","filteredItems","filter","sortSearchBoxItems","getDropdownSearchString","selectedId","shouldKeepSelectedItemPosition","value","SearchBox","forwardRef","container","dropdownDirection","isInvalid","leftIcons","lists","maxHeight","onBlur","onChange","onKeyDown","onSelect","placeholder","presetValue","hintText","shouldAddInputToList","shouldHideFilterButtons","shouldShowContentOnEmptyInput","shouldShowSmallItems","shouldShowRoundImage","shouldShowToggleIcon","tagInputSettings","ref","matchingListsItems","setMatchingListsItems","useState","selectedImage","setSelectedImage","setValue","height","setHeight","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","shouldShowBody","setShouldShowBody","uuid","useUuid","boxRef","useRef","contentRef","inputRef","tagInputRef","hasFocusRef","isAnimatingRef","shouldShowPresetValue","theme","useTheme","dropdownSearchString","isTouch","useDevice","useEffect","filterButtons","useMemo","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","undefined","filteredMatchingListItems","map","item","handleOpen","useCallback","handleClose","handleFilterButtonsGroupSelect","keys","textArray","calculateContentHeight","selectedItem","find","imageUrl","createElement","StyledSearchBoxItemImage","src","$shouldShowRoundImage","current","handleFocus","toLowerCase","handleClick","rightElement","StyledSearchBoxIcon","onClick","icons","color","leftElement","StyledSearchBoxLeftWrapper","handleChange","event","filteredLists","target","handleBlur","handleDropdownOutsideClick","_tagInputRef$current","blur","handleSelect","newItem","replace","_tagInputRef$current2","resetValue","content","StyledSearchBoxHintText","index","key","name","listIndex","tabIndex","handleKeyDown","_contentRef$current","_childrenArray$find","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","preventDefault","newIndex","prevElement","newElement","stopPropagation","_element$children$","element","textContent","attributes","_element$children$2","nodeValue","newId","document","addEventListener","removeEventListener","handleKeyPress","keyCode","useImperativeHandle","clear","shouldShowDropdown","trim","StyledSearchBox","onAdd","onFocus","onRemove","shouldAllowMultiple","shouldPreventEnter","tags","anchorElement","direction","onClose","onOutsideClick","shouldShow","onGroupSelect","selectedGroups","displayName","_default","exports"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { useDevice } from 'chayns-api';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport type { IFilterButtonItem } from '../../types/filterButtons';\nimport type { ISearchBoxItem, ISearchBoxItems } from '../../types/searchBox';\nimport { calculateContentHeight } from '../../utils/calculate';\nimport { searchList, sortSearchBoxItems } from '../../utils/searchBox';\nimport type { Theme } from '../color-scheme-provider/ColorSchemeProvider';\nimport Icon from '../icon/Icon';\nimport Input from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport {\n StyledSearchBox,\n StyledSearchBoxHintText,\n StyledSearchBoxIcon,\n StyledSearchBoxLeftWrapper,\n} from './SearchBox.styles';\nimport { useUuid } from '../../hooks/uuid';\nimport DropdownBodyWrapper from '../dropdown-body-wrapper/DropdownBodyWrapper';\nimport TagInput, { TagInputProps, TagInputRef } from '../tag-input/TagInput';\nimport type { DropdownDirection } from '../../types/dropdown';\n\nexport interface SearchBoxRef {\n clear: VoidFunction;\n}\n\nexport interface TagInputSettings {\n onAdd?: TagInputProps['onAdd'];\n onRemove?: TagInputProps['onRemove'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nconst filterSearchBoxItems = ({\n customFilter,\n items,\n searchString,\n shouldUseCustomFilterOnly,\n}: {\n customFilter?: (item: ISearchBoxItem) => boolean;\n items: ISearchBoxItem[];\n searchString: string;\n shouldUseCustomFilterOnly?: boolean;\n}) => {\n if (typeof customFilter !== 'function') {\n return searchList({ items, searchString });\n }\n\n if (shouldUseCustomFilterOnly) {\n const filteredItems = items.filter(customFilter);\n\n return sortSearchBoxItems({ items: filteredItems, searchString });\n }\n\n return searchList({ items, searchString }).filter(customFilter);\n};\n\nconst getDropdownSearchString = ({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n}: {\n selectedId?: string;\n shouldKeepSelectedItemPosition?: boolean;\n value: string;\n}) => (shouldKeepSelectedItemPosition && selectedId ? '' : value);\n\nexport type SearchBoxProps = {\n /**\n * The element where the content of the `ComboBox` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * An optional callback function to filter the elements to be displayed\n */\n customFilter?: (item: ISearchBoxItem) => boolean;\n /**\n * If true, the custom filter replaces the built-in text search instead of narrowing its results.\n */\n shouldUseCustomFilterOnly?: boolean;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * If true, the input field is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * An optional icon that is displayed inside the left side of the input.\n */\n leftIcons?: string[];\n /**\n * List of groups with items that can be searched. It is possible to give only one list; if multiple lists are provided, the 'group name' parameter becomes mandatory.\n */\n lists: ISearchBoxItems[];\n /**\n * The maximum height of the dropdown body in pixels.\n */\n maxHeight?: number;\n /**\n * Function to be executed when the input lost focus.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when the input is changed.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when an item is selected.\n */\n onSelect?: (item: ISearchBoxItem) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Set an input for the search box - it is not an item of a list, just a string.\n */\n presetValue?: string;\n /**\n * Control the selected item. If you use this prop, make sure to update it when the user selects an item.\n */\n selectedId?: string;\n /**\n * If true, the selected item keeps its original position in the dropdown list.\n */\n shouldKeepSelectedItemPosition?: boolean;\n /**\n * If true, the value in the Input is displayed in the list.\n */\n shouldAddInputToList: boolean;\n /**\n * If true, the filter buttons are hidden.\n */\n shouldHideFilterButtons?: boolean;\n /**\n * Whether the full list of items should be displayed if the input is empty.\n */\n shouldShowContentOnEmptyInput?: boolean;\n /**\n * If true, the dropdown items are displayed more compactly.\n */\n shouldShowSmallItems?: boolean;\n /**\n * If true, the images of the items are displayed in a round shape.\n */\n shouldShowRoundImage?: boolean;\n /**\n * Whether the icon to open and close the list should be displayed.\n */\n shouldShowToggleIcon?: boolean;\n /**\n * Settings for the TagInput.\n */\n tagInputSettings?: TagInputSettings;\n /**\n * A text that should be displayed if no results are found.\n */\n hintText?: string;\n};\n\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n container,\n customFilter,\n dropdownDirection,\n isInvalid = false,\n leftIcons,\n lists,\n maxHeight = 300,\n onBlur,\n onChange,\n onKeyDown,\n onSelect,\n placeholder,\n presetValue,\n hintText,\n selectedId,\n shouldAddInputToList = true,\n shouldKeepSelectedItemPosition = false,\n shouldUseCustomFilterOnly = false,\n shouldHideFilterButtons = false,\n shouldShowContentOnEmptyInput = true,\n shouldShowSmallItems = false,\n shouldShowRoundImage,\n shouldShowToggleIcon = false,\n tagInputSettings,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [value, setValue] = useState(\n typeof presetValue === 'string' && presetValue !== '' ? presetValue : '',\n );\n const [height, setHeight] = useState<number>(0);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n const [hasMultipleGroups, setHasMultipleGroups] = useState<boolean>(lists.length > 1);\n const [filteredChildrenArray, setFilteredChildrenArray] = useState<Element[]>();\n const [inputToListValue, setInputToListValue] = useState<string>('');\n const [groups, setGroups] = useState<string[]>(['all']);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const uuid = useUuid();\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const hasFocusRef = useRef<boolean>(false);\n const isAnimatingRef = useRef<boolean>(false);\n const shouldShowPresetValue = useRef<boolean>(\n typeof presetValue === 'string' && presetValue !== '',\n );\n\n const theme = useTheme() as Theme;\n const dropdownSearchString = getDropdownSearchString({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n });\n\n const { isTouch } = useDevice();\n\n /**\n * Checks if there are multiple groups in the lists\n */\n useEffect(() => {\n setHasMultipleGroups(lists.length > 1);\n }, [lists]);\n\n const filterButtons = useMemo(() => {\n const items: IFilterButtonItem[] = [];\n\n if (lists.length <= 1) {\n return items;\n }\n\n lists.forEach(({ groupName }) => {\n if (groupName) {\n items.push({\n id: groupName,\n text: groupName,\n });\n }\n });\n\n return items;\n }, [lists]);\n\n /**\n * Filters the lists by the FilterButtons\n */\n const activeList = useMemo(() => {\n let newLists: ISearchBoxItems[] = [];\n\n if (groups[0] === 'all') {\n newLists = lists;\n } else {\n lists.forEach((list) => {\n if (list.groupName && groups.includes(list.groupName)) {\n newLists.push(list);\n }\n });\n }\n\n const newMatchingItems: ISearchBoxItems[] = [];\n\n newLists.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {\n return true;\n }\n\n return !(newMatchingItems.length === 1 && item.text === dropdownSearchString);\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [\n groups,\n lists,\n customFilter,\n dropdownSearchString,\n shouldAddInputToList,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This hook calculates the height\n */\n useEffect(() => {\n const textArray: string[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n list.forEach(({ text }) => textArray.push(text));\n if (!groupName) {\n return;\n }\n textArray.push(groupName);\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n textArray.push(inputToListValue);\n }\n\n setHeight(calculateContentHeight(textArray));\n }, [inputToListValue, activeList, placeholder, shouldAddInputToList]);\n\n useEffect(() => {\n if (selectedId) {\n activeList.forEach(({ list }) => {\n const selectedItem = list.find(({ id }) => id === selectedId);\n if (selectedItem) {\n setValue(selectedItem.text);\n\n if (selectedItem.imageUrl) {\n setSelectedImage(\n <StyledSearchBoxItemImage\n src={selectedItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />,\n );\n }\n }\n });\n }\n }, [activeList, selectedId, shouldShowRoundImage]);\n\n /**\n * This hook resets the value if the selectedId changes to undefined. This is an own useEffect because the value\n * should not be reset if the list changes and the selectedId is still undefined.\n */\n useEffect(() => {\n if (!selectedId && !shouldShowPresetValue.current) {\n setValue('');\n }\n }, [selectedId]);\n\n useEffect(() => {\n isAnimatingRef.current = shouldShowBody;\n }, [shouldShowBody]);\n\n useEffect(() => {\n if (\n (matchingListsItems.length !== 0 || hintText) &&\n !isAnimatingRef.current &&\n hasFocusRef.current\n ) {\n handleOpen();\n }\n }, [handleOpen, hintText, matchingListsItems.length]);\n\n /**\n * This function handles the focus event of the input and opens the dropdown if the input\n * should show content on an empty input\n */\n const handleFocus = useCallback(() => {\n hasFocusRef.current = true;\n\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {\n return true;\n }\n\n return !(\n newMatchingItems.length === 1 && item.text === dropdownSearchString\n );\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0 || hintText) {\n handleOpen();\n }\n }\n }, [\n shouldShowContentOnEmptyInput,\n activeList,\n shouldAddInputToList,\n hintText,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n handleOpen,\n ]);\n\n /**\n * This function filters the lists by input\n */\n\n useEffect(() => {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n if (shouldAddInputToList && inputToListValue !== '') {\n newMatchingItems.forEach(({ list }) => {\n list.forEach(({ text }) => {\n if (text.toLowerCase() === inputToListValue.toLowerCase()) {\n setInputToListValue('');\n }\n });\n });\n }\n }, [\n inputToListValue,\n activeList,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleClick = useCallback(() => {\n if (shouldShowBody) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, shouldShowBody]);\n\n const rightElement = useMemo(() => {\n if (!shouldShowToggleIcon) {\n return undefined;\n }\n\n return (\n <StyledSearchBoxIcon onClick={handleClick}>\n <Icon icons={['fa fa-chevron-down']} color={theme['006'] as string} />\n </StyledSearchBoxIcon>\n );\n }, [handleClick, shouldShowToggleIcon, theme]);\n\n const leftElement = useMemo(\n () =>\n (leftIcons || selectedImage) && (\n <StyledSearchBoxLeftWrapper>\n {leftIcons && <Icon icons={leftIcons} />}\n {selectedImage && selectedImage}\n </StyledSearchBoxLeftWrapper>\n ),\n [leftIcons, selectedImage],\n );\n\n /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n shouldShowPresetValue.current = false;\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: event.target.value,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n filteredLists.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (filteredLists.length === 0 && shouldAddInputToList) {\n filteredLists.push({\n groupName: undefined,\n list: [],\n });\n }\n\n setSelectedImage(undefined);\n\n if (!shouldShowContentOnEmptyInput && !event.target.value) {\n setMatchingListsItems([]);\n } else {\n setMatchingListsItems(filteredLists);\n }\n\n if (filteredLists.length !== 0) {\n handleOpen();\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n },\n [\n activeList,\n customFilter,\n handleOpen,\n onChange,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n shouldUseCustomFilterOnly,\n ],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n hasFocusRef.current = false;\n\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n },\n [onBlur],\n );\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return hasFocusRef.current && isTouch;\n }, [isTouch]);\n\n /**\n * This function handles the item selection\n */\n const handleSelect = useCallback(\n (item: ISearchBoxItem) => {\n const newItem = {\n ...item,\n text: item.text.replace('<b>', '').replace('</b>', '').replace('</b', ''),\n };\n\n if (tagInputSettings) {\n setValue('');\n setInputToListValue('');\n tagInputRef.current?.resetValue();\n } else {\n setValue(newItem.text);\n }\n\n handleClose();\n\n setSelectedImage(\n newItem.imageUrl ? (\n <StyledSearchBoxItemImage\n src={newItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />\n ) : undefined,\n );\n\n setMatchingListsItems([]);\n\n if (typeof onSelect === 'function') {\n onSelect(newItem);\n }\n },\n [handleClose, onSelect, shouldShowRoundImage, tagInputSettings],\n );\n\n const content = useMemo(() => {\n if (hintText && matchingListsItems.length === 0) {\n return (\n <StyledSearchBoxHintText>\n {hintText.replace('##value##', value)}\n </StyledSearchBoxHintText>\n );\n }\n\n const items: ReactElement[] = [];\n\n matchingListsItems.forEach(({ groupName, list }, index) => {\n if (hasMultipleGroups) {\n if (list.length <= 0) {\n return;\n }\n\n if (index !== 0) {\n items.push(<GroupName key={groupName} name={groupName ?? ''} />);\n }\n }\n\n list.forEach(({ id, text, imageUrl }, listIndex) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowSmallItems={shouldShowSmallItems}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n tabIndex={index === 0 && listIndex === 0 ? 0 : -1}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n shouldShowSmallItems={shouldShowSmallItems}\n text={`<b>${inputToListValue}</b`}\n tabIndex={items.length === 0 ? 0 : -1}\n />,\n );\n }\n\n return items;\n }, [\n hintText,\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n value,\n hasMultipleGroups,\n shouldShowSmallItems,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!shouldShowBody || matchingListsItems.length === 0) {\n return;\n }\n\n const children = contentRef.current?.children;\n\n if (!children) {\n return;\n }\n\n const childrenArray = Array.from(children);\n\n const newChildren = childrenArray.find((child) =>\n child.id.startsWith('searchBoxContent__'),\n )?.children;\n\n if (!(newChildren && newChildren.length > 0)) {\n return;\n }\n\n const filteredChildren = Array.from(newChildren).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n\n setFilteredChildrenArray(filteredChildren);\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n\n if (newChildren && newChildren.length > 0) {\n const newIndex =\n focusedIndex !== null\n ? (focusedIndex +\n (e.key === 'ArrowUp' ? -1 : 1) +\n filteredChildren.length) %\n filteredChildren.length\n : 0;\n\n if (focusedIndex !== null) {\n const prevElement = filteredChildren[focusedIndex] as HTMLDivElement;\n prevElement.tabIndex = -1;\n }\n\n setFocusedIndex(newIndex);\n\n const newElement = filteredChildren[newIndex] as HTMLDivElement;\n\n newElement.tabIndex = 0;\n }\n } else if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n\n if (filteredChildren) {\n const element = filteredChildren[focusedIndex ?? 0];\n\n if (!element) {\n return;\n }\n\n const { id, textContent } = element;\n\n let imageUrl: string | undefined;\n\n // Just Ignore, it works\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (element.children[0]?.attributes.src) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n imageUrl = element.children[0]?.attributes.src.nodeValue as string;\n }\n\n const newId = id.replace('search-box-item__', '');\n\n handleSelect({\n id: newId === 'input-value' ? textContent : newId,\n text: textContent ?? '',\n imageUrl,\n });\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n filteredChildrenArray,\n focusedIndex,\n handleSelect,\n matchingListsItems.length,\n shouldShowBody,\n ]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n /**\n * Update the value if preset value changes\n */\n useEffect(() => {\n if (presetValue) {\n setValue(presetValue);\n }\n }, [presetValue]);\n\n const shouldShowDropdown =\n shouldShowBody &&\n (matchingListsItems.length !== 0 || !!hintText) &&\n (value.trim() !== '' || shouldShowContentOnEmptyInput);\n\n return useMemo(\n () => (\n <StyledSearchBox ref={boxRef} key={`search-box-${uuid}`}>\n <div id={`search_box_input${uuid}`}>\n {tagInputSettings ? (\n <TagInput\n leftElement={leftElement}\n onAdd={tagInputSettings.onAdd}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onRemove={tagInputSettings.onRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={tagInputSettings.shouldAllowMultiple}\n shouldPreventEnter\n tags={tagInputSettings.tags}\n />\n ) : (\n <Input\n isInvalid={isInvalid}\n leftElement={leftElement}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n ref={inputRef}\n rightElement={rightElement}\n value={value}\n />\n )}\n </div>\n {boxRef.current && (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={shouldShowDropdown}\n >\n <SearchBoxBody\n filterButtons={filterButtons}\n height={height}\n maxHeight={maxHeight}\n shouldShow={shouldShowDropdown}\n key={`search-box-body-${uuid}`}\n onGroupSelect={handleFilterButtonsGroupSelect}\n ref={contentRef}\n selectedGroups={groups}\n shouldHideFilterButtons={shouldHideFilterButtons}\n >\n {content}\n </SearchBoxBody>\n </DropdownBodyWrapper>\n )}\n </StyledSearchBox>\n ),\n [\n container,\n content,\n dropdownDirection,\n filterButtons,\n groups,\n handleBlur,\n handleChange,\n handleClose,\n handleDropdownOutsideClick,\n handleFocus,\n height,\n isInvalid,\n leftElement,\n maxHeight,\n onKeyDown,\n placeholder,\n rightElement,\n shouldHideFilterButtons,\n shouldShowDropdown,\n tagInputSettings,\n uuid,\n value,\n ],\n );\n },\n);\n\nSearchBox.displayName = 'SearchBox';\n\nexport default SearchBox;\n"],"mappings":"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","ignoreList":[]}
@@ -16,6 +16,7 @@ const SearchBoxBody = /*#__PURE__*/(0, _react.forwardRef)(({
16
16
  filterButtons,
17
17
  selectedGroups,
18
18
  height,
19
+ maxHeight = 300,
19
20
  children,
20
21
  shouldShow,
21
22
  onGroupSelect,
@@ -64,12 +65,13 @@ const SearchBoxBody = /*#__PURE__*/(0, _react.forwardRef)(({
64
65
  }), /*#__PURE__*/_react.default.createElement(_SearchBoxBody.StyledSearchBoxBodyHeadGroupName, null, currentGroupName.replace('_', ''))), /*#__PURE__*/_react.default.createElement(_SearchBoxBody.StyledSearchBoxBodyContent, {
65
66
  $height: height,
66
67
  $headHeight: headHeight,
68
+ $maxHeight: maxHeight,
67
69
  key: "content",
68
70
  id: `searchBoxContent__${uuid}`,
69
71
  className: "chayns-scrollbar",
70
72
  tabIndex: 0,
71
73
  onScroll: handleScroll
72
- }, children)), [children, currentGroupName, filterButtons, handleScroll, hasScrolled, headHeight, height, onGroupSelect, ref, selectedGroups, shouldHideFilterButtons, shouldShow, uuid]);
74
+ }, children)), [children, currentGroupName, filterButtons, handleScroll, hasScrolled, headHeight, height, onGroupSelect, maxHeight, ref, selectedGroups, shouldHideFilterButtons, shouldShow, uuid]);
73
75
  });
74
76
  SearchBoxBody.displayName = 'SearchBoxBody';
75
77
  var _default = exports.default = SearchBoxBody;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchBoxBody.js","names":["_react","_interopRequireWildcard","require","_element","_uuid","_searchBox","_FilterButtons","_interopRequireDefault","_SearchBoxBody","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SearchBoxBody","forwardRef","filterButtons","selectedGroups","height","children","shouldShow","onGroupSelect","shouldHideFilterButtons","ref","hasScrolled","setHasScrolled","useState","currentGroupName","setCurrentGroupName","headRef","useRef","headSize","useElementSize","uuid","useUuid","headHeight","useMemo","useEffect","element","document","getElementById","length","getCurrentGroupName","handlePreventDefault","event","preventDefault","stopPropagation","handleScroll","useCallback","scrollTop","target","createElement","StyledSearchBoxBody","onClick","inert","undefined","StyledSearchBoxBodyHead","$hasScrolled","$hasGroupName","items","size","onSelect","selectedItemIds","StyledSearchBoxBodyHeadGroupName","replace","StyledSearchBoxBodyContent","$height","$headHeight","key","id","className","tabIndex","onScroll","displayName","_default","exports"],"sources":["../../../../../src/components/search-box/search-box-body/SearchBoxBody.tsx"],"sourcesContent":["import React, {\n forwardRef,\n MouseEvent,\n UIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { useElementSize } from '../../../hooks/element';\nimport { useUuid } from '../../../hooks/uuid';\nimport type { IFilterButtonItem } from '../../../types/filterButtons';\nimport { getCurrentGroupName } from '../../../utils/searchBox';\nimport FilterButtons from '../../filter-buttons/FilterButtons';\nimport {\n StyledSearchBoxBody,\n StyledSearchBoxBodyContent,\n StyledSearchBoxBodyHead,\n StyledSearchBoxBodyHeadGroupName,\n} from './SearchBoxBody.styles';\n\nexport type SearchBoxBodyProps = {\n children: ReactNode;\n filterButtons?: IFilterButtonItem[];\n selectedGroups?: string[];\n height: number;\n onGroupSelect?: (keys: string[]) => void;\n shouldHideFilterButtons?: boolean;\n shouldShow: boolean;\n};\n\nconst SearchBoxBody = forwardRef<HTMLDivElement, SearchBoxBodyProps>(\n (\n {\n filterButtons,\n selectedGroups,\n height,\n children,\n shouldShow,\n onGroupSelect,\n shouldHideFilterButtons,\n },\n ref,\n ) => {\n const [hasScrolled, setHasScrolled] = useState(false);\n const [currentGroupName, setCurrentGroupName] = useState('');\n\n const headRef = useRef<HTMLDivElement>(null);\n\n const headSize = useElementSize(headRef);\n\n const uuid = useUuid();\n\n const headHeight = useMemo(\n () => (headSize?.height ? headSize.height + 15 : 0),\n [headSize?.height],\n );\n\n useEffect(() => {\n const element = document.getElementById(`searchBoxContent__${uuid}`);\n\n if (\n element &&\n ((selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1)\n ) {\n setCurrentGroupName(getCurrentGroupName(element));\n } else {\n setCurrentGroupName('');\n }\n }, [uuid, children, selectedGroups]);\n\n const handlePreventDefault = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const handleScroll = useCallback(\n (event: UIEvent) => {\n const { scrollTop } = event.target as HTMLDivElement;\n\n setHasScrolled(scrollTop > 1);\n\n if (\n (selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1\n ) {\n setCurrentGroupName(getCurrentGroupName(event.target as HTMLDivElement));\n }\n },\n [selectedGroups],\n );\n\n return useMemo(\n () => (\n <StyledSearchBoxBody\n onClick={handlePreventDefault}\n ref={ref}\n inert={!shouldShow ? 'true' : undefined}\n >\n {filterButtons && filterButtons?.length > 1 && (\n <StyledSearchBoxBodyHead\n ref={headRef}\n $hasScrolled={hasScrolled}\n $hasGroupName={!!currentGroupName}\n >\n {!shouldHideFilterButtons && (\n <FilterButtons\n items={filterButtons}\n size={0}\n onSelect={onGroupSelect}\n selectedItemIds={selectedGroups}\n />\n )}\n <StyledSearchBoxBodyHeadGroupName>\n {currentGroupName.replace('_', '')}\n </StyledSearchBoxBodyHeadGroupName>\n </StyledSearchBoxBodyHead>\n )}\n <StyledSearchBoxBodyContent\n $height={height}\n $headHeight={headHeight}\n key=\"content\"\n id={`searchBoxContent__${uuid}`}\n className=\"chayns-scrollbar\"\n tabIndex={0}\n onScroll={handleScroll}\n >\n {children}\n </StyledSearchBoxBodyContent>\n </StyledSearchBoxBody>\n ),\n [\n children,\n currentGroupName,\n filterButtons,\n handleScroll,\n hasScrolled,\n headHeight,\n height,\n onGroupSelect,\n ref,\n selectedGroups,\n shouldHideFilterButtons,\n shouldShow,\n uuid,\n ],\n );\n },\n);\n\nSearchBoxBody.displayName = 'SearchBoxBody';\n\nexport default SearchBoxBody;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SearchBoxBody.js","names":["_react","_interopRequireWildcard","require","_element","_uuid","_searchBox","_FilterButtons","_interopRequireDefault","_SearchBoxBody","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SearchBoxBody","forwardRef","filterButtons","selectedGroups","height","maxHeight","children","shouldShow","onGroupSelect","shouldHideFilterButtons","ref","hasScrolled","setHasScrolled","useState","currentGroupName","setCurrentGroupName","headRef","useRef","headSize","useElementSize","uuid","useUuid","headHeight","useMemo","useEffect","element","document","getElementById","length","getCurrentGroupName","handlePreventDefault","event","preventDefault","stopPropagation","handleScroll","useCallback","scrollTop","target","createElement","StyledSearchBoxBody","onClick","inert","undefined","StyledSearchBoxBodyHead","$hasScrolled","$hasGroupName","items","size","onSelect","selectedItemIds","StyledSearchBoxBodyHeadGroupName","replace","StyledSearchBoxBodyContent","$height","$headHeight","$maxHeight","key","id","className","tabIndex","onScroll","displayName","_default","exports"],"sources":["../../../../../src/components/search-box/search-box-body/SearchBoxBody.tsx"],"sourcesContent":["import React, {\n forwardRef,\n MouseEvent,\n UIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { useElementSize } from '../../../hooks/element';\nimport { useUuid } from '../../../hooks/uuid';\nimport type { IFilterButtonItem } from '../../../types/filterButtons';\nimport { getCurrentGroupName } from '../../../utils/searchBox';\nimport FilterButtons from '../../filter-buttons/FilterButtons';\nimport {\n StyledSearchBoxBody,\n StyledSearchBoxBodyContent,\n StyledSearchBoxBodyHead,\n StyledSearchBoxBodyHeadGroupName,\n} from './SearchBoxBody.styles';\n\nexport type SearchBoxBodyProps = {\n children: ReactNode;\n filterButtons?: IFilterButtonItem[];\n selectedGroups?: string[];\n height: number;\n maxHeight?: number;\n onGroupSelect?: (keys: string[]) => void;\n shouldHideFilterButtons?: boolean;\n shouldShow: boolean;\n};\n\nconst SearchBoxBody = forwardRef<HTMLDivElement, SearchBoxBodyProps>(\n (\n {\n filterButtons,\n selectedGroups,\n height,\n maxHeight = 300,\n children,\n shouldShow,\n onGroupSelect,\n shouldHideFilterButtons,\n },\n ref,\n ) => {\n const [hasScrolled, setHasScrolled] = useState(false);\n const [currentGroupName, setCurrentGroupName] = useState('');\n\n const headRef = useRef<HTMLDivElement>(null);\n\n const headSize = useElementSize(headRef);\n\n const uuid = useUuid();\n\n const headHeight = useMemo(\n () => (headSize?.height ? headSize.height + 15 : 0),\n [headSize?.height],\n );\n\n useEffect(() => {\n const element = document.getElementById(`searchBoxContent__${uuid}`);\n\n if (\n element &&\n ((selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1)\n ) {\n setCurrentGroupName(getCurrentGroupName(element));\n } else {\n setCurrentGroupName('');\n }\n }, [uuid, children, selectedGroups]);\n\n const handlePreventDefault = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const handleScroll = useCallback(\n (event: UIEvent) => {\n const { scrollTop } = event.target as HTMLDivElement;\n\n setHasScrolled(scrollTop > 1);\n\n if (\n (selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1\n ) {\n setCurrentGroupName(getCurrentGroupName(event.target as HTMLDivElement));\n }\n },\n [selectedGroups],\n );\n\n return useMemo(\n () => (\n <StyledSearchBoxBody\n onClick={handlePreventDefault}\n ref={ref}\n inert={!shouldShow ? 'true' : undefined}\n >\n {filterButtons && filterButtons?.length > 1 && (\n <StyledSearchBoxBodyHead\n ref={headRef}\n $hasScrolled={hasScrolled}\n $hasGroupName={!!currentGroupName}\n >\n {!shouldHideFilterButtons && (\n <FilterButtons\n items={filterButtons}\n size={0}\n onSelect={onGroupSelect}\n selectedItemIds={selectedGroups}\n />\n )}\n <StyledSearchBoxBodyHeadGroupName>\n {currentGroupName.replace('_', '')}\n </StyledSearchBoxBodyHeadGroupName>\n </StyledSearchBoxBodyHead>\n )}\n <StyledSearchBoxBodyContent\n $height={height}\n $headHeight={headHeight}\n $maxHeight={maxHeight}\n key=\"content\"\n id={`searchBoxContent__${uuid}`}\n className=\"chayns-scrollbar\"\n tabIndex={0}\n onScroll={handleScroll}\n >\n {children}\n </StyledSearchBoxBodyContent>\n </StyledSearchBoxBody>\n ),\n [\n children,\n currentGroupName,\n filterButtons,\n handleScroll,\n hasScrolled,\n headHeight,\n height,\n onGroupSelect,\n maxHeight,\n ref,\n selectedGroups,\n shouldHideFilterButtons,\n shouldShow,\n uuid,\n ],\n );\n },\n);\n\nSearchBoxBody.displayName = 'SearchBoxBody';\n\nexport default SearchBoxBody;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAWA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAEA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,cAAA,GAAAC,sBAAA,CAAAL,OAAA;AACA,IAAAM,cAAA,GAAAN,OAAA;AAKgC,SAAAK,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAR,wBAAAQ,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAZ,uBAAA,YAAAA,CAAAQ,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAahC,MAAMgB,aAAa,gBAAG,IAAAC,iBAAU,EAC5B,CACI;EACIC,aAAa;EACbC,cAAc;EACdC,MAAM;EACNC,SAAS,GAAG,GAAG;EACfC,QAAQ;EACRC,UAAU;EACVC,aAAa;EACbC;AACJ,CAAC,EACDC,GAAG,KACF;EACD,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACrD,MAAM,CAACC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG,IAAAF,eAAQ,EAAC,EAAE,CAAC;EAE5D,MAAMG,OAAO,GAAG,IAAAC,aAAM,EAAiB,IAAI,CAAC;EAE5C,MAAMC,QAAQ,GAAG,IAAAC,uBAAc,EAACH,OAAO,CAAC;EAExC,MAAMI,IAAI,GAAG,IAAAC,aAAO,EAAC,CAAC;EAEtB,MAAMC,UAAU,GAAG,IAAAC,cAAO,EACtB,MAAOL,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEd,MAAM,GAAGc,QAAQ,CAACd,MAAM,GAAG,EAAE,GAAG,CAAE,EACnD,CAACc,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEd,MAAM,CACrB,CAAC;EAED,IAAAoB,gBAAS,EAAC,MAAM;IACZ,MAAMC,OAAO,GAAGC,QAAQ,CAACC,cAAc,CAAC,qBAAqBP,IAAI,EAAE,CAAC;IAEpE,IACIK,OAAO,KACL,CAAAtB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEyB,MAAM,MAAK,CAAC,IAAIzB,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,IACzD,CAAAA,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEyB,MAAM,MAAK,CAAC,CAAC,EACnC;MACEb,mBAAmB,CAAC,IAAAc,8BAAmB,EAACJ,OAAO,CAAC,CAAC;IACrD,CAAC,MAAM;MACHV,mBAAmB,CAAC,EAAE,CAAC;IAC3B;EACJ,CAAC,EAAE,CAACK,IAAI,EAAEd,QAAQ,EAAEH,cAAc,CAAC,CAAC;EAEpC,MAAM2B,oBAAoB,GAAIC,KAAiB,IAAK;IAChDA,KAAK,CAACC,cAAc,CAAC,CAAC;IACtBD,KAAK,CAACE,eAAe,CAAC,CAAC;EAC3B,CAAC;EAED,MAAMC,YAAY,GAAG,IAAAC,kBAAW,EAC3BJ,KAAc,IAAK;IAChB,MAAM;MAAEK;IAAU,CAAC,GAAGL,KAAK,CAACM,MAAwB;IAEpDzB,cAAc,CAACwB,SAAS,GAAG,CAAC,CAAC;IAE7B,IACK,CAAAjC,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEyB,MAAM,MAAK,CAAC,IAAIzB,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,IAC5D,CAAAA,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEyB,MAAM,MAAK,CAAC,EAC9B;MACEb,mBAAmB,CAAC,IAAAc,8BAAmB,EAACE,KAAK,CAACM,MAAwB,CAAC,CAAC;IAC5E;EACJ,CAAC,EACD,CAAClC,cAAc,CACnB,CAAC;EAED,OAAO,IAAAoB,cAAO,EACV,mBACInD,MAAA,CAAAW,OAAA,CAAAuD,aAAA,CAAC1D,cAAA,CAAA2D,mBAAmB;IAChBC,OAAO,EAAEV,oBAAqB;IAC9BpB,GAAG,EAAEA,GAAI;IACT+B,KAAK,EAAE,CAAClC,UAAU,GAAG,MAAM,GAAGmC;EAAU,GAEvCxC,aAAa,IAAI,CAAAA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAE0B,MAAM,IAAG,CAAC,iBACvCxD,MAAA,CAAAW,OAAA,CAAAuD,aAAA,CAAC1D,cAAA,CAAA+D,uBAAuB;IACpBjC,GAAG,EAAEM,OAAQ;IACb4B,YAAY,EAAEjC,WAAY;IAC1BkC,aAAa,EAAE,CAAC,CAAC/B;EAAiB,GAEjC,CAACL,uBAAuB,iBACrBrC,MAAA,CAAAW,OAAA,CAAAuD,aAAA,CAAC5D,cAAA,CAAAK,OAAa;IACV+D,KAAK,EAAE5C,aAAc;IACrB6C,IAAI,EAAE,CAAE;IACRC,QAAQ,EAAExC,aAAc;IACxByC,eAAe,EAAE9C;EAAe,CACnC,CACJ,eACD/B,MAAA,CAAAW,OAAA,CAAAuD,aAAA,CAAC1D,cAAA,CAAAsE,gCAAgC,QAC5BpC,gBAAgB,CAACqC,OAAO,CAAC,GAAG,EAAE,EAAE,CACH,CACb,CAC5B,eACD/E,MAAA,CAAAW,OAAA,CAAAuD,aAAA,CAAC1D,cAAA,CAAAwE,0BAA0B;IACvBC,OAAO,EAAEjD,MAAO;IAChBkD,WAAW,EAAEhC,UAAW;IACxBiC,UAAU,EAAElD,SAAU;IACtBmD,GAAG,EAAC,SAAS;IACbC,EAAE,EAAE,qBAAqBrC,IAAI,EAAG;IAChCsC,SAAS,EAAC,kBAAkB;IAC5BC,QAAQ,EAAE,CAAE;IACZC,QAAQ,EAAE1B;EAAa,GAEtB5B,QACuB,CACX,CACxB,EACD,CACIA,QAAQ,EACRQ,gBAAgB,EAChBZ,aAAa,EACbgC,YAAY,EACZvB,WAAW,EACXW,UAAU,EACVlB,MAAM,EACNI,aAAa,EACbH,SAAS,EACTK,GAAG,EACHP,cAAc,EACdM,uBAAuB,EACvBF,UAAU,EACVa,IAAI,CAEZ,CAAC;AACL,CACJ,CAAC;AAEDpB,aAAa,CAAC6D,WAAW,GAAG,eAAe;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAhF,OAAA,GAE7BiB,aAAa","ignoreList":[]}