@razorpay/blade 11.17.1 → 11.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/native/components/ActionList/ActionListItem.js +2 -1
- package/build/lib/native/components/ActionList/ActionListItem.js.map +1 -1
- package/build/lib/native/components/Avatar/Avatar.native.js +7 -0
- package/build/lib/native/components/Avatar/Avatar.native.js.map +1 -0
- package/build/lib/native/components/Avatar/AvatarGroup.native.js +7 -0
- package/build/lib/native/components/Avatar/AvatarGroup.native.js.map +1 -0
- package/build/lib/native/components/Button/BaseButton/BaseButton.js +1 -1
- package/build/lib/native/components/Button/BaseButton/BaseButton.js.map +1 -1
- package/build/lib/native/components/Dropdown/Dropdown.js +1 -1
- package/build/lib/native/components/Dropdown/Dropdown.js.map +1 -1
- package/build/lib/native/components/Dropdown/DropdownHeaderFooter.js +1 -1
- package/build/lib/native/components/Dropdown/DropdownHeaderFooter.js.map +1 -1
- package/build/lib/native/components/Dropdown/dropdownComponentIds.js +1 -1
- package/build/lib/native/components/Dropdown/dropdownComponentIds.js.map +1 -1
- package/build/lib/native/components/Dropdown/dropdownUtils.js +1 -1
- package/build/lib/native/components/Dropdown/dropdownUtils.js.map +1 -1
- package/build/lib/native/components/Dropdown/useDropdown.js.map +1 -1
- package/build/lib/native/components/Input/BaseInput/BaseInputVisuals.js +1 -1
- package/build/lib/native/components/Input/BaseInput/BaseInputVisuals.js.map +1 -1
- package/build/lib/native/components/Input/SearchInput/SearchInput.js +34 -0
- package/build/lib/native/components/Input/SearchInput/SearchInput.js.map +1 -0
- package/build/lib/native/components/ProgressBar/ProgressBar.js +1 -1
- package/build/lib/native/components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/lib/native/components/index.js +3 -0
- package/build/lib/native/components/index.js.map +1 -1
- package/build/lib/native/tokens/global/size.js +1 -1
- package/build/lib/native/tokens/global/size.js.map +1 -1
- package/build/lib/native/tokens/theme/bladeTheme.js +1 -1
- package/build/lib/native/tokens/theme/bladeTheme.js.map +1 -1
- package/build/lib/native/utils/metaAttribute/metaConstants.js +1 -1
- package/build/lib/native/utils/metaAttribute/metaConstants.js.map +1 -1
- package/build/lib/web/development/components/ActionList/ActionListItem.js +3 -1
- package/build/lib/web/development/components/ActionList/ActionListItem.js.map +1 -1
- package/build/lib/web/development/components/Avatar/Avatar.web.js +125 -0
- package/build/lib/web/development/components/Avatar/Avatar.web.js.map +1 -0
- package/build/lib/web/development/components/Avatar/AvatarButton.js +86 -0
- package/build/lib/web/development/components/Avatar/AvatarButton.js.map +1 -0
- package/build/lib/web/development/components/Avatar/AvatarGroup.web.js +114 -0
- package/build/lib/web/development/components/Avatar/AvatarGroup.web.js.map +1 -0
- package/build/lib/web/development/components/Avatar/AvatarGroupContext.js +11 -0
- package/build/lib/web/development/components/Avatar/AvatarGroupContext.js.map +1 -0
- package/build/lib/web/development/components/Avatar/StyledAvatar.js +30 -0
- package/build/lib/web/development/components/Avatar/StyledAvatar.js.map +1 -0
- package/build/lib/web/development/components/Avatar/StyledAvatarButton.js +48 -0
- package/build/lib/web/development/components/Avatar/StyledAvatarButton.js.map +1 -0
- package/build/lib/web/development/components/Avatar/StyledAvatarGroup.js +24 -0
- package/build/lib/web/development/components/Avatar/StyledAvatarGroup.js.map +1 -0
- package/build/lib/web/development/components/Avatar/avatarTokens.js +49 -0
- package/build/lib/web/development/components/Avatar/avatarTokens.js.map +1 -0
- package/build/lib/web/development/components/Avatar/index.js +3 -0
- package/build/lib/web/development/components/Avatar/index.js.map +1 -0
- package/build/lib/web/development/components/Button/BaseButton/BaseButton.js +1 -1
- package/build/lib/web/development/components/Button/BaseButton/BaseButton.js.map +1 -1
- package/build/lib/web/development/components/Dropdown/Dropdown.js +4 -1
- package/build/lib/web/development/components/Dropdown/Dropdown.js.map +1 -1
- package/build/lib/web/development/components/Dropdown/DropdownHeaderFooter.js +2 -16
- package/build/lib/web/development/components/Dropdown/DropdownHeaderFooter.js.map +1 -1
- package/build/lib/web/development/components/Dropdown/DropdownOverlay.web.js +1 -1
- package/build/lib/web/development/components/Dropdown/DropdownOverlay.web.js.map +1 -1
- package/build/lib/web/development/components/Dropdown/dropdownComponentIds.js +2 -1
- package/build/lib/web/development/components/Dropdown/dropdownComponentIds.js.map +1 -1
- package/build/lib/web/development/components/Dropdown/dropdownUtils.js +1 -1
- package/build/lib/web/development/components/Dropdown/dropdownUtils.js.map +1 -1
- package/build/lib/web/development/components/Dropdown/useDropdown.js.map +1 -1
- package/build/lib/web/development/components/Input/BaseInput/BaseInputVisuals.js +1 -1
- package/build/lib/web/development/components/Input/BaseInput/BaseInputVisuals.js.map +1 -1
- package/build/lib/web/development/components/Input/SearchInput/SearchInput.js +180 -0
- package/build/lib/web/development/components/Input/SearchInput/SearchInput.js.map +1 -0
- package/build/lib/web/development/components/Input/SearchInput/index.js +2 -0
- package/build/lib/web/development/components/Input/SearchInput/index.js.map +1 -0
- package/build/lib/web/development/components/ProgressBar/CircularProgressBar.web.js +5 -3
- package/build/lib/web/development/components/ProgressBar/CircularProgressBar.web.js.map +1 -1
- package/build/lib/web/development/components/ProgressBar/ProgressBar.js +1 -1
- package/build/lib/web/development/components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/lib/web/development/components/index.js +5 -0
- package/build/lib/web/development/components/index.js.map +1 -1
- package/build/lib/web/development/tokens/global/size.js +2 -0
- package/build/lib/web/development/tokens/global/size.js.map +1 -1
- package/build/lib/web/development/tokens/theme/bladeTheme.js +6 -6
- package/build/lib/web/development/tokens/theme/bladeTheme.js.map +1 -1
- package/build/lib/web/development/utils/metaAttribute/metaConstants.js +3 -0
- package/build/lib/web/development/utils/metaAttribute/metaConstants.js.map +1 -1
- package/build/lib/web/production/components/ActionList/ActionListItem.js +3 -1
- package/build/lib/web/production/components/ActionList/ActionListItem.js.map +1 -1
- package/build/lib/web/production/components/Avatar/Avatar.web.js +125 -0
- package/build/lib/web/production/components/Avatar/Avatar.web.js.map +1 -0
- package/build/lib/web/production/components/Avatar/AvatarButton.js +86 -0
- package/build/lib/web/production/components/Avatar/AvatarButton.js.map +1 -0
- package/build/lib/web/production/components/Avatar/AvatarGroup.web.js +114 -0
- package/build/lib/web/production/components/Avatar/AvatarGroup.web.js.map +1 -0
- package/build/lib/web/production/components/Avatar/AvatarGroupContext.js +11 -0
- package/build/lib/web/production/components/Avatar/AvatarGroupContext.js.map +1 -0
- package/build/lib/web/production/components/Avatar/StyledAvatar.js +30 -0
- package/build/lib/web/production/components/Avatar/StyledAvatar.js.map +1 -0
- package/build/lib/web/production/components/Avatar/StyledAvatarButton.js +48 -0
- package/build/lib/web/production/components/Avatar/StyledAvatarButton.js.map +1 -0
- package/build/lib/web/production/components/Avatar/StyledAvatarGroup.js +24 -0
- package/build/lib/web/production/components/Avatar/StyledAvatarGroup.js.map +1 -0
- package/build/lib/web/production/components/Avatar/avatarTokens.js +49 -0
- package/build/lib/web/production/components/Avatar/avatarTokens.js.map +1 -0
- package/build/lib/web/production/components/Avatar/index.js +3 -0
- package/build/lib/web/production/components/Avatar/index.js.map +1 -0
- package/build/lib/web/production/components/Button/BaseButton/BaseButton.js +1 -1
- package/build/lib/web/production/components/Button/BaseButton/BaseButton.js.map +1 -1
- package/build/lib/web/production/components/Dropdown/Dropdown.js +4 -1
- package/build/lib/web/production/components/Dropdown/Dropdown.js.map +1 -1
- package/build/lib/web/production/components/Dropdown/DropdownHeaderFooter.js +2 -16
- package/build/lib/web/production/components/Dropdown/DropdownHeaderFooter.js.map +1 -1
- package/build/lib/web/production/components/Dropdown/DropdownOverlay.web.js +1 -1
- package/build/lib/web/production/components/Dropdown/DropdownOverlay.web.js.map +1 -1
- package/build/lib/web/production/components/Dropdown/dropdownComponentIds.js +2 -1
- package/build/lib/web/production/components/Dropdown/dropdownComponentIds.js.map +1 -1
- package/build/lib/web/production/components/Dropdown/dropdownUtils.js +1 -1
- package/build/lib/web/production/components/Dropdown/dropdownUtils.js.map +1 -1
- package/build/lib/web/production/components/Dropdown/useDropdown.js.map +1 -1
- package/build/lib/web/production/components/Input/BaseInput/BaseInputVisuals.js +1 -1
- package/build/lib/web/production/components/Input/BaseInput/BaseInputVisuals.js.map +1 -1
- package/build/lib/web/production/components/Input/SearchInput/SearchInput.js +180 -0
- package/build/lib/web/production/components/Input/SearchInput/SearchInput.js.map +1 -0
- package/build/lib/web/production/components/Input/SearchInput/index.js +2 -0
- package/build/lib/web/production/components/Input/SearchInput/index.js.map +1 -0
- package/build/lib/web/production/components/ProgressBar/CircularProgressBar.web.js +5 -3
- package/build/lib/web/production/components/ProgressBar/CircularProgressBar.web.js.map +1 -1
- package/build/lib/web/production/components/ProgressBar/ProgressBar.js +1 -1
- package/build/lib/web/production/components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/lib/web/production/components/index.js +5 -0
- package/build/lib/web/production/components/index.js.map +1 -1
- package/build/lib/web/production/tokens/global/size.js +2 -0
- package/build/lib/web/production/tokens/global/size.js.map +1 -1
- package/build/lib/web/production/tokens/theme/bladeTheme.js +6 -6
- package/build/lib/web/production/tokens/theme/bladeTheme.js.map +1 -1
- package/build/lib/web/production/utils/metaAttribute/metaConstants.js +3 -0
- package/build/lib/web/production/utils/metaAttribute/metaConstants.js.map +1 -1
- package/build/types/components/index.d.ts +328 -147
- package/build/types/components/index.native.d.ts +282 -147
- package/build/types/tokens/index.d.ts +2 -0
- package/build/types/tokens/index.native.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownOverlay.web.js","sources":["../../../../../../src/components/Dropdown/DropdownOverlay.web.tsx"],"sourcesContent":["import React from 'react';\nimport {\n autoUpdate,\n offset,\n size as sizeMiddleware,\n useFloating,\n useTransitionStyles,\n flip,\n FloatingPortal,\n useDismiss,\n useInteractions,\n} from '@floating-ui/react';\nimport { useDropdown } from './useDropdown';\nimport { StyledDropdownOverlay } from './StyledDropdownOverlay';\nimport type { DropdownOverlayProps } from './types';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport { useTheme } from '~components/BladeProvider';\n// Reading directly because its not possible to get theme object on top level to be used in keyframes\nimport { size } from '~tokens/global';\nimport { makeSize } from '~utils';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport { useBottomSheetAndDropdownGlue } from '~components/BottomSheet/BottomSheetContext';\nimport BaseBox from '~components/Box/BaseBox';\nimport { componentZIndices } from '~utils/componentZIndices';\n\nconst OVERLAY_OFFSET: number = size['8'];\nconst OVERLAY_PADDING: number = size['12']; // doesn't have to be exact. Just rough padding for floating ui to decide to show overlay on top or bottom\n\n/**\n * Overlay of dropdown\n *\n * Wrap your ActionList within this component\n */\nconst _DropdownOverlay = ({\n children,\n testID,\n zIndex = componentZIndices.dropdownOverlay,\n width,\n referenceRef,\n defaultPlacement = 'bottom-start',\n}: DropdownOverlayProps): React.ReactElement | null => {\n const { isOpen, triggererRef, triggererWrapperRef, dropdownTriggerer, setIsOpen } = useDropdown();\n const { theme } = useTheme();\n const bottomSheetAndDropdownGlue = useBottomSheetAndDropdownGlue();\n\n const isMenu =\n dropdownTriggerer !== dropdownComponentIds.triggers.SelectInput &&\n dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete &&\n referenceRef == undefined;\n\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n strategy: 'fixed',\n placement: defaultPlacement,\n elements: {\n // Input triggers have their ref on internal input element but we want width height of overall visible input hence wrapperRef is needed\n // We fallback to use `triggererRef` for triggers like button and link where wrapper is not needed\n // Checkout: https://github.com/razorpay/blade/pull/1559#discussion_r1305438920\n reference: (referenceRef?.current ??\n triggererWrapperRef.current ??\n triggererRef.current) as Element,\n },\n middleware: [\n offset({\n mainAxis: OVERLAY_OFFSET,\n }),\n flip({\n padding: OVERLAY_OFFSET + OVERLAY_PADDING,\n }),\n sizeMiddleware({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n // in menu, we have flexible width between min and max\n // in input triggers, we just take width of trigger\n width: isMenu ? undefined : makeSize(rects.reference.width),\n minWidth: isMenu ? makeSize(size['240']) : undefined,\n maxWidth: isMenu ? makeSize(size['400']) : undefined,\n });\n },\n }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const dismiss = useDismiss(context);\n const { getFloatingProps } = useInteractions([dismiss]);\n\n const { isMounted, styles } = useTransitionStyles(context, {\n duration: theme.motion.duration.quick,\n initial: () => ({\n transform: `translateY(-${makeSize(size['8'])})`,\n opacity: 0,\n }),\n });\n\n React.useEffect(() => {\n if (isOpen) {\n // On Safari clicking on a non input element doesn't focuses it https://bugs.webkit.org/show_bug.cgi?id=22261\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n return (\n <FloatingPortal>\n <BaseBox\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={refs.setFloating as any}\n style={floatingStyles}\n zIndex={zIndex}\n display={isMounted ? 'flex' : 'none'}\n {...getFloatingProps()}\n >\n <StyledDropdownOverlay\n isInBottomSheet={bottomSheetAndDropdownGlue?.dropdownHasBottomSheet}\n elevation={bottomSheetAndDropdownGlue?.dropdownHasBottomSheet ? undefined : 'midRaised'}\n style={{ ...styles }}\n width={width ? width : '100%'}\n {...metaAttribute({ name: MetaConstants.DropdownOverlay, testID })}\n >\n {children}\n </StyledDropdownOverlay>\n </BaseBox>\n </FloatingPortal>\n );\n};\n\nconst DropdownOverlay = assignWithoutSideEffects(_DropdownOverlay, {\n componentId: dropdownComponentIds.DropdownOverlay,\n});\n\nexport { DropdownOverlay };\n"],"names":["OVERLAY_OFFSET","size","OVERLAY_PADDING","_DropdownOverlay","_ref","_ref2","_referenceRef$current","children","testID","_ref$zIndex","zIndex","componentZIndices","dropdownOverlay","width","referenceRef","_ref$defaultPlacement","defaultPlacement","_useDropdown","useDropdown","isOpen","triggererRef","triggererWrapperRef","dropdownTriggerer","setIsOpen","_useTheme","useTheme","theme","bottomSheetAndDropdownGlue","useBottomSheetAndDropdownGlue","isMenu","dropdownComponentIds","triggers","SelectInput","AutoComplete","undefined","_useFloating","useFloating","open","onOpenChange","strategy","placement","elements","reference","current","middleware","offset","mainAxis","flip","padding","sizeMiddleware","apply","_ref3","rects","Object","assign","floating","style","makeSize","minWidth","maxWidth","whileElementsMounted","autoUpdate","refs","floatingStyles","context","dismiss","useDismiss","_useInteractions","useInteractions","getFloatingProps","_useTransitionStyles","useTransitionStyles","duration","motion","quick","initial","transform","concat","opacity","isMounted","styles","React","useEffect","_triggererRef$current","focus","_jsx","FloatingPortal","BaseBox","_objectSpread","ref","setFloating","display","StyledDropdownOverlay","isInBottomSheet","dropdownHasBottomSheet","elevation","metaAttribute","name","MetaConstants","DropdownOverlay","assignWithoutSideEffects","componentId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropdownOverlay.web.js","sources":["../../../../../../src/components/Dropdown/DropdownOverlay.web.tsx"],"sourcesContent":["import React from 'react';\nimport {\n autoUpdate,\n offset,\n size as sizeMiddleware,\n useFloating,\n useTransitionStyles,\n flip,\n FloatingPortal,\n useDismiss,\n useInteractions,\n} from '@floating-ui/react';\nimport { useDropdown } from './useDropdown';\nimport { StyledDropdownOverlay } from './StyledDropdownOverlay';\nimport type { DropdownOverlayProps } from './types';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport { useTheme } from '~components/BladeProvider';\n// Reading directly because its not possible to get theme object on top level to be used in keyframes\nimport { size } from '~tokens/global';\nimport { makeSize } from '~utils';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport { useBottomSheetAndDropdownGlue } from '~components/BottomSheet/BottomSheetContext';\nimport BaseBox from '~components/Box/BaseBox';\nimport { componentZIndices } from '~utils/componentZIndices';\n\nconst OVERLAY_OFFSET: number = size['8'];\nconst OVERLAY_PADDING: number = size['12']; // doesn't have to be exact. Just rough padding for floating ui to decide to show overlay on top or bottom\n\n/**\n * Overlay of dropdown\n *\n * Wrap your ActionList within this component\n */\nconst _DropdownOverlay = ({\n children,\n testID,\n zIndex = componentZIndices.dropdownOverlay,\n width,\n referenceRef,\n defaultPlacement = 'bottom-start',\n}: DropdownOverlayProps): React.ReactElement | null => {\n const { isOpen, triggererRef, triggererWrapperRef, dropdownTriggerer, setIsOpen } = useDropdown();\n const { theme } = useTheme();\n const bottomSheetAndDropdownGlue = useBottomSheetAndDropdownGlue();\n\n const isMenu =\n dropdownTriggerer !== dropdownComponentIds.triggers.SelectInput &&\n dropdownTriggerer !== dropdownComponentIds.triggers.SearchInput &&\n dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete &&\n referenceRef == undefined;\n\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n strategy: 'fixed',\n placement: defaultPlacement,\n elements: {\n // Input triggers have their ref on internal input element but we want width height of overall visible input hence wrapperRef is needed\n // We fallback to use `triggererRef` for triggers like button and link where wrapper is not needed\n // Checkout: https://github.com/razorpay/blade/pull/1559#discussion_r1305438920\n reference: (referenceRef?.current ??\n triggererWrapperRef.current ??\n triggererRef.current) as Element,\n },\n middleware: [\n offset({\n mainAxis: OVERLAY_OFFSET,\n }),\n flip({\n padding: OVERLAY_OFFSET + OVERLAY_PADDING,\n }),\n sizeMiddleware({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n // in menu, we have flexible width between min and max\n // in input triggers, we just take width of trigger\n width: isMenu ? undefined : makeSize(rects.reference.width),\n minWidth: isMenu ? makeSize(size['240']) : undefined,\n maxWidth: isMenu ? makeSize(size['400']) : undefined,\n });\n },\n }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const dismiss = useDismiss(context);\n const { getFloatingProps } = useInteractions([dismiss]);\n\n const { isMounted, styles } = useTransitionStyles(context, {\n duration: theme.motion.duration.quick,\n initial: () => ({\n transform: `translateY(-${makeSize(size['8'])})`,\n opacity: 0,\n }),\n });\n\n React.useEffect(() => {\n if (isOpen) {\n // On Safari clicking on a non input element doesn't focuses it https://bugs.webkit.org/show_bug.cgi?id=22261\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n return (\n <FloatingPortal>\n <BaseBox\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={refs.setFloating as any}\n style={floatingStyles}\n zIndex={zIndex}\n display={isMounted ? 'flex' : 'none'}\n {...getFloatingProps()}\n >\n <StyledDropdownOverlay\n isInBottomSheet={bottomSheetAndDropdownGlue?.dropdownHasBottomSheet}\n elevation={bottomSheetAndDropdownGlue?.dropdownHasBottomSheet ? undefined : 'midRaised'}\n style={{ ...styles }}\n width={width ? width : '100%'}\n {...metaAttribute({ name: MetaConstants.DropdownOverlay, testID })}\n >\n {children}\n </StyledDropdownOverlay>\n </BaseBox>\n </FloatingPortal>\n );\n};\n\nconst DropdownOverlay = assignWithoutSideEffects(_DropdownOverlay, {\n componentId: dropdownComponentIds.DropdownOverlay,\n});\n\nexport { DropdownOverlay };\n"],"names":["OVERLAY_OFFSET","size","OVERLAY_PADDING","_DropdownOverlay","_ref","_ref2","_referenceRef$current","children","testID","_ref$zIndex","zIndex","componentZIndices","dropdownOverlay","width","referenceRef","_ref$defaultPlacement","defaultPlacement","_useDropdown","useDropdown","isOpen","triggererRef","triggererWrapperRef","dropdownTriggerer","setIsOpen","_useTheme","useTheme","theme","bottomSheetAndDropdownGlue","useBottomSheetAndDropdownGlue","isMenu","dropdownComponentIds","triggers","SelectInput","SearchInput","AutoComplete","undefined","_useFloating","useFloating","open","onOpenChange","strategy","placement","elements","reference","current","middleware","offset","mainAxis","flip","padding","sizeMiddleware","apply","_ref3","rects","Object","assign","floating","style","makeSize","minWidth","maxWidth","whileElementsMounted","autoUpdate","refs","floatingStyles","context","dismiss","useDismiss","_useInteractions","useInteractions","getFloatingProps","_useTransitionStyles","useTransitionStyles","duration","motion","quick","initial","transform","concat","opacity","isMounted","styles","React","useEffect","_triggererRef$current","focus","_jsx","FloatingPortal","BaseBox","_objectSpread","ref","setFloating","display","StyledDropdownOverlay","isInBottomSheet","dropdownHasBottomSheet","elevation","metaAttribute","name","MetaConstants","DropdownOverlay","assignWithoutSideEffects","componentId"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdownComponentIds.js","sources":["../../../../../../src/components/Dropdown/dropdownComponentIds.ts"],"sourcesContent":["export const dropdownComponentIds = {\n DropdownOverlay: 'DropdownOverlay',\n Dropdown: 'Dropdown',\n BaseBox: 'BaseBox',\n triggers: {\n SelectInput: 'SelectInput',\n DropdownButton: 'DropdownButton',\n DropdownLink: 'DropdownLink',\n AutoComplete: 'AutoComplete',\n },\n};\n"],"names":["dropdownComponentIds","DropdownOverlay","Dropdown","BaseBox","triggers","SelectInput","DropdownButton","DropdownLink","AutoComplete"],"mappings":"AAAO,IAAMA,oBAAoB,GAAG;AAClCC,EAAAA,eAAe,EAAE,iBAAiB;AAClCC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,WAAW,EAAE,aAAa;AAC1BC,IAAAA,cAAc,EAAE,gBAAgB;AAChCC,IAAAA,YAAY,EAAE,cAAc;AAC5BC,IAAAA,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"dropdownComponentIds.js","sources":["../../../../../../src/components/Dropdown/dropdownComponentIds.ts"],"sourcesContent":["export const dropdownComponentIds = {\n DropdownOverlay: 'DropdownOverlay',\n Dropdown: 'Dropdown',\n BaseBox: 'BaseBox',\n triggers: {\n SelectInput: 'SelectInput',\n DropdownButton: 'DropdownButton',\n DropdownLink: 'DropdownLink',\n AutoComplete: 'AutoComplete',\n SearchInput: 'SearchInput',\n },\n};\n"],"names":["dropdownComponentIds","DropdownOverlay","Dropdown","BaseBox","triggers","SelectInput","DropdownButton","DropdownLink","AutoComplete","SearchInput"],"mappings":"AAAO,IAAMA,oBAAoB,GAAG;AAClCC,EAAAA,eAAe,EAAE,iBAAiB;AAClCC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,WAAW,EAAE,aAAa;AAC1BC,IAAAA,cAAc,EAAE,gBAAgB;AAChCC,IAAAA,YAAY,EAAE,cAAc;AAC5BC,IAAAA,YAAY,EAAE,cAAc;AAC5BC,IAAAA,WAAW,EAAE,aAAA;AACf,GAAA;AACF;;;;"}
|
|
@@ -81,7 +81,7 @@ function getActionFromKey(e, isOpen, dropdownTriggerer) {
|
|
|
81
81
|
return SelectActions.Close;
|
|
82
82
|
} else if (key === 'Enter' ||
|
|
83
83
|
// we ignore the spacebar select in autocomplete since hitting spacebar might be expected while typing
|
|
84
|
-
dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete && key === ' ') {
|
|
84
|
+
dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete && dropdownTriggerer !== dropdownComponentIds.triggers.SearchInput && key === ' ') {
|
|
85
85
|
return SelectActions.CloseSelect;
|
|
86
86
|
}
|
|
87
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdownUtils.js","sources":["../../../../../../src/components/Dropdown/dropdownUtils.ts"],"sourcesContent":["/*\n * This content is licensed according to the W3C Software License at\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * This software or document includes material copied from or derived from\n * https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html.\n * Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang)\n */\n\nimport type { DropdownContextType, OptionsType } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { SpacingValueType } from '~components/Box/BaseBox';\n\nexport type SelectActionsType =\n | 'Close'\n | 'CloseSelect'\n | 'First'\n | 'Last'\n | 'Next'\n | 'Open'\n | 'PageDown'\n | 'PageUp'\n | 'Previous'\n | 'Select'\n | 'Type';\n\n// Save a list of named combobox actions, for future readability\nconst SelectActions: Record<SelectActionsType, SelectActionsType> = {\n Close: 'Close',\n CloseSelect: 'CloseSelect',\n First: 'First',\n Last: 'Last',\n Next: 'Next',\n Open: 'Open',\n PageDown: 'PageDown',\n PageUp: 'PageUp',\n Previous: 'Previous',\n Select: 'Select',\n Type: 'Type',\n};\n\n/**\n * Filter an array of options against an input string\n * returns an array of options that begin with the filter string, case-independent\n *\n */\nexport function filterOptions(\n options: string[] = [],\n filter: string,\n exclude: string[] = [],\n): string[] {\n return options.filter((option) => {\n const matches = option.toLowerCase().startsWith(filter.toLowerCase());\n return matches && !exclude.includes(option);\n });\n}\n\n/**\n * Map a keypress to action\n */\nexport function getActionFromKey(\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n isOpen: boolean,\n dropdownTriggerer: DropdownContextType['dropdownTriggerer'],\n): SelectActionsType | undefined {\n if (!e) {\n return undefined;\n }\n\n const { altKey, ctrlKey, metaKey } = e;\n let key = '';\n if ('key' in e) {\n key = e.key;\n }\n const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action\n if (!key) return undefined;\n // handle opening when closed\n if (!isOpen && key && openKeys.includes(key)) {\n return SelectActions.Open;\n }\n\n // home and end move the selected option when open or closed\n if (key === 'Home') {\n return SelectActions.First;\n }\n if (key === 'End') {\n return SelectActions.Last;\n }\n\n // handle typing characters when open or closed\n if (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n ) {\n return SelectActions.Type;\n }\n\n // handle keys when open\n if (isOpen) {\n if (key === 'ArrowUp' && altKey) {\n return SelectActions.CloseSelect;\n } else if (key === 'ArrowDown' && !altKey) {\n return SelectActions.Next;\n } else if (key === 'ArrowUp') {\n return SelectActions.Previous;\n } else if (key === 'PageUp') {\n return SelectActions.PageUp;\n } else if (key === 'PageDown') {\n return SelectActions.PageDown;\n } else if (key === 'Escape') {\n return SelectActions.Close;\n } else if (\n key === 'Enter' ||\n // we ignore the spacebar select in autocomplete since hitting spacebar might be expected while typing\n (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete && key === ' ')\n ) {\n return SelectActions.CloseSelect;\n }\n }\n\n return undefined;\n}\n\n/**\n * Return the index of an option from an array of options, based on a search string\n *\n * if the filter is multiple iterations of the same letter (e.g \"aaa\"), then cycle through first-letter matches\n **/\nexport function getIndexByLetter(options: string[], filter: string, startIndex = 0): number {\n const orderedOptions = [...options.slice(startIndex), ...options.slice(0, startIndex)];\n const firstMatch = filterOptions(orderedOptions, filter)[0];\n const allSameLetter = (array: string[]): boolean => array.every((letter) => letter === array[0]);\n\n // first check if there is an exact match for the typed string\n if (firstMatch) {\n return options.indexOf(firstMatch);\n }\n\n // if the same letter is being repeated, cycle through first-letter matches\n else if (allSameLetter(filter.split(''))) {\n const matches = filterOptions(orderedOptions, filter[0]);\n return options.indexOf(matches[0]);\n }\n\n // if no matches, return -1\n else {\n return -1;\n }\n}\n\n/**\n * This functions makes sure the optionsIndex is not going out of possible options\n */\nexport function getUpdatedIndex({\n currentIndex,\n maxIndex,\n actionType,\n}: {\n currentIndex: number;\n maxIndex: number;\n actionType: SelectActionsType;\n}): number {\n // On PageUP or PageDown, we jump focus by 10 items or to the first or last element\n // Details: https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html#:~:text=PageUp,to%20last%20option).\n const pageSize = 10;\n\n switch (actionType) {\n case SelectActions.First:\n return 0;\n case SelectActions.Last:\n return maxIndex;\n case SelectActions.Previous:\n return Math.max(0, currentIndex - 1);\n case SelectActions.Next:\n return Math.min(maxIndex, currentIndex + 1);\n case SelectActions.PageUp:\n return Math.max(0, currentIndex - pageSize);\n case SelectActions.PageDown:\n return Math.min(maxIndex, currentIndex + pageSize);\n default:\n return currentIndex;\n }\n}\n\n/**\n * Checks if the given HTML element is visible on screen\n */\nexport function isElementVisibleOnScreen(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/**\n * Checks if element is visible inside the given container\n */\nfunction isElementVisible(container: HTMLElement, element: HTMLElement): boolean {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n\n const isVerticalVisible =\n elementRect.top >= containerRect.top && elementRect.bottom <= containerRect.bottom;\n\n return isVerticalVisible;\n}\n\n/**\n * Checks if the dropdown is scrollable\n */\nexport function isScrollable(element: HTMLElement): boolean {\n return element && element.clientHeight < element.scrollHeight;\n}\n\ntype ActionsType = {\n setIsOpen: DropdownContextType['setIsOpen'];\n close: DropdownContextType['close'];\n selectCurrentOption: () => void;\n onOptionChange: (action: SelectActionsType) => void;\n onComboType: (letter: string, action: SelectActionsType) => void;\n};\n/**\n * Performs the action when actionType is passed\n *\n * This function handles all the keydown actions.\n */\nexport const performAction = (\n action: SelectActionsType,\n payload: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n },\n actions: ActionsType,\n): boolean => {\n const { event } = payload;\n\n switch (action) {\n case SelectActions.Last:\n // @ts-expect-error: intentional fallthrough, ignoring the warning\n case SelectActions.First:\n actions.setIsOpen(true);\n // intentional fallthrough\n case SelectActions.Next:\n case SelectActions.Previous:\n case SelectActions.PageUp:\n case SelectActions.PageDown:\n event.preventDefault();\n actions.onOptionChange(action);\n return true;\n case SelectActions.CloseSelect:\n event.preventDefault();\n actions.selectCurrentOption();\n return true;\n case SelectActions.Close:\n event.preventDefault();\n actions.close();\n return true;\n case SelectActions.Type:\n actions.onComboType(event.key, action);\n return true;\n case SelectActions.Open:\n event.preventDefault();\n actions.setIsOpen(true);\n return true;\n\n default:\n break;\n }\n\n return false;\n};\n\n/**\n * When options list is large, it can have a scrollbar.\n *\n * This function ensures the active option is always in the viewport\n */\nexport const ensureScrollVisiblity = (\n newActiveIndex: number,\n containerElement: HTMLElement | null,\n options: string[],\n): void => {\n // ensure the new option is in view\n if (containerElement) {\n if (isScrollable(containerElement)) {\n const optionEl = containerElement.querySelectorAll<HTMLElement>(\n '[role=\"option\"], [role=\"menuitem\"]',\n );\n // Making sure its the same element as the one from options state\n if (\n newActiveIndex >= 0 &&\n optionEl[newActiveIndex].dataset.value === options[newActiveIndex]\n ) {\n const activeElement = optionEl[newActiveIndex];\n\n if (!isElementVisible(containerElement, activeElement)) {\n activeElement.scrollIntoView({ inline: 'nearest' });\n }\n\n if (!isElementVisibleOnScreen(optionEl[newActiveIndex])) {\n activeElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n }\n }\n};\n\n/**\n * value that is set in the actual form input\n */\nexport const makeInputValue = (selectedIndices: number[], options: OptionsType): string => {\n if (options.length === 0) {\n return '';\n }\n return selectedIndices.map((selectedIndex) => options[selectedIndex]?.value).join(', ');\n};\n\n/**\n * Value that is displayed inside the select field\n */\nexport const makeInputDisplayValue = (selectedIndices: number[], options: OptionsType): string => {\n // When no item is selected or no item is present\n if (options.length === 0 || selectedIndices.length === 0) {\n return '';\n }\n\n // When one item is selected, we display that item's title in input\n if (selectedIndices.length === 1) {\n return options[selectedIndices[0]]?.title;\n }\n\n // When more than one item is selected, we display the count of items\n return `${selectedIndices.length} items selected`;\n};\n\nexport type DropdownPosition = {\n top?: SpacingValueType;\n bottom?: SpacingValueType;\n left?: SpacingValueType;\n right?: SpacingValueType;\n};\n"],"names":["SelectActions","Close","CloseSelect","First","Last","Next","Open","PageDown","PageUp","Previous","Select","Type","filterOptions","options","arguments","length","undefined","filter","exclude","option","matches","toLowerCase","startsWith","includes","getActionFromKey","e","isOpen","dropdownTriggerer","altKey","ctrlKey","metaKey","key","openKeys","dropdownComponentIds","triggers","AutoComplete","getIndexByLetter","startIndex","orderedOptions","concat","_toConsumableArray","slice","firstMatch","allSameLetter","array","every","letter","indexOf","split","getUpdatedIndex","_ref","currentIndex","maxIndex","actionType","pageSize","Math","max","min","isElementVisibleOnScreen","element","bounding","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementVisible","container","containerRect","elementRect","isVerticalVisible","isScrollable","scrollHeight","performAction","action","payload","actions","event","setIsOpen","preventDefault","onOptionChange","selectCurrentOption","close","onComboType","ensureScrollVisiblity","newActiveIndex","containerElement","optionEl","querySelectorAll","dataset","value","activeElement","scrollIntoView","inline","behavior","makeInputValue","selectedIndices","map","selectedIndex","_options$selectedInde","join","makeInputDisplayValue","_options$selectedIndi","title"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdownUtils.js","sources":["../../../../../../src/components/Dropdown/dropdownUtils.ts"],"sourcesContent":["/*\n * This content is licensed according to the W3C Software License at\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * This software or document includes material copied from or derived from\n * https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html.\n * Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang)\n */\n\nimport type { DropdownContextType, OptionsType } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { SpacingValueType } from '~components/Box/BaseBox';\n\nexport type SelectActionsType =\n | 'Close'\n | 'CloseSelect'\n | 'First'\n | 'Last'\n | 'Next'\n | 'Open'\n | 'PageDown'\n | 'PageUp'\n | 'Previous'\n | 'Select'\n | 'Type';\n\n// Save a list of named combobox actions, for future readability\nconst SelectActions: Record<SelectActionsType, SelectActionsType> = {\n Close: 'Close',\n CloseSelect: 'CloseSelect',\n First: 'First',\n Last: 'Last',\n Next: 'Next',\n Open: 'Open',\n PageDown: 'PageDown',\n PageUp: 'PageUp',\n Previous: 'Previous',\n Select: 'Select',\n Type: 'Type',\n};\n\n/**\n * Filter an array of options against an input string\n * returns an array of options that begin with the filter string, case-independent\n *\n */\nexport function filterOptions(\n options: string[] = [],\n filter: string,\n exclude: string[] = [],\n): string[] {\n return options.filter((option) => {\n const matches = option.toLowerCase().startsWith(filter.toLowerCase());\n return matches && !exclude.includes(option);\n });\n}\n\n/**\n * Map a keypress to action\n */\nexport function getActionFromKey(\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n isOpen: boolean,\n dropdownTriggerer: DropdownContextType['dropdownTriggerer'],\n): SelectActionsType | undefined {\n if (!e) {\n return undefined;\n }\n\n const { altKey, ctrlKey, metaKey } = e;\n let key = '';\n if ('key' in e) {\n key = e.key;\n }\n const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action\n if (!key) return undefined;\n // handle opening when closed\n if (!isOpen && key && openKeys.includes(key)) {\n return SelectActions.Open;\n }\n\n // home and end move the selected option when open or closed\n if (key === 'Home') {\n return SelectActions.First;\n }\n if (key === 'End') {\n return SelectActions.Last;\n }\n\n // handle typing characters when open or closed\n if (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n ) {\n return SelectActions.Type;\n }\n\n // handle keys when open\n if (isOpen) {\n if (key === 'ArrowUp' && altKey) {\n return SelectActions.CloseSelect;\n } else if (key === 'ArrowDown' && !altKey) {\n return SelectActions.Next;\n } else if (key === 'ArrowUp') {\n return SelectActions.Previous;\n } else if (key === 'PageUp') {\n return SelectActions.PageUp;\n } else if (key === 'PageDown') {\n return SelectActions.PageDown;\n } else if (key === 'Escape') {\n return SelectActions.Close;\n } else if (\n key === 'Enter' ||\n // we ignore the spacebar select in autocomplete since hitting spacebar might be expected while typing\n (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete &&\n dropdownTriggerer !== dropdownComponentIds.triggers.SearchInput &&\n key === ' ')\n ) {\n return SelectActions.CloseSelect;\n }\n }\n\n return undefined;\n}\n\n/**\n * Return the index of an option from an array of options, based on a search string\n *\n * if the filter is multiple iterations of the same letter (e.g \"aaa\"), then cycle through first-letter matches\n **/\nexport function getIndexByLetter(options: string[], filter: string, startIndex = 0): number {\n const orderedOptions = [...options.slice(startIndex), ...options.slice(0, startIndex)];\n const firstMatch = filterOptions(orderedOptions, filter)[0];\n const allSameLetter = (array: string[]): boolean => array.every((letter) => letter === array[0]);\n\n // first check if there is an exact match for the typed string\n if (firstMatch) {\n return options.indexOf(firstMatch);\n }\n\n // if the same letter is being repeated, cycle through first-letter matches\n else if (allSameLetter(filter.split(''))) {\n const matches = filterOptions(orderedOptions, filter[0]);\n return options.indexOf(matches[0]);\n }\n\n // if no matches, return -1\n else {\n return -1;\n }\n}\n\n/**\n * This functions makes sure the optionsIndex is not going out of possible options\n */\nexport function getUpdatedIndex({\n currentIndex,\n maxIndex,\n actionType,\n}: {\n currentIndex: number;\n maxIndex: number;\n actionType: SelectActionsType;\n}): number {\n // On PageUP or PageDown, we jump focus by 10 items or to the first or last element\n // Details: https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html#:~:text=PageUp,to%20last%20option).\n const pageSize = 10;\n\n switch (actionType) {\n case SelectActions.First:\n return 0;\n case SelectActions.Last:\n return maxIndex;\n case SelectActions.Previous:\n return Math.max(0, currentIndex - 1);\n case SelectActions.Next:\n return Math.min(maxIndex, currentIndex + 1);\n case SelectActions.PageUp:\n return Math.max(0, currentIndex - pageSize);\n case SelectActions.PageDown:\n return Math.min(maxIndex, currentIndex + pageSize);\n default:\n return currentIndex;\n }\n}\n\n/**\n * Checks if the given HTML element is visible on screen\n */\nexport function isElementVisibleOnScreen(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/**\n * Checks if element is visible inside the given container\n */\nfunction isElementVisible(container: HTMLElement, element: HTMLElement): boolean {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n\n const isVerticalVisible =\n elementRect.top >= containerRect.top && elementRect.bottom <= containerRect.bottom;\n\n return isVerticalVisible;\n}\n\n/**\n * Checks if the dropdown is scrollable\n */\nexport function isScrollable(element: HTMLElement): boolean {\n return element && element.clientHeight < element.scrollHeight;\n}\n\ntype ActionsType = {\n setIsOpen: DropdownContextType['setIsOpen'];\n close: DropdownContextType['close'];\n selectCurrentOption: () => void;\n onOptionChange: (action: SelectActionsType) => void;\n onComboType: (letter: string, action: SelectActionsType) => void;\n};\n/**\n * Performs the action when actionType is passed\n *\n * This function handles all the keydown actions.\n */\nexport const performAction = (\n action: SelectActionsType,\n payload: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n },\n actions: ActionsType,\n): boolean => {\n const { event } = payload;\n\n switch (action) {\n case SelectActions.Last:\n // @ts-expect-error: intentional fallthrough, ignoring the warning\n case SelectActions.First:\n actions.setIsOpen(true);\n // intentional fallthrough\n case SelectActions.Next:\n case SelectActions.Previous:\n case SelectActions.PageUp:\n case SelectActions.PageDown:\n event.preventDefault();\n actions.onOptionChange(action);\n return true;\n case SelectActions.CloseSelect:\n event.preventDefault();\n actions.selectCurrentOption();\n return true;\n case SelectActions.Close:\n event.preventDefault();\n actions.close();\n return true;\n case SelectActions.Type:\n actions.onComboType(event.key, action);\n return true;\n case SelectActions.Open:\n event.preventDefault();\n actions.setIsOpen(true);\n return true;\n\n default:\n break;\n }\n\n return false;\n};\n\n/**\n * When options list is large, it can have a scrollbar.\n *\n * This function ensures the active option is always in the viewport\n */\nexport const ensureScrollVisiblity = (\n newActiveIndex: number,\n containerElement: HTMLElement | null,\n options: string[],\n): void => {\n // ensure the new option is in view\n if (containerElement) {\n if (isScrollable(containerElement)) {\n const optionEl = containerElement.querySelectorAll<HTMLElement>(\n '[role=\"option\"], [role=\"menuitem\"]',\n );\n // Making sure its the same element as the one from options state\n if (\n newActiveIndex >= 0 &&\n optionEl[newActiveIndex].dataset.value === options[newActiveIndex]\n ) {\n const activeElement = optionEl[newActiveIndex];\n\n if (!isElementVisible(containerElement, activeElement)) {\n activeElement.scrollIntoView({ inline: 'nearest' });\n }\n\n if (!isElementVisibleOnScreen(optionEl[newActiveIndex])) {\n activeElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n }\n }\n};\n\n/**\n * value that is set in the actual form input\n */\nexport const makeInputValue = (selectedIndices: number[], options: OptionsType): string => {\n if (options.length === 0) {\n return '';\n }\n return selectedIndices.map((selectedIndex) => options[selectedIndex]?.value).join(', ');\n};\n\n/**\n * Value that is displayed inside the select field\n */\nexport const makeInputDisplayValue = (selectedIndices: number[], options: OptionsType): string => {\n // When no item is selected or no item is present\n if (options.length === 0 || selectedIndices.length === 0) {\n return '';\n }\n\n // When one item is selected, we display that item's title in input\n if (selectedIndices.length === 1) {\n return options[selectedIndices[0]]?.title;\n }\n\n // When more than one item is selected, we display the count of items\n return `${selectedIndices.length} items selected`;\n};\n\nexport type DropdownPosition = {\n top?: SpacingValueType;\n bottom?: SpacingValueType;\n left?: SpacingValueType;\n right?: SpacingValueType;\n};\n"],"names":["SelectActions","Close","CloseSelect","First","Last","Next","Open","PageDown","PageUp","Previous","Select","Type","filterOptions","options","arguments","length","undefined","filter","exclude","option","matches","toLowerCase","startsWith","includes","getActionFromKey","e","isOpen","dropdownTriggerer","altKey","ctrlKey","metaKey","key","openKeys","dropdownComponentIds","triggers","AutoComplete","SearchInput","getIndexByLetter","startIndex","orderedOptions","concat","_toConsumableArray","slice","firstMatch","allSameLetter","array","every","letter","indexOf","split","getUpdatedIndex","_ref","currentIndex","maxIndex","actionType","pageSize","Math","max","min","isElementVisibleOnScreen","element","bounding","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementVisible","container","containerRect","elementRect","isVerticalVisible","isScrollable","scrollHeight","performAction","action","payload","actions","event","setIsOpen","preventDefault","onOptionChange","selectCurrentOption","close","onComboType","ensureScrollVisiblity","newActiveIndex","containerElement","optionEl","querySelectorAll","dataset","value","activeElement","scrollIntoView","inline","behavior","makeInputValue","selectedIndices","map","selectedIndex","_options$selectedInde","join","makeInputDisplayValue","_options$selectedIndi","title"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDropdown.js","sources":["../../../../../../src/components/Dropdown/useDropdown.ts"],"sourcesContent":["import React from 'react';\n\nimport {\n ensureScrollVisiblity,\n getActionFromKey,\n getIndexByLetter,\n getUpdatedIndex,\n makeInputDisplayValue,\n makeInputValue,\n performAction,\n} from './dropdownUtils';\nimport type { SelectActionsType } from './dropdownUtils';\nimport type { DropdownProps } from './types';\n\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { FormInputHandleOnKeyDownEvent } from '~components/Form/FormTypes';\nimport { isReactNative } from '~utils';\nimport type { ContainerElementType } from '~utils/types';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = (): void => {};\n\ntype OptionsType = {\n title: string;\n value: string;\n onClickTrigger?: (isSelected: boolean) => void;\n}[];\n\ntype DropdownContextType = {\n isOpen: boolean;\n setIsOpen: (isOpen: boolean) => void;\n close: () => void;\n /**\n * contains the indexes of selected items\n */\n selectedIndices: number[];\n setSelectedIndices: (value: number[]) => void;\n /**\n * contains the indexes of selected items during controlled selection\n */\n controlledValueIndices: number[];\n setControlledValueIndices: (value: number[]) => void;\n /**\n * contains information about all the options inside actionlist\n */\n options: OptionsType;\n setOptions: (value: OptionsType) => void;\n\n /**\n * Filtered values for AutoComplete Inputs\n */\n filteredValues: string[];\n setFilteredValues: (values: string[]) => void;\n\n /** Currently active (focussed) index */\n activeIndex: number;\n setActiveIndex: (value: number) => void;\n\n /** Currently active (focussed) tag */\n activeTagIndex: number;\n setActiveTagIndex: (value: number) => void;\n\n /**\n * Sometimes we want to ignore the blur event to keep dropdown open but not ignore the blur animation from selectinput\n * E.g. When someone clicks on Footer, we just want to ignore the blur event and not the blur animation\n */\n shouldIgnoreBlurAnimation: boolean;\n setShouldIgnoreBlurAnimation: (value: boolean) => void;\n /** Tells you if keyboard was used. Its false by default and turns into true when keydown is called */\n isKeydownPressed: boolean;\n setIsKeydownPressed: (value: boolean) => void;\n /** common baseId which is prepended to multiple other ids inside this dropdown */\n dropdownBaseId: string;\n /** Which element has triggered the dropdown */\n dropdownTriggerer?: 'SelectInput' | 'DropdownButton' | 'AutoComplete' | 'DropdownLink';\n /** ref of triggerer. Used to call focus in certain places */\n triggererRef: React.MutableRefObject<HTMLButtonElement | null>;\n triggererWrapperRef: React.MutableRefObject<ContainerElementType | null>;\n actionListItemRef: React.RefObject<HTMLDivElement | null>;\n isTagDismissedRef: React.RefObject<{ value: boolean } | null>;\n visibleTagsCountRef: React.RefObject<{ value: number } | null>;\n\n selectionType?: DropdownProps['selectionType'];\n /** whether footer has an action item.\n * certain a11y behaviour changes happen here\n * E.g. tabbing moves focus to that action instead of outside\n */\n hasFooterAction: boolean;\n setHasFooterAction: (value: boolean) => void;\n\n /**\n * Apart from dropdownTriggerer prop, we also set this boolean because in BottomSheet, the initial trigger can be Select but also have autocomplete inside of it\n */\n hasAutoCompleteInBottomSheetHeader: boolean;\n setHasAutoCompleteInBottomSheetHeader: (value: boolean) => void;\n\n /**\n * A value that can be used in dependency array to know when Dropdown value is changed.\n *\n * E.g.\n * ```ts\n * useEffect(() => {\n * console.log('Uncontrolled value change');\n * }, [changeCallbackTriggerer])\n * ```\n */\n changeCallbackTriggerer: number;\n setChangeCallbackTriggerer: (changeCallbackTriggerer: number) => void;\n\n /**\n * true when SelectInput has `value` prop (when it is controlled)\n */\n isControlled: boolean;\n setIsControlled: (isControlled: boolean) => void;\n};\n\nconst DropdownContext = React.createContext<DropdownContextType>({\n isOpen: false,\n setIsOpen: noop,\n close: noop,\n selectedIndices: [],\n setSelectedIndices: noop,\n controlledValueIndices: [],\n setControlledValueIndices: noop,\n options: [],\n setOptions: noop,\n filteredValues: [],\n setFilteredValues: noop,\n activeIndex: -1,\n setActiveIndex: noop,\n activeTagIndex: -1,\n setActiveTagIndex: noop,\n shouldIgnoreBlurAnimation: false,\n setShouldIgnoreBlurAnimation: noop,\n hasFooterAction: false,\n setHasFooterAction: noop,\n hasAutoCompleteInBottomSheetHeader: false,\n setHasAutoCompleteInBottomSheetHeader: noop,\n isKeydownPressed: false,\n setIsKeydownPressed: noop,\n changeCallbackTriggerer: 0,\n setChangeCallbackTriggerer: noop,\n isControlled: false,\n setIsControlled: noop,\n dropdownBaseId: '',\n actionListItemRef: {\n current: null,\n },\n triggererRef: {\n current: null,\n },\n isTagDismissedRef: {\n current: null,\n },\n visibleTagsCountRef: {\n current: null,\n },\n triggererWrapperRef: {\n current: null,\n },\n});\n\nlet searchTimeout: number;\nlet searchString = '';\n\ntype UseDropdownReturnValue = DropdownContextType & {\n /**\n * Click event on combobox. Toggles the dropdown\n */\n onTriggerClick: () => void;\n\n /**\n * Keydown event of combobox. Handles most of the keyboard accessibility of dropdown\n */\n onTriggerKeydown: FormInputHandleOnKeyDownEvent | undefined;\n\n /**\n * Handles the click even on option.\n *\n * Contains the logic that selects the option, moves the focus, etc\n */\n onOptionClick: (\n e: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLInputElement>,\n index: number,\n ) => void;\n\n /**\n * Removes the option with given optionsIndex\n */\n removeOption: (index: number) => void;\n\n /**\n * value that is used during form submissions\n */\n value: string;\n /**\n * This is the value that is displayed inside select after selection\n */\n displayValue: string;\n};\n\n/**\n * Handles almost all the functionality of dropdown.\n *\n * Returns the values from DropdownContext along with some helper functions and event handlers\n *\n */\nconst useDropdown = (): UseDropdownReturnValue => {\n const {\n isOpen,\n setIsOpen,\n close,\n selectedIndices,\n setSelectedIndices,\n activeIndex,\n setActiveIndex,\n activeTagIndex,\n setActiveTagIndex,\n visibleTagsCountRef,\n isKeydownPressed,\n setIsKeydownPressed,\n options,\n selectionType,\n changeCallbackTriggerer,\n setChangeCallbackTriggerer,\n isControlled,\n setControlledValueIndices,\n filteredValues,\n dropdownTriggerer,\n ...rest\n } = React.useContext(DropdownContext);\n\n type SelectOptionType = (\n index: number,\n properties?: {\n closeOnSelection?: boolean;\n },\n ) => boolean;\n\n const setIndices = (indices: number[]): void => {\n if (isControlled) {\n setControlledValueIndices(indices);\n } else {\n setSelectedIndices(indices);\n }\n };\n\n const removeOption = (index: number): void => {\n // remove existing item\n const existingItemIndex = selectedIndices.indexOf(index);\n if (existingItemIndex < 0) {\n return;\n }\n\n setIndices([\n ...selectedIndices.slice(0, existingItemIndex),\n ...selectedIndices.slice(existingItemIndex + 1),\n ]);\n };\n\n /**\n * Marks the given index as selected.\n *\n * In single select, it also closes the menu.\n * In multiselect, it keeps the menu open for more selections\n */\n const selectOption: SelectOptionType = (\n index,\n properties = {\n closeOnSelection: true,\n },\n ) => {\n let isSelected = false;\n\n if (index < 0 || index > options.length - 1) {\n return isSelected;\n }\n\n if (selectionType === 'multiple') {\n if (selectedIndices.includes(index)) {\n removeOption(index);\n isSelected = false;\n } else {\n setIndices([...selectedIndices, index]);\n isSelected = true;\n }\n } else {\n setIndices([index]);\n isSelected = true;\n }\n\n // Triggers `onChange` on SelectInput\n setChangeCallbackTriggerer(changeCallbackTriggerer + 1);\n\n if (activeIndex !== index) {\n setActiveIndex(index);\n }\n\n if (properties?.closeOnSelection && selectionType !== 'multiple') {\n close();\n }\n\n return isSelected;\n };\n\n /**\n * Click listener for combobox (or any triggerer of the dropdown)\n */\n const onTriggerClick = (): void => {\n if (isOpen) {\n close();\n } else {\n setIsOpen(true);\n }\n };\n\n /**\n * Function that we call when we want to move focus from one option to other\n */\n const onOptionChange = (actionType: SelectActionsType, index?: number): void => {\n setActiveTagIndex(-1);\n const newIndex = index ?? activeIndex;\n let updatedIndex: number;\n const hasAutoComplete =\n rest.hasAutoCompleteInBottomSheetHeader ||\n dropdownTriggerer === dropdownComponentIds.triggers.AutoComplete;\n if (hasAutoComplete && filteredValues.length > 0) {\n // When its autocomplete, we don't loop over all options. We only loop on filtered options\n\n const filteredIndexes = filteredValues\n .map((filteredValue) => options.findIndex((option) => option.value === filteredValue))\n .sort((a, b) => a - b);\n\n updatedIndex =\n filteredIndexes[\n getUpdatedIndex({\n currentIndex: filteredIndexes.indexOf(newIndex),\n maxIndex: filteredIndexes.length - 1,\n actionType,\n })\n ];\n } else {\n updatedIndex = getUpdatedIndex({\n currentIndex: newIndex,\n maxIndex: options.length - 1,\n actionType,\n });\n }\n setActiveIndex(updatedIndex);\n\n const optionValues = options.map((option) => option.value);\n ensureScrollVisiblity(updatedIndex, rest.actionListItemRef.current, optionValues);\n };\n\n /**\n * Click handler when user clicks on any particular option.\n *\n * It\n * - changes the option focus\n * - selects that option\n * - moves focus to combobox\n */\n const onOptionClick = (\n e: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLInputElement>,\n index: number,\n ): void => {\n const actionType = getActionFromKey(e, isOpen, dropdownTriggerer);\n if (typeof actionType === 'number') {\n onOptionChange(actionType, index);\n }\n selectOption(index);\n if (!isReactNative()) {\n rest.triggererRef.current?.focus();\n }\n };\n\n /**\n * Function we call to handle the typeahead.\n *\n * It takes a letter, stores that letter in searchString (and clears it after timeout) to maintain a word\n *\n * Then searches for that word in options and moves focus there.\n */\n const onComboType = (letter: string, actionType: SelectActionsType): void => {\n // open the listbox if it is closed\n setIsOpen(true);\n\n if (\n rest.hasAutoCompleteInBottomSheetHeader ||\n dropdownTriggerer === dropdownComponentIds.triggers.AutoComplete\n ) {\n return;\n }\n\n if (typeof searchTimeout === 'number') {\n window.clearTimeout(searchTimeout);\n }\n\n searchTimeout = window.setTimeout(() => {\n searchString = '';\n }, 500);\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n searchString = searchString + letter;\n const optionTitles = options.map((option) => option.title);\n const searchIndex = getIndexByLetter(optionTitles, searchString, activeIndex + 1);\n\n // if a match was found, go to it\n if (searchIndex >= 0) {\n onOptionChange(actionType, searchIndex);\n }\n // if no matches, clear the timeout and search string\n else {\n window.clearTimeout(searchTimeout);\n searchString = '';\n }\n };\n\n /**\n * Keydown event of combobox. Handles most of the keyboard accessibility of dropdown\n */\n const onTriggerKeydown = (e: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n }): void => {\n if (!isKeydownPressed && ![' ', 'Enter', 'Escape', 'Meta'].includes(e.event.key)) {\n // When keydown is not already pressed and its not Enter, Space, Command, or Escape key (those are generic keys and we only want to handle arrow keys or home buttons etc)\n setIsKeydownPressed(true);\n }\n\n const actionType = getActionFromKey(e.event, isOpen, dropdownTriggerer);\n\n if (actionType) {\n performAction(actionType, e, {\n setIsOpen,\n close,\n onOptionChange,\n onComboType,\n selectCurrentOption: () => {\n if (activeIndex < 0) {\n return;\n }\n\n const isSelected = selectOption(activeIndex);\n if (rest.hasFooterAction && !isReactNative()) {\n rest.triggererRef.current?.focus();\n }\n\n options[activeIndex].onClickTrigger?.(isSelected);\n },\n });\n }\n };\n\n return {\n isOpen,\n setIsOpen,\n close,\n selectedIndices,\n setSelectedIndices,\n filteredValues,\n removeOption,\n setControlledValueIndices,\n onTriggerClick,\n onTriggerKeydown,\n onOptionClick,\n activeIndex,\n setActiveIndex,\n activeTagIndex,\n setActiveTagIndex,\n visibleTagsCountRef,\n isKeydownPressed,\n setIsKeydownPressed,\n changeCallbackTriggerer,\n setChangeCallbackTriggerer,\n isControlled,\n options,\n value: makeInputValue(selectedIndices, options),\n displayValue: makeInputDisplayValue(selectedIndices, options),\n selectionType,\n dropdownTriggerer,\n ...rest,\n };\n};\n\nexport type { DropdownContextType, OptionsType };\nexport { useDropdown, DropdownContext };\n"],"names":["noop","DropdownContext","React","createContext","isOpen","setIsOpen","close","selectedIndices","setSelectedIndices","controlledValueIndices","setControlledValueIndices","options","setOptions","filteredValues","setFilteredValues","activeIndex","setActiveIndex","activeTagIndex","setActiveTagIndex","shouldIgnoreBlurAnimation","setShouldIgnoreBlurAnimation","hasFooterAction","setHasFooterAction","hasAutoCompleteInBottomSheetHeader","setHasAutoCompleteInBottomSheetHeader","isKeydownPressed","setIsKeydownPressed","changeCallbackTriggerer","setChangeCallbackTriggerer","isControlled","setIsControlled","dropdownBaseId","actionListItemRef","current","triggererRef","isTagDismissedRef","visibleTagsCountRef","triggererWrapperRef","searchTimeout","searchString","useDropdown","_React$useContext","useContext","selectionType","dropdownTriggerer","rest","_objectWithoutProperties","_excluded","setIndices","indices","removeOption","index","existingItemIndex","indexOf","concat","_toConsumableArray","slice","selectOption","properties","arguments","length","undefined","closeOnSelection","isSelected","includes","onTriggerClick","onOptionChange","actionType","newIndex","updatedIndex","hasAutoComplete","dropdownComponentIds","triggers","AutoComplete","filteredIndexes","map","filteredValue","findIndex","option","value","sort","a","b","getUpdatedIndex","currentIndex","maxIndex","optionValues","ensureScrollVisiblity","onOptionClick","e","getActionFromKey","isReactNative","_rest$triggererRef$cu","focus","onComboType","letter","window","clearTimeout","setTimeout","optionTitles","title","searchIndex","getIndexByLetter","onTriggerKeydown","event","key","performAction","selectCurrentOption","_options$activeIndex$","_options$activeIndex","_rest$triggererRef$cu2","onClickTrigger","call","_objectSpread","makeInputValue","displayValue","makeInputDisplayValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDropdown.js","sources":["../../../../../../src/components/Dropdown/useDropdown.ts"],"sourcesContent":["import React from 'react';\n\nimport {\n ensureScrollVisiblity,\n getActionFromKey,\n getIndexByLetter,\n getUpdatedIndex,\n makeInputDisplayValue,\n makeInputValue,\n performAction,\n} from './dropdownUtils';\nimport type { SelectActionsType } from './dropdownUtils';\nimport type { DropdownProps } from './types';\n\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { FormInputHandleOnKeyDownEvent } from '~components/Form/FormTypes';\nimport { isReactNative } from '~utils';\nimport type { ContainerElementType } from '~utils/types';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = (): void => {};\n\ntype OptionsType = {\n title: string;\n value: string;\n onClickTrigger?: (isSelected: boolean) => void;\n}[];\n\ntype DropdownContextType = {\n isOpen: boolean;\n setIsOpen: (isOpen: boolean) => void;\n close: () => void;\n /**\n * contains the indexes of selected items\n */\n selectedIndices: number[];\n setSelectedIndices: (value: number[]) => void;\n /**\n * contains the indexes of selected items during controlled selection\n */\n controlledValueIndices: number[];\n setControlledValueIndices: (value: number[]) => void;\n /**\n * contains information about all the options inside actionlist\n */\n options: OptionsType;\n setOptions: (value: OptionsType) => void;\n\n /**\n * Filtered values for AutoComplete Inputs\n */\n filteredValues: string[];\n setFilteredValues: (values: string[]) => void;\n\n /** Currently active (focussed) index */\n activeIndex: number;\n setActiveIndex: (value: number) => void;\n\n /** Currently active (focussed) tag */\n activeTagIndex: number;\n setActiveTagIndex: (value: number) => void;\n\n /**\n * Sometimes we want to ignore the blur event to keep dropdown open but not ignore the blur animation from selectinput\n * E.g. When someone clicks on Footer, we just want to ignore the blur event and not the blur animation\n */\n shouldIgnoreBlurAnimation: boolean;\n setShouldIgnoreBlurAnimation: (value: boolean) => void;\n /** Tells you if keyboard was used. Its false by default and turns into true when keydown is called */\n isKeydownPressed: boolean;\n setIsKeydownPressed: (value: boolean) => void;\n /** common baseId which is prepended to multiple other ids inside this dropdown */\n dropdownBaseId: string;\n /** Which element has triggered the dropdown */\n dropdownTriggerer?:\n | 'SelectInput'\n | 'DropdownButton'\n | 'AutoComplete'\n | 'DropdownLink'\n | 'SearchInput';\n /** ref of triggerer. Used to call focus in certain places */\n triggererRef: React.MutableRefObject<HTMLButtonElement | null>;\n triggererWrapperRef: React.MutableRefObject<ContainerElementType | null>;\n actionListItemRef: React.RefObject<HTMLDivElement | null>;\n isTagDismissedRef: React.RefObject<{ value: boolean } | null>;\n visibleTagsCountRef: React.RefObject<{ value: number } | null>;\n\n selectionType?: DropdownProps['selectionType'];\n /** whether footer has an action item.\n * certain a11y behaviour changes happen here\n * E.g. tabbing moves focus to that action instead of outside\n */\n hasFooterAction: boolean;\n setHasFooterAction: (value: boolean) => void;\n\n /**\n * Apart from dropdownTriggerer prop, we also set this boolean because in BottomSheet, the initial trigger can be Select but also have autocomplete inside of it\n */\n hasAutoCompleteInBottomSheetHeader: boolean;\n setHasAutoCompleteInBottomSheetHeader: (value: boolean) => void;\n\n /**\n * A value that can be used in dependency array to know when Dropdown value is changed.\n *\n * E.g.\n * ```ts\n * useEffect(() => {\n * console.log('Uncontrolled value change');\n * }, [changeCallbackTriggerer])\n * ```\n */\n changeCallbackTriggerer: number;\n setChangeCallbackTriggerer: (changeCallbackTriggerer: number) => void;\n\n /**\n * true when SelectInput has `value` prop (when it is controlled)\n */\n isControlled: boolean;\n setIsControlled: (isControlled: boolean) => void;\n};\n\nconst DropdownContext = React.createContext<DropdownContextType>({\n isOpen: false,\n setIsOpen: noop,\n close: noop,\n selectedIndices: [],\n setSelectedIndices: noop,\n controlledValueIndices: [],\n setControlledValueIndices: noop,\n options: [],\n setOptions: noop,\n filteredValues: [],\n setFilteredValues: noop,\n activeIndex: -1,\n setActiveIndex: noop,\n activeTagIndex: -1,\n setActiveTagIndex: noop,\n shouldIgnoreBlurAnimation: false,\n setShouldIgnoreBlurAnimation: noop,\n hasFooterAction: false,\n setHasFooterAction: noop,\n hasAutoCompleteInBottomSheetHeader: false,\n setHasAutoCompleteInBottomSheetHeader: noop,\n isKeydownPressed: false,\n setIsKeydownPressed: noop,\n changeCallbackTriggerer: 0,\n setChangeCallbackTriggerer: noop,\n isControlled: false,\n setIsControlled: noop,\n dropdownBaseId: '',\n actionListItemRef: {\n current: null,\n },\n triggererRef: {\n current: null,\n },\n isTagDismissedRef: {\n current: null,\n },\n visibleTagsCountRef: {\n current: null,\n },\n triggererWrapperRef: {\n current: null,\n },\n});\n\nlet searchTimeout: number;\nlet searchString = '';\n\ntype UseDropdownReturnValue = DropdownContextType & {\n /**\n * Click event on combobox. Toggles the dropdown\n */\n onTriggerClick: () => void;\n\n /**\n * Keydown event of combobox. Handles most of the keyboard accessibility of dropdown\n */\n onTriggerKeydown: FormInputHandleOnKeyDownEvent | undefined;\n\n /**\n * Handles the click even on option.\n *\n * Contains the logic that selects the option, moves the focus, etc\n */\n onOptionClick: (\n e: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLInputElement>,\n index: number,\n ) => void;\n\n /**\n * Removes the option with given optionsIndex\n */\n removeOption: (index: number) => void;\n\n /**\n * value that is used during form submissions\n */\n value: string;\n /**\n * This is the value that is displayed inside select after selection\n */\n displayValue: string;\n};\n\n/**\n * Handles almost all the functionality of dropdown.\n *\n * Returns the values from DropdownContext along with some helper functions and event handlers\n *\n */\nconst useDropdown = (): UseDropdownReturnValue => {\n const {\n isOpen,\n setIsOpen,\n close,\n selectedIndices,\n setSelectedIndices,\n activeIndex,\n setActiveIndex,\n activeTagIndex,\n setActiveTagIndex,\n visibleTagsCountRef,\n isKeydownPressed,\n setIsKeydownPressed,\n options,\n selectionType,\n changeCallbackTriggerer,\n setChangeCallbackTriggerer,\n isControlled,\n setControlledValueIndices,\n filteredValues,\n dropdownTriggerer,\n ...rest\n } = React.useContext(DropdownContext);\n\n type SelectOptionType = (\n index: number,\n properties?: {\n closeOnSelection?: boolean;\n },\n ) => boolean;\n\n const setIndices = (indices: number[]): void => {\n if (isControlled) {\n setControlledValueIndices(indices);\n } else {\n setSelectedIndices(indices);\n }\n };\n\n const removeOption = (index: number): void => {\n // remove existing item\n const existingItemIndex = selectedIndices.indexOf(index);\n if (existingItemIndex < 0) {\n return;\n }\n\n setIndices([\n ...selectedIndices.slice(0, existingItemIndex),\n ...selectedIndices.slice(existingItemIndex + 1),\n ]);\n };\n\n /**\n * Marks the given index as selected.\n *\n * In single select, it also closes the menu.\n * In multiselect, it keeps the menu open for more selections\n */\n const selectOption: SelectOptionType = (\n index,\n properties = {\n closeOnSelection: true,\n },\n ) => {\n let isSelected = false;\n\n if (index < 0 || index > options.length - 1) {\n return isSelected;\n }\n\n if (selectionType === 'multiple') {\n if (selectedIndices.includes(index)) {\n removeOption(index);\n isSelected = false;\n } else {\n setIndices([...selectedIndices, index]);\n isSelected = true;\n }\n } else {\n setIndices([index]);\n isSelected = true;\n }\n\n // Triggers `onChange` on SelectInput\n setChangeCallbackTriggerer(changeCallbackTriggerer + 1);\n\n if (activeIndex !== index) {\n setActiveIndex(index);\n }\n\n if (properties?.closeOnSelection && selectionType !== 'multiple') {\n close();\n }\n\n return isSelected;\n };\n\n /**\n * Click listener for combobox (or any triggerer of the dropdown)\n */\n const onTriggerClick = (): void => {\n if (isOpen) {\n close();\n } else {\n setIsOpen(true);\n }\n };\n\n /**\n * Function that we call when we want to move focus from one option to other\n */\n const onOptionChange = (actionType: SelectActionsType, index?: number): void => {\n setActiveTagIndex(-1);\n const newIndex = index ?? activeIndex;\n let updatedIndex: number;\n const hasAutoComplete =\n rest.hasAutoCompleteInBottomSheetHeader ||\n dropdownTriggerer === dropdownComponentIds.triggers.AutoComplete;\n if (hasAutoComplete && filteredValues.length > 0) {\n // When its autocomplete, we don't loop over all options. We only loop on filtered options\n\n const filteredIndexes = filteredValues\n .map((filteredValue) => options.findIndex((option) => option.value === filteredValue))\n .sort((a, b) => a - b);\n\n updatedIndex =\n filteredIndexes[\n getUpdatedIndex({\n currentIndex: filteredIndexes.indexOf(newIndex),\n maxIndex: filteredIndexes.length - 1,\n actionType,\n })\n ];\n } else {\n updatedIndex = getUpdatedIndex({\n currentIndex: newIndex,\n maxIndex: options.length - 1,\n actionType,\n });\n }\n setActiveIndex(updatedIndex);\n\n const optionValues = options.map((option) => option.value);\n ensureScrollVisiblity(updatedIndex, rest.actionListItemRef.current, optionValues);\n };\n\n /**\n * Click handler when user clicks on any particular option.\n *\n * It\n * - changes the option focus\n * - selects that option\n * - moves focus to combobox\n */\n const onOptionClick = (\n e: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLInputElement>,\n index: number,\n ): void => {\n const actionType = getActionFromKey(e, isOpen, dropdownTriggerer);\n if (typeof actionType === 'number') {\n onOptionChange(actionType, index);\n }\n selectOption(index);\n if (!isReactNative()) {\n rest.triggererRef.current?.focus();\n }\n };\n\n /**\n * Function we call to handle the typeahead.\n *\n * It takes a letter, stores that letter in searchString (and clears it after timeout) to maintain a word\n *\n * Then searches for that word in options and moves focus there.\n */\n const onComboType = (letter: string, actionType: SelectActionsType): void => {\n // open the listbox if it is closed\n setIsOpen(true);\n\n if (\n rest.hasAutoCompleteInBottomSheetHeader ||\n dropdownTriggerer === dropdownComponentIds.triggers.AutoComplete\n ) {\n return;\n }\n\n if (typeof searchTimeout === 'number') {\n window.clearTimeout(searchTimeout);\n }\n\n searchTimeout = window.setTimeout(() => {\n searchString = '';\n }, 500);\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n searchString = searchString + letter;\n const optionTitles = options.map((option) => option.title);\n const searchIndex = getIndexByLetter(optionTitles, searchString, activeIndex + 1);\n\n // if a match was found, go to it\n if (searchIndex >= 0) {\n onOptionChange(actionType, searchIndex);\n }\n // if no matches, clear the timeout and search string\n else {\n window.clearTimeout(searchTimeout);\n searchString = '';\n }\n };\n\n /**\n * Keydown event of combobox. Handles most of the keyboard accessibility of dropdown\n */\n const onTriggerKeydown = (e: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n }): void => {\n if (!isKeydownPressed && ![' ', 'Enter', 'Escape', 'Meta'].includes(e.event.key)) {\n // When keydown is not already pressed and its not Enter, Space, Command, or Escape key (those are generic keys and we only want to handle arrow keys or home buttons etc)\n setIsKeydownPressed(true);\n }\n\n const actionType = getActionFromKey(e.event, isOpen, dropdownTriggerer);\n\n if (actionType) {\n performAction(actionType, e, {\n setIsOpen,\n close,\n onOptionChange,\n onComboType,\n selectCurrentOption: () => {\n if (activeIndex < 0) {\n return;\n }\n\n const isSelected = selectOption(activeIndex);\n if (rest.hasFooterAction && !isReactNative()) {\n rest.triggererRef.current?.focus();\n }\n\n options[activeIndex].onClickTrigger?.(isSelected);\n },\n });\n }\n };\n\n return {\n isOpen,\n setIsOpen,\n close,\n selectedIndices,\n setSelectedIndices,\n filteredValues,\n removeOption,\n setControlledValueIndices,\n onTriggerClick,\n onTriggerKeydown,\n onOptionClick,\n activeIndex,\n setActiveIndex,\n activeTagIndex,\n setActiveTagIndex,\n visibleTagsCountRef,\n isKeydownPressed,\n setIsKeydownPressed,\n changeCallbackTriggerer,\n setChangeCallbackTriggerer,\n isControlled,\n options,\n value: makeInputValue(selectedIndices, options),\n displayValue: makeInputDisplayValue(selectedIndices, options),\n selectionType,\n dropdownTriggerer,\n ...rest,\n };\n};\n\nexport type { DropdownContextType, OptionsType };\nexport { useDropdown, DropdownContext };\n"],"names":["noop","DropdownContext","React","createContext","isOpen","setIsOpen","close","selectedIndices","setSelectedIndices","controlledValueIndices","setControlledValueIndices","options","setOptions","filteredValues","setFilteredValues","activeIndex","setActiveIndex","activeTagIndex","setActiveTagIndex","shouldIgnoreBlurAnimation","setShouldIgnoreBlurAnimation","hasFooterAction","setHasFooterAction","hasAutoCompleteInBottomSheetHeader","setHasAutoCompleteInBottomSheetHeader","isKeydownPressed","setIsKeydownPressed","changeCallbackTriggerer","setChangeCallbackTriggerer","isControlled","setIsControlled","dropdownBaseId","actionListItemRef","current","triggererRef","isTagDismissedRef","visibleTagsCountRef","triggererWrapperRef","searchTimeout","searchString","useDropdown","_React$useContext","useContext","selectionType","dropdownTriggerer","rest","_objectWithoutProperties","_excluded","setIndices","indices","removeOption","index","existingItemIndex","indexOf","concat","_toConsumableArray","slice","selectOption","properties","arguments","length","undefined","closeOnSelection","isSelected","includes","onTriggerClick","onOptionChange","actionType","newIndex","updatedIndex","hasAutoComplete","dropdownComponentIds","triggers","AutoComplete","filteredIndexes","map","filteredValue","findIndex","option","value","sort","a","b","getUpdatedIndex","currentIndex","maxIndex","optionValues","ensureScrollVisiblity","onOptionClick","e","getActionFromKey","isReactNative","_rest$triggererRef$cu","focus","onComboType","letter","window","clearTimeout","setTimeout","optionTitles","title","searchIndex","getIndexByLetter","onTriggerKeydown","event","key","performAction","selectCurrentOption","_options$activeIndex$","_options$activeIndex","_rest$triggererRef$cu2","onClickTrigger","call","_objectSpread","makeInputValue","displayValue","makeInputDisplayValue"],"mappings":"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"}
|
|
@@ -177,7 +177,7 @@ var BaseInputVisuals = function BaseInputVisuals(_ref6) {
|
|
|
177
177
|
display: "flex",
|
|
178
178
|
children: /*#__PURE__*/jsx(LeadingIcon, {
|
|
179
179
|
size: iconSize[size],
|
|
180
|
-
color: isDisabled ? 'surface.icon.gray.disabled' : 'surface.icon.gray.
|
|
180
|
+
color: isDisabled ? 'surface.icon.gray.disabled' : 'surface.icon.gray.muted'
|
|
181
181
|
})
|
|
182
182
|
}) : null, hasPrefix ? /*#__PURE__*/jsx(BaseBox, _objectSpread(_objectSpread({}, getPrefixStyles({
|
|
183
183
|
hasLeadingIcon: hasLeadingIcon,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseInputVisuals.js","sources":["../../../../../../../src/components/Input/BaseInput/BaseInputVisuals.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React from 'react';\nimport type { ReactElement } from 'react';\nimport type { BaseInputProps } from './BaseInput';\nimport BaseBox from '~components/Box/BaseBox';\nimport { Text } from '~components/Typography';\nimport type { BaseBoxProps, SpacingValueType } from '~components/Box/BaseBox';\nimport type { IconColors } from '~components/Icons';\nimport { isValidAllowedChildren } from '~utils/isValidAllowedChildren';\nimport { throwBladeError } from '~utils/logger';\n\ntype InputVisuals = Pick<\n BaseInputProps,\n | 'leadingIcon'\n | 'prefix'\n | 'trailingInteractionElement'\n | 'leadingInteractionElement'\n | 'suffix'\n | 'trailingIcon'\n | 'isDisabled'\n | 'validationState'\n | 'size'\n | 'trailingButton'\n> & {\n size: NonNullable<BaseInputProps['size']>;\n};\n\nconst getVisualContainerStyles = (): Pick<\n BaseBoxProps,\n 'display' | 'flexDirection' | 'alignItems' | 'alignSelf'\n> => ({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'center',\n});\n\nconst trailingIconColor: Record<NonNullable<InputVisuals['validationState']>, IconColors> = {\n none: 'surface.icon.gray.subtle',\n error: 'feedback.icon.negative.intense',\n success: 'feedback.icon.positive.intense',\n};\n\nconst iconSize = {\n medium: 'medium',\n large: 'large',\n} as const;\n\nconst textSize = {\n medium: 'medium',\n large: 'large',\n} as const;\n\nconst getPrefixStyles = ({\n hasLeadingIcon,\n hasPrefix,\n}: {\n hasLeadingIcon: boolean;\n hasPrefix: boolean;\n}): Pick<BaseBoxProps, 'paddingLeft'> => {\n if (hasPrefix && hasLeadingIcon) {\n return {\n paddingLeft: 'spacing.3',\n };\n }\n\n if (hasPrefix && !hasLeadingIcon) {\n return {\n paddingLeft: 'spacing.4',\n };\n }\n\n return {\n paddingLeft: 'spacing.0',\n };\n};\n\nconst getInteractionElementStyles = ({\n hasTrailingIcon,\n hasLeadingInteractionElement,\n hasTrailingInteractionElement,\n hasSuffix,\n hasTrailingButton,\n}: {\n hasTrailingIcon: boolean;\n hasLeadingInteractionElement?: boolean;\n hasTrailingInteractionElement?: boolean;\n hasSuffix: boolean;\n hasTrailingButton: boolean;\n}): SpacingValueType => {\n if (hasTrailingInteractionElement && (hasSuffix || hasTrailingIcon || hasTrailingButton)) {\n return 'spacing.2';\n }\n\n if (hasTrailingInteractionElement && !hasSuffix && !hasTrailingIcon && !hasTrailingButton) {\n return 'spacing.4';\n }\n\n if (hasLeadingInteractionElement) {\n return 'spacing.3';\n }\n\n return 'spacing.0';\n};\n\nconst getSuffixStyles = ({\n hasTrailingIcon,\n hasSuffix,\n hasTrailingButton,\n}: {\n hasTrailingIcon: boolean;\n hasSuffix: boolean;\n hasTrailingButton: boolean;\n}): Pick<BaseBoxProps, 'paddingRight'> => {\n if (hasSuffix && (hasTrailingIcon || hasTrailingButton)) {\n return {\n paddingRight: 'spacing.3',\n };\n }\n\n if (hasSuffix && !hasTrailingIcon && !hasTrailingButton) {\n return {\n paddingRight: 'spacing.4',\n };\n }\n\n return {\n paddingRight: 'spacing.0',\n };\n};\n\nconst getTrailingIconStyles = ({\n hasTrailingIcon,\n hasTrailingButton,\n}: {\n hasTrailingIcon: boolean;\n hasTrailingButton: boolean;\n}): Pick<BaseBoxProps, 'paddingRight'> => {\n if (hasTrailingIcon && hasTrailingButton) {\n return {\n paddingRight: 'spacing.3',\n };\n }\n\n if (hasTrailingIcon && !hasTrailingButton) {\n return {\n paddingRight: 'spacing.4',\n };\n }\n\n return {\n paddingRight: 'spacing.0',\n };\n};\n\nexport const getInputVisualsToBeRendered = ({\n leadingIcon,\n prefix,\n trailingInteractionElement,\n leadingInteractionElement,\n suffix,\n trailingIcon,\n trailingButton,\n}: InputVisuals) => ({\n hasLeadingIcon: Boolean(leadingIcon),\n hasPrefix: Boolean(prefix),\n hasTrailingInteractionElement: Boolean(trailingInteractionElement),\n hasLeadingInteractionElement: Boolean(leadingInteractionElement),\n hasSuffix: Boolean(suffix),\n hasTrailingIcon: Boolean(trailingIcon),\n hasTrailingButton: Boolean(trailingButton),\n});\n\nexport const BaseInputVisuals = ({\n leadingIcon: LeadingIcon,\n prefix,\n trailingInteractionElement,\n leadingInteractionElement,\n suffix,\n trailingIcon: TrailingIcon,\n isDisabled,\n validationState = 'none',\n size,\n trailingButton: TrailingButton,\n}: InputVisuals): ReactElement | null => {\n const {\n hasLeadingIcon,\n hasPrefix,\n hasSuffix,\n hasTrailingInteractionElement,\n hasLeadingInteractionElement,\n hasTrailingIcon,\n hasTrailingButton,\n } = getInputVisualsToBeRendered({\n leadingIcon: LeadingIcon,\n prefix,\n leadingInteractionElement,\n trailingInteractionElement,\n suffix,\n trailingIcon: TrailingIcon,\n trailingButton: TrailingButton,\n size,\n });\n\n const hasLeadingVisuals = hasLeadingInteractionElement || hasLeadingIcon || hasPrefix;\n const hasTrailingVisuals =\n hasTrailingInteractionElement || hasSuffix || hasTrailingIcon || hasTrailingButton;\n\n if (__DEV__) {\n if (hasTrailingButton && !isValidAllowedChildren(TrailingButton, 'Link')) {\n throwBladeError({\n message: 'trailingButton must be a valid Blade Link component',\n moduleName: 'BaseInput',\n });\n }\n }\n\n if (hasLeadingVisuals) {\n return (\n <BaseBox {...getVisualContainerStyles()}>\n {hasLeadingInteractionElement ? (\n <BaseBox\n paddingLeft={getInteractionElementStyles({\n hasTrailingIcon,\n hasLeadingInteractionElement,\n hasSuffix,\n hasTrailingButton,\n })}\n display=\"flex\"\n alignItems=\"stretch\"\n alignSelf=\"stretch\"\n >\n {leadingInteractionElement}\n </BaseBox>\n ) : null}\n {LeadingIcon ? (\n <BaseBox paddingLeft=\"spacing.4\" display=\"flex\">\n <LeadingIcon\n size={iconSize[size]}\n color={isDisabled ? 'surface.icon.gray.disabled' : 'surface.icon.gray.subtle'}\n />\n </BaseBox>\n ) : null}\n {hasPrefix ? (\n <BaseBox {...getPrefixStyles({ hasLeadingIcon, hasPrefix })}>\n <Text\n size={textSize[size]}\n variant=\"body\"\n weight=\"regular\"\n color={isDisabled ? 'surface.text.gray.disabled' : 'surface.text.gray.subtle'}\n >\n {prefix}\n </Text>\n </BaseBox>\n ) : null}\n </BaseBox>\n );\n }\n\n if (hasTrailingVisuals) {\n return (\n <BaseBox alignSelf=\"stretch\" alignItems=\"stretch\" {...getVisualContainerStyles()}>\n {hasTrailingInteractionElement ? (\n <BaseBox\n paddingRight={getInteractionElementStyles({\n hasTrailingIcon,\n hasTrailingInteractionElement,\n hasSuffix,\n hasTrailingButton,\n })}\n display=\"flex\"\n alignItems=\"stretch\"\n alignSelf=\"stretch\"\n >\n {trailingInteractionElement}\n </BaseBox>\n ) : null}\n {hasSuffix ? (\n <BaseBox {...getSuffixStyles({ hasTrailingIcon, hasSuffix, hasTrailingButton })}>\n <Text\n size={textSize[size]}\n variant=\"body\"\n weight=\"regular\"\n color={isDisabled ? 'surface.text.gray.disabled' : 'surface.text.gray.subtle'}\n >\n {suffix}\n </Text>\n </BaseBox>\n ) : null}\n {TrailingIcon ? (\n <BaseBox\n display=\"flex\"\n {...getTrailingIconStyles({ hasTrailingIcon, hasTrailingButton })}\n >\n <TrailingIcon\n size={iconSize[size]}\n color={\n isDisabled ? 'interactive.icon.gray.disabled' : trailingIconColor[validationState]\n }\n />\n </BaseBox>\n ) : null}\n {TrailingButton ? (\n <BaseBox paddingRight=\"spacing.4\" display=\"flex\">\n {React.cloneElement(TrailingButton, {\n size,\n variant: 'button',\n isDisabled,\n })}\n </BaseBox>\n ) : null}\n </BaseBox>\n );\n }\n\n return null;\n};\n"],"names":["getVisualContainerStyles","display","flexDirection","alignItems","alignSelf","trailingIconColor","none","error","success","iconSize","medium","large","textSize","getPrefixStyles","_ref","hasLeadingIcon","hasPrefix","paddingLeft","getInteractionElementStyles","_ref2","hasTrailingIcon","hasLeadingInteractionElement","hasTrailingInteractionElement","hasSuffix","hasTrailingButton","getSuffixStyles","_ref3","paddingRight","getTrailingIconStyles","_ref4","getInputVisualsToBeRendered","_ref5","leadingIcon","prefix","trailingInteractionElement","leadingInteractionElement","suffix","trailingIcon","trailingButton","Boolean","BaseInputVisuals","_ref6","LeadingIcon","TrailingIcon","isDisabled","_ref6$validationState","validationState","size","TrailingButton","_getInputVisualsToBeR","hasLeadingVisuals","hasTrailingVisuals","isValidAllowedChildren","throwBladeError","message","moduleName","_jsxs","BaseBox","_objectSpread","children","_jsx","color","Text","variant","weight","React","cloneElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseInputVisuals.js","sources":["../../../../../../../src/components/Input/BaseInput/BaseInputVisuals.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React from 'react';\nimport type { ReactElement } from 'react';\nimport type { BaseInputProps } from './BaseInput';\nimport BaseBox from '~components/Box/BaseBox';\nimport { Text } from '~components/Typography';\nimport type { BaseBoxProps, SpacingValueType } from '~components/Box/BaseBox';\nimport type { IconColors } from '~components/Icons';\nimport { isValidAllowedChildren } from '~utils/isValidAllowedChildren';\nimport { throwBladeError } from '~utils/logger';\n\ntype InputVisuals = Pick<\n BaseInputProps,\n | 'leadingIcon'\n | 'prefix'\n | 'trailingInteractionElement'\n | 'leadingInteractionElement'\n | 'suffix'\n | 'trailingIcon'\n | 'isDisabled'\n | 'validationState'\n | 'size'\n | 'trailingButton'\n> & {\n size: NonNullable<BaseInputProps['size']>;\n};\n\nconst getVisualContainerStyles = (): Pick<\n BaseBoxProps,\n 'display' | 'flexDirection' | 'alignItems' | 'alignSelf'\n> => ({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'center',\n});\n\nconst trailingIconColor: Record<NonNullable<InputVisuals['validationState']>, IconColors> = {\n none: 'surface.icon.gray.subtle',\n error: 'feedback.icon.negative.intense',\n success: 'feedback.icon.positive.intense',\n};\n\nconst iconSize = {\n medium: 'medium',\n large: 'large',\n} as const;\n\nconst textSize = {\n medium: 'medium',\n large: 'large',\n} as const;\n\nconst getPrefixStyles = ({\n hasLeadingIcon,\n hasPrefix,\n}: {\n hasLeadingIcon: boolean;\n hasPrefix: boolean;\n}): Pick<BaseBoxProps, 'paddingLeft'> => {\n if (hasPrefix && hasLeadingIcon) {\n return {\n paddingLeft: 'spacing.3',\n };\n }\n\n if (hasPrefix && !hasLeadingIcon) {\n return {\n paddingLeft: 'spacing.4',\n };\n }\n\n return {\n paddingLeft: 'spacing.0',\n };\n};\n\nconst getInteractionElementStyles = ({\n hasTrailingIcon,\n hasLeadingInteractionElement,\n hasTrailingInteractionElement,\n hasSuffix,\n hasTrailingButton,\n}: {\n hasTrailingIcon: boolean;\n hasLeadingInteractionElement?: boolean;\n hasTrailingInteractionElement?: boolean;\n hasSuffix: boolean;\n hasTrailingButton: boolean;\n}): SpacingValueType => {\n if (hasTrailingInteractionElement && (hasSuffix || hasTrailingIcon || hasTrailingButton)) {\n return 'spacing.2';\n }\n\n if (hasTrailingInteractionElement && !hasSuffix && !hasTrailingIcon && !hasTrailingButton) {\n return 'spacing.4';\n }\n\n if (hasLeadingInteractionElement) {\n return 'spacing.3';\n }\n\n return 'spacing.0';\n};\n\nconst getSuffixStyles = ({\n hasTrailingIcon,\n hasSuffix,\n hasTrailingButton,\n}: {\n hasTrailingIcon: boolean;\n hasSuffix: boolean;\n hasTrailingButton: boolean;\n}): Pick<BaseBoxProps, 'paddingRight'> => {\n if (hasSuffix && (hasTrailingIcon || hasTrailingButton)) {\n return {\n paddingRight: 'spacing.3',\n };\n }\n\n if (hasSuffix && !hasTrailingIcon && !hasTrailingButton) {\n return {\n paddingRight: 'spacing.4',\n };\n }\n\n return {\n paddingRight: 'spacing.0',\n };\n};\n\nconst getTrailingIconStyles = ({\n hasTrailingIcon,\n hasTrailingButton,\n}: {\n hasTrailingIcon: boolean;\n hasTrailingButton: boolean;\n}): Pick<BaseBoxProps, 'paddingRight'> => {\n if (hasTrailingIcon && hasTrailingButton) {\n return {\n paddingRight: 'spacing.3',\n };\n }\n\n if (hasTrailingIcon && !hasTrailingButton) {\n return {\n paddingRight: 'spacing.4',\n };\n }\n\n return {\n paddingRight: 'spacing.0',\n };\n};\n\nexport const getInputVisualsToBeRendered = ({\n leadingIcon,\n prefix,\n trailingInteractionElement,\n leadingInteractionElement,\n suffix,\n trailingIcon,\n trailingButton,\n}: InputVisuals) => ({\n hasLeadingIcon: Boolean(leadingIcon),\n hasPrefix: Boolean(prefix),\n hasTrailingInteractionElement: Boolean(trailingInteractionElement),\n hasLeadingInteractionElement: Boolean(leadingInteractionElement),\n hasSuffix: Boolean(suffix),\n hasTrailingIcon: Boolean(trailingIcon),\n hasTrailingButton: Boolean(trailingButton),\n});\n\nexport const BaseInputVisuals = ({\n leadingIcon: LeadingIcon,\n prefix,\n trailingInteractionElement,\n leadingInteractionElement,\n suffix,\n trailingIcon: TrailingIcon,\n isDisabled,\n validationState = 'none',\n size,\n trailingButton: TrailingButton,\n}: InputVisuals): ReactElement | null => {\n const {\n hasLeadingIcon,\n hasPrefix,\n hasSuffix,\n hasTrailingInteractionElement,\n hasLeadingInteractionElement,\n hasTrailingIcon,\n hasTrailingButton,\n } = getInputVisualsToBeRendered({\n leadingIcon: LeadingIcon,\n prefix,\n leadingInteractionElement,\n trailingInteractionElement,\n suffix,\n trailingIcon: TrailingIcon,\n trailingButton: TrailingButton,\n size,\n });\n\n const hasLeadingVisuals = hasLeadingInteractionElement || hasLeadingIcon || hasPrefix;\n const hasTrailingVisuals =\n hasTrailingInteractionElement || hasSuffix || hasTrailingIcon || hasTrailingButton;\n\n if (__DEV__) {\n if (hasTrailingButton && !isValidAllowedChildren(TrailingButton, 'Link')) {\n throwBladeError({\n message: 'trailingButton must be a valid Blade Link component',\n moduleName: 'BaseInput',\n });\n }\n }\n\n if (hasLeadingVisuals) {\n return (\n <BaseBox {...getVisualContainerStyles()}>\n {hasLeadingInteractionElement ? (\n <BaseBox\n paddingLeft={getInteractionElementStyles({\n hasTrailingIcon,\n hasLeadingInteractionElement,\n hasSuffix,\n hasTrailingButton,\n })}\n display=\"flex\"\n alignItems=\"stretch\"\n alignSelf=\"stretch\"\n >\n {leadingInteractionElement}\n </BaseBox>\n ) : null}\n {LeadingIcon ? (\n <BaseBox paddingLeft=\"spacing.4\" display=\"flex\">\n <LeadingIcon\n size={iconSize[size]}\n color={isDisabled ? 'surface.icon.gray.disabled' : 'surface.icon.gray.muted'}\n />\n </BaseBox>\n ) : null}\n {hasPrefix ? (\n <BaseBox {...getPrefixStyles({ hasLeadingIcon, hasPrefix })}>\n <Text\n size={textSize[size]}\n variant=\"body\"\n weight=\"regular\"\n color={isDisabled ? 'surface.text.gray.disabled' : 'surface.text.gray.subtle'}\n >\n {prefix}\n </Text>\n </BaseBox>\n ) : null}\n </BaseBox>\n );\n }\n\n if (hasTrailingVisuals) {\n return (\n <BaseBox alignSelf=\"stretch\" alignItems=\"stretch\" {...getVisualContainerStyles()}>\n {hasTrailingInteractionElement ? (\n <BaseBox\n paddingRight={getInteractionElementStyles({\n hasTrailingIcon,\n hasTrailingInteractionElement,\n hasSuffix,\n hasTrailingButton,\n })}\n display=\"flex\"\n alignItems=\"stretch\"\n alignSelf=\"stretch\"\n >\n {trailingInteractionElement}\n </BaseBox>\n ) : null}\n {hasSuffix ? (\n <BaseBox {...getSuffixStyles({ hasTrailingIcon, hasSuffix, hasTrailingButton })}>\n <Text\n size={textSize[size]}\n variant=\"body\"\n weight=\"regular\"\n color={isDisabled ? 'surface.text.gray.disabled' : 'surface.text.gray.subtle'}\n >\n {suffix}\n </Text>\n </BaseBox>\n ) : null}\n {TrailingIcon ? (\n <BaseBox\n display=\"flex\"\n {...getTrailingIconStyles({ hasTrailingIcon, hasTrailingButton })}\n >\n <TrailingIcon\n size={iconSize[size]}\n color={\n isDisabled ? 'interactive.icon.gray.disabled' : trailingIconColor[validationState]\n }\n />\n </BaseBox>\n ) : null}\n {TrailingButton ? (\n <BaseBox paddingRight=\"spacing.4\" display=\"flex\">\n {React.cloneElement(TrailingButton, {\n size,\n variant: 'button',\n isDisabled,\n })}\n </BaseBox>\n ) : null}\n </BaseBox>\n );\n }\n\n return null;\n};\n"],"names":["getVisualContainerStyles","display","flexDirection","alignItems","alignSelf","trailingIconColor","none","error","success","iconSize","medium","large","textSize","getPrefixStyles","_ref","hasLeadingIcon","hasPrefix","paddingLeft","getInteractionElementStyles","_ref2","hasTrailingIcon","hasLeadingInteractionElement","hasTrailingInteractionElement","hasSuffix","hasTrailingButton","getSuffixStyles","_ref3","paddingRight","getTrailingIconStyles","_ref4","getInputVisualsToBeRendered","_ref5","leadingIcon","prefix","trailingInteractionElement","leadingInteractionElement","suffix","trailingIcon","trailingButton","Boolean","BaseInputVisuals","_ref6","LeadingIcon","TrailingIcon","isDisabled","_ref6$validationState","validationState","size","TrailingButton","_getInputVisualsToBeR","hasLeadingVisuals","hasTrailingVisuals","isValidAllowedChildren","throwBladeError","message","moduleName","_jsxs","BaseBox","_objectSpread","children","_jsx","color","Text","variant","weight","React","cloneElement"],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
3
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
4
|
+
import React__default, { useState } from 'react';
|
|
5
|
+
import '../BaseInput/index.js';
|
|
6
|
+
import { getKeyboardAndAutocompleteProps } from '../BaseInput/utils.js';
|
|
7
|
+
import isEmpty from '../../../utils/lodashButBetter/isEmpty.js';
|
|
8
|
+
import '../../Icons/index.js';
|
|
9
|
+
import '../../Button/IconButton/index.js';
|
|
10
|
+
import '../../../utils/metaAttribute/index.js';
|
|
11
|
+
import '../../Box/BaseBox/index.js';
|
|
12
|
+
import '../../Spinner/index.js';
|
|
13
|
+
import '../../../utils/assignWithoutSideEffects/index.js';
|
|
14
|
+
import '../../../utils/index.js';
|
|
15
|
+
import { useMergeRefs } from '../../../utils/useMergeRefs.js';
|
|
16
|
+
import { dropdownComponentIds } from '../../Dropdown/dropdownComponentIds.js';
|
|
17
|
+
import { useDropdown } from '../../Dropdown/useDropdown.js';
|
|
18
|
+
import { jsx } from 'react/jsx-runtime';
|
|
19
|
+
import { getPlatformType } from '../../../utils/getPlatformType/getPlatformType.js';
|
|
20
|
+
import { Spinner } from '../../Spinner/Spinner/Spinner.js';
|
|
21
|
+
import { IconButton } from '../../Button/IconButton/IconButton.js';
|
|
22
|
+
import CloseIcon from '../../Icons/CloseIcon/CloseIcon.js';
|
|
23
|
+
import { BaseBox } from '../../Box/BaseBox/BaseBox.web.js';
|
|
24
|
+
import { BaseInput } from '../BaseInput/BaseInput.js';
|
|
25
|
+
import { MetaConstants } from '../../../utils/metaAttribute/metaConstants.js';
|
|
26
|
+
import SearchIcon from '../../Icons/SearchIcon/SearchIcon.js';
|
|
27
|
+
import { assignWithoutSideEffects } from '../../../utils/assignWithoutSideEffects/assignWithoutSideEffects.js';
|
|
28
|
+
|
|
29
|
+
var _excluded = ["label", "accessibilityLabel", "labelPosition", "placeholder", "defaultValue", "name", "value", "onChange", "onClick", "onFocus", "onBlur", "onSubmit", "isDisabled", "helpText", "onClearButtonClick", "isLoading", "autoCapitalize", "autoFocus", "testID", "size", "showSearchIcon"];
|
|
30
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
31
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
32
|
+
// need to do this to tell TS to infer type as SearchInput of React Native and make it believe that `ref.current.clear()` exists
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
+
var isReactNative = function isReactNative(_textInputRef) {
|
|
35
|
+
return getPlatformType() === 'react-native';
|
|
36
|
+
};
|
|
37
|
+
var _SearchInput = function _SearchInput(_ref, ref) {
|
|
38
|
+
var label = _ref.label,
|
|
39
|
+
accessibilityLabel = _ref.accessibilityLabel,
|
|
40
|
+
_ref$labelPosition = _ref.labelPosition,
|
|
41
|
+
labelPosition = _ref$labelPosition === void 0 ? 'top' : _ref$labelPosition,
|
|
42
|
+
placeholder = _ref.placeholder,
|
|
43
|
+
defaultValue = _ref.defaultValue,
|
|
44
|
+
name = _ref.name,
|
|
45
|
+
value = _ref.value,
|
|
46
|
+
_onChange = _ref.onChange,
|
|
47
|
+
_onClick = _ref.onClick,
|
|
48
|
+
onFocus = _ref.onFocus,
|
|
49
|
+
onBlur = _ref.onBlur,
|
|
50
|
+
onSubmit = _ref.onSubmit,
|
|
51
|
+
isDisabled = _ref.isDisabled,
|
|
52
|
+
helpText = _ref.helpText,
|
|
53
|
+
onClearButtonClick = _ref.onClearButtonClick,
|
|
54
|
+
isLoading = _ref.isLoading,
|
|
55
|
+
autoCapitalize = _ref.autoCapitalize,
|
|
56
|
+
autoFocus = _ref.autoFocus,
|
|
57
|
+
testID = _ref.testID,
|
|
58
|
+
_ref$size = _ref.size,
|
|
59
|
+
size = _ref$size === void 0 ? 'medium' : _ref$size,
|
|
60
|
+
_ref$showSearchIcon = _ref.showSearchIcon,
|
|
61
|
+
showSearchIcon = _ref$showSearchIcon === void 0 ? true : _ref$showSearchIcon,
|
|
62
|
+
styledProps = _objectWithoutProperties(_ref, _excluded);
|
|
63
|
+
var textInputRef = React__default.useRef(null);
|
|
64
|
+
var mergedRef = useMergeRefs(ref, textInputRef);
|
|
65
|
+
var _useState = useState(false),
|
|
66
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
67
|
+
shouldShowClearButton = _useState2[0],
|
|
68
|
+
setShouldShowClearButton = _useState2[1];
|
|
69
|
+
var _useDropdown = useDropdown(),
|
|
70
|
+
triggererWrapperRef = _useDropdown.triggererWrapperRef,
|
|
71
|
+
onTriggerKeydown = _useDropdown.onTriggerKeydown,
|
|
72
|
+
onTriggerClick = _useDropdown.onTriggerClick,
|
|
73
|
+
dropdownTriggerer = _useDropdown.dropdownTriggerer;
|
|
74
|
+
var isInsideDropdown = dropdownTriggerer === 'SearchInput';
|
|
75
|
+
React__default.useEffect(function () {
|
|
76
|
+
setShouldShowClearButton(Boolean(defaultValue !== null && defaultValue !== void 0 ? defaultValue : value));
|
|
77
|
+
}, [defaultValue, value]);
|
|
78
|
+
var renderInteractionElement = function renderInteractionElement() {
|
|
79
|
+
if (isLoading) {
|
|
80
|
+
return /*#__PURE__*/jsx(Spinner, {
|
|
81
|
+
accessibilityLabel: "Loading Content",
|
|
82
|
+
color: "primary"
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (shouldShowClearButton) {
|
|
86
|
+
return /*#__PURE__*/jsx(IconButton, {
|
|
87
|
+
size: "medium",
|
|
88
|
+
icon: CloseIcon,
|
|
89
|
+
onClick: function onClick() {
|
|
90
|
+
var _textInputRef$current;
|
|
91
|
+
if (isEmpty(value) && textInputRef.current) {
|
|
92
|
+
// when the input field is uncontrolled take the ref and clear the input and then call the onClearButtonClick function
|
|
93
|
+
if (isReactNative(textInputRef.current)) {
|
|
94
|
+
textInputRef.current.clear();
|
|
95
|
+
textInputRef.current.focus();
|
|
96
|
+
} else if (textInputRef.current instanceof HTMLInputElement) {
|
|
97
|
+
textInputRef.current.value = '';
|
|
98
|
+
textInputRef.current.focus();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// if the input field is controlled just call the click handler and the value change shall be left upto the consumer
|
|
103
|
+
onClearButtonClick === null || onClearButtonClick === void 0 ? void 0 : onClearButtonClick();
|
|
104
|
+
textInputRef === null || textInputRef === void 0 ? void 0 : (_textInputRef$current = textInputRef.current) === null || _textInputRef$current === void 0 ? void 0 : _textInputRef$current.focus();
|
|
105
|
+
setShouldShowClearButton(false);
|
|
106
|
+
},
|
|
107
|
+
isDisabled: isDisabled,
|
|
108
|
+
accessibilityLabel: "Clear Input Content"
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
};
|
|
113
|
+
return /*#__PURE__*/jsx(BaseBox, {
|
|
114
|
+
position: "relative",
|
|
115
|
+
children: /*#__PURE__*/jsx(BaseInput, _objectSpread(_objectSpread({
|
|
116
|
+
id: "searchinput",
|
|
117
|
+
componentName: MetaConstants.SearchInput,
|
|
118
|
+
ref: mergedRef,
|
|
119
|
+
isDropdownTrigger: true,
|
|
120
|
+
setInputWrapperRef: isInsideDropdown ? function (wrapperNode) {
|
|
121
|
+
triggererWrapperRef.current = wrapperNode;
|
|
122
|
+
} : undefined,
|
|
123
|
+
label: label,
|
|
124
|
+
accessibilityLabel: accessibilityLabel,
|
|
125
|
+
hideLabelText: !Boolean(label),
|
|
126
|
+
labelPosition: labelPosition,
|
|
127
|
+
placeholder: placeholder,
|
|
128
|
+
defaultValue: defaultValue,
|
|
129
|
+
value: value,
|
|
130
|
+
name: name,
|
|
131
|
+
onKeyDown: isInsideDropdown ? onTriggerKeydown : undefined,
|
|
132
|
+
onChange: function onChange(_ref2) {
|
|
133
|
+
var name = _ref2.name,
|
|
134
|
+
value = _ref2.value;
|
|
135
|
+
if (value !== null && value !== void 0 && value.length) {
|
|
136
|
+
// show the clear button when the user starts typing in
|
|
137
|
+
setShouldShowClearButton(true);
|
|
138
|
+
}
|
|
139
|
+
if (shouldShowClearButton && !(value !== null && value !== void 0 && value.length)) {
|
|
140
|
+
// hide the clear button when the input field is empty
|
|
141
|
+
setShouldShowClearButton(false);
|
|
142
|
+
}
|
|
143
|
+
_onChange === null || _onChange === void 0 ? void 0 : _onChange({
|
|
144
|
+
name: name,
|
|
145
|
+
value: value
|
|
146
|
+
});
|
|
147
|
+
},
|
|
148
|
+
onClick: function onClick(e) {
|
|
149
|
+
if (isDisabled) return;
|
|
150
|
+
if (isInsideDropdown) {
|
|
151
|
+
onTriggerClick();
|
|
152
|
+
}
|
|
153
|
+
_onClick === null || _onClick === void 0 ? void 0 : _onClick(e);
|
|
154
|
+
},
|
|
155
|
+
onFocus: onFocus,
|
|
156
|
+
onBlur: onBlur,
|
|
157
|
+
onSubmit: onSubmit,
|
|
158
|
+
isDisabled: isDisabled,
|
|
159
|
+
leadingIcon: showSearchIcon ? SearchIcon : undefined,
|
|
160
|
+
trailingInteractionElement: renderInteractionElement(),
|
|
161
|
+
helpText: helpText
|
|
162
|
+
// eslint-disable-next-line jsx-a11y/no-autofocus
|
|
163
|
+
,
|
|
164
|
+
autoFocus: autoFocus,
|
|
165
|
+
testID: testID
|
|
166
|
+
}, getKeyboardAndAutocompleteProps({
|
|
167
|
+
type: 'search',
|
|
168
|
+
autoCapitalize: autoCapitalize
|
|
169
|
+
})), {}, {
|
|
170
|
+
size: size
|
|
171
|
+
}, styledProps))
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
var SearchInput = /*#__PURE__*/assignWithoutSideEffects( /*#__PURE__*/React__default.forwardRef(_SearchInput), {
|
|
175
|
+
displayName: 'SearchInput',
|
|
176
|
+
componentId: dropdownComponentIds.triggers.SearchInput
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
export { SearchInput };
|
|
180
|
+
//# sourceMappingURL=SearchInput.js.map
|