@chayns-components/core 5.2.8 → 5.3.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownBodyWrapper.js","names":["React","useCallback","useEffect","useRef","useState","StyledDropdownBodyWrapper","StyledDropdownBodyWrapperContent","createPortal","DropdownDirection","DelayedDropdownContent","useDropdown","useDropdownListener","ContainerAnchor","useContainer","DropdownBodyWrapper","anchorElement","bodyWidth","children","container","containerProp","contentHeight","direction","BOTTOM_RIGHT","maxHeight","minBodyWidth","onClose","onOutsideClick","onMeasure","shouldCaptureEvents","shouldShowDropdown","isInChaynsWalletRef","measuredContentHeight","setMeasuredContentHeight","measuredContentWidth","setMeasuredContentWidth","portal","setPortal","ref","shouldPreventClickRef","touchTimeoutRef","undefined","transform","width","coordinates","contentWidth","handleClose","handleClick","event","current","contains","target","preventDefault","stopPropagation","shouldPreventCloseOnClick","handleContentMeasure","measurements","height","handleTouchEnd","clearTimeout","handleTouchStart","window","setTimeout","onClick","onTouchEnd","onTouchStart","isBottomDirection","BOTTOM","BOTTOM_LEFT","includes","reservationWrapperElement","closest","RESERVATION_WRAPPER","availableHeight","innerHeight","getBoundingClientRect","bottom","additionalNeededSpace","style","marginBottom","createElement","shouldShowContent","$width","$minWidth","$maxHeight","$direction","displayName"],"sources":["../../../../src/components/dropdown-body-wrapper/DropdownBodyWrapper.tsx"],"sourcesContent":["import React, { FC, ReactNode, ReactPortal, useCallback, useEffect, useRef, useState } from 'react';\nimport {\n StyledDropdownBodyWrapper,\n StyledDropdownBodyWrapperContent,\n} from './DropdownBodyWrapper.styles';\nimport { createPortal } from 'react-dom';\nimport { DropdownDirection, DropdownMeasurements } from '../../types/dropdown';\nimport DelayedDropdownContent, {\n DelayedDropdownContentProps,\n} from './delayed-dropdown-content/DelayedDropdownContent';\nimport { useDropdown, useDropdownListener } from '../../hooks/dropdown';\nimport { ContainerAnchor, useContainer } from '../../hooks/container';\n\ninterface DropdownBodyWrapperProps {\n /**\n * The anchor element of the dropdown.\n */\n anchorElement: Element;\n /**\n * The width of the Body.\n */\n bodyWidth?: number;\n /**\n * The content of the dropdown body.\n */\n children: ReactNode;\n /**\n * The element where the content should be rendered via React Portal.\n */\n container?: Element;\n /**\n * The height of the content\n */\n contentHeight?: number;\n /**\n * The direction of the dropdown.\n */\n direction?: DropdownDirection;\n /**\n * The max height of the dropdown.\n */\n maxHeight?: number;\n /**\n * The minimum width of the body.\n */\n minBodyWidth?: number;\n /**\n * Function to be executed when the body is closed.\n */\n onClose?: VoidFunction;\n /**\n * Function to be executed when the user clicks outside the dropdown.\n * If the function returns `true`, the dropdown will not be closed.\n */\n onOutsideClick?: () => boolean | void;\n /**\n * Function to be executed when the content is measured.\n */\n onMeasure?: DelayedDropdownContentProps['onMeasure'];\n /**\n * Whether the dropdown should be visible.\n */\n shouldShowDropdown: boolean;\n /**\n * Whether the outside events should be captured.\n */\n shouldCaptureEvents?: boolean;\n}\n\nconst DropdownBodyWrapper: FC<DropdownBodyWrapperProps> = ({\n anchorElement,\n bodyWidth,\n children,\n container: containerProp,\n contentHeight = 0,\n direction = DropdownDirection.BOTTOM_RIGHT,\n maxHeight = 300,\n minBodyWidth = 0,\n onClose,\n onOutsideClick,\n onMeasure,\n shouldCaptureEvents = true,\n shouldShowDropdown,\n}) => {\n const isInChaynsWalletRef = useRef(false);\n\n const [measuredContentHeight, setMeasuredContentHeight] = useState<number>(0);\n const [measuredContentWidth, setMeasuredContentWidth] = useState<number>(0);\n const [portal, setPortal] = useState<ReactPortal>();\n\n const ref = useRef<HTMLDivElement>(null);\n const shouldPreventClickRef = useRef<boolean>(false);\n const touchTimeoutRef = useRef<number | undefined>(undefined);\n\n const container = useContainer({ anchorElement, container: containerProp });\n\n const { transform, width, coordinates } = useDropdown({\n anchorElement,\n container,\n contentHeight,\n contentWidth: bodyWidth ?? measuredContentWidth,\n direction,\n shouldShowDropdown,\n });\n\n const handleClose = useCallback(() => {\n if (typeof onClose === 'function') {\n onClose();\n }\n }, [onClose]);\n\n /**\n * This function closes the body\n */\n const handleClick = useCallback(\n (event: MouseEvent) => {\n if (\n ref.current &&\n shouldShowDropdown &&\n !anchorElement.contains(event.target as Node) &&\n !ref.current.contains(event.target as Node)\n ) {\n event.preventDefault();\n event.stopPropagation();\n\n const shouldPreventCloseOnClick = onOutsideClick?.() ?? false;\n\n if (!shouldPreventClickRef.current && !shouldPreventCloseOnClick) {\n handleClose();\n }\n }\n\n shouldPreventClickRef.current = false;\n },\n [anchorElement, handleClose, onOutsideClick, shouldShowDropdown],\n );\n\n const handleContentMeasure = useCallback(\n (measurements: DropdownMeasurements) => {\n // Measurements are only needed if the content is shown in the chayns wallet. To prevent\n // unnecessary renders, we only set the height if the content is shown in the wallet.\n if (isInChaynsWalletRef.current) {\n setMeasuredContentHeight(measurements.height);\n }\n\n setMeasuredContentWidth(measurements.width);\n\n if (typeof onMeasure === 'function') {\n onMeasure(measurements);\n }\n },\n [onMeasure],\n );\n\n const handleTouchEnd = useCallback(() => {\n clearTimeout(touchTimeoutRef.current);\n }, []);\n\n const handleTouchStart = useCallback(() => {\n touchTimeoutRef.current = window.setTimeout(() => {\n shouldPreventClickRef.current = true;\n }, 500);\n }, []);\n\n /**\n * This hook listens for clicks\n */\n useDropdownListener({\n onClick: handleClick,\n onClose: handleClose,\n onTouchEnd: handleTouchEnd,\n onTouchStart: handleTouchStart,\n shouldCaptureEvents,\n });\n\n useEffect(() => {\n const isBottomDirection = [\n DropdownDirection.BOTTOM,\n DropdownDirection.BOTTOM_LEFT,\n DropdownDirection.BOTTOM_RIGHT,\n ].includes(direction);\n\n const reservationWrapperElement = anchorElement.closest<HTMLDivElement>(\n ContainerAnchor.RESERVATION_WRAPPER,\n );\n\n isInChaynsWalletRef.current =\n !!(reservationWrapperElement && reservationWrapperElement.contains(anchorElement)) ||\n true;\n\n // This effect checks if additional space is needed to show dropdown content in chayns cards.\n if (\n isBottomDirection &&\n isInChaynsWalletRef.current &&\n measuredContentHeight > 0 &&\n reservationWrapperElement &&\n shouldShowDropdown\n ) {\n const availableHeight =\n window.innerHeight - anchorElement.getBoundingClientRect().bottom;\n\n // If the content height is greater than the available height, we need to add additional space.\n // This is to ensure that the dropdown content is fully visible. The 16 pixels are a buffer for shadows.\n const additionalNeededSpace = measuredContentHeight + 16 - availableHeight;\n\n if (additionalNeededSpace > 0) {\n // Add margin bottom to the reservation wrapper to ensure the dropdown content is fully visible.\n reservationWrapperElement.style.marginBottom = `${additionalNeededSpace}px`;\n } else {\n // Reset the margin bottom if no additional space is needed.\n reservationWrapperElement.style.marginBottom = '0px';\n }\n }\n\n if (isInChaynsWalletRef.current && reservationWrapperElement && !shouldShowDropdown) {\n // Reset the margin bottom when the dropdown is closed.\n reservationWrapperElement.style.marginBottom = '0px';\n }\n\n return () => {\n if (reservationWrapperElement) {\n reservationWrapperElement.style.marginBottom = '0px';\n }\n };\n }, [anchorElement, direction, measuredContentHeight, shouldShowDropdown]);\n\n useEffect(() => {\n if (!container) return;\n\n setPortal(() =>\n createPortal(\n <DelayedDropdownContent\n coordinates={coordinates}\n onMeasure={handleContentMeasure}\n shouldShowContent={shouldShowDropdown}\n transform={transform}\n >\n <StyledDropdownBodyWrapperContent\n $width={width}\n $minWidth={minBodyWidth}\n $maxHeight={maxHeight}\n $direction={direction}\n ref={ref}\n >\n {children}\n </StyledDropdownBodyWrapperContent>\n </DelayedDropdownContent>,\n container,\n ),\n );\n }, [\n children,\n container,\n coordinates,\n direction,\n handleContentMeasure,\n maxHeight,\n minBodyWidth,\n shouldShowDropdown,\n transform,\n width,\n ]);\n\n return <StyledDropdownBodyWrapper>{portal}</StyledDropdownBodyWrapper>;\n};\n\nDropdownBodyWrapper.displayName = 'DropdownBodyWrapper';\n\nexport default DropdownBodyWrapper;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DropdownBodyWrapper.js","names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","StyledDropdownBodyWrapper","StyledDropdownBodyWrapperContent","createPortal","DropdownDirection","DelayedDropdownContent","useDropdown","useDropdownListener","ContainerAnchor","useContainer","DropdownBodyWrapper","anchorElement","bodyWidth","children","container","containerProp","contentHeight","direction","BOTTOM_RIGHT","maxHeight","minBodyWidth","onClose","onOutsideClick","onMeasure","shouldCaptureEvents","shouldShowDropdown","ref","isInChaynsWalletRef","measuredContentHeight","setMeasuredContentHeight","measuredContentWidth","setMeasuredContentWidth","portal","setPortal","contentRef","shouldPreventClickRef","touchTimeoutRef","undefined","transform","width","coordinates","contentWidth","handleClose","handleClick","event","current","contains","target","preventDefault","stopPropagation","shouldPreventCloseOnClick","handleContentMeasure","measurements","height","handleTouchEnd","clearTimeout","handleTouchStart","window","setTimeout","onClick","onTouchEnd","onTouchStart","isBottomDirection","BOTTOM","BOTTOM_LEFT","includes","reservationWrapperElement","closest","RESERVATION_WRAPPER","availableHeight","innerHeight","getBoundingClientRect","bottom","additionalNeededSpace","style","marginBottom","createElement","shouldShowContent","$width","$minWidth","$maxHeight","$direction","className","tabIndex","displayName"],"sources":["../../../../src/components/dropdown-body-wrapper/DropdownBodyWrapper.tsx"],"sourcesContent":["import React, {\n forwardRef,\n ReactNode,\n ReactPortal,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport {\n StyledDropdownBodyWrapper,\n StyledDropdownBodyWrapperContent,\n} from './DropdownBodyWrapper.styles';\nimport { createPortal } from 'react-dom';\nimport { DropdownDirection, DropdownMeasurements } from '../../types/dropdown';\nimport DelayedDropdownContent, {\n DelayedDropdownContentProps,\n} from './delayed-dropdown-content/DelayedDropdownContent';\nimport { useDropdown, useDropdownListener } from '../../hooks/dropdown';\nimport { ContainerAnchor, useContainer } from '../../hooks/container';\n\ninterface DropdownBodyWrapperProps {\n /**\n * The anchor element of the dropdown.\n */\n anchorElement: Element;\n /**\n * The width of the Body.\n */\n bodyWidth?: number;\n /**\n * The content of the dropdown body.\n */\n children: ReactNode;\n /**\n * The element where the content should be rendered via React Portal.\n */\n container?: Element;\n /**\n * The height of the content\n */\n contentHeight?: number;\n /**\n * The direction of the dropdown.\n */\n direction?: DropdownDirection;\n /**\n * The max height of the dropdown.\n */\n maxHeight?: number;\n /**\n * The minimum width of the body.\n */\n minBodyWidth?: number;\n /**\n * Function to be executed when the body is closed.\n */\n onClose?: VoidFunction;\n /**\n * Function to be executed when the user clicks outside the dropdown.\n * If the function returns `true`, the dropdown will not be closed.\n */\n onOutsideClick?: () => boolean | void;\n /**\n * Function to be executed when the content is measured.\n */\n onMeasure?: DelayedDropdownContentProps['onMeasure'];\n /**\n * Whether the dropdown should be visible.\n */\n shouldShowDropdown: boolean;\n /**\n * Whether the outside events should be captured.\n */\n shouldCaptureEvents?: boolean;\n}\n\nconst DropdownBodyWrapper = forwardRef<HTMLDivElement, DropdownBodyWrapperProps>(\n (\n {\n anchorElement,\n bodyWidth,\n children,\n container: containerProp,\n contentHeight = 0,\n direction = DropdownDirection.BOTTOM_RIGHT,\n maxHeight,\n minBodyWidth = 0,\n onClose,\n onOutsideClick,\n onMeasure,\n shouldCaptureEvents = true,\n shouldShowDropdown,\n },\n ref,\n ) => {\n const isInChaynsWalletRef = useRef(false);\n\n const [measuredContentHeight, setMeasuredContentHeight] = useState<number>(0);\n const [measuredContentWidth, setMeasuredContentWidth] = useState<number>(0);\n const [portal, setPortal] = useState<ReactPortal>();\n\n const contentRef = useRef<HTMLDivElement>(null);\n const shouldPreventClickRef = useRef<boolean>(false);\n const touchTimeoutRef = useRef<number | undefined>(undefined);\n\n const container = useContainer({ anchorElement, container: containerProp });\n\n const { transform, width, coordinates } = useDropdown({\n anchorElement,\n container,\n contentHeight,\n contentWidth: bodyWidth ?? measuredContentWidth,\n direction,\n shouldShowDropdown,\n });\n\n const handleClose = useCallback(() => {\n if (typeof onClose === 'function') {\n onClose();\n }\n }, [onClose]);\n\n /**\n * This function closes the body\n */\n const handleClick = useCallback(\n (event: MouseEvent) => {\n if (\n contentRef.current &&\n shouldShowDropdown &&\n !anchorElement.contains(event.target as Node) &&\n !contentRef.current.contains(event.target as Node)\n ) {\n event.preventDefault();\n event.stopPropagation();\n\n const shouldPreventCloseOnClick = onOutsideClick?.() ?? false;\n\n if (!shouldPreventClickRef.current && !shouldPreventCloseOnClick) {\n handleClose();\n }\n }\n\n shouldPreventClickRef.current = false;\n },\n [anchorElement, handleClose, onOutsideClick, shouldShowDropdown],\n );\n\n const handleContentMeasure = useCallback(\n (measurements: DropdownMeasurements) => {\n // Measurements are only needed if the content is shown in the chayns wallet. To prevent\n // unnecessary renders, we only set the height if the content is shown in the wallet.\n if (isInChaynsWalletRef.current) {\n setMeasuredContentHeight(measurements.height);\n }\n\n setMeasuredContentWidth(measurements.width);\n\n if (typeof onMeasure === 'function') {\n onMeasure(measurements);\n }\n },\n [onMeasure],\n );\n\n const handleTouchEnd = useCallback(() => {\n clearTimeout(touchTimeoutRef.current);\n }, []);\n\n const handleTouchStart = useCallback(() => {\n touchTimeoutRef.current = window.setTimeout(() => {\n shouldPreventClickRef.current = true;\n }, 500);\n }, []);\n\n /**\n * This hook listens for clicks\n */\n useDropdownListener({\n onClick: handleClick,\n onClose: handleClose,\n onTouchEnd: handleTouchEnd,\n onTouchStart: handleTouchStart,\n shouldCaptureEvents,\n });\n\n useEffect(() => {\n const isBottomDirection = [\n DropdownDirection.BOTTOM,\n DropdownDirection.BOTTOM_LEFT,\n DropdownDirection.BOTTOM_RIGHT,\n ].includes(direction);\n\n const reservationWrapperElement = anchorElement.closest<HTMLDivElement>(\n ContainerAnchor.RESERVATION_WRAPPER,\n );\n\n isInChaynsWalletRef.current =\n !!(\n reservationWrapperElement && reservationWrapperElement.contains(anchorElement)\n ) || true;\n\n // This effect checks if additional space is needed to show dropdown content in chayns cards.\n if (\n isBottomDirection &&\n isInChaynsWalletRef.current &&\n measuredContentHeight > 0 &&\n reservationWrapperElement &&\n shouldShowDropdown\n ) {\n const availableHeight =\n window.innerHeight - anchorElement.getBoundingClientRect().bottom;\n\n // If the content height is greater than the available height, we need to add additional space.\n // This is to ensure that the dropdown content is fully visible. The 16 pixels are a buffer for shadows.\n const additionalNeededSpace = measuredContentHeight + 16 - availableHeight;\n\n if (additionalNeededSpace > 0) {\n // Add margin bottom to the reservation wrapper to ensure the dropdown content is fully visible.\n reservationWrapperElement.style.marginBottom = `${additionalNeededSpace}px`;\n } else {\n // Reset the margin bottom if no additional space is needed.\n reservationWrapperElement.style.marginBottom = '0px';\n }\n }\n\n if (isInChaynsWalletRef.current && reservationWrapperElement && !shouldShowDropdown) {\n // Reset the margin bottom when the dropdown is closed.\n reservationWrapperElement.style.marginBottom = '0px';\n }\n\n return () => {\n if (reservationWrapperElement) {\n reservationWrapperElement.style.marginBottom = '0px';\n }\n };\n }, [anchorElement, direction, measuredContentHeight, shouldShowDropdown]);\n\n useEffect(() => {\n if (!container) return;\n\n setPortal(() =>\n createPortal(\n <DelayedDropdownContent\n coordinates={coordinates}\n onMeasure={handleContentMeasure}\n shouldShowContent={shouldShowDropdown}\n transform={transform}\n >\n <StyledDropdownBodyWrapperContent\n $width={width}\n $minWidth={minBodyWidth}\n $maxHeight={maxHeight}\n $direction={direction}\n ref={contentRef}\n className={\n typeof maxHeight === 'number' ? 'chayns-scrollbar' : undefined\n }\n tabIndex={0}\n >\n {children}\n </StyledDropdownBodyWrapperContent>\n </DelayedDropdownContent>,\n container,\n ),\n );\n }, [\n children,\n container,\n coordinates,\n direction,\n handleContentMeasure,\n maxHeight,\n minBodyWidth,\n shouldShowDropdown,\n transform,\n width,\n ]);\n\n useImperativeHandle(ref, () => contentRef.current!, []);\n\n return <StyledDropdownBodyWrapper>{portal}</StyledDropdownBodyWrapper>;\n },\n);\n\nDropdownBodyWrapper.displayName = 'DropdownBodyWrapper';\n\nexport default DropdownBodyWrapper;\n"],"mappings":"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","ignoreList":[]}
@@ -5,19 +5,25 @@ export const StyledDropdownBodyWrapperContent = styled.div`
5
5
  width: ${({
6
6
  $width
7
7
  }) => $width}px;
8
- max-height: ${({
9
- $maxHeight
10
- }) => $maxHeight}px;
11
8
  min-width: ${({
12
9
  $minWidth
13
10
  }) => $minWidth}px;
14
11
 
12
+ overflow: hidden;
13
+
14
+ ${({
15
+ $maxHeight
16
+ }) => typeof $maxHeight === 'number' && css`
17
+ max-height: ${$maxHeight}px;
18
+ overflow-y: auto;
19
+ overflow-x: hidden;
20
+ `}
21
+
15
22
  // Basic styles
16
23
  background: ${({
17
24
  theme
18
25
  }) => theme['000']};
19
26
  border: 1px solid rgba(160, 160, 160, 0.3);
20
- overflow: hidden;
21
27
  box-shadow: 0 0 0 1px
22
28
  rgba(${({
23
29
  theme
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownBodyWrapper.styles.js","names":["styled","css","DropdownDirection","StyledDropdownBodyWrapper","div","StyledDropdownBodyWrapperContent","$width","$maxHeight","$minWidth","theme","$direction","BOTTOM","BOTTOM_LEFT","BOTTOM_RIGHT","includes"],"sources":["../../../../src/components/dropdown-body-wrapper/DropdownBodyWrapper.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { WithTheme } from '../color-scheme-provider/ColorSchemeProvider';\nimport { DropdownDirection } from '../../types/dropdown';\n\nexport const StyledDropdownBodyWrapper = styled.div``;\n\ntype StyledDropdownBodyWrapperContentProps = WithTheme<{\n $width: number;\n $maxHeight: number;\n $minWidth: number;\n $direction: DropdownDirection;\n}>;\n\nexport const StyledDropdownBodyWrapperContent = styled.div<StyledDropdownBodyWrapperContentProps>`\n width: ${({ $width }) => $width}px;\n max-height: ${({ $maxHeight }) => $maxHeight}px;\n min-width: ${({ $minWidth }) => $minWidth}px;\n\n // Basic styles\n background: ${({ theme }: StyledDropdownBodyWrapperContentProps) => theme['000']};\n border: 1px solid rgba(160, 160, 160, 0.3);\n overflow: hidden;\n box-shadow: 0 0 0 1px\n rgba(${({ theme }: StyledDropdownBodyWrapperContentProps) => theme['009-rgb']}, 0.08) inset;\n\n ${({ $direction }) => {\n if (\n [\n DropdownDirection.BOTTOM,\n DropdownDirection.BOTTOM_LEFT,\n DropdownDirection.BOTTOM_RIGHT,\n ].includes($direction)\n ) {\n return css`\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.2);\n `;\n }\n\n return css`\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n box-shadow: 0 -3px 10px 0 rgba(0, 0, 0, 0.2);\n `;\n }}\n`;\n"],"mappings":"AAAA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAE/C,SAASC,iBAAiB,QAAQ,sBAAsB;AAExD,OAAO,MAAMC,yBAAyB,GAAGH,MAAM,CAACI,GAAG,EAAE;AASrD,OAAO,MAAMC,gCAAgC,GAAGL,MAAM,CAACI,GAA0C;AACjG,aAAa,CAAC;EAAEE;AAAO,CAAC,KAAKA,MAAM;AACnC,kBAAkB,CAAC;EAAEC;AAAW,CAAC,KAAKA,UAAU;AAChD,iBAAiB,CAAC;EAAEC;AAAU,CAAC,KAAKA,SAAS;AAC7C;AACA;AACA,kBAAkB,CAAC;EAAEC;AAA6C,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AACpF;AACA;AACA;AACA,eAAe,CAAC;EAAEA;AAA6C,CAAC,KAAKA,KAAK,CAAC,SAAS,CAAC;AACrF;AACA,MAAM,CAAC;EAAEC;AAAW,CAAC,KAAK;EAClB,IACI,CACIR,iBAAiB,CAACS,MAAM,EACxBT,iBAAiB,CAACU,WAAW,EAC7BV,iBAAiB,CAACW,YAAY,CACjC,CAACC,QAAQ,CAACJ,UAAU,CAAC,EACxB;IACE,OAAOT,GAAG;AACtB;AACA;AACA;AACA,aAAa;EACL;EAEA,OAAOA,GAAG;AAClB;AACA;AACA;AACA,SAAS;AACL,CAAC;AACL,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"DropdownBodyWrapper.styles.js","names":["styled","css","DropdownDirection","StyledDropdownBodyWrapper","div","StyledDropdownBodyWrapperContent","$width","$minWidth","$maxHeight","theme","$direction","BOTTOM","BOTTOM_LEFT","BOTTOM_RIGHT","includes"],"sources":["../../../../src/components/dropdown-body-wrapper/DropdownBodyWrapper.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { WithTheme } from '../color-scheme-provider/ColorSchemeProvider';\nimport { DropdownDirection } from '../../types/dropdown';\n\nexport const StyledDropdownBodyWrapper = styled.div``;\n\ntype StyledDropdownBodyWrapperContentProps = WithTheme<{\n $width: number;\n $maxHeight?: number;\n $minWidth: number;\n $direction: DropdownDirection;\n}>;\n\nexport const StyledDropdownBodyWrapperContent = styled.div<StyledDropdownBodyWrapperContentProps>`\n width: ${({ $width }) => $width}px;\n min-width: ${({ $minWidth }) => $minWidth}px;\n\n overflow: hidden;\n\n ${({ $maxHeight }) =>\n typeof $maxHeight === 'number' &&\n css`\n max-height: ${$maxHeight}px;\n overflow-y: auto;\n overflow-x: hidden;\n `}\n\n // Basic styles\n background: ${({ theme }: StyledDropdownBodyWrapperContentProps) => theme['000']};\n border: 1px solid rgba(160, 160, 160, 0.3);\n box-shadow: 0 0 0 1px\n rgba(${({ theme }: StyledDropdownBodyWrapperContentProps) => theme['009-rgb']}, 0.08) inset;\n\n ${({ $direction }) => {\n if (\n [\n DropdownDirection.BOTTOM,\n DropdownDirection.BOTTOM_LEFT,\n DropdownDirection.BOTTOM_RIGHT,\n ].includes($direction)\n ) {\n return css`\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.2);\n `;\n }\n\n return css`\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n box-shadow: 0 -3px 10px 0 rgba(0, 0, 0, 0.2);\n `;\n }}\n`;\n"],"mappings":"AAAA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAE/C,SAASC,iBAAiB,QAAQ,sBAAsB;AAExD,OAAO,MAAMC,yBAAyB,GAAGH,MAAM,CAACI,GAAG,EAAE;AASrD,OAAO,MAAMC,gCAAgC,GAAGL,MAAM,CAACI,GAA0C;AACjG,aAAa,CAAC;EAAEE;AAAO,CAAC,KAAKA,MAAM;AACnC,iBAAiB,CAAC;EAAEC;AAAU,CAAC,KAAKA,SAAS;AAC7C;AACA;AACA;AACA,MAAM,CAAC;EAAEC;AAAW,CAAC,KACb,OAAOA,UAAU,KAAK,QAAQ,IAC9BP,GAAG;AACX,0BAA0BO,UAAU;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,CAAC;EAAEC;AAA6C,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AACpF;AACA;AACA,eAAe,CAAC;EAAEA;AAA6C,CAAC,KAAKA,KAAK,CAAC,SAAS,CAAC;AACrF;AACA,MAAM,CAAC;EAAEC;AAAW,CAAC,KAAK;EAClB,IACI,CACIR,iBAAiB,CAACS,MAAM,EACxBT,iBAAiB,CAACU,WAAW,EAC7BV,iBAAiB,CAACW,YAAY,CACjC,CAACC,QAAQ,CAACJ,UAAU,CAAC,EACxB;IACE,OAAOT,GAAG;AACtB;AACA;AACA;AACA,aAAa;EACL;EAEA,OAAOA,GAAG;AAClB;AACA;AACA;AACA,SAAS;AACL,CAAC;AACL,CAAC","ignoreList":[]}
@@ -565,7 +565,6 @@ const SearchBox = /*#__PURE__*/forwardRef(({
565
565
  anchorElement: boxRef.current,
566
566
  container: container,
567
567
  direction: dropdownDirection,
568
- maxHeight: 300,
569
568
  onClose: handleClose,
570
569
  onOutsideClick: handleDropdownOutsideClick,
571
570
  shouldShowDropdown: shouldShowDropdown
@@ -1 +1 @@
1
- {"version":3,"file":"SearchBox.js","names":["useDevice","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","useTheme","calculateContentHeight","searchList","Icon","Input","GroupName","SearchBoxBody","SearchBoxItem","StyledSearchBoxItemImage","StyledSearchBox","StyledSearchBoxHintText","StyledSearchBoxIcon","StyledSearchBoxLeftWrapper","useUuid","DropdownBodyWrapper","TagInput","SearchBox","container","customFilter","dropdownDirection","isInvalid","leftIcons","lists","onBlur","onChange","onKeyDown","onSelect","placeholder","presetValue","hintText","selectedId","shouldAddInputToList","shouldHideFilterButtons","shouldShowContentOnEmptyInput","shouldShowRoundImage","shouldShowToggleIcon","tagInputSettings","ref","matchingListsItems","setMatchingListsItems","selectedImage","setSelectedImage","value","setValue","height","setHeight","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","shouldShowBody","setShouldShowBody","uuid","boxRef","contentRef","inputRef","tagInputRef","hasFocusRef","isAnimatingRef","shouldShowPresetValue","theme","isTouch","filterButtons","items","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","searchString","undefined","filteredMatchingListItems","map","filter","item","handleOpen","handleClose","handleFilterButtonsGroupSelect","keys","textArray","selectedItem","find","imageUrl","createElement","src","$shouldShowRoundImage","current","handleFocus","toLowerCase","handleClick","rightElement","onClick","icons","color","leftElement","handleChange","event","filteredLists","target","handleBlur","handleDropdownOutsideClick","blur","handleSelect","newItem","replace","resetValue","content","index","key","name","listIndex","tabIndex","handleKeyDown","e","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","preventDefault","newIndex","prevElement","newElement","stopPropagation","element","textContent","attributes","nodeValue","newId","document","addEventListener","removeEventListener","handleKeyPress","keyCode","clear","shouldShowDropdown","trim","onAdd","onFocus","onRemove","shouldAllowMultiple","shouldPreventEnter","tags","anchorElement","direction","maxHeight","onClose","onOutsideClick","shouldShow","onGroupSelect","selectedGroups","displayName"],"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 maxHeight={300}\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":"AAAA,SAASA,SAAS,QAAQ,YAAY;AACtC,OAAOC,KAAK,IAMRC,UAAU,EAGVC,WAAW,EACXC,SAAS,EACTC,mBAAmB,EACnBC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACL,OAAO;AACd,SAASC,QAAQ,QAAQ,mBAAmB;AAG5C,SAASC,sBAAsB,QAAQ,uBAAuB;AAC9D,SAASC,UAAU,QAAQ,uBAAuB;AAElD,OAAOC,IAAI,MAAM,cAAc;AAC/B,OAAOC,KAAK,MAAM,gBAAgB;AAClC,OAAOC,SAAS,MAAM,wBAAwB;AAC9C,OAAOC,aAAa,MAAM,iCAAiC;AAC3D,OAAOC,aAAa,MAAM,iCAAiC;AAC3D,SAASC,wBAAwB,QAAQ,wCAAwC;AACjF,SACIC,eAAe,EACfC,uBAAuB,EACvBC,mBAAmB,EACnBC,0BAA0B,QACvB,oBAAoB;AAC3B,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,OAAOC,mBAAmB,MAAM,8CAA8C;AAC9E,OAAOC,QAAQ,MAAsC,uBAAuB;AAiG5E,MAAMC,SAA6B,gBAAGvB,UAAU,CAC5C,CACI;EACIwB,SAAS;EACTC,YAAY;EACZC,iBAAiB;EACjBC,SAAS,GAAG,KAAK;EACjBC,SAAS;EACTC,KAAK;EACLC,MAAM;EACNC,QAAQ;EACRC,SAAS;EACTC,QAAQ;EACRC,WAAW;EACXC,WAAW;EACXC,QAAQ;EACRC,UAAU;EACVC,oBAAoB,GAAG,IAAI;EAC3BC,uBAAuB,GAAG,KAAK;EAC/BC,6BAA6B,GAAG,IAAI;EACpCC,oBAAoB;EACpBC,oBAAoB,GAAG,KAAK;EAC5BC;AACJ,CAAC,EACDC,GAAG,KACF;EACD,MAAM,CAACC,kBAAkB,EAAEC,qBAAqB,CAAC,GAAGxC,QAAQ,CAAoBuB,KAAK,CAAC;EACtF,MAAM,CAACkB,aAAa,EAAEC,gBAAgB,CAAC,GAAG1C,QAAQ,CAAe,CAAC;EAClE,MAAM,CAAC2C,KAAK,EAAEC,QAAQ,CAAC,GAAG5C,QAAQ,CAC9B,OAAO6B,WAAW,KAAK,QAAQ,IAAIA,WAAW,KAAK,EAAE,GAAGA,WAAW,GAAG,EAC1E,CAAC;EACD,MAAM,CAACgB,MAAM,EAAEC,SAAS,CAAC,GAAG9C,QAAQ,CAAS,CAAC,CAAC;EAC/C,MAAM,CAAC+C,YAAY,EAAEC,eAAe,CAAC,GAAGhD,QAAQ,CAAgB,IAAI,CAAC;EACrE,MAAM,CAACiD,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGlD,QAAQ,CAAUuB,KAAK,CAAC4B,MAAM,GAAG,CAAC,CAAC;EACrF,MAAM,CAACC,qBAAqB,EAAEC,wBAAwB,CAAC,GAAGrD,QAAQ,CAAY,CAAC;EAC/E,MAAM,CAACsD,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGvD,QAAQ,CAAS,EAAE,CAAC;EACpE,MAAM,CAACwD,MAAM,EAAEC,SAAS,CAAC,GAAGzD,QAAQ,CAAW,CAAC,KAAK,CAAC,CAAC;EACvD,MAAM,CAAC0D,cAAc,EAAEC,iBAAiB,CAAC,GAAG3D,QAAQ,CAAC,KAAK,CAAC;EAE3D,MAAM4D,IAAI,GAAG9C,OAAO,CAAC,CAAC;EAEtB,MAAM+C,MAAM,GAAG9D,MAAM,CAAiB,IAAI,CAAC;EAC3C,MAAM+D,UAAU,GAAG/D,MAAM,CAAiB,IAAI,CAAC;EAC/C,MAAMgE,QAAQ,GAAGhE,MAAM,CAA0B,IAAI,CAAC;EACtD,MAAMiE,WAAW,GAAGjE,MAAM,CAAc,IAAI,CAAC;EAE7C,MAAMkE,WAAW,GAAGlE,MAAM,CAAU,KAAK,CAAC;EAC1C,MAAMmE,cAAc,GAAGnE,MAAM,CAAU,KAAK,CAAC;EAC7C,MAAMoE,qBAAqB,GAAGpE,MAAM,CAChC,OAAO8B,WAAW,KAAK,QAAQ,IAAIA,WAAW,KAAK,EACvD,CAAC;EAED,MAAMuC,KAAK,GAAGnE,QAAQ,CAAC,CAAU;EAEjC,MAAM;IAAEoE;EAAQ,CAAC,GAAG7E,SAAS,CAAC,CAAC;;EAE/B;AACR;AACA;EACQI,SAAS,CAAC,MAAM;IACZsD,oBAAoB,CAAC3B,KAAK,CAAC4B,MAAM,GAAG,CAAC,CAAC;EAC1C,CAAC,EAAE,CAAC5B,KAAK,CAAC,CAAC;EAEX,MAAM+C,aAAa,GAAGxE,OAAO,CAAC,MAAM;IAChC,MAAMyE,KAA0B,GAAG,EAAE;IAErC,IAAIhD,KAAK,CAAC4B,MAAM,IAAI,CAAC,EAAE;MACnB,OAAOoB,KAAK;IAChB;IAEAhD,KAAK,CAACiD,OAAO,CAAC,CAAC;MAAEC;IAAU,CAAC,KAAK;MAC7B,IAAIA,SAAS,EAAE;QACXF,KAAK,CAACG,IAAI,CAAC;UACPC,EAAE,EAAEF,SAAS;UACbG,IAAI,EAAEH;QACV,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAEF,OAAOF,KAAK;EAChB,CAAC,EAAE,CAAChD,KAAK,CAAC,CAAC;;EAEX;AACR;AACA;EACQ,MAAMsD,UAAU,GAAG/E,OAAO,CAAC,MAAM;IAC7B,IAAIgF,QAA2B,GAAG,EAAE;IAEpC,IAAItB,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;MACrBsB,QAAQ,GAAGvD,KAAK;IACpB,CAAC,MAAM;MACHA,KAAK,CAACiD,OAAO,CAAEO,IAAI,IAAK;QACpB,IAAIA,IAAI,CAACN,SAAS,IAAIjB,MAAM,CAACwB,QAAQ,CAACD,IAAI,CAACN,SAAS,CAAC,EAAE;UACnDK,QAAQ,CAACJ,IAAI,CAACK,IAAI,CAAC;QACvB;MACJ,CAAC,CAAC;IACN;IAEA,MAAME,gBAAmC,GAAG,EAAE;IAE9CH,QAAQ,CAACN,OAAO,CAAC,CAAC;MAAEO,IAAI;MAAEN;IAAU,CAAC,KAAK;MACtC,MAAMS,OAAO,GAAG/E,UAAU,CAAC;QAAEoE,KAAK,EAAEQ,IAAI;QAAEI,YAAY,EAAExC;MAAM,CAAC,CAAC;MAEhE,IAAIuC,OAAO,CAAC/B,MAAM,GAAG,CAAC,EAAE;QACpB8B,gBAAgB,CAACP,IAAI,CAAC;UAClBD,SAAS;UACTM,IAAI,EAAEG;QACV,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAEF,IAAID,gBAAgB,CAAC9B,MAAM,KAAK,CAAC,IAAInB,oBAAoB,EAAE;MACvDiD,gBAAgB,CAACP,IAAI,CAAC;QAClBD,SAAS,EAAEW,SAAS;QACpBL,IAAI,EAAE;MACV,CAAC,CAAC;IACN;IAEA,MAAMM,yBAAyB,GAAGJ,gBAAgB,CAACK,GAAG,CAAC,CAAC;MAAEP,IAAI;MAAEN;IAAU,CAAC,MAAM;MAC7EA,SAAS;MACTM,IAAI,EAAEA,IAAI,CAACQ,MAAM,CAAEC,IAAI,IAAK;QACxB,IAAI,OAAOrE,YAAY,KAAK,UAAU,EAAE;UACpC,OAAOA,YAAY,CAACqE,IAAI,CAAC;QAC7B;QACA,OAAO,EAAEP,gBAAgB,CAAC9B,MAAM,KAAK,CAAC,IAAIqC,IAAI,CAACZ,IAAI,KAAKjC,KAAK,CAAC;MAClE,CAAC;IACL,CAAC,CAAC,CAAC;IAEHH,qBAAqB,CAAC6C,yBAAyB,CAAC;IAEhD,OAAOP,QAAQ;EACnB,CAAC,EAAE,CAACtB,MAAM,EAAEjC,KAAK,EAAEJ,YAAY,EAAEa,oBAAoB,EAAEW,KAAK,CAAC,CAAC;EAE9D,MAAM8C,UAAU,GAAG9F,WAAW,CAAC,MAAM;IACjCgE,iBAAiB,CAAC,IAAI,CAAC;EAC3B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM+B,WAAW,GAAG/F,WAAW,CAAC,MAAM;IAClCgE,iBAAiB,CAAC,KAAK,CAAC;EAC5B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMgC,8BAA8B,GAAIC,IAAc,IAAK;IACvDnC,SAAS,CAACmC,IAAI,CAACzC,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAGyC,IAAI,CAAC;EACjD,CAAC;;EAED;AACR;AACA;EACQhG,SAAS,CAAC,MAAM;IACZ,MAAMiG,SAAmB,GAAG,EAAE;IAE9BhB,UAAU,CAACL,OAAO,CAAC,CAAC;MAAEO,IAAI;MAAEN;IAAU,CAAC,KAAK;MACxCM,IAAI,CAACP,OAAO,CAAC,CAAC;QAAEI;MAAK,CAAC,KAAKiB,SAAS,CAACnB,IAAI,CAACE,IAAI,CAAC,CAAC;MAChD,IAAI,CAACH,SAAS,EAAE;QACZ;MACJ;MACAoB,SAAS,CAACnB,IAAI,CAACD,SAAS,CAAC;IAC7B,CAAC,CAAC;IAEF,IAAIzC,oBAAoB,IAAIsB,gBAAgB,KAAK,EAAE,EAAE;MACjDuC,SAAS,CAACnB,IAAI,CAACpB,gBAAgB,CAAC;IACpC;IAEAR,SAAS,CAAC5C,sBAAsB,CAAC2F,SAAS,CAAC,CAAC;EAChD,CAAC,EAAE,CAACvC,gBAAgB,EAAEuB,UAAU,EAAEjD,WAAW,EAAEI,oBAAoB,CAAC,CAAC;EAErEpC,SAAS,CAAC,MAAM;IACZ,IAAImC,UAAU,EAAE;MACZ8C,UAAU,CAACL,OAAO,CAAC,CAAC;QAAEO;MAAK,CAAC,KAAK;QAC7B,MAAMe,YAAY,GAAGf,IAAI,CAACgB,IAAI,CAAC,CAAC;UAAEpB;QAAG,CAAC,KAAKA,EAAE,KAAK5C,UAAU,CAAC;QAC7D,IAAI+D,YAAY,EAAE;UACdlD,QAAQ,CAACkD,YAAY,CAAClB,IAAI,CAAC;UAE3B,IAAIkB,YAAY,CAACE,QAAQ,EAAE;YACvBtD,gBAAgB,cACZjD,KAAA,CAAAwG,aAAA,CAACxF,wBAAwB;cACrByF,GAAG,EAAEJ,YAAY,CAACE,QAAS;cAC3BG,qBAAqB,EAAEhE;YAAqB,CAC/C,CACL,CAAC;UACL;QACJ;MACJ,CAAC,CAAC;IACN;EACJ,CAAC,EAAE,CAAC0C,UAAU,EAAE9C,UAAU,EAAEI,oBAAoB,CAAC,CAAC;;EAElD;AACR;AACA;AACA;EACQvC,SAAS,CAAC,MAAM;IACZ,IAAI,CAACmC,UAAU,IAAI,CAACoC,qBAAqB,CAACiC,OAAO,EAAE;MAC/CxD,QAAQ,CAAC,EAAE,CAAC;IAChB;EACJ,CAAC,EAAE,CAACb,UAAU,CAAC,CAAC;EAEhBnC,SAAS,CAAC,MAAM;IACZsE,cAAc,CAACkC,OAAO,GAAG1C,cAAc;EAC3C,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAEpB9D,SAAS,CAAC,MAAM;IACZ,IACI,CAAC2C,kBAAkB,CAACY,MAAM,KAAK,CAAC,IAAIrB,QAAQ,KAC5C,CAACoC,cAAc,CAACkC,OAAO,IACvBnC,WAAW,CAACmC,OAAO,EACrB;MACEX,UAAU,CAAC,CAAC;IAChB;EACJ,CAAC,EAAE,CAACA,UAAU,EAAE3D,QAAQ,EAAES,kBAAkB,CAACY,MAAM,CAAC,CAAC;;EAErD;AACR;AACA;AACA;EACQ,MAAMkD,WAAW,GAAG1G,WAAW,CAAC,MAAM;IAClCsE,WAAW,CAACmC,OAAO,GAAG,IAAI;IAE1B,IAAIlE,6BAA6B,EAAE;MAC/B,MAAM+C,gBAAmC,GAAG,EAAE;MAE9CJ,UAAU,CAACL,OAAO,CAAC,CAAC;QAAEO,IAAI;QAAEN;MAAU,CAAC,KAAK;QACxC,MAAMS,OAAO,GAAG/E,UAAU,CAAC;UAAEoE,KAAK,EAAEQ,IAAI;UAAEI,YAAY,EAAExC;QAAM,CAAC,CAAC;QAEhE,IAAIuC,OAAO,CAAC/B,MAAM,GAAG,CAAC,EAAE;UACpB8B,gBAAgB,CAACP,IAAI,CAAC;YAClBD,SAAS;YACTM,IAAI,EAAEG;UACV,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;MAEF,IAAID,gBAAgB,CAAC9B,MAAM,KAAK,CAAC,IAAInB,oBAAoB,EAAE;QACvDiD,gBAAgB,CAACP,IAAI,CAAC;UAClBD,SAAS,EAAEW,SAAS;UACpBL,IAAI,EAAE;QACV,CAAC,CAAC;MACN;MAEA,MAAMM,yBAAyB,GAAGJ,gBAAgB,CAACK,GAAG,CAAC,CAAC;QAAEP,IAAI;QAAEN;MAAU,CAAC,MAAM;QAC7EA,SAAS;QACTM,IAAI,EAAEA,IAAI,CAACQ,MAAM,CAAEC,IAAI,IAAK;UACxB,IAAI,OAAOrE,YAAY,KAAK,UAAU,EAAE;YACpC,OAAOA,YAAY,CAACqE,IAAI,CAAC;UAC7B;UACA,OAAO,EAAEP,gBAAgB,CAAC9B,MAAM,KAAK,CAAC,IAAIqC,IAAI,CAACZ,IAAI,KAAKjC,KAAK,CAAC;QAClE,CAAC;MACL,CAAC,CAAC,CAAC;MAEHH,qBAAqB,CAAC6C,yBAAyB,CAAC;MAEhD,IAAIA,yBAAyB,CAAClC,MAAM,KAAK,CAAC,IAAIrB,QAAQ,EAAE;QACpD2D,UAAU,CAAC,CAAC;MAChB;IACJ;EACJ,CAAC,EAAE,CACCvD,6BAA6B,EAC7B2C,UAAU,EACV7C,oBAAoB,EACpBF,QAAQ,EACRa,KAAK,EACLxB,YAAY,EACZsE,UAAU,CACb,CAAC;;EAEF;AACR;AACA;;EAEQ7F,SAAS,CAAC,MAAM;IACZ,MAAMqF,gBAAmC,GAAG,EAAE;IAE9CJ,UAAU,CAACL,OAAO,CAAC,CAAC;MAAEO,IAAI;MAAEN;IAAU,CAAC,KAAK;MACxC,MAAMS,OAAO,GAAG/E,UAAU,CAAC;QAAEoE,KAAK,EAAEQ,IAAI;QAAEI,YAAY,EAAExC;MAAM,CAAC,CAAC;MAEhE,IAAIuC,OAAO,CAAC/B,MAAM,GAAG,CAAC,EAAE;QACpB8B,gBAAgB,CAACP,IAAI,CAAC;UAClBD,SAAS;UACTM,IAAI,EAAEG;QACV,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAEF,IAAID,gBAAgB,CAAC9B,MAAM,KAAK,CAAC,IAAInB,oBAAoB,EAAE;MACvDiD,gBAAgB,CAACP,IAAI,CAAC;QAClBD,SAAS,EAAEW,SAAS;QACpBL,IAAI,EAAE;MACV,CAAC,CAAC;IACN;IAEA,IAAI/C,oBAAoB,IAAIsB,gBAAgB,KAAK,EAAE,EAAE;MACjD2B,gBAAgB,CAACT,OAAO,CAAC,CAAC;QAAEO;MAAK,CAAC,KAAK;QACnCA,IAAI,CAACP,OAAO,CAAC,CAAC;UAAEI;QAAK,CAAC,KAAK;UACvB,IAAIA,IAAI,CAAC0B,WAAW,CAAC,CAAC,KAAKhD,gBAAgB,CAACgD,WAAW,CAAC,CAAC,EAAE;YACvD/C,mBAAmB,CAAC,EAAE,CAAC;UAC3B;QACJ,CAAC,CAAC;MACN,CAAC,CAAC;IACN;EACJ,CAAC,EAAE,CACCD,gBAAgB,EAChBuB,UAAU,EACV7C,oBAAoB,EACpBE,6BAA6B,EAC7BS,KAAK,CACR,CAAC;EAEF,MAAM4D,WAAW,GAAG5G,WAAW,CAAC,MAAM;IAClC,IAAI+D,cAAc,EAAE;MAChBgC,WAAW,CAAC,CAAC;IACjB,CAAC,MAAM;MACHD,UAAU,CAAC,CAAC;IAChB;EACJ,CAAC,EAAE,CAACC,WAAW,EAAED,UAAU,EAAE/B,cAAc,CAAC,CAAC;EAE7C,MAAM8C,YAAY,GAAG1G,OAAO,CAAC,MAAM;IAC/B,IAAI,CAACsC,oBAAoB,EAAE;MACvB,OAAOgD,SAAS;IACpB;IAEA,oBACI3F,KAAA,CAAAwG,aAAA,CAACrF,mBAAmB;MAAC6F,OAAO,EAAEF;IAAY,gBACtC9G,KAAA,CAAAwG,aAAA,CAAC7F,IAAI;MAACsG,KAAK,EAAE,CAAC,oBAAoB,CAAE;MAACC,KAAK,EAAEvC,KAAK,CAAC,KAAK;IAAY,CAAE,CACpD,CAAC;EAE9B,CAAC,EAAE,CAACmC,WAAW,EAAEnE,oBAAoB,EAAEgC,KAAK,CAAC,CAAC;EAE9C,MAAMwC,WAAW,GAAG9G,OAAO,CACvB,MACI,CAACwB,SAAS,IAAImB,aAAa,kBACvBhD,KAAA,CAAAwG,aAAA,CAACpF,0BAA0B,QACtBS,SAAS,iBAAI7B,KAAA,CAAAwG,aAAA,CAAC7F,IAAI;IAACsG,KAAK,EAAEpF;EAAU,CAAE,CAAC,EACvCmB,aAAa,IAAIA,aACM,CAC/B,EACL,CAACnB,SAAS,EAAEmB,aAAa,CAC7B,CAAC;;EAED;AACR;AACA;EACQ,MAAMoE,YAAY,GAAGlH,WAAW,CAC3BmH,KAAoC,IAAK;IACtC,MAAMC,aAAgC,GAAG,EAAE;IAC3C5C,qBAAqB,CAACiC,OAAO,GAAG,KAAK;IAErCvB,UAAU,CAACL,OAAO,CAAC,CAAC;MAAEO,IAAI;MAAEN;IAAU,CAAC,KAAK;MACxC,MAAMS,OAAO,GAAG/E,UAAU,CAAC;QAAEoE,KAAK,EAAEQ,IAAI;QAAEI,YAAY,EAAE2B,KAAK,CAACE,MAAM,CAACrE;MAAM,CAAC,CAAC;MAE7E,IAAIuC,OAAO,CAAC/B,MAAM,GAAG,CAAC,EAAE;QACpB4D,aAAa,CAACrC,IAAI,CAAC;UACfD,SAAS;UACTM,IAAI,EAAEG;QACV,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAEF,IAAI6B,aAAa,CAAC5D,MAAM,KAAK,CAAC,IAAInB,oBAAoB,EAAE;MACpD+E,aAAa,CAACrC,IAAI,CAAC;QACfD,SAAS,EAAEW,SAAS;QACpBL,IAAI,EAAE;MACV,CAAC,CAAC;IACN;IAEArC,gBAAgB,CAAC0C,SAAS,CAAC;IAE3B,IAAI,CAAClD,6BAA6B,IAAI,CAAC4E,KAAK,CAACE,MAAM,CAACrE,KAAK,EAAE;MACvDH,qBAAqB,CAAC,EAAE,CAAC;IAC7B,CAAC,MAAM;MACHA,qBAAqB,CAACuE,aAAa,CAAC;IACxC;IAEA,IAAIA,aAAa,CAAC5D,MAAM,KAAK,CAAC,EAAE;MAC5BsC,UAAU,CAAC,CAAC;IAChB;IAEA7C,QAAQ,CAACkE,KAAK,CAACE,MAAM,CAACrE,KAAK,CAAC;IAC5BY,mBAAmB,CAACuD,KAAK,CAACE,MAAM,CAACrE,KAAK,CAAC;IAEvC,IAAI,OAAOlB,QAAQ,KAAK,UAAU,EAAE;MAChCA,QAAQ,CAACqF,KAAK,CAAC;IACnB;EACJ,CAAC,EACD,CAACjC,UAAU,EAAEY,UAAU,EAAEhE,QAAQ,EAAEO,oBAAoB,EAAEE,6BAA6B,CAC1F,CAAC;;EAED;AACR;AACA;EACQ,MAAM+E,UAAU,GAAGtH,WAAW,CACzBmH,KAAmC,IAAK;IACrC7C,WAAW,CAACmC,OAAO,GAAG,KAAK;IAE3B,IAAI,OAAO5E,MAAM,KAAK,UAAU,EAAE;MAC9BA,MAAM,CAACsF,KAAK,CAAC;IACjB;EACJ,CAAC,EACD,CAACtF,MAAM,CACX,CAAC;EAED,MAAM0F,0BAA0B,GAAGvH,WAAW,CAAC,MAAM;IACjDqE,WAAW,CAACoC,OAAO,EAAEe,IAAI,CAAC,CAAC;IAE3B,OAAOlD,WAAW,CAACmC,OAAO,IAAI/B,OAAO;EACzC,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;;EAEb;AACR;AACA;EACQ,MAAM+C,YAAY,GAAGzH,WAAW,CAC3B6F,IAAoB,IAAK;IACtB,MAAM6B,OAAO,GAAG;MACZ,GAAG7B,IAAI;MACPZ,IAAI,EAAEY,IAAI,CAACZ,IAAI,CAAC0C,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,EAAE;IAC5E,CAAC;IAED,IAAIjF,gBAAgB,EAAE;MAClBO,QAAQ,CAAC,EAAE,CAAC;MACZW,mBAAmB,CAAC,EAAE,CAAC;MACvBS,WAAW,CAACoC,OAAO,EAAEmB,UAAU,CAAC,CAAC;IACrC,CAAC,MAAM;MACH3E,QAAQ,CAACyE,OAAO,CAACzC,IAAI,CAAC;IAC1B;IAEAc,WAAW,CAAC,CAAC;IAEbhD,gBAAgB,CACZ2E,OAAO,CAACrB,QAAQ,gBACZvG,KAAA,CAAAwG,aAAA,CAACxF,wBAAwB;MACrByF,GAAG,EAAEmB,OAAO,CAACrB,QAAS;MACtBG,qBAAqB,EAAEhE;IAAqB,CAC/C,CAAC,GACFiD,SACR,CAAC;IAED5C,qBAAqB,CAAC,EAAE,CAAC;IAEzB,IAAI,OAAOb,QAAQ,KAAK,UAAU,EAAE;MAChCA,QAAQ,CAAC0F,OAAO,CAAC;IACrB;EACJ,CAAC,EACD,CAAC3B,WAAW,EAAE/D,QAAQ,EAAEQ,oBAAoB,EAAEE,gBAAgB,CAClE,CAAC;EAED,MAAMmF,OAAO,GAAG1H,OAAO,CAAC,MAAM;IAC1B,IAAIgC,QAAQ,IAAIS,kBAAkB,CAACY,MAAM,KAAK,CAAC,EAAE;MAC7C,oBACI1D,KAAA,CAAAwG,aAAA,CAACtF,uBAAuB,QACnBmB,QAAQ,CAACwF,OAAO,CAAC,WAAW,EAAE3E,KAAK,CACf,CAAC;IAElC;IAEA,MAAM4B,KAAqB,GAAG,EAAE;IAEhChC,kBAAkB,CAACiC,OAAO,CAAC,CAAC;MAAEC,SAAS;MAAEM;IAAK,CAAC,EAAE0C,KAAK,KAAK;MACvD,IAAIxE,iBAAiB,EAAE;QACnB,IAAI8B,IAAI,CAAC5B,MAAM,IAAI,CAAC,EAAE;UAClB;QACJ;QAEA,IAAIsE,KAAK,KAAK,CAAC,EAAE;UACblD,KAAK,CAACG,IAAI,cAACjF,KAAA,CAAAwG,aAAA,CAAC3F,SAAS;YAACoH,GAAG,EAAEjD,SAAU;YAACkD,IAAI,EAAElD,SAAS,IAAI;UAAG,CAAE,CAAC,CAAC;QACpE;MACJ;MAEAM,IAAI,CAACP,OAAO,CAAC,CAAC;QAAEG,EAAE;QAAEC,IAAI;QAAEoB;MAAS,CAAC,EAAE4B,SAAS,KAAK;QAChDrD,KAAK,CAACG,IAAI,cACNjF,KAAA,CAAAwG,aAAA,CAACzF,aAAa;UACVkH,GAAG,EAAE,GAAG/C,EAAE,IAAIF,SAAS,IAAI,EAAE,EAAG;UAChCE,EAAE,EAAEA,EAAG;UACPC,IAAI,EAAEA,IAAK;UACXoB,QAAQ,EAAEA,QAAS;UACnB7D,oBAAoB,EAAEA,oBAAqB;UAC3CR,QAAQ,EAAEyF,YAAa;UACvB3C,SAAS,EAAEA,SAAU;UACrBoD,QAAQ,EAAEJ,KAAK,KAAK,CAAC,IAAIG,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,CACrD,CACL,CAAC;MACL,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,IAAI5F,oBAAoB,IAAIsB,gBAAgB,KAAK,EAAE,EAAE;MACjDiB,KAAK,CAACG,IAAI,cACNjF,KAAA,CAAAwG,aAAA,CAACzF,aAAa;QACVmE,EAAE,EAAC,aAAa;QAChBhD,QAAQ,EAAEyF,YAAa;QACvBxC,IAAI,EAAE,MAAMtB,gBAAgB,KAAM;QAClCuE,QAAQ,EAAEtD,KAAK,CAACpB,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;MAAE,CACzC,CACL,CAAC;IACL;IAEA,OAAOoB,KAAK;EAChB,CAAC,EAAE,CACCzC,QAAQ,EACRS,kBAAkB,EAClBP,oBAAoB,EACpBsB,gBAAgB,EAChBX,KAAK,EACLM,iBAAiB,EACjBd,oBAAoB,EACpBiF,YAAY,CACf,CAAC;EAEFxH,SAAS,CAAC,MAAM;IACZ,MAAMkI,aAAa,GAAIC,CAAgB,IAAK;MACxC,IAAI,CAACrE,cAAc,IAAInB,kBAAkB,CAACY,MAAM,KAAK,CAAC,EAAE;QACpD;MACJ;MAEA,MAAM6E,QAAQ,GAAGlE,UAAU,CAACsC,OAAO,EAAE4B,QAAQ;MAE7C,IAAI,CAACA,QAAQ,EAAE;QACX;MACJ;MAEA,MAAMC,aAAa,GAAGC,KAAK,CAACC,IAAI,CAACH,QAAQ,CAAC;MAE1C,MAAMI,WAAW,GAAGH,aAAa,CAAClC,IAAI,CAAEsC,KAAK,IACzCA,KAAK,CAAC1D,EAAE,CAAC2D,UAAU,CAAC,oBAAoB,CAC5C,CAAC,EAAEN,QAAQ;MAEX,IAAI,EAAEI,WAAW,IAAIA,WAAW,CAACjF,MAAM,GAAG,CAAC,CAAC,EAAE;QAC1C;MACJ;MAEA,MAAMoF,gBAAgB,GAAGL,KAAK,CAACC,IAAI,CAACC,WAAW,CAAC,CAAC7C,MAAM,CAClD8C,KAAK,IAAMA,KAAK,CAAiBG,OAAO,CAACC,WAAW,KAAK,MAC9D,CAAC;MAEDpF,wBAAwB,CAACkF,gBAAgB,CAAC;MAE1C,IAAIR,CAAC,CAACL,GAAG,KAAK,SAAS,IAAIK,CAAC,CAACL,GAAG,KAAK,WAAW,EAAE;QAC9CK,CAAC,CAACW,cAAc,CAAC,CAAC;QAElB,IAAIN,WAAW,IAAIA,WAAW,CAACjF,MAAM,GAAG,CAAC,EAAE;UACvC,MAAMwF,QAAQ,GACV5F,YAAY,KAAK,IAAI,GACf,CAACA,YAAY,IACRgF,CAAC,CAACL,GAAG,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAC9Ba,gBAAgB,CAACpF,MAAM,IAC3BoF,gBAAgB,CAACpF,MAAM,GACvB,CAAC;UAEX,IAAIJ,YAAY,KAAK,IAAI,EAAE;YACvB,MAAM6F,WAAW,GAAGL,gBAAgB,CAACxF,YAAY,CAAmB;YACpE6F,WAAW,CAACf,QAAQ,GAAG,CAAC,CAAC;UAC7B;UAEA7E,eAAe,CAAC2F,QAAQ,CAAC;UAEzB,MAAME,UAAU,GAAGN,gBAAgB,CAACI,QAAQ,CAAmB;UAE/DE,UAAU,CAAChB,QAAQ,GAAG,CAAC;QAC3B;MACJ,CAAC,MAAM,IAAIE,CAAC,CAACL,GAAG,KAAK,OAAO,EAAE;QAC1BK,CAAC,CAACW,cAAc,CAAC,CAAC;QAClBX,CAAC,CAACe,eAAe,CAAC,CAAC;QAEnB,IAAIP,gBAAgB,EAAE;UAClB,MAAMQ,OAAO,GAAGR,gBAAgB,CAACxF,YAAY,IAAI,CAAC,CAAC;UAEnD,IAAI,CAACgG,OAAO,EAAE;YACV;UACJ;UAEA,MAAM;YAAEpE,EAAE;YAAEqE;UAAY,CAAC,GAAGD,OAAO;UAEnC,IAAI/C,QAA4B;;UAEhC;UACA;UACA;UACA,IAAI+C,OAAO,CAACf,QAAQ,CAAC,CAAC,CAAC,EAAEiB,UAAU,CAAC/C,GAAG,EAAE;YACrC;YACA;YACA;YACAF,QAAQ,GAAG+C,OAAO,CAACf,QAAQ,CAAC,CAAC,CAAC,EAAEiB,UAAU,CAAC/C,GAAG,CAACgD,SAAmB;UACtE;UAEA,MAAMC,KAAK,GAAGxE,EAAE,CAAC2C,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;UAEjDF,YAAY,CAAC;YACTzC,EAAE,EAAEwE,KAAK,KAAK,aAAa,GAAGH,WAAW,GAAGG,KAAK;YACjDvE,IAAI,EAAEoE,WAAW,IAAI,EAAE;YACvBhD;UACJ,CAAC,CAAC;QACN;MACJ;IACJ,CAAC;IAEDoD,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEvB,aAAa,CAAC;IAEnD,OAAO,MAAM;MACTsB,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAExB,aAAa,CAAC;IAC1D,CAAC;EACL,CAAC,EAAE,CACC1E,qBAAqB,EACrBL,YAAY,EACZqE,YAAY,EACZ7E,kBAAkB,CAACY,MAAM,EACzBO,cAAc,CACjB,CAAC;EAEF,MAAM6F,cAAc,GAAG5J,WAAW,CAAEmH,KAAoB,IAAK;IACzD,IAAIA,KAAK,CAAC0C,OAAO,KAAK,EAAE,EAAE;MACtBhH,qBAAqB,CAAC,EAAE,CAAC;IAC7B;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN3C,mBAAmB,CACfyC,GAAG,EACH,OAAO;IACHmH,KAAK,EAAEA,CAAA,KAAM7G,QAAQ,CAAC,EAAE;EAC5B,CAAC,CAAC,EACF,EACJ,CAAC;EAEDhD,SAAS,CAAC,MAAM;IACZwJ,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEE,cAAc,CAAC;IAEpD,OAAO,MAAM;MACTH,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEE,cAAc,CAAC;IACxD,CAAC;EACL,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;;EAEpB;AACR;AACA;EACQ3J,SAAS,CAAC,MAAM;IACZ,IAAIiC,WAAW,EAAE;MACbe,QAAQ,CAACf,WAAW,CAAC;IACzB;EACJ,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;EAEjB,MAAM6H,kBAAkB,GACpBhG,cAAc,KACbnB,kBAAkB,CAACY,MAAM,KAAK,CAAC,IAAI,CAAC,CAACrB,QAAQ,CAAC,KAC9Ca,KAAK,CAACgH,IAAI,CAAC,CAAC,KAAK,EAAE,IAAIzH,6BAA6B,CAAC;EAE1D,OAAOpC,OAAO,CACV,mBACIL,KAAA,CAAAwG,aAAA,CAACvF,eAAe;IAAC4B,GAAG,EAAEuB,MAAO;IAAC6D,GAAG,EAAE,cAAc9D,IAAI;EAAG,gBACpDnE,KAAA,CAAAwG,aAAA;IAAKtB,EAAE,EAAE,mBAAmBf,IAAI;EAAG,GAC9BvB,gBAAgB,gBACb5C,KAAA,CAAAwG,aAAA,CAACjF,QAAQ;IACL4F,WAAW,EAAEA,WAAY;IACzBgD,KAAK,EAAEvH,gBAAgB,CAACuH,KAAM;IAC9BpI,MAAM,EAAEyF,UAAW;IACnBxF,QAAQ,EAAEoF,YAAa;IACvBgD,OAAO,EAAExD,WAAY;IACrByD,QAAQ,EAAEzH,gBAAgB,CAACyH,QAAS;IACpClI,WAAW,EAAEA,WAAY;IACzBU,GAAG,EAAE0B,WAAY;IACjB+F,mBAAmB,EAAE1H,gBAAgB,CAAC0H,mBAAoB;IAC1DC,kBAAkB;IAClBC,IAAI,EAAE5H,gBAAgB,CAAC4H;EAAK,CAC/B,CAAC,gBAEFxK,KAAA,CAAAwG,aAAA,CAAC5F,KAAK;IACFgB,SAAS,EAAEA,SAAU;IACrBuF,WAAW,EAAEA,WAAY;IACzBpF,MAAM,EAAEyF,UAAW;IACnBxF,QAAQ,EAAEoF,YAAa;IACvBgD,OAAO,EAAExD,WAAY;IACrB3E,SAAS,EAAEA,SAAU;IACrBE,WAAW,EAAEA,WAAY;IACzBU,GAAG,EAAEyB,QAAS;IACdyC,YAAY,EAAEA,YAAa;IAC3B7D,KAAK,EAAEA;EAAM,CAChB,CAEJ,CAAC,EACLkB,MAAM,CAACuC,OAAO,iBACX3G,KAAA,CAAAwG,aAAA,CAAClF,mBAAmB;IAChBmJ,aAAa,EAAErG,MAAM,CAACuC,OAAQ;IAC9BlF,SAAS,EAAEA,SAAU;IACrBiJ,SAAS,EAAE/I,iBAAkB;IAC7BgJ,SAAS,EAAE,GAAI;IACfC,OAAO,EAAE3E,WAAY;IACrB4E,cAAc,EAAEpD,0BAA2B;IAC3CwC,kBAAkB,EAAEA;EAAmB,gBAEvCjK,KAAA,CAAAwG,aAAA,CAAC1F,aAAa;IACV+D,aAAa,EAAEA,aAAc;IAC7BzB,MAAM,EAAEA,MAAO;IACf0H,UAAU,EAAEb,kBAAmB;IAC/BhC,GAAG,EAAE,mBAAmB9D,IAAI,EAAG;IAC/B4G,aAAa,EAAE7E,8BAA+B;IAC9CrD,GAAG,EAAEwB,UAAW;IAChB2G,cAAc,EAAEjH,MAAO;IACvBvB,uBAAuB,EAAEA;EAAwB,GAEhDuF,OACU,CACE,CAEZ,CACpB,EACD,CACItG,SAAS,EACTsG,OAAO,EACPpG,iBAAiB,EACjBkD,aAAa,EACbd,MAAM,EACNyD,UAAU,EACVJ,YAAY,EACZnB,WAAW,EACXwB,0BAA0B,EAC1Bb,WAAW,EACXxD,MAAM,EACNxB,SAAS,EACTuF,WAAW,EACXlF,SAAS,EACTE,WAAW,EACX4E,YAAY,EACZvE,uBAAuB,EACvByH,kBAAkB,EAClBrH,gBAAgB,EAChBuB,IAAI,EACJjB,KAAK,CAEb,CAAC;AACL,CACJ,CAAC;AAED1B,SAAS,CAACyJ,WAAW,GAAG,WAAW;AAEnC,eAAezJ,SAAS","ignoreList":[]}
1
+ {"version":3,"file":"SearchBox.js","names":["useDevice","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","useTheme","calculateContentHeight","searchList","Icon","Input","GroupName","SearchBoxBody","SearchBoxItem","StyledSearchBoxItemImage","StyledSearchBox","StyledSearchBoxHintText","StyledSearchBoxIcon","StyledSearchBoxLeftWrapper","useUuid","DropdownBodyWrapper","TagInput","SearchBox","container","customFilter","dropdownDirection","isInvalid","leftIcons","lists","onBlur","onChange","onKeyDown","onSelect","placeholder","presetValue","hintText","selectedId","shouldAddInputToList","shouldHideFilterButtons","shouldShowContentOnEmptyInput","shouldShowRoundImage","shouldShowToggleIcon","tagInputSettings","ref","matchingListsItems","setMatchingListsItems","selectedImage","setSelectedImage","value","setValue","height","setHeight","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","shouldShowBody","setShouldShowBody","uuid","boxRef","contentRef","inputRef","tagInputRef","hasFocusRef","isAnimatingRef","shouldShowPresetValue","theme","isTouch","filterButtons","items","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","searchString","undefined","filteredMatchingListItems","map","filter","item","handleOpen","handleClose","handleFilterButtonsGroupSelect","keys","textArray","selectedItem","find","imageUrl","createElement","src","$shouldShowRoundImage","current","handleFocus","toLowerCase","handleClick","rightElement","onClick","icons","color","leftElement","handleChange","event","filteredLists","target","handleBlur","handleDropdownOutsideClick","blur","handleSelect","newItem","replace","resetValue","content","index","key","name","listIndex","tabIndex","handleKeyDown","e","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","preventDefault","newIndex","prevElement","newElement","stopPropagation","element","textContent","attributes","nodeValue","newId","document","addEventListener","removeEventListener","handleKeyPress","keyCode","clear","shouldShowDropdown","trim","onAdd","onFocus","onRemove","shouldAllowMultiple","shouldPreventEnter","tags","anchorElement","direction","onClose","onOutsideClick","shouldShow","onGroupSelect","selectedGroups","displayName"],"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,4 +1,4 @@
1
- import { FC, ReactNode } from 'react';
1
+ import React, { ReactNode } from 'react';
2
2
  import { DropdownDirection } from '../../types/dropdown';
3
3
  import { DelayedDropdownContentProps } from './delayed-dropdown-content/DelayedDropdownContent';
4
4
  interface DropdownBodyWrapperProps {
@@ -56,5 +56,5 @@ interface DropdownBodyWrapperProps {
56
56
  */
57
57
  shouldCaptureEvents?: boolean;
58
58
  }
59
- declare const DropdownBodyWrapper: FC<DropdownBodyWrapperProps>;
59
+ declare const DropdownBodyWrapper: React.ForwardRefExoticComponent<DropdownBodyWrapperProps & React.RefAttributes<HTMLDivElement>>;
60
60
  export default DropdownBodyWrapper;
@@ -2,14 +2,14 @@ import { DropdownDirection } from '../../types/dropdown';
2
2
  export declare const StyledDropdownBodyWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
3
3
  export declare const StyledDropdownBodyWrapperContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "theme" | "$maxHeight" | "$width" | "$minWidth" | "$direction"> & {
4
4
  $width: number;
5
- $maxHeight: number;
5
+ $maxHeight?: number;
6
6
  $minWidth: number;
7
7
  $direction: DropdownDirection;
8
8
  } & {
9
9
  theme: import("../color-scheme-provider/ColorSchemeProvider").Theme;
10
10
  }, never> & Partial<Pick<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "theme" | "$maxHeight" | "$width" | "$minWidth" | "$direction"> & {
11
11
  $width: number;
12
- $maxHeight: number;
12
+ $maxHeight?: number;
13
13
  $minWidth: number;
14
14
  $direction: DropdownDirection;
15
15
  } & {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/core",
3
- "version": "5.2.8",
3
+ "version": "5.3.0",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -88,5 +88,5 @@
88
88
  "publishConfig": {
89
89
  "access": "public"
90
90
  },
91
- "gitHead": "e5e85b31aac323874390c57012e5241c802670eb"
91
+ "gitHead": "52588cd06d0acc37c4cce8db91aaba70e1af5f5e"
92
92
  }