@foxford/ui 2.116.0 → 2.117.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/components/AccordionItem/AccordionItem.js +1 -1
  2. package/components/AccordionItem/AccordionItem.js.map +1 -1
  3. package/components/AccordionItem/AccordionItem.mjs +1 -1
  4. package/components/AccordionItem/AccordionItem.mjs.map +1 -1
  5. package/components/AccordionItem/style.js +1 -1
  6. package/components/AccordionItem/style.js.map +1 -1
  7. package/components/AccordionItem/style.mjs +1 -1
  8. package/components/AccordionItem/style.mjs.map +1 -1
  9. package/components/ActionBtn/ActionBtn.js +1 -1
  10. package/components/ActionBtn/ActionBtn.js.map +1 -1
  11. package/components/ActionBtn/ActionBtn.mjs +1 -1
  12. package/components/ActionBtn/ActionBtn.mjs.map +1 -1
  13. package/components/Anchor/Anchor.js +1 -1
  14. package/components/Anchor/Anchor.js.map +1 -1
  15. package/components/Anchor/Anchor.mjs +1 -1
  16. package/components/Anchor/Anchor.mjs.map +1 -1
  17. package/components/Badge/Badge.js +1 -1
  18. package/components/Badge/Badge.js.map +1 -1
  19. package/components/Badge/Badge.mjs +1 -1
  20. package/components/Badge/Badge.mjs.map +1 -1
  21. package/components/Button/Button.js +1 -1
  22. package/components/Button/Button.js.map +1 -1
  23. package/components/Button/Button.mjs +1 -1
  24. package/components/Button/Button.mjs.map +1 -1
  25. package/components/Chip/Chip.js +1 -1
  26. package/components/Chip/Chip.js.map +1 -1
  27. package/components/Chip/Chip.mjs +1 -1
  28. package/components/Chip/Chip.mjs.map +1 -1
  29. package/components/Dropdown/Dropdown.js +1 -1
  30. package/components/Dropdown/Dropdown.js.map +1 -1
  31. package/components/Dropdown/Dropdown.mjs +1 -1
  32. package/components/Dropdown/Dropdown.mjs.map +1 -1
  33. package/components/Dropdown/DropdownMenuNoOptions.js +1 -1
  34. package/components/Dropdown/DropdownMenuNoOptions.js.map +1 -1
  35. package/components/Dropdown/DropdownMenuNoOptions.mjs +1 -1
  36. package/components/Dropdown/DropdownMenuNoOptions.mjs.map +1 -1
  37. package/components/Dropdown/style.js +1 -1
  38. package/components/Dropdown/style.js.map +1 -1
  39. package/components/Dropdown/style.mjs +1 -1
  40. package/components/Dropdown/style.mjs.map +1 -1
  41. package/components/Icon/style.js +1 -1
  42. package/components/Icon/style.js.map +1 -1
  43. package/components/Icon/style.mjs +1 -1
  44. package/components/Icon/style.mjs.map +1 -1
  45. package/components/ListItem/ListItem.js +1 -1
  46. package/components/ListItem/ListItem.js.map +1 -1
  47. package/components/ListItem/ListItem.mjs +1 -1
  48. package/components/ListItem/ListItem.mjs.map +1 -1
  49. package/components/TabList/TabList.js +1 -1
  50. package/components/TabList/TabList.js.map +1 -1
  51. package/components/TabList/TabList.mjs +1 -1
  52. package/components/TabList/TabList.mjs.map +1 -1
  53. package/components/TabList/TabListMenuTab.js +1 -1
  54. package/components/TabList/TabListMenuTab.js.map +1 -1
  55. package/components/TabList/TabListMenuTab.mjs +1 -1
  56. package/components/TabList/TabListMenuTab.mjs.map +1 -1
  57. package/components/TabList/style.js +1 -1
  58. package/components/TabList/style.js.map +1 -1
  59. package/components/TabList/style.mjs +1 -1
  60. package/components/TabList/style.mjs.map +1 -1
  61. package/dts/index.d.ts +36 -694
  62. package/icon-pack/src/collection.json.js +1 -1
  63. package/icon-pack/src/collection.json.mjs +1 -1
  64. package/icon-pack/src/icons/ChevronUp/index.js +2 -0
  65. package/icon-pack/src/icons/ChevronUp/index.js.map +1 -0
  66. package/icon-pack/src/icons/ChevronUp/index.mjs +2 -0
  67. package/icon-pack/src/icons/ChevronUp/index.mjs.map +1 -0
  68. package/icon-pack/src/icons/Undo/index.js +2 -0
  69. package/icon-pack/src/icons/Undo/index.js.map +1 -0
  70. package/icon-pack/src/icons/Undo/index.mjs +2 -0
  71. package/icon-pack/src/icons/Undo/index.mjs.map +1 -0
  72. package/package.json +2 -2
  73. package/icon-pack/src/icons/ChevronDown/index.js +0 -2
  74. package/icon-pack/src/icons/ChevronDown/index.js.map +0 -1
  75. package/icon-pack/src/icons/ChevronDown/index.mjs +0 -2
  76. package/icon-pack/src/icons/ChevronDown/index.mjs.map +0 -1
  77. package/icon-pack/src/icons/ChevronLeft/index.js +0 -2
  78. package/icon-pack/src/icons/ChevronLeft/index.js.map +0 -1
  79. package/icon-pack/src/icons/ChevronLeft/index.mjs +0 -2
  80. package/icon-pack/src/icons/ChevronLeft/index.mjs.map +0 -1
  81. package/icon-pack/src/icons/ChevronRight/index.js +0 -2
  82. package/icon-pack/src/icons/ChevronRight/index.js.map +0 -1
  83. package/icon-pack/src/icons/ChevronRight/index.mjs +0 -2
  84. package/icon-pack/src/icons/ChevronRight/index.mjs.map +0 -1
  85. package/icon-pack/src/icons/Redo/index.js +0 -2
  86. package/icon-pack/src/icons/Redo/index.js.map +0 -1
  87. package/icon-pack/src/icons/Redo/index.mjs +0 -2
  88. package/icon-pack/src/icons/Redo/index.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.js","sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import { forwardRef, useState, useRef, useEffect, useLayoutEffect, useMemo, useCallback } from 'react'\nimport { nanoid } from 'nanoid'\nimport { ChevronDown, Close } from '@foxford/icon-pack'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport type { MergedProps } from 'hocs/withMergedProps'\nimport { useScrollMonitor } from 'hooks/useScrollMonitor'\nimport { focusFirstFocusable, focusLastFocusable } from 'shared/utils/dom'\nimport { createDebouncedCallback } from 'shared/utils/misc'\nimport { keyboardKeys } from 'shared/constants'\nimport type { Nullable } from 'shared/types'\nimport { FormInput } from 'components/FormInput'\nimport { FormInputLabel } from 'components/FormInputLabel'\nimport { Chip } from 'components/Chip'\nimport { IconButton } from 'components/IconButton'\nimport { Icon } from 'components/Icon'\nimport { DropdownMenu } from './DropdownMenu'\nimport { useFilteredOptions, useLoadedOptions } from './hooks'\nimport { SIZES } from './sizes'\nimport { getDropdownInputText, getDropdownSelectedOption } from './utils'\nimport * as Styled from './style'\nimport type { DropdownProps, DropdownOption, DropdownOptionGroup } from './types'\nimport { DropdownMenuMultiple } from './DropdownMenuMultiple'\nimport { DropdownMenuSingle } from './DropdownMenuSingle'\n\nconst COMPONENT_NAME = 'Dropdown'\n\n/**\n *\n * Компонент для выбора одной или нескольких опций из числа доступных.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<div\\> элемента.\n */\nconst Dropdown: React.ForwardRefExoticComponent<DropdownProps> = withMergedProps<DropdownProps, HTMLDivElement>(\n forwardRef<HTMLDivElement, MergedProps<DropdownProps>>((props, ref) => {\n const {\n size = 'm',\n name = 'fox-dropdown',\n labelPosition = 'dynamic',\n searchable = true,\n primary = true,\n optionsMultiToggle = true,\n iconProps = {},\n menuProps = {},\n loadingIconProps = {},\n optionsEmptyIconProps = {},\n loading,\n autoFocus,\n disableAutoScrollToSelectedOption,\n closeMenuOnScroll,\n scrollMonitorTarget,\n contrast,\n selectedOption,\n defaultSelectedOption,\n icon,\n addonLeft,\n inputMode,\n loadingMessage,\n loadingIcon,\n maxLength,\n multiple,\n clearable,\n onChangeInput,\n onCloseMenu,\n onOpenMenu,\n onSelectOption,\n options,\n loadOptions,\n renderOption,\n groupSelectedOptions,\n optionsMultiToggleCaption,\n optionsEmptyMessage,\n optionsEmptyIcon,\n palette,\n placeholder,\n readOnly,\n required,\n status,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n form,\n label,\n ...rootProps\n } = props\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const formInputLabelId = useMemo(() => rootProps.id ?? `${name}-${nanoid()}`, [name, rootProps.id])\n const inputLabelId = useMemo(() => nanoid(), [])\n const menuListId = useMemo(() => nanoid(), [])\n\n const [filteredOptions, getFilteredOptions] = useFilteredOptions({\n options,\n })\n\n const [loadedOptions, optionsLoading, getLoadedOptions] = useLoadedOptions({\n loadOptions,\n options,\n })\n\n const [dropdownSelectedOption, setDropdownSelectedOption] = useState<DropdownOption[]>(() =>\n getDropdownSelectedOption(selectedOption !== undefined ? selectedOption : defaultSelectedOption, multiple)\n )\n\n const [inputText, setInputText] = useState<string>(() => getDropdownInputText(dropdownSelectedOption, multiple))\n\n const [focusWithin, setFocusWithin] = useState<boolean>(false)\n\n const [menuOpenRequest, setMenuOpenRequest] = useState<boolean>(false)\n\n const menuOptions: (DropdownOption | DropdownOptionGroup)[] = loadOptions ? loadedOptions : filteredOptions\n const menuOptionsLoading = loadOptions ? (loading ?? optionsLoading) : loading\n\n const menuOpen = menuOpenRequest && !rootProps.disabled\n\n const inputRequired = required && dropdownSelectedOption.length === 0\n const inputActive = Boolean(menuOpen || inputText || focusWithin)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const [menuRef, setMenuRef] = useState<Nullable<HTMLElement>>(null)\n const menuListRef = useRef<HTMLUListElement>(null)\n const selectedOptionRef = useRef<HTMLElement>(null)\n const menuOpenPrevRef = useRef<boolean>(menuOpen)\n\n const updateInputText = useCallback(\n (inputTextValue: string) => {\n setInputText(inputTextValue)\n\n if (onChangeInput) {\n onChangeInput(inputTextValue)\n }\n },\n [onChangeInput]\n )\n\n const updateOptions = useCallback(\n (inputTextValue: string) => {\n if (loadOptions) {\n getLoadedOptions(inputTextValue)\n } else {\n getFilteredOptions(inputTextValue)\n }\n },\n [loadOptions, getLoadedOptions, getFilteredOptions]\n )\n\n const updateOptionsDebounced = useMemo(() => {\n return createDebouncedCallback(updateOptions, 150)\n }, [updateOptions])\n\n const preventBlur = (evt: React.PointerEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (\n evt.target !== inputRef.current &&\n evt.target instanceof Node &&\n (evt.currentTarget.contains(evt.target) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.target)))\n ) {\n evt.preventDefault()\n }\n }\n\n useScrollMonitor({\n target: scrollMonitorTarget,\n onScrollStart: () => {\n if (closeMenuOnScroll && menuOpen) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n },\n })\n\n useLayoutEffect(() => {\n if (selectedOption === undefined) return\n\n if (!multiple && !menuOpen) {\n updateInputText(getDropdownInputText(selectedOption))\n }\n setDropdownSelectedOption(getDropdownSelectedOption(selectedOption, multiple))\n }, [multiple, selectedOption, menuOpen, updateInputText])\n\n useEffect(() => {\n if (menuOpen === menuOpenPrevRef.current) return\n\n if (menuOpen && onOpenMenu) onOpenMenu()\n if (!menuOpen && onCloseMenu) onCloseMenu()\n\n menuOpenPrevRef.current = menuOpen\n }, [menuOpen, onCloseMenu, onOpenMenu])\n\n useEffect(() => {\n if (\n !multiple &&\n !disableAutoScrollToSelectedOption &&\n menuOpen &&\n !menuOptionsLoading &&\n inputText.length === 0 &&\n menuRef &&\n selectedOptionRef.current\n ) {\n const menuRect = menuRef.getBoundingClientRect()\n const selectedOptionRect = selectedOptionRef.current.getBoundingClientRect()\n\n if (selectedOptionRect.top < menuRect.top || selectedOptionRect.bottom > menuRect.bottom) {\n setTimeout(() => {\n if (menuRef && selectedOptionRef.current) {\n menuRef.scrollTo(0, selectedOptionRef.current.offsetTop)\n }\n }, 0)\n }\n }\n }, [multiple, disableAutoScrollToSelectedOption, menuOpen, menuOptionsLoading, inputText, menuRef])\n\n useEffect(() => {\n if (rootProps.disabled) {\n setFocusWithin(false)\n }\n }, [rootProps.disabled])\n\n return (\n <FormInputLabel\n {...rootProps}\n {...sizeProps}\n ref={ref}\n id={formInputLabelId}\n onColored={contrast}\n primary={primary}\n error={status === 'error'}\n success={status === 'success'}\n focus={focusWithin}\n palette={{\n color: rootProps.disabled ? palette.labelColorDisabled : palette.labelColor,\n backgroundColor: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColor,\n backgroundColorHover: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColorHover,\n borderColor: rootProps.disabled ? palette.borderColorDisabled : palette.borderColor,\n }}\n onClick={(evt) => {\n if (rootProps.onClick) rootProps.onClick(evt)\n\n if (rootProps.disabled) return\n\n inputRef.current?.focus()\n\n if (!menuOpen) {\n setMenuOpenRequest(true)\n\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n } else if (menuRef && evt.target instanceof Node && !menuRef.contains(evt.target)) {\n setMenuOpenRequest(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n }\n }}\n onPointerDown={(evt) => {\n if (rootProps.onPointerDown) rootProps.onPointerDown(evt)\n\n preventBlur(evt)\n }}\n onMouseDown={(evt) => {\n if (rootProps.onMouseDown) rootProps.onMouseDown(evt)\n\n if (!window.PointerEvent) preventBlur(evt)\n }}\n onFocus={(evt) => {\n if (rootProps.onFocus) rootProps.onFocus(evt)\n\n setFocusWithin(true)\n\n if (inputRef.current && evt.target === inputRef.current && searchable && !multiple && !menuOpen) {\n updateInputText('')\n }\n }}\n onBlur={(evt) => {\n if (rootProps.onBlur) rootProps.onBlur(evt)\n\n if (\n evt.currentTarget.contains(evt.relatedTarget) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.relatedTarget))\n ) {\n return\n }\n\n setFocusWithin(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }}\n input={\n <>\n {inputRequired && !searchable && !readOnly ? (\n <Styled.InputMimic\n required\n type='text'\n inputMode='none'\n form={form}\n tabIndex={-1}\n onFocus={() => {\n inputRef.current?.focus()\n }}\n />\n ) : null}\n <FormInput\n {...sizeProps}\n ref={inputRef}\n role='combobox'\n aria-controls={menuListId}\n aria-expanded={menuOpen}\n type='text'\n autoComplete='off'\n autoCapitalize='off'\n autoCorrect='off'\n spellCheck='false'\n active={inputActive}\n label={label}\n labelId={inputLabelId}\n labelPosition={labelPosition}\n form={form}\n autoFocus={autoFocus}\n inputMode={searchable ? inputMode : 'none'}\n maxLength={maxLength}\n placeholder={placeholder}\n readOnly={readOnly || !searchable}\n required={inputRequired}\n disabled={rootProps.disabled}\n value={inputText}\n palette={{\n color: palette.color,\n colorDisabled: palette.colorDisabled,\n placeholderColor: palette.placeholderColor,\n placeholderColorDisabled: palette.placeholderColorDisabled,\n }}\n onClick={(evt) => {\n if (menuOpen && evt.currentTarget.selectionStart !== evt.currentTarget.selectionEnd) {\n evt.stopPropagation()\n }\n }}\n onChange={(evt) => {\n const inputValue = evt.currentTarget.value\n\n updateInputText(inputValue)\n updateOptionsDebounced(inputValue)\n setMenuOpenRequest(true)\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Enter.validate(evt.key)) {\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Space.validate(evt.key) && (!menuOpen || evt.currentTarget.selectionStart === 0)) {\n evt.preventDefault()\n\n if (!menuOpen) {\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n }\n\n setMenuOpenRequest((prev) => !prev)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Tab.validate(evt.key) && menuOpen) {\n evt.preventDefault()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.ArrowDown.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx + 1] ?? menuItems[0]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusFirstFocusable(menuListRef.current)\n }\n }\n\n if (keyboardKeys.ArrowUp.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx - 1] ?? menuItems[menuItems.length - 1]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusLastFocusable(menuListRef.current)\n }\n }\n }}\n />\n {dropdownSelectedOption.map((option) => (\n <input\n key={option.value}\n type='hidden'\n name={name}\n value={option.value}\n form={form}\n disabled={rootProps.disabled || option.disabled}\n />\n ))}\n </>\n }\n addonLeft={\n addonLeft ??\n (icon\n ? (addonLeftProps) => (\n <Icon\n {...addonLeftProps.iconProps}\n {...iconProps}\n name={typeof icon === 'string' ? icon : undefined}\n icon={typeof icon !== 'string' ? icon : undefined}\n />\n )\n : undefined)\n }\n addonRight={(addonRightProps) => (\n <>\n {multiple && dropdownSelectedOption.length > 0 ? (\n <Chip\n size='xs'\n active\n black\n disabled={rootProps.disabled}\n cursor={rootProps.disabled ? 'not-allowed' : undefined}\n title={dropdownSelectedOption.length}\n palette={\n rootProps.disabled\n ? {\n color: 'content-disabled',\n colorHover: 'content-disabled',\n backgroundColor: 'bg-disabled-small',\n backgroundColorHover: 'bg-disabled-small',\n }\n : undefined\n }\n onPointerDown={(evt) => {\n evt.preventDefault()\n }}\n onMouseDown={(evt) => {\n if (!window.PointerEvent) evt.preventDefault()\n }}\n addonRight={(chipAddonRightProps) => (\n <IconButton\n {...chipAddonRightProps.iconButtonProps}\n contrast={!rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption([])\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n )}\n />\n ) : null}\n {!multiple && clearable && dropdownSelectedOption.length > 0 ? (\n <IconButton\n icon={<Close />}\n size='l'\n square\n disabled={rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(null)\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n ) : null}\n <Styled.IconAnimated {...addonRightProps.iconProps} {...iconProps} icon={<ChevronDown />} up={menuOpen} />\n </>\n )}\n dropdown={(dropdownProps) => (\n <DropdownMenu\n {...menuProps}\n setRef={setMenuRef}\n open={menuOpen}\n popperReferenceId={formInputLabelId}\n secondary={!contrast}\n elevated={contrast}\n disableAutoFocus\n palette={{\n backgroundColor: palette.menuBackgroundColor,\n borderColor: palette.menuBorderColor,\n }}\n empty={menuOptions.length === 0}\n loading={menuOptionsLoading}\n loadingMessage={loadingMessage}\n loadingIcon={loadingIcon}\n loadingIconProps={{\n ...dropdownProps.iconProps,\n ...loadingIconProps,\n }}\n emptyMessage={optionsEmptyMessage}\n emptyIcon={optionsEmptyIcon}\n emptyIconProps={{\n ...dropdownProps.iconProps,\n ...optionsEmptyIconProps,\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Tab.validate(evt.key)) {\n evt.preventDefault()\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Enter.validate(evt.key)) {\n inputRef.current?.focus()\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Backspace.validate(evt.key) && !readOnly && (multiple || (!multiple && clearable))) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(multiple ? [] : null)\n\n updateInputText('')\n updateOptions('')\n }\n }}\n >\n {multiple ? (\n <DropdownMenuMultiple\n {...sizeProps}\n ref={menuListRef}\n inputRef={inputRef}\n label={label}\n name={name}\n disabled={rootProps.disabled}\n readOnly={readOnly}\n menuListId={menuListId}\n inputLabelId={inputLabelId}\n menuOptions={menuOptions}\n dropdownSelectedOption={dropdownSelectedOption}\n inputText={inputText}\n optionsMultiToggle={optionsMultiToggle}\n groupSelectedOptions={groupSelectedOptions}\n optionsMultiToggleCaption={optionsMultiToggleCaption}\n renderOption={renderOption}\n onChange={(update) => {\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }}\n />\n ) : (\n <DropdownMenuSingle\n {...sizeProps}\n ref={menuListRef}\n label={label}\n readOnly={readOnly}\n multiple={multiple}\n disabled={rootProps.disabled}\n status={status}\n menuListId={menuListId}\n inputLabelId={inputLabelId}\n menuOptions={menuOptions}\n dropdownSelectedOption={dropdownSelectedOption}\n selectedOptionRef={selectedOptionRef}\n renderOption={renderOption}\n onChange={(option) => {\n const update = { ...option }\n\n if (selectedOption === undefined) {\n updateInputText(getDropdownInputText(update))\n setDropdownSelectedOption(getDropdownSelectedOption(update))\n }\n\n if (onSelectOption) onSelectOption(update)\n\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }}\n />\n )}\n </DropdownMenu>\n )}\n />\n )\n }),\n {\n sizes: SIZES,\n displayName: COMPONENT_NAME,\n }\n)\n\nexport { Dropdown, COMPONENT_NAME }\n"],"names":["Dropdown","withMergedProps","forwardRef","props","ref","size","name","labelPosition","searchable","primary","optionsMultiToggle","iconProps","menuProps","loadingIconProps","optionsEmptyIconProps","loading","autoFocus","disableAutoScrollToSelectedOption","closeMenuOnScroll","scrollMonitorTarget","contrast","selectedOption","defaultSelectedOption","icon","addonLeft","inputMode","loadingMessage","loadingIcon","maxLength","multiple","clearable","onChangeInput","onCloseMenu","onOpenMenu","onSelectOption","options","loadOptions","renderOption","groupSelectedOptions","optionsMultiToggleCaption","optionsEmptyMessage","optionsEmptyIcon","palette","placeholder","readOnly","required","status","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","form","label","rootProps","sizeProps","formInputLabelId","useMemo","id","nanoid","inputLabelId","menuListId","filteredOptions","getFilteredOptions","useFilteredOptions","loadedOptions","optionsLoading","getLoadedOptions","useLoadedOptions","dropdownSelectedOption","setDropdownSelectedOption","useState","getDropdownSelectedOption","undefined","inputText","setInputText","getDropdownInputText","focusWithin","setFocusWithin","menuOpenRequest","setMenuOpenRequest","menuOptions","menuOptionsLoading","menuOpen","disabled","inputRequired","length","inputActive","Boolean","inputRef","useRef","menuRef","setMenuRef","menuListRef","selectedOptionRef","menuOpenPrevRef","updateInputText","useCallback","inputTextValue","updateOptions","updateOptionsDebounced","createDebouncedCallback","preventBlur","evt","target","current","Node","currentTarget","contains","renderInPortal","preventDefault","useScrollMonitor","onScrollStart","focus","useLayoutEffect","useEffect","menuRect","getBoundingClientRect","selectedOptionRect","top","bottom","setTimeout","scrollTo","offsetTop","_jsx","FormInputLabel","onColored","error","success","color","labelColorDisabled","labelColor","backgroundColor","backgroundColorDisabled","backgroundColorHover","borderColor","borderColorDisabled","onClick","onPointerDown","onMouseDown","window","PointerEvent","onFocus","onBlur","relatedTarget","input","_jsxs","_Fragment","children","Styled","type","tabIndex","FormInput","role","autoComplete","autoCapitalize","autoCorrect","spellCheck","active","labelId","value","colorDisabled","placeholderColor","placeholderColorDisabled","selectionStart","selectionEnd","stopPropagation","onChange","inputValue","onKeyDown","keyboardKeys","Enter","validate","key","Space","prev","Esc","Tab","ArrowDown","menuItems","idx","findIndex","item","focusTarget","HTMLElement","focusFirstFocusable","ArrowUp","focusLastFocusable","map","option","addonLeftProps","Icon","addonRight","addonRightProps","Chip","black","cursor","title","colorHover","chipAddonRightProps","IconButton","iconButtonProps","Close","square","ChevronDown","up","dropdown","dropdownProps","DropdownMenu","setRef","open","popperReferenceId","secondary","elevated","disableAutoFocus","menuBackgroundColor","menuBorderColor","empty","emptyMessage","emptyIcon","emptyIconProps","Backspace","DropdownMenuMultiple","update","DropdownMenuSingle","sizes","SIZES","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Dropdown.js","sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import { forwardRef, useState, useRef, useEffect, useLayoutEffect, useMemo, useCallback } from 'react'\nimport { nanoid } from 'nanoid'\nimport { Close } from '@foxford/icon-pack'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport type { MergedProps } from 'hocs/withMergedProps'\nimport { useScrollMonitor } from 'hooks/useScrollMonitor'\nimport { focusFirstFocusable, focusLastFocusable } from 'shared/utils/dom'\nimport { createDebouncedCallback } from 'shared/utils/misc'\nimport { keyboardKeys } from 'shared/constants'\nimport type { Nullable } from 'shared/types'\nimport { FormInput } from 'components/FormInput'\nimport { FormInputLabel } from 'components/FormInputLabel'\nimport { Chip } from 'components/Chip'\nimport { IconButton } from 'components/IconButton'\nimport { Icon } from 'components/Icon'\nimport { DropdownMenu } from './DropdownMenu'\nimport { useFilteredOptions, useLoadedOptions } from './hooks'\nimport { SIZES } from './sizes'\nimport { getDropdownInputText, getDropdownSelectedOption } from './utils'\nimport * as Styled from './style'\nimport type { DropdownProps, DropdownOption, DropdownOptionGroup } from './types'\nimport { DropdownMenuMultiple } from './DropdownMenuMultiple'\nimport { DropdownMenuSingle } from './DropdownMenuSingle'\n\nconst COMPONENT_NAME = 'Dropdown'\n\n/**\n *\n * Компонент для выбора одной или нескольких опций из числа доступных.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<div\\> элемента.\n */\nconst Dropdown: React.ForwardRefExoticComponent<DropdownProps> = withMergedProps<DropdownProps, HTMLDivElement>(\n forwardRef<HTMLDivElement, MergedProps<DropdownProps>>((props, ref) => {\n const {\n size = 'm',\n name = 'fox-dropdown',\n labelPosition = 'dynamic',\n searchable = true,\n primary = true,\n optionsMultiToggle = true,\n iconProps = {},\n menuProps = {},\n loadingIconProps = {},\n optionsEmptyIconProps = {},\n loading,\n autoFocus,\n disableAutoScrollToSelectedOption,\n closeMenuOnScroll,\n scrollMonitorTarget,\n contrast,\n selectedOption,\n defaultSelectedOption,\n icon,\n addonLeft,\n inputMode,\n loadingMessage,\n loadingIcon,\n maxLength,\n multiple,\n clearable,\n onChangeInput,\n onCloseMenu,\n onOpenMenu,\n onSelectOption,\n options,\n loadOptions,\n renderOption,\n groupSelectedOptions,\n optionsMultiToggleCaption,\n optionsEmptyMessage,\n optionsEmptyIcon,\n palette,\n placeholder,\n readOnly,\n required,\n status,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n form,\n label,\n ...rootProps\n } = props\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const formInputLabelId = useMemo(() => rootProps.id ?? `${name}-${nanoid()}`, [name, rootProps.id])\n const inputLabelId = useMemo(() => nanoid(), [])\n const menuListId = useMemo(() => nanoid(), [])\n\n const [filteredOptions, getFilteredOptions] = useFilteredOptions({\n options,\n })\n\n const [loadedOptions, optionsLoading, getLoadedOptions] = useLoadedOptions({\n loadOptions,\n options,\n })\n\n const [dropdownSelectedOption, setDropdownSelectedOption] = useState<DropdownOption[]>(() =>\n getDropdownSelectedOption(selectedOption !== undefined ? selectedOption : defaultSelectedOption, multiple)\n )\n\n const [inputText, setInputText] = useState<string>(() => getDropdownInputText(dropdownSelectedOption, multiple))\n\n const [focusWithin, setFocusWithin] = useState<boolean>(false)\n\n const [menuOpenRequest, setMenuOpenRequest] = useState<boolean>(false)\n\n const menuOptions: (DropdownOption | DropdownOptionGroup)[] = loadOptions ? loadedOptions : filteredOptions\n const menuOptionsLoading = loadOptions ? (loading ?? optionsLoading) : loading\n\n const menuOpen = menuOpenRequest && !rootProps.disabled\n\n const inputRequired = required && dropdownSelectedOption.length === 0\n const inputActive = Boolean(menuOpen || inputText || focusWithin)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const [menuRef, setMenuRef] = useState<Nullable<HTMLElement>>(null)\n const menuListRef = useRef<HTMLUListElement>(null)\n const selectedOptionRef = useRef<HTMLElement>(null)\n const menuOpenPrevRef = useRef<boolean>(menuOpen)\n\n const updateInputText = useCallback(\n (inputTextValue: string) => {\n setInputText(inputTextValue)\n\n if (onChangeInput) {\n onChangeInput(inputTextValue)\n }\n },\n [onChangeInput]\n )\n\n const updateOptions = useCallback(\n (inputTextValue: string) => {\n if (loadOptions) {\n getLoadedOptions(inputTextValue)\n } else {\n getFilteredOptions(inputTextValue)\n }\n },\n [loadOptions, getLoadedOptions, getFilteredOptions]\n )\n\n const updateOptionsDebounced = useMemo(() => {\n return createDebouncedCallback(updateOptions, 150)\n }, [updateOptions])\n\n const preventBlur = (evt: React.PointerEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (\n evt.target !== inputRef.current &&\n evt.target instanceof Node &&\n (evt.currentTarget.contains(evt.target) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.target)))\n ) {\n evt.preventDefault()\n }\n }\n\n useScrollMonitor({\n target: scrollMonitorTarget,\n onScrollStart: () => {\n if (closeMenuOnScroll && menuOpen) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n },\n })\n\n useLayoutEffect(() => {\n if (selectedOption === undefined) return\n\n if (!multiple && !menuOpen) {\n updateInputText(getDropdownInputText(selectedOption))\n }\n setDropdownSelectedOption(getDropdownSelectedOption(selectedOption, multiple))\n }, [multiple, selectedOption, menuOpen, updateInputText])\n\n useEffect(() => {\n if (menuOpen === menuOpenPrevRef.current) return\n\n if (menuOpen && onOpenMenu) onOpenMenu()\n if (!menuOpen && onCloseMenu) onCloseMenu()\n\n menuOpenPrevRef.current = menuOpen\n }, [menuOpen, onCloseMenu, onOpenMenu])\n\n useEffect(() => {\n if (\n !multiple &&\n !disableAutoScrollToSelectedOption &&\n menuOpen &&\n !menuOptionsLoading &&\n inputText.length === 0 &&\n menuRef &&\n selectedOptionRef.current\n ) {\n const menuRect = menuRef.getBoundingClientRect()\n const selectedOptionRect = selectedOptionRef.current.getBoundingClientRect()\n\n if (selectedOptionRect.top < menuRect.top || selectedOptionRect.bottom > menuRect.bottom) {\n setTimeout(() => {\n if (menuRef && selectedOptionRef.current) {\n menuRef.scrollTo(0, selectedOptionRef.current.offsetTop)\n }\n }, 0)\n }\n }\n }, [multiple, disableAutoScrollToSelectedOption, menuOpen, menuOptionsLoading, inputText, menuRef])\n\n useEffect(() => {\n if (rootProps.disabled) {\n setFocusWithin(false)\n }\n }, [rootProps.disabled])\n\n return (\n <FormInputLabel\n {...rootProps}\n {...sizeProps}\n ref={ref}\n id={formInputLabelId}\n onColored={contrast}\n primary={primary}\n error={status === 'error'}\n success={status === 'success'}\n focus={focusWithin}\n palette={{\n color: rootProps.disabled ? palette.labelColorDisabled : palette.labelColor,\n backgroundColor: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColor,\n backgroundColorHover: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColorHover,\n borderColor: rootProps.disabled ? palette.borderColorDisabled : palette.borderColor,\n }}\n onClick={(evt) => {\n if (rootProps.onClick) rootProps.onClick(evt)\n\n if (rootProps.disabled) return\n\n inputRef.current?.focus()\n\n if (!menuOpen) {\n setMenuOpenRequest(true)\n\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n } else if (menuRef && evt.target instanceof Node && !menuRef.contains(evt.target)) {\n setMenuOpenRequest(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n }\n }}\n onPointerDown={(evt) => {\n if (rootProps.onPointerDown) rootProps.onPointerDown(evt)\n\n preventBlur(evt)\n }}\n onMouseDown={(evt) => {\n if (rootProps.onMouseDown) rootProps.onMouseDown(evt)\n\n if (!window.PointerEvent) preventBlur(evt)\n }}\n onFocus={(evt) => {\n if (rootProps.onFocus) rootProps.onFocus(evt)\n\n setFocusWithin(true)\n\n if (inputRef.current && evt.target === inputRef.current && searchable && !multiple && !menuOpen) {\n updateInputText('')\n }\n }}\n onBlur={(evt) => {\n if (rootProps.onBlur) rootProps.onBlur(evt)\n\n if (\n evt.currentTarget.contains(evt.relatedTarget) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.relatedTarget))\n ) {\n return\n }\n\n setFocusWithin(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }}\n input={\n <>\n {inputRequired && !searchable && !readOnly ? (\n <Styled.InputMimic\n required\n type='text'\n inputMode='none'\n form={form}\n tabIndex={-1}\n onFocus={() => {\n inputRef.current?.focus()\n }}\n />\n ) : null}\n <FormInput\n {...sizeProps}\n ref={inputRef}\n role='combobox'\n aria-controls={menuListId}\n aria-expanded={menuOpen}\n type='text'\n autoComplete='off'\n autoCapitalize='off'\n autoCorrect='off'\n spellCheck='false'\n active={inputActive}\n label={label}\n labelId={inputLabelId}\n labelPosition={labelPosition}\n form={form}\n autoFocus={autoFocus}\n inputMode={searchable ? inputMode : 'none'}\n maxLength={maxLength}\n placeholder={placeholder}\n readOnly={readOnly || !searchable}\n required={inputRequired}\n disabled={rootProps.disabled}\n value={inputText}\n palette={{\n color: palette.color,\n colorDisabled: palette.colorDisabled,\n placeholderColor: palette.placeholderColor,\n placeholderColorDisabled: palette.placeholderColorDisabled,\n }}\n onClick={(evt) => {\n if (menuOpen && evt.currentTarget.selectionStart !== evt.currentTarget.selectionEnd) {\n evt.stopPropagation()\n }\n }}\n onChange={(evt) => {\n const inputValue = evt.currentTarget.value\n\n updateInputText(inputValue)\n updateOptionsDebounced(inputValue)\n setMenuOpenRequest(true)\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Enter.validate(evt.key)) {\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Space.validate(evt.key) && (!menuOpen || evt.currentTarget.selectionStart === 0)) {\n evt.preventDefault()\n\n if (!menuOpen) {\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n }\n\n setMenuOpenRequest((prev) => !prev)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Tab.validate(evt.key) && menuOpen) {\n evt.preventDefault()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.ArrowDown.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx + 1] ?? menuItems[0]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusFirstFocusable(menuListRef.current)\n }\n }\n\n if (keyboardKeys.ArrowUp.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx - 1] ?? menuItems[menuItems.length - 1]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusLastFocusable(menuListRef.current)\n }\n }\n }}\n />\n {dropdownSelectedOption.map((option) => (\n <input\n key={option.value}\n type='hidden'\n name={name}\n value={option.value}\n form={form}\n disabled={rootProps.disabled || option.disabled}\n />\n ))}\n </>\n }\n addonLeft={\n addonLeft ??\n (icon\n ? (addonLeftProps) => (\n <Icon\n {...addonLeftProps.iconProps}\n {...iconProps}\n name={typeof icon === 'string' ? icon : undefined}\n icon={typeof icon !== 'string' ? icon : undefined}\n />\n )\n : undefined)\n }\n addonRight={(addonRightProps) => (\n <>\n {multiple && dropdownSelectedOption.length > 0 ? (\n <Chip\n size='xs'\n active\n black\n disabled={rootProps.disabled}\n cursor={rootProps.disabled ? 'not-allowed' : undefined}\n title={dropdownSelectedOption.length}\n palette={\n rootProps.disabled\n ? {\n color: 'content-disabled',\n colorHover: 'content-disabled',\n backgroundColor: 'bg-disabled-small',\n backgroundColorHover: 'bg-disabled-small',\n }\n : undefined\n }\n onPointerDown={(evt) => {\n evt.preventDefault()\n }}\n onMouseDown={(evt) => {\n if (!window.PointerEvent) evt.preventDefault()\n }}\n addonRight={(chipAddonRightProps) => (\n <IconButton\n {...chipAddonRightProps.iconButtonProps}\n contrast={!rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption([])\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n )}\n />\n ) : null}\n {!multiple && clearable && dropdownSelectedOption.length > 0 ? (\n <IconButton\n icon={<Close />}\n size='l'\n square\n disabled={rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(null)\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n ) : null}\n <Styled.IconAnimated\n {...addonRightProps.iconProps}\n {...iconProps}\n icon={<Styled.ChevronDown />}\n rotate={menuOpen ? '180deg' : '0deg'}\n />\n </>\n )}\n dropdown={(dropdownProps) => (\n <DropdownMenu\n {...menuProps}\n setRef={setMenuRef}\n open={menuOpen}\n popperReferenceId={formInputLabelId}\n secondary={!contrast}\n elevated={contrast}\n disableAutoFocus\n palette={{\n backgroundColor: palette.menuBackgroundColor,\n borderColor: palette.menuBorderColor,\n }}\n empty={menuOptions.length === 0}\n loading={menuOptionsLoading}\n loadingMessage={loadingMessage}\n loadingIcon={loadingIcon}\n loadingIconProps={{\n ...dropdownProps.iconProps,\n ...loadingIconProps,\n }}\n emptyMessage={optionsEmptyMessage}\n emptyIcon={optionsEmptyIcon}\n emptyIconProps={{\n ...dropdownProps.iconProps,\n ...optionsEmptyIconProps,\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Tab.validate(evt.key)) {\n evt.preventDefault()\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Enter.validate(evt.key)) {\n inputRef.current?.focus()\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Backspace.validate(evt.key) && !readOnly && (multiple || (!multiple && clearable))) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(multiple ? [] : null)\n\n updateInputText('')\n updateOptions('')\n }\n }}\n >\n {multiple ? (\n <DropdownMenuMultiple\n {...sizeProps}\n ref={menuListRef}\n inputRef={inputRef}\n label={label}\n name={name}\n disabled={rootProps.disabled}\n readOnly={readOnly}\n menuListId={menuListId}\n inputLabelId={inputLabelId}\n menuOptions={menuOptions}\n dropdownSelectedOption={dropdownSelectedOption}\n inputText={inputText}\n optionsMultiToggle={optionsMultiToggle}\n groupSelectedOptions={groupSelectedOptions}\n optionsMultiToggleCaption={optionsMultiToggleCaption}\n renderOption={renderOption}\n onChange={(update) => {\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }}\n />\n ) : (\n <DropdownMenuSingle\n {...sizeProps}\n ref={menuListRef}\n label={label}\n readOnly={readOnly}\n multiple={multiple}\n disabled={rootProps.disabled}\n status={status}\n menuListId={menuListId}\n inputLabelId={inputLabelId}\n menuOptions={menuOptions}\n dropdownSelectedOption={dropdownSelectedOption}\n selectedOptionRef={selectedOptionRef}\n renderOption={renderOption}\n onChange={(option) => {\n const update = { ...option }\n\n if (selectedOption === undefined) {\n updateInputText(getDropdownInputText(update))\n setDropdownSelectedOption(getDropdownSelectedOption(update))\n }\n\n if (onSelectOption) onSelectOption(update)\n\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }}\n />\n )}\n </DropdownMenu>\n )}\n />\n )\n }),\n {\n sizes: SIZES,\n displayName: COMPONENT_NAME,\n }\n)\n\nexport { Dropdown, COMPONENT_NAME }\n"],"names":["Dropdown","withMergedProps","forwardRef","props","ref","size","name","labelPosition","searchable","primary","optionsMultiToggle","iconProps","menuProps","loadingIconProps","optionsEmptyIconProps","loading","autoFocus","disableAutoScrollToSelectedOption","closeMenuOnScroll","scrollMonitorTarget","contrast","selectedOption","defaultSelectedOption","icon","addonLeft","inputMode","loadingMessage","loadingIcon","maxLength","multiple","clearable","onChangeInput","onCloseMenu","onOpenMenu","onSelectOption","options","loadOptions","renderOption","groupSelectedOptions","optionsMultiToggleCaption","optionsEmptyMessage","optionsEmptyIcon","palette","placeholder","readOnly","required","status","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","form","label","rootProps","sizeProps","formInputLabelId","useMemo","id","nanoid","inputLabelId","menuListId","filteredOptions","getFilteredOptions","useFilteredOptions","loadedOptions","optionsLoading","getLoadedOptions","useLoadedOptions","dropdownSelectedOption","setDropdownSelectedOption","useState","getDropdownSelectedOption","undefined","inputText","setInputText","getDropdownInputText","focusWithin","setFocusWithin","menuOpenRequest","setMenuOpenRequest","menuOptions","menuOptionsLoading","menuOpen","disabled","inputRequired","length","inputActive","Boolean","inputRef","useRef","menuRef","setMenuRef","menuListRef","selectedOptionRef","menuOpenPrevRef","updateInputText","useCallback","inputTextValue","updateOptions","updateOptionsDebounced","createDebouncedCallback","preventBlur","evt","target","current","Node","currentTarget","contains","renderInPortal","preventDefault","useScrollMonitor","onScrollStart","focus","useLayoutEffect","useEffect","menuRect","getBoundingClientRect","selectedOptionRect","top","bottom","setTimeout","scrollTo","offsetTop","_jsx","FormInputLabel","onColored","error","success","color","labelColorDisabled","labelColor","backgroundColor","backgroundColorDisabled","backgroundColorHover","borderColor","borderColorDisabled","onClick","onPointerDown","onMouseDown","window","PointerEvent","onFocus","onBlur","relatedTarget","input","_jsxs","_Fragment","children","Styled","type","tabIndex","FormInput","role","autoComplete","autoCapitalize","autoCorrect","spellCheck","active","labelId","value","colorDisabled","placeholderColor","placeholderColorDisabled","selectionStart","selectionEnd","stopPropagation","onChange","inputValue","onKeyDown","keyboardKeys","Enter","validate","key","Space","prev","Esc","Tab","ArrowDown","menuItems","idx","findIndex","item","focusTarget","HTMLElement","focusFirstFocusable","ArrowUp","focusLastFocusable","map","option","addonLeftProps","Icon","addonRight","addonRightProps","Chip","black","cursor","title","colorHover","chipAddonRightProps","IconButton","iconButtonProps","Close","square","rotate","dropdown","dropdownProps","DropdownMenu","setRef","open","popperReferenceId","secondary","elevated","disableAutoFocus","menuBackgroundColor","menuBorderColor","empty","emptyMessage","emptyIcon","emptyIconProps","Backspace","DropdownMenuMultiple","update","DropdownMenuSingle","sizes","SIZES","displayName"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{forwardRef,useMemo,useState,useRef,useCallback,useLayoutEffect,useEffect}from'react';import{nanoid}from'nanoid';import{withMergedProps}from'../../hocs/withMergedProps.mjs';import{useScrollMonitor}from'../../hooks/useScrollMonitor.mjs';import{focusFirstFocusable,focusLastFocusable}from'../../shared/utils/dom.mjs';import{createDebouncedCallback}from'../../shared/utils/misc.mjs';import{keyboardKeys}from'../../shared/constants.mjs';import{DropdownMenu}from'./DropdownMenu.mjs';import{useFilteredOptions,useLoadedOptions}from'./hooks.mjs';import{SIZES}from'./sizes.mjs';import{getDropdownSelectedOption,getDropdownInputText}from'./utils.mjs';import{IconAnimated,InputMimic}from'./style.mjs';import{DropdownMenuMultiple}from'./DropdownMenuMultiple.mjs';import{DropdownMenuSingle}from'./DropdownMenuSingle.mjs';import{jsx,jsxs,Fragment}from'react/jsx-runtime';import{FormInputLabel}from'../FormInputLabel/FormInputLabel.mjs';import{Chip}from'../Chip/Chip.mjs';import{IconButton}from'../IconButton/IconButton.mjs';import{Close}from'../../icon-pack/src/icons/Close/index.mjs';import{ChevronDown}from'../../icon-pack/src/icons/ChevronDown/index.mjs';import{Icon}from'../Icon/Icon.mjs';import{FormInput}from'../FormInput/FormInput.mjs';const COMPONENT_NAME='Dropdown';const Dropdown=withMergedProps(forwardRef((o,e)=>{const{size:n="m",name:t="fox-dropdown",labelPosition:r="dynamic",searchable:s=!0,primary:l=!0,optionsMultiToggle:i=!0,iconProps:a={},menuProps:d={},loadingIconProps:c={},optionsEmptyIconProps:u={},loading:p,autoFocus:m,disableAutoScrollToSelectedOption:f,closeMenuOnScroll:b,scrollMonitorTarget:g,contrast:y,selectedOption:C,defaultSelectedOption:D,icon:w,addonLeft:M,inputMode:I,loadingMessage:k,loadingIcon:v,maxLength:h,multiple:x,clearable:S,onChangeInput:j,onCloseMenu:O,onOpenMenu:T,onSelectOption:F,options:P,loadOptions:E,renderOption:L,groupSelectedOptions:z,optionsMultiToggleCaption:B,optionsEmptyMessage:R,optionsEmptyIcon:K,palette:N,placeholder:A,readOnly:X,required:H,status:q,sizeXXS:Z,sizeXS:$,sizeS:_,sizeM:U,sizeL:G,sizeXL:J,form:Q,label:V,...W}=o;const Y={size:n,sizeXXS:Z,sizeXS:$,sizeS:_,sizeM:U,sizeL:G,sizeXL:J};const oo=useMemo(()=>W.id??`${t}-${nanoid()}`,[t,W.id]);const eo=useMemo(()=>nanoid(),[]);const no=useMemo(()=>nanoid(),[]);const[to,ro]=useFilteredOptions({options:P});const[so,lo,io]=useLoadedOptions({loadOptions:E,options:P});const[ao,co]=useState(()=>getDropdownSelectedOption(C!==void 0?C:D,x));const[uo,po]=useState(()=>getDropdownInputText(ao,x));const[mo,fo]=useState(!1);const[bo,go]=useState(!1);const yo=E?so:to;const Co=E?p??lo:p;const Do=bo&&!W.disabled;const wo=H&&ao.length===0;const Mo=Boolean(Do||uo||mo);const Io=useRef(null);const[ko,vo]=useState(null);const ho=useRef(null);const xo=useRef(null);const So=useRef(Do);const jo=useCallback(o=>{po(o),j&&j(o)},[j]);const Oo=useCallback(o=>{E?io(o):ro(o)},[E,io,ro]);const To=useMemo(()=>createDebouncedCallback(Oo,150),[Oo]);const preventBlur=o=>{o.target!==Io.current&&o.target instanceof Node&&(o.currentTarget.contains(o.target)||d.renderInPortal&&Do&&ko&&ko.contains(o.target))&&o.preventDefault()};return useScrollMonitor({target:g,onScrollStart:()=>{b&&Do&&(Io.current?.focus(),go(!1))}}),useLayoutEffect(()=>{C!==void 0&&(x||Do||jo(getDropdownInputText(C)),co(getDropdownSelectedOption(C,x)))},[x,C,Do,jo]),useEffect(()=>{Do!==So.current&&(Do&&T&&T(),!Do&&O&&O(),So.current=Do)},[Do,O,T]),useEffect(()=>{if(!x&&!f&&Do&&!Co&&uo.length===0&&ko&&xo.current){const o=ko.getBoundingClientRect();const e=xo.current.getBoundingClientRect();(e.top<o.top||e.bottom>o.bottom)&&setTimeout(()=>{ko&&xo.current&&ko.scrollTo(0,xo.current.offsetTop)},0)}},[x,f,Do,Co,uo,ko]),useEffect(()=>{W.disabled&&fo(!1)},[W.disabled]),jsx(FormInputLabel,{...W,...Y,ref:e,id:oo,onColored:y,primary:l,error:q==='error',success:q==='success',focus:mo,palette:{color:W.disabled?N.labelColorDisabled:N.labelColor,backgroundColor:W.disabled?N.backgroundColorDisabled:N.backgroundColor,backgroundColorHover:W.disabled?N.backgroundColorDisabled:N.backgroundColorHover,borderColor:W.disabled?N.borderColorDisabled:N.borderColor},onClick:o=>{W.onClick&&W.onClick(o),W.disabled||(Io.current?.focus(),Do?ko&&o.target instanceof Node&&!ko.contains(o.target)&&(go(!1),jo(getDropdownInputText(ao,x))):(go(!0),Oo(''),s&&jo('')))},onPointerDown:o=>{W.onPointerDown&&W.onPointerDown(o),preventBlur(o)},onMouseDown:o=>{W.onMouseDown&&W.onMouseDown(o),window.PointerEvent||preventBlur(o)},onFocus:o=>{W.onFocus&&W.onFocus(o),fo(!0),Io.current&&o.target===Io.current&&s&&!x&&!Do&&jo('')},onBlur:o=>{W.onBlur&&W.onBlur(o),o.currentTarget.contains(o.relatedTarget)||d.renderInPortal&&Do&&ko&&ko.contains(o.relatedTarget)||(fo(!1),jo(getDropdownInputText(ao,x)),go(!1))},input:jsxs(Fragment,{children:[!wo||s||X?null:jsx(InputMimic,{required:!0,type:"text",inputMode:"none",form:Q,tabIndex:-1,onFocus:()=>{Io.current?.focus()}}),jsx(FormInput,{...Y,ref:Io,role:"combobox","aria-controls":no,"aria-expanded":Do,type:"text",autoComplete:"off",autoCapitalize:"off",autoCorrect:"off",spellCheck:"false",active:Mo,label:V,labelId:eo,labelPosition:r,form:Q,autoFocus:m,inputMode:s?I:'none',maxLength:h,placeholder:A,readOnly:X||!s,required:wo,disabled:W.disabled,value:uo,palette:{color:N.color,colorDisabled:N.colorDisabled,placeholderColor:N.placeholderColor,placeholderColorDisabled:N.placeholderColorDisabled},onClick:o=>{Do&&o.currentTarget.selectionStart!==o.currentTarget.selectionEnd&&o.stopPropagation()},onChange:o=>{const e=o.currentTarget.value;jo(e),To(e),go(!0)},onKeyDown:o=>{if(keyboardKeys.Enter.validate(o.key)&&(jo(getDropdownInputText(ao,x)),go(!1)),!keyboardKeys.Space.validate(o.key)||Do&&o.currentTarget.selectionStart!==0||(o.preventDefault(),Do||(Oo(''),s&&jo('')),go(o=>!o)),keyboardKeys.Esc.validate(o.key)&&go(!1),keyboardKeys.Tab.validate(o.key)&&Do&&(o.preventDefault(),go(!1)),keyboardKeys.ArrowDown.validate(o.key)&&Do&&ho.current)if(o.preventDefault(),!x&&xo.current){const o=[...ho.current.children];const e=o.findIndex(o=>o.contains(xo.current));const n=o[e+1]??o[0];n instanceof HTMLElement&&focusFirstFocusable(n)}else focusFirstFocusable(ho.current);if(keyboardKeys.ArrowUp.validate(o.key)&&Do&&ho.current)if(o.preventDefault(),!x&&xo.current){const o=[...ho.current.children];const e=o.findIndex(o=>o.contains(xo.current));const n=o[e-1]??o[o.length-1];n instanceof HTMLElement&&focusFirstFocusable(n)}else focusLastFocusable(ho.current)}}),ao.map(o=>jsx("input",{type:"hidden",name:t,value:o.value,form:Q,disabled:W.disabled||o.disabled},o.value))]}),addonLeft:M??(w?o=>jsx(Icon,{...o.iconProps,...a,name:typeof w=='string'?w:void 0,icon:typeof w!='string'?w:void 0}):void 0),addonRight:o=>jsxs(Fragment,{children:[x&&ao.length>0?jsx(Chip,{size:"xs",active:!0,black:!0,disabled:W.disabled,cursor:W.disabled?'not-allowed':void 0,title:ao.length,palette:W.disabled?{color:'content-disabled',colorHover:'content-disabled',backgroundColor:'bg-disabled-small',backgroundColorHover:'bg-disabled-small'}:void 0,onPointerDown:o=>{o.preventDefault()},onMouseDown:o=>{window.PointerEvent||o.preventDefault()},addonRight:o=>jsx(IconButton,{...o.iconButtonProps,contrast:!W.disabled,onClick:o=>{o.stopPropagation(),X||(C===void 0&&co([]),F&&F([]),Io.current?.focus(),jo(''),Oo(''),go(!0))}})}):null,!x&&S&&ao.length>0?jsx(IconButton,{icon:jsx(Close,{}),size:"l",square:!0,disabled:W.disabled,onClick:o=>{o.stopPropagation(),X||(C===void 0&&co([]),F&&F(null),Io.current?.focus(),jo(''),Oo(''),go(!0))}}):null,jsx(IconAnimated,{...o.iconProps,...a,icon:jsx(ChevronDown,{}),up:Do})]}),dropdown:o=>jsx(DropdownMenu,{...d,setRef:vo,open:Do,popperReferenceId:oo,secondary:!y,elevated:y,disableAutoFocus:!0,palette:{backgroundColor:N.menuBackgroundColor,borderColor:N.menuBorderColor},empty:yo.length===0,loading:Co,loadingMessage:k,loadingIcon:v,loadingIconProps:{...o.iconProps,...c},emptyMessage:R,emptyIcon:K,emptyIconProps:{...o.iconProps,...u},onKeyDown:o=>{keyboardKeys.Tab.validate(o.key)&&(o.preventDefault(),Io.current?.focus(),go(!1)),keyboardKeys.Enter.validate(o.key)&&(Io.current?.focus(),jo(getDropdownInputText(ao,x)),go(!1)),keyboardKeys.Esc.validate(o.key)&&(Io.current?.focus(),go(!1)),keyboardKeys.Backspace.validate(o.key)&&!X&&(x||!x&&S)&&(C===void 0&&co([]),F&&F(x?[]:null),jo(''),Oo(''))},children:x?jsx(DropdownMenuMultiple,{...Y,ref:ho,inputRef:Io,label:V,name:t,disabled:W.disabled,readOnly:X,menuListId:no,inputLabelId:eo,menuOptions:yo,dropdownSelectedOption:ao,inputText:uo,optionsMultiToggle:i,groupSelectedOptions:z,optionsMultiToggleCaption:B,renderOption:L,onChange:o=>{C===void 0&&co(o),F&&F(o)}}):jsx(DropdownMenuSingle,{...Y,ref:ho,label:V,readOnly:X,multiple:x,disabled:W.disabled,status:q,menuListId:no,inputLabelId:eo,menuOptions:yo,dropdownSelectedOption:ao,selectedOptionRef:xo,renderOption:L,onChange:o=>{const e={...o};C===void 0&&(jo(getDropdownInputText(e)),co(getDropdownSelectedOption(e))),F&&F(e),Io.current?.focus(),go(!1)}})})})}),{sizes:SIZES,displayName:"Dropdown"});export{COMPONENT_NAME,Dropdown};
1
+ import{forwardRef,useMemo,useState,useRef,useCallback,useLayoutEffect,useEffect}from'react';import{nanoid}from'nanoid';import{withMergedProps}from'../../hocs/withMergedProps.mjs';import{useScrollMonitor}from'../../hooks/useScrollMonitor.mjs';import{focusFirstFocusable,focusLastFocusable}from'../../shared/utils/dom.mjs';import{createDebouncedCallback}from'../../shared/utils/misc.mjs';import{keyboardKeys}from'../../shared/constants.mjs';import{DropdownMenu}from'./DropdownMenu.mjs';import{useFilteredOptions,useLoadedOptions}from'./hooks.mjs';import{SIZES}from'./sizes.mjs';import{getDropdownSelectedOption,getDropdownInputText}from'./utils.mjs';import{IconAnimated,ChevronDown,InputMimic}from'./style.mjs';import{DropdownMenuMultiple}from'./DropdownMenuMultiple.mjs';import{DropdownMenuSingle}from'./DropdownMenuSingle.mjs';import{jsx,jsxs,Fragment}from'react/jsx-runtime';import{FormInputLabel}from'../FormInputLabel/FormInputLabel.mjs';import{Chip}from'../Chip/Chip.mjs';import{IconButton}from'../IconButton/IconButton.mjs';import{Close}from'../../icon-pack/src/icons/Close/index.mjs';import{Icon}from'../Icon/Icon.mjs';import{FormInput}from'../FormInput/FormInput.mjs';const COMPONENT_NAME='Dropdown';const Dropdown=withMergedProps(forwardRef((o,e)=>{const{size:t="m",name:n="fox-dropdown",labelPosition:r="dynamic",searchable:s=!0,primary:l=!0,optionsMultiToggle:a=!0,iconProps:i={},menuProps:d={},loadingIconProps:c={},optionsEmptyIconProps:u={},loading:p,autoFocus:m,disableAutoScrollToSelectedOption:f,closeMenuOnScroll:b,scrollMonitorTarget:g,contrast:y,selectedOption:C,defaultSelectedOption:D,icon:w,addonLeft:M,inputMode:I,loadingMessage:k,loadingIcon:v,maxLength:h,multiple:x,clearable:S,onChangeInput:j,onCloseMenu:O,onOpenMenu:T,onSelectOption:F,options:P,loadOptions:E,renderOption:L,groupSelectedOptions:z,optionsMultiToggleCaption:B,optionsEmptyMessage:R,optionsEmptyIcon:K,palette:N,placeholder:A,readOnly:X,required:H,status:q,sizeXXS:Z,sizeXS:$,sizeS:_,sizeM:U,sizeL:G,sizeXL:J,form:Q,label:V,...W}=o;const Y={size:t,sizeXXS:Z,sizeXS:$,sizeS:_,sizeM:U,sizeL:G,sizeXL:J};const oo=useMemo(()=>W.id??`${n}-${nanoid()}`,[n,W.id]);const eo=useMemo(()=>nanoid(),[]);const to=useMemo(()=>nanoid(),[]);const[no,ro]=useFilteredOptions({options:P});const[so,lo,ao]=useLoadedOptions({loadOptions:E,options:P});const[io,co]=useState(()=>getDropdownSelectedOption(C!==void 0?C:D,x));const[uo,po]=useState(()=>getDropdownInputText(io,x));const[mo,fo]=useState(!1);const[bo,go]=useState(!1);const yo=E?so:no;const Co=E?p??lo:p;const Do=bo&&!W.disabled;const wo=H&&io.length===0;const Mo=Boolean(Do||uo||mo);const Io=useRef(null);const[ko,vo]=useState(null);const ho=useRef(null);const xo=useRef(null);const So=useRef(Do);const jo=useCallback(o=>{po(o),j&&j(o)},[j]);const Oo=useCallback(o=>{E?ao(o):ro(o)},[E,ao,ro]);const To=useMemo(()=>createDebouncedCallback(Oo,150),[Oo]);const preventBlur=o=>{o.target!==Io.current&&o.target instanceof Node&&(o.currentTarget.contains(o.target)||d.renderInPortal&&Do&&ko&&ko.contains(o.target))&&o.preventDefault()};return useScrollMonitor({target:g,onScrollStart:()=>{b&&Do&&(Io.current?.focus(),go(!1))}}),useLayoutEffect(()=>{C!==void 0&&(x||Do||jo(getDropdownInputText(C)),co(getDropdownSelectedOption(C,x)))},[x,C,Do,jo]),useEffect(()=>{Do!==So.current&&(Do&&T&&T(),!Do&&O&&O(),So.current=Do)},[Do,O,T]),useEffect(()=>{if(!x&&!f&&Do&&!Co&&uo.length===0&&ko&&xo.current){const o=ko.getBoundingClientRect();const e=xo.current.getBoundingClientRect();(e.top<o.top||e.bottom>o.bottom)&&setTimeout(()=>{ko&&xo.current&&ko.scrollTo(0,xo.current.offsetTop)},0)}},[x,f,Do,Co,uo,ko]),useEffect(()=>{W.disabled&&fo(!1)},[W.disabled]),jsx(FormInputLabel,{...W,...Y,ref:e,id:oo,onColored:y,primary:l,error:q==='error',success:q==='success',focus:mo,palette:{color:W.disabled?N.labelColorDisabled:N.labelColor,backgroundColor:W.disabled?N.backgroundColorDisabled:N.backgroundColor,backgroundColorHover:W.disabled?N.backgroundColorDisabled:N.backgroundColorHover,borderColor:W.disabled?N.borderColorDisabled:N.borderColor},onClick:o=>{W.onClick&&W.onClick(o),W.disabled||(Io.current?.focus(),Do?ko&&o.target instanceof Node&&!ko.contains(o.target)&&(go(!1),jo(getDropdownInputText(io,x))):(go(!0),Oo(''),s&&jo('')))},onPointerDown:o=>{W.onPointerDown&&W.onPointerDown(o),preventBlur(o)},onMouseDown:o=>{W.onMouseDown&&W.onMouseDown(o),window.PointerEvent||preventBlur(o)},onFocus:o=>{W.onFocus&&W.onFocus(o),fo(!0),Io.current&&o.target===Io.current&&s&&!x&&!Do&&jo('')},onBlur:o=>{W.onBlur&&W.onBlur(o),o.currentTarget.contains(o.relatedTarget)||d.renderInPortal&&Do&&ko&&ko.contains(o.relatedTarget)||(fo(!1),jo(getDropdownInputText(io,x)),go(!1))},input:jsxs(Fragment,{children:[!wo||s||X?null:jsx(InputMimic,{required:!0,type:"text",inputMode:"none",form:Q,tabIndex:-1,onFocus:()=>{Io.current?.focus()}}),jsx(FormInput,{...Y,ref:Io,role:"combobox","aria-controls":to,"aria-expanded":Do,type:"text",autoComplete:"off",autoCapitalize:"off",autoCorrect:"off",spellCheck:"false",active:Mo,label:V,labelId:eo,labelPosition:r,form:Q,autoFocus:m,inputMode:s?I:'none',maxLength:h,placeholder:A,readOnly:X||!s,required:wo,disabled:W.disabled,value:uo,palette:{color:N.color,colorDisabled:N.colorDisabled,placeholderColor:N.placeholderColor,placeholderColorDisabled:N.placeholderColorDisabled},onClick:o=>{Do&&o.currentTarget.selectionStart!==o.currentTarget.selectionEnd&&o.stopPropagation()},onChange:o=>{const e=o.currentTarget.value;jo(e),To(e),go(!0)},onKeyDown:o=>{if(keyboardKeys.Enter.validate(o.key)&&(jo(getDropdownInputText(io,x)),go(!1)),!keyboardKeys.Space.validate(o.key)||Do&&o.currentTarget.selectionStart!==0||(o.preventDefault(),Do||(Oo(''),s&&jo('')),go(o=>!o)),keyboardKeys.Esc.validate(o.key)&&go(!1),keyboardKeys.Tab.validate(o.key)&&Do&&(o.preventDefault(),go(!1)),keyboardKeys.ArrowDown.validate(o.key)&&Do&&ho.current)if(o.preventDefault(),!x&&xo.current){const o=[...ho.current.children];const e=o.findIndex(o=>o.contains(xo.current));const t=o[e+1]??o[0];t instanceof HTMLElement&&focusFirstFocusable(t)}else focusFirstFocusable(ho.current);if(keyboardKeys.ArrowUp.validate(o.key)&&Do&&ho.current)if(o.preventDefault(),!x&&xo.current){const o=[...ho.current.children];const e=o.findIndex(o=>o.contains(xo.current));const t=o[e-1]??o[o.length-1];t instanceof HTMLElement&&focusFirstFocusable(t)}else focusLastFocusable(ho.current)}}),io.map(o=>jsx("input",{type:"hidden",name:n,value:o.value,form:Q,disabled:W.disabled||o.disabled},o.value))]}),addonLeft:M??(w?o=>jsx(Icon,{...o.iconProps,...i,name:typeof w=='string'?w:void 0,icon:typeof w!='string'?w:void 0}):void 0),addonRight:o=>jsxs(Fragment,{children:[x&&io.length>0?jsx(Chip,{size:"xs",active:!0,black:!0,disabled:W.disabled,cursor:W.disabled?'not-allowed':void 0,title:io.length,palette:W.disabled?{color:'content-disabled',colorHover:'content-disabled',backgroundColor:'bg-disabled-small',backgroundColorHover:'bg-disabled-small'}:void 0,onPointerDown:o=>{o.preventDefault()},onMouseDown:o=>{window.PointerEvent||o.preventDefault()},addonRight:o=>jsx(IconButton,{...o.iconButtonProps,contrast:!W.disabled,onClick:o=>{o.stopPropagation(),X||(C===void 0&&co([]),F&&F([]),Io.current?.focus(),jo(''),Oo(''),go(!0))}})}):null,!x&&S&&io.length>0?jsx(IconButton,{icon:jsx(Close,{}),size:"l",square:!0,disabled:W.disabled,onClick:o=>{o.stopPropagation(),X||(C===void 0&&co([]),F&&F(null),Io.current?.focus(),jo(''),Oo(''),go(!0))}}):null,jsx(IconAnimated,{...o.iconProps,...i,icon:jsx(ChevronDown,{}),rotate:Do?'180deg':'0deg'})]}),dropdown:o=>jsx(DropdownMenu,{...d,setRef:vo,open:Do,popperReferenceId:oo,secondary:!y,elevated:y,disableAutoFocus:!0,palette:{backgroundColor:N.menuBackgroundColor,borderColor:N.menuBorderColor},empty:yo.length===0,loading:Co,loadingMessage:k,loadingIcon:v,loadingIconProps:{...o.iconProps,...c},emptyMessage:R,emptyIcon:K,emptyIconProps:{...o.iconProps,...u},onKeyDown:o=>{keyboardKeys.Tab.validate(o.key)&&(o.preventDefault(),Io.current?.focus(),go(!1)),keyboardKeys.Enter.validate(o.key)&&(Io.current?.focus(),jo(getDropdownInputText(io,x)),go(!1)),keyboardKeys.Esc.validate(o.key)&&(Io.current?.focus(),go(!1)),keyboardKeys.Backspace.validate(o.key)&&!X&&(x||!x&&S)&&(C===void 0&&co([]),F&&F(x?[]:null),jo(''),Oo(''))},children:x?jsx(DropdownMenuMultiple,{...Y,ref:ho,inputRef:Io,label:V,name:n,disabled:W.disabled,readOnly:X,menuListId:to,inputLabelId:eo,menuOptions:yo,dropdownSelectedOption:io,inputText:uo,optionsMultiToggle:a,groupSelectedOptions:z,optionsMultiToggleCaption:B,renderOption:L,onChange:o=>{C===void 0&&co(o),F&&F(o)}}):jsx(DropdownMenuSingle,{...Y,ref:ho,label:V,readOnly:X,multiple:x,disabled:W.disabled,status:q,menuListId:to,inputLabelId:eo,menuOptions:yo,dropdownSelectedOption:io,selectedOptionRef:xo,renderOption:L,onChange:o=>{const e={...o};C===void 0&&(jo(getDropdownInputText(e)),co(getDropdownSelectedOption(e))),F&&F(e),Io.current?.focus(),go(!1)}})})})}),{sizes:SIZES,displayName:"Dropdown"});export{COMPONENT_NAME,Dropdown};
2
2
  //# sourceMappingURL=Dropdown.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.mjs","sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import { forwardRef, useState, useRef, useEffect, useLayoutEffect, useMemo, useCallback } from 'react'\nimport { nanoid } from 'nanoid'\nimport { ChevronDown, Close } from '@foxford/icon-pack'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport type { MergedProps } from 'hocs/withMergedProps'\nimport { useScrollMonitor } from 'hooks/useScrollMonitor'\nimport { focusFirstFocusable, focusLastFocusable } from 'shared/utils/dom'\nimport { createDebouncedCallback } from 'shared/utils/misc'\nimport { keyboardKeys } from 'shared/constants'\nimport type { Nullable } from 'shared/types'\nimport { FormInput } from 'components/FormInput'\nimport { FormInputLabel } from 'components/FormInputLabel'\nimport { Chip } from 'components/Chip'\nimport { IconButton } from 'components/IconButton'\nimport { Icon } from 'components/Icon'\nimport { DropdownMenu } from './DropdownMenu'\nimport { useFilteredOptions, useLoadedOptions } from './hooks'\nimport { SIZES } from './sizes'\nimport { getDropdownInputText, getDropdownSelectedOption } from './utils'\nimport * as Styled from './style'\nimport type { DropdownProps, DropdownOption, DropdownOptionGroup } from './types'\nimport { DropdownMenuMultiple } from './DropdownMenuMultiple'\nimport { DropdownMenuSingle } from './DropdownMenuSingle'\n\nconst COMPONENT_NAME = 'Dropdown'\n\n/**\n *\n * Компонент для выбора одной или нескольких опций из числа доступных.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<div\\> элемента.\n */\nconst Dropdown: React.ForwardRefExoticComponent<DropdownProps> = withMergedProps<DropdownProps, HTMLDivElement>(\n forwardRef<HTMLDivElement, MergedProps<DropdownProps>>((props, ref) => {\n const {\n size = 'm',\n name = 'fox-dropdown',\n labelPosition = 'dynamic',\n searchable = true,\n primary = true,\n optionsMultiToggle = true,\n iconProps = {},\n menuProps = {},\n loadingIconProps = {},\n optionsEmptyIconProps = {},\n loading,\n autoFocus,\n disableAutoScrollToSelectedOption,\n closeMenuOnScroll,\n scrollMonitorTarget,\n contrast,\n selectedOption,\n defaultSelectedOption,\n icon,\n addonLeft,\n inputMode,\n loadingMessage,\n loadingIcon,\n maxLength,\n multiple,\n clearable,\n onChangeInput,\n onCloseMenu,\n onOpenMenu,\n onSelectOption,\n options,\n loadOptions,\n renderOption,\n groupSelectedOptions,\n optionsMultiToggleCaption,\n optionsEmptyMessage,\n optionsEmptyIcon,\n palette,\n placeholder,\n readOnly,\n required,\n status,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n form,\n label,\n ...rootProps\n } = props\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const formInputLabelId = useMemo(() => rootProps.id ?? `${name}-${nanoid()}`, [name, rootProps.id])\n const inputLabelId = useMemo(() => nanoid(), [])\n const menuListId = useMemo(() => nanoid(), [])\n\n const [filteredOptions, getFilteredOptions] = useFilteredOptions({\n options,\n })\n\n const [loadedOptions, optionsLoading, getLoadedOptions] = useLoadedOptions({\n loadOptions,\n options,\n })\n\n const [dropdownSelectedOption, setDropdownSelectedOption] = useState<DropdownOption[]>(() =>\n getDropdownSelectedOption(selectedOption !== undefined ? selectedOption : defaultSelectedOption, multiple)\n )\n\n const [inputText, setInputText] = useState<string>(() => getDropdownInputText(dropdownSelectedOption, multiple))\n\n const [focusWithin, setFocusWithin] = useState<boolean>(false)\n\n const [menuOpenRequest, setMenuOpenRequest] = useState<boolean>(false)\n\n const menuOptions: (DropdownOption | DropdownOptionGroup)[] = loadOptions ? loadedOptions : filteredOptions\n const menuOptionsLoading = loadOptions ? (loading ?? optionsLoading) : loading\n\n const menuOpen = menuOpenRequest && !rootProps.disabled\n\n const inputRequired = required && dropdownSelectedOption.length === 0\n const inputActive = Boolean(menuOpen || inputText || focusWithin)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const [menuRef, setMenuRef] = useState<Nullable<HTMLElement>>(null)\n const menuListRef = useRef<HTMLUListElement>(null)\n const selectedOptionRef = useRef<HTMLElement>(null)\n const menuOpenPrevRef = useRef<boolean>(menuOpen)\n\n const updateInputText = useCallback(\n (inputTextValue: string) => {\n setInputText(inputTextValue)\n\n if (onChangeInput) {\n onChangeInput(inputTextValue)\n }\n },\n [onChangeInput]\n )\n\n const updateOptions = useCallback(\n (inputTextValue: string) => {\n if (loadOptions) {\n getLoadedOptions(inputTextValue)\n } else {\n getFilteredOptions(inputTextValue)\n }\n },\n [loadOptions, getLoadedOptions, getFilteredOptions]\n )\n\n const updateOptionsDebounced = useMemo(() => {\n return createDebouncedCallback(updateOptions, 150)\n }, [updateOptions])\n\n const preventBlur = (evt: React.PointerEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (\n evt.target !== inputRef.current &&\n evt.target instanceof Node &&\n (evt.currentTarget.contains(evt.target) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.target)))\n ) {\n evt.preventDefault()\n }\n }\n\n useScrollMonitor({\n target: scrollMonitorTarget,\n onScrollStart: () => {\n if (closeMenuOnScroll && menuOpen) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n },\n })\n\n useLayoutEffect(() => {\n if (selectedOption === undefined) return\n\n if (!multiple && !menuOpen) {\n updateInputText(getDropdownInputText(selectedOption))\n }\n setDropdownSelectedOption(getDropdownSelectedOption(selectedOption, multiple))\n }, [multiple, selectedOption, menuOpen, updateInputText])\n\n useEffect(() => {\n if (menuOpen === menuOpenPrevRef.current) return\n\n if (menuOpen && onOpenMenu) onOpenMenu()\n if (!menuOpen && onCloseMenu) onCloseMenu()\n\n menuOpenPrevRef.current = menuOpen\n }, [menuOpen, onCloseMenu, onOpenMenu])\n\n useEffect(() => {\n if (\n !multiple &&\n !disableAutoScrollToSelectedOption &&\n menuOpen &&\n !menuOptionsLoading &&\n inputText.length === 0 &&\n menuRef &&\n selectedOptionRef.current\n ) {\n const menuRect = menuRef.getBoundingClientRect()\n const selectedOptionRect = selectedOptionRef.current.getBoundingClientRect()\n\n if (selectedOptionRect.top < menuRect.top || selectedOptionRect.bottom > menuRect.bottom) {\n setTimeout(() => {\n if (menuRef && selectedOptionRef.current) {\n menuRef.scrollTo(0, selectedOptionRef.current.offsetTop)\n }\n }, 0)\n }\n }\n }, [multiple, disableAutoScrollToSelectedOption, menuOpen, menuOptionsLoading, inputText, menuRef])\n\n useEffect(() => {\n if (rootProps.disabled) {\n setFocusWithin(false)\n }\n }, [rootProps.disabled])\n\n return (\n <FormInputLabel\n {...rootProps}\n {...sizeProps}\n ref={ref}\n id={formInputLabelId}\n onColored={contrast}\n primary={primary}\n error={status === 'error'}\n success={status === 'success'}\n focus={focusWithin}\n palette={{\n color: rootProps.disabled ? palette.labelColorDisabled : palette.labelColor,\n backgroundColor: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColor,\n backgroundColorHover: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColorHover,\n borderColor: rootProps.disabled ? palette.borderColorDisabled : palette.borderColor,\n }}\n onClick={(evt) => {\n if (rootProps.onClick) rootProps.onClick(evt)\n\n if (rootProps.disabled) return\n\n inputRef.current?.focus()\n\n if (!menuOpen) {\n setMenuOpenRequest(true)\n\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n } else if (menuRef && evt.target instanceof Node && !menuRef.contains(evt.target)) {\n setMenuOpenRequest(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n }\n }}\n onPointerDown={(evt) => {\n if (rootProps.onPointerDown) rootProps.onPointerDown(evt)\n\n preventBlur(evt)\n }}\n onMouseDown={(evt) => {\n if (rootProps.onMouseDown) rootProps.onMouseDown(evt)\n\n if (!window.PointerEvent) preventBlur(evt)\n }}\n onFocus={(evt) => {\n if (rootProps.onFocus) rootProps.onFocus(evt)\n\n setFocusWithin(true)\n\n if (inputRef.current && evt.target === inputRef.current && searchable && !multiple && !menuOpen) {\n updateInputText('')\n }\n }}\n onBlur={(evt) => {\n if (rootProps.onBlur) rootProps.onBlur(evt)\n\n if (\n evt.currentTarget.contains(evt.relatedTarget) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.relatedTarget))\n ) {\n return\n }\n\n setFocusWithin(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }}\n input={\n <>\n {inputRequired && !searchable && !readOnly ? (\n <Styled.InputMimic\n required\n type='text'\n inputMode='none'\n form={form}\n tabIndex={-1}\n onFocus={() => {\n inputRef.current?.focus()\n }}\n />\n ) : null}\n <FormInput\n {...sizeProps}\n ref={inputRef}\n role='combobox'\n aria-controls={menuListId}\n aria-expanded={menuOpen}\n type='text'\n autoComplete='off'\n autoCapitalize='off'\n autoCorrect='off'\n spellCheck='false'\n active={inputActive}\n label={label}\n labelId={inputLabelId}\n labelPosition={labelPosition}\n form={form}\n autoFocus={autoFocus}\n inputMode={searchable ? inputMode : 'none'}\n maxLength={maxLength}\n placeholder={placeholder}\n readOnly={readOnly || !searchable}\n required={inputRequired}\n disabled={rootProps.disabled}\n value={inputText}\n palette={{\n color: palette.color,\n colorDisabled: palette.colorDisabled,\n placeholderColor: palette.placeholderColor,\n placeholderColorDisabled: palette.placeholderColorDisabled,\n }}\n onClick={(evt) => {\n if (menuOpen && evt.currentTarget.selectionStart !== evt.currentTarget.selectionEnd) {\n evt.stopPropagation()\n }\n }}\n onChange={(evt) => {\n const inputValue = evt.currentTarget.value\n\n updateInputText(inputValue)\n updateOptionsDebounced(inputValue)\n setMenuOpenRequest(true)\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Enter.validate(evt.key)) {\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Space.validate(evt.key) && (!menuOpen || evt.currentTarget.selectionStart === 0)) {\n evt.preventDefault()\n\n if (!menuOpen) {\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n }\n\n setMenuOpenRequest((prev) => !prev)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Tab.validate(evt.key) && menuOpen) {\n evt.preventDefault()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.ArrowDown.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx + 1] ?? menuItems[0]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusFirstFocusable(menuListRef.current)\n }\n }\n\n if (keyboardKeys.ArrowUp.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx - 1] ?? menuItems[menuItems.length - 1]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusLastFocusable(menuListRef.current)\n }\n }\n }}\n />\n {dropdownSelectedOption.map((option) => (\n <input\n key={option.value}\n type='hidden'\n name={name}\n value={option.value}\n form={form}\n disabled={rootProps.disabled || option.disabled}\n />\n ))}\n </>\n }\n addonLeft={\n addonLeft ??\n (icon\n ? (addonLeftProps) => (\n <Icon\n {...addonLeftProps.iconProps}\n {...iconProps}\n name={typeof icon === 'string' ? icon : undefined}\n icon={typeof icon !== 'string' ? icon : undefined}\n />\n )\n : undefined)\n }\n addonRight={(addonRightProps) => (\n <>\n {multiple && dropdownSelectedOption.length > 0 ? (\n <Chip\n size='xs'\n active\n black\n disabled={rootProps.disabled}\n cursor={rootProps.disabled ? 'not-allowed' : undefined}\n title={dropdownSelectedOption.length}\n palette={\n rootProps.disabled\n ? {\n color: 'content-disabled',\n colorHover: 'content-disabled',\n backgroundColor: 'bg-disabled-small',\n backgroundColorHover: 'bg-disabled-small',\n }\n : undefined\n }\n onPointerDown={(evt) => {\n evt.preventDefault()\n }}\n onMouseDown={(evt) => {\n if (!window.PointerEvent) evt.preventDefault()\n }}\n addonRight={(chipAddonRightProps) => (\n <IconButton\n {...chipAddonRightProps.iconButtonProps}\n contrast={!rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption([])\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n )}\n />\n ) : null}\n {!multiple && clearable && dropdownSelectedOption.length > 0 ? (\n <IconButton\n icon={<Close />}\n size='l'\n square\n disabled={rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(null)\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n ) : null}\n <Styled.IconAnimated {...addonRightProps.iconProps} {...iconProps} icon={<ChevronDown />} up={menuOpen} />\n </>\n )}\n dropdown={(dropdownProps) => (\n <DropdownMenu\n {...menuProps}\n setRef={setMenuRef}\n open={menuOpen}\n popperReferenceId={formInputLabelId}\n secondary={!contrast}\n elevated={contrast}\n disableAutoFocus\n palette={{\n backgroundColor: palette.menuBackgroundColor,\n borderColor: palette.menuBorderColor,\n }}\n empty={menuOptions.length === 0}\n loading={menuOptionsLoading}\n loadingMessage={loadingMessage}\n loadingIcon={loadingIcon}\n loadingIconProps={{\n ...dropdownProps.iconProps,\n ...loadingIconProps,\n }}\n emptyMessage={optionsEmptyMessage}\n emptyIcon={optionsEmptyIcon}\n emptyIconProps={{\n ...dropdownProps.iconProps,\n ...optionsEmptyIconProps,\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Tab.validate(evt.key)) {\n evt.preventDefault()\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Enter.validate(evt.key)) {\n inputRef.current?.focus()\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Backspace.validate(evt.key) && !readOnly && (multiple || (!multiple && clearable))) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(multiple ? [] : null)\n\n updateInputText('')\n updateOptions('')\n }\n }}\n >\n {multiple ? (\n <DropdownMenuMultiple\n {...sizeProps}\n ref={menuListRef}\n inputRef={inputRef}\n label={label}\n name={name}\n disabled={rootProps.disabled}\n readOnly={readOnly}\n menuListId={menuListId}\n inputLabelId={inputLabelId}\n menuOptions={menuOptions}\n dropdownSelectedOption={dropdownSelectedOption}\n inputText={inputText}\n optionsMultiToggle={optionsMultiToggle}\n groupSelectedOptions={groupSelectedOptions}\n optionsMultiToggleCaption={optionsMultiToggleCaption}\n renderOption={renderOption}\n onChange={(update) => {\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }}\n />\n ) : (\n <DropdownMenuSingle\n {...sizeProps}\n ref={menuListRef}\n label={label}\n readOnly={readOnly}\n multiple={multiple}\n disabled={rootProps.disabled}\n status={status}\n menuListId={menuListId}\n inputLabelId={inputLabelId}\n menuOptions={menuOptions}\n dropdownSelectedOption={dropdownSelectedOption}\n selectedOptionRef={selectedOptionRef}\n renderOption={renderOption}\n onChange={(option) => {\n const update = { ...option }\n\n if (selectedOption === undefined) {\n updateInputText(getDropdownInputText(update))\n setDropdownSelectedOption(getDropdownSelectedOption(update))\n }\n\n if (onSelectOption) onSelectOption(update)\n\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }}\n />\n )}\n </DropdownMenu>\n )}\n />\n )\n }),\n {\n sizes: SIZES,\n displayName: COMPONENT_NAME,\n }\n)\n\nexport { Dropdown, COMPONENT_NAME }\n"],"names":["COMPONENT_NAME","Dropdown","withMergedProps","forwardRef","props","ref","size","name","labelPosition","searchable","primary","optionsMultiToggle","iconProps","menuProps","loadingIconProps","optionsEmptyIconProps","loading","autoFocus","disableAutoScrollToSelectedOption","closeMenuOnScroll","scrollMonitorTarget","contrast","selectedOption","defaultSelectedOption","icon","addonLeft","inputMode","loadingMessage","loadingIcon","maxLength","multiple","clearable","onChangeInput","onCloseMenu","onOpenMenu","onSelectOption","options","loadOptions","renderOption","groupSelectedOptions","optionsMultiToggleCaption","optionsEmptyMessage","optionsEmptyIcon","palette","placeholder","readOnly","required","status","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","form","label","rootProps","sizeProps","formInputLabelId","useMemo","id","nanoid","inputLabelId","menuListId","filteredOptions","getFilteredOptions","useFilteredOptions","loadedOptions","optionsLoading","getLoadedOptions","useLoadedOptions","dropdownSelectedOption","setDropdownSelectedOption","useState","getDropdownSelectedOption","undefined","inputText","setInputText","getDropdownInputText","focusWithin","setFocusWithin","menuOpenRequest","setMenuOpenRequest","menuOptions","menuOptionsLoading","menuOpen","disabled","inputRequired","length","inputActive","Boolean","inputRef","useRef","menuRef","setMenuRef","menuListRef","selectedOptionRef","menuOpenPrevRef","updateInputText","useCallback","inputTextValue","updateOptions","updateOptionsDebounced","createDebouncedCallback","preventBlur","evt","target","current","Node","currentTarget","contains","renderInPortal","preventDefault","useScrollMonitor","onScrollStart","focus","useLayoutEffect","useEffect","menuRect","getBoundingClientRect","selectedOptionRect","top","bottom","setTimeout","scrollTo","offsetTop","_jsx","FormInputLabel","onColored","error","success","color","labelColorDisabled","labelColor","backgroundColor","backgroundColorDisabled","backgroundColorHover","borderColor","borderColorDisabled","onClick","onPointerDown","onMouseDown","window","PointerEvent","onFocus","onBlur","relatedTarget","input","_jsxs","_Fragment","children","Styled","type","tabIndex","FormInput","role","autoComplete","autoCapitalize","autoCorrect","spellCheck","active","labelId","value","colorDisabled","placeholderColor","placeholderColorDisabled","selectionStart","selectionEnd","stopPropagation","onChange","inputValue","onKeyDown","keyboardKeys","Enter","validate","key","Space","prev","Esc","Tab","ArrowDown","menuItems","idx","findIndex","item","focusTarget","HTMLElement","focusFirstFocusable","ArrowUp","focusLastFocusable","map","option","addonLeftProps","Icon","addonRight","addonRightProps","Chip","black","cursor","title","colorHover","chipAddonRightProps","IconButton","iconButtonProps","Close","square","ChevronDown","up","dropdown","dropdownProps","DropdownMenu","setRef","open","popperReferenceId","secondary","elevated","disableAutoFocus","menuBackgroundColor","menuBorderColor","empty","emptyMessage","emptyIcon","emptyIconProps","Backspace","DropdownMenuMultiple","update","DropdownMenuSingle","sizes","SIZES","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Dropdown.mjs","sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import { forwardRef, useState, useRef, useEffect, useLayoutEffect, useMemo, useCallback } from 'react'\nimport { nanoid } from 'nanoid'\nimport { Close } from '@foxford/icon-pack'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport type { MergedProps } from 'hocs/withMergedProps'\nimport { useScrollMonitor } from 'hooks/useScrollMonitor'\nimport { focusFirstFocusable, focusLastFocusable } from 'shared/utils/dom'\nimport { createDebouncedCallback } from 'shared/utils/misc'\nimport { keyboardKeys } from 'shared/constants'\nimport type { Nullable } from 'shared/types'\nimport { FormInput } from 'components/FormInput'\nimport { FormInputLabel } from 'components/FormInputLabel'\nimport { Chip } from 'components/Chip'\nimport { IconButton } from 'components/IconButton'\nimport { Icon } from 'components/Icon'\nimport { DropdownMenu } from './DropdownMenu'\nimport { useFilteredOptions, useLoadedOptions } from './hooks'\nimport { SIZES } from './sizes'\nimport { getDropdownInputText, getDropdownSelectedOption } from './utils'\nimport * as Styled from './style'\nimport type { DropdownProps, DropdownOption, DropdownOptionGroup } from './types'\nimport { DropdownMenuMultiple } from './DropdownMenuMultiple'\nimport { DropdownMenuSingle } from './DropdownMenuSingle'\n\nconst COMPONENT_NAME = 'Dropdown'\n\n/**\n *\n * Компонент для выбора одной или нескольких опций из числа доступных.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<div\\> элемента.\n */\nconst Dropdown: React.ForwardRefExoticComponent<DropdownProps> = withMergedProps<DropdownProps, HTMLDivElement>(\n forwardRef<HTMLDivElement, MergedProps<DropdownProps>>((props, ref) => {\n const {\n size = 'm',\n name = 'fox-dropdown',\n labelPosition = 'dynamic',\n searchable = true,\n primary = true,\n optionsMultiToggle = true,\n iconProps = {},\n menuProps = {},\n loadingIconProps = {},\n optionsEmptyIconProps = {},\n loading,\n autoFocus,\n disableAutoScrollToSelectedOption,\n closeMenuOnScroll,\n scrollMonitorTarget,\n contrast,\n selectedOption,\n defaultSelectedOption,\n icon,\n addonLeft,\n inputMode,\n loadingMessage,\n loadingIcon,\n maxLength,\n multiple,\n clearable,\n onChangeInput,\n onCloseMenu,\n onOpenMenu,\n onSelectOption,\n options,\n loadOptions,\n renderOption,\n groupSelectedOptions,\n optionsMultiToggleCaption,\n optionsEmptyMessage,\n optionsEmptyIcon,\n palette,\n placeholder,\n readOnly,\n required,\n status,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n form,\n label,\n ...rootProps\n } = props\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const formInputLabelId = useMemo(() => rootProps.id ?? `${name}-${nanoid()}`, [name, rootProps.id])\n const inputLabelId = useMemo(() => nanoid(), [])\n const menuListId = useMemo(() => nanoid(), [])\n\n const [filteredOptions, getFilteredOptions] = useFilteredOptions({\n options,\n })\n\n const [loadedOptions, optionsLoading, getLoadedOptions] = useLoadedOptions({\n loadOptions,\n options,\n })\n\n const [dropdownSelectedOption, setDropdownSelectedOption] = useState<DropdownOption[]>(() =>\n getDropdownSelectedOption(selectedOption !== undefined ? selectedOption : defaultSelectedOption, multiple)\n )\n\n const [inputText, setInputText] = useState<string>(() => getDropdownInputText(dropdownSelectedOption, multiple))\n\n const [focusWithin, setFocusWithin] = useState<boolean>(false)\n\n const [menuOpenRequest, setMenuOpenRequest] = useState<boolean>(false)\n\n const menuOptions: (DropdownOption | DropdownOptionGroup)[] = loadOptions ? loadedOptions : filteredOptions\n const menuOptionsLoading = loadOptions ? (loading ?? optionsLoading) : loading\n\n const menuOpen = menuOpenRequest && !rootProps.disabled\n\n const inputRequired = required && dropdownSelectedOption.length === 0\n const inputActive = Boolean(menuOpen || inputText || focusWithin)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const [menuRef, setMenuRef] = useState<Nullable<HTMLElement>>(null)\n const menuListRef = useRef<HTMLUListElement>(null)\n const selectedOptionRef = useRef<HTMLElement>(null)\n const menuOpenPrevRef = useRef<boolean>(menuOpen)\n\n const updateInputText = useCallback(\n (inputTextValue: string) => {\n setInputText(inputTextValue)\n\n if (onChangeInput) {\n onChangeInput(inputTextValue)\n }\n },\n [onChangeInput]\n )\n\n const updateOptions = useCallback(\n (inputTextValue: string) => {\n if (loadOptions) {\n getLoadedOptions(inputTextValue)\n } else {\n getFilteredOptions(inputTextValue)\n }\n },\n [loadOptions, getLoadedOptions, getFilteredOptions]\n )\n\n const updateOptionsDebounced = useMemo(() => {\n return createDebouncedCallback(updateOptions, 150)\n }, [updateOptions])\n\n const preventBlur = (evt: React.PointerEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (\n evt.target !== inputRef.current &&\n evt.target instanceof Node &&\n (evt.currentTarget.contains(evt.target) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.target)))\n ) {\n evt.preventDefault()\n }\n }\n\n useScrollMonitor({\n target: scrollMonitorTarget,\n onScrollStart: () => {\n if (closeMenuOnScroll && menuOpen) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n },\n })\n\n useLayoutEffect(() => {\n if (selectedOption === undefined) return\n\n if (!multiple && !menuOpen) {\n updateInputText(getDropdownInputText(selectedOption))\n }\n setDropdownSelectedOption(getDropdownSelectedOption(selectedOption, multiple))\n }, [multiple, selectedOption, menuOpen, updateInputText])\n\n useEffect(() => {\n if (menuOpen === menuOpenPrevRef.current) return\n\n if (menuOpen && onOpenMenu) onOpenMenu()\n if (!menuOpen && onCloseMenu) onCloseMenu()\n\n menuOpenPrevRef.current = menuOpen\n }, [menuOpen, onCloseMenu, onOpenMenu])\n\n useEffect(() => {\n if (\n !multiple &&\n !disableAutoScrollToSelectedOption &&\n menuOpen &&\n !menuOptionsLoading &&\n inputText.length === 0 &&\n menuRef &&\n selectedOptionRef.current\n ) {\n const menuRect = menuRef.getBoundingClientRect()\n const selectedOptionRect = selectedOptionRef.current.getBoundingClientRect()\n\n if (selectedOptionRect.top < menuRect.top || selectedOptionRect.bottom > menuRect.bottom) {\n setTimeout(() => {\n if (menuRef && selectedOptionRef.current) {\n menuRef.scrollTo(0, selectedOptionRef.current.offsetTop)\n }\n }, 0)\n }\n }\n }, [multiple, disableAutoScrollToSelectedOption, menuOpen, menuOptionsLoading, inputText, menuRef])\n\n useEffect(() => {\n if (rootProps.disabled) {\n setFocusWithin(false)\n }\n }, [rootProps.disabled])\n\n return (\n <FormInputLabel\n {...rootProps}\n {...sizeProps}\n ref={ref}\n id={formInputLabelId}\n onColored={contrast}\n primary={primary}\n error={status === 'error'}\n success={status === 'success'}\n focus={focusWithin}\n palette={{\n color: rootProps.disabled ? palette.labelColorDisabled : palette.labelColor,\n backgroundColor: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColor,\n backgroundColorHover: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColorHover,\n borderColor: rootProps.disabled ? palette.borderColorDisabled : palette.borderColor,\n }}\n onClick={(evt) => {\n if (rootProps.onClick) rootProps.onClick(evt)\n\n if (rootProps.disabled) return\n\n inputRef.current?.focus()\n\n if (!menuOpen) {\n setMenuOpenRequest(true)\n\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n } else if (menuRef && evt.target instanceof Node && !menuRef.contains(evt.target)) {\n setMenuOpenRequest(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n }\n }}\n onPointerDown={(evt) => {\n if (rootProps.onPointerDown) rootProps.onPointerDown(evt)\n\n preventBlur(evt)\n }}\n onMouseDown={(evt) => {\n if (rootProps.onMouseDown) rootProps.onMouseDown(evt)\n\n if (!window.PointerEvent) preventBlur(evt)\n }}\n onFocus={(evt) => {\n if (rootProps.onFocus) rootProps.onFocus(evt)\n\n setFocusWithin(true)\n\n if (inputRef.current && evt.target === inputRef.current && searchable && !multiple && !menuOpen) {\n updateInputText('')\n }\n }}\n onBlur={(evt) => {\n if (rootProps.onBlur) rootProps.onBlur(evt)\n\n if (\n evt.currentTarget.contains(evt.relatedTarget) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.relatedTarget))\n ) {\n return\n }\n\n setFocusWithin(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }}\n input={\n <>\n {inputRequired && !searchable && !readOnly ? (\n <Styled.InputMimic\n required\n type='text'\n inputMode='none'\n form={form}\n tabIndex={-1}\n onFocus={() => {\n inputRef.current?.focus()\n }}\n />\n ) : null}\n <FormInput\n {...sizeProps}\n ref={inputRef}\n role='combobox'\n aria-controls={menuListId}\n aria-expanded={menuOpen}\n type='text'\n autoComplete='off'\n autoCapitalize='off'\n autoCorrect='off'\n spellCheck='false'\n active={inputActive}\n label={label}\n labelId={inputLabelId}\n labelPosition={labelPosition}\n form={form}\n autoFocus={autoFocus}\n inputMode={searchable ? inputMode : 'none'}\n maxLength={maxLength}\n placeholder={placeholder}\n readOnly={readOnly || !searchable}\n required={inputRequired}\n disabled={rootProps.disabled}\n value={inputText}\n palette={{\n color: palette.color,\n colorDisabled: palette.colorDisabled,\n placeholderColor: palette.placeholderColor,\n placeholderColorDisabled: palette.placeholderColorDisabled,\n }}\n onClick={(evt) => {\n if (menuOpen && evt.currentTarget.selectionStart !== evt.currentTarget.selectionEnd) {\n evt.stopPropagation()\n }\n }}\n onChange={(evt) => {\n const inputValue = evt.currentTarget.value\n\n updateInputText(inputValue)\n updateOptionsDebounced(inputValue)\n setMenuOpenRequest(true)\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Enter.validate(evt.key)) {\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Space.validate(evt.key) && (!menuOpen || evt.currentTarget.selectionStart === 0)) {\n evt.preventDefault()\n\n if (!menuOpen) {\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n }\n\n setMenuOpenRequest((prev) => !prev)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Tab.validate(evt.key) && menuOpen) {\n evt.preventDefault()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.ArrowDown.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx + 1] ?? menuItems[0]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusFirstFocusable(menuListRef.current)\n }\n }\n\n if (keyboardKeys.ArrowUp.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx - 1] ?? menuItems[menuItems.length - 1]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusLastFocusable(menuListRef.current)\n }\n }\n }}\n />\n {dropdownSelectedOption.map((option) => (\n <input\n key={option.value}\n type='hidden'\n name={name}\n value={option.value}\n form={form}\n disabled={rootProps.disabled || option.disabled}\n />\n ))}\n </>\n }\n addonLeft={\n addonLeft ??\n (icon\n ? (addonLeftProps) => (\n <Icon\n {...addonLeftProps.iconProps}\n {...iconProps}\n name={typeof icon === 'string' ? icon : undefined}\n icon={typeof icon !== 'string' ? icon : undefined}\n />\n )\n : undefined)\n }\n addonRight={(addonRightProps) => (\n <>\n {multiple && dropdownSelectedOption.length > 0 ? (\n <Chip\n size='xs'\n active\n black\n disabled={rootProps.disabled}\n cursor={rootProps.disabled ? 'not-allowed' : undefined}\n title={dropdownSelectedOption.length}\n palette={\n rootProps.disabled\n ? {\n color: 'content-disabled',\n colorHover: 'content-disabled',\n backgroundColor: 'bg-disabled-small',\n backgroundColorHover: 'bg-disabled-small',\n }\n : undefined\n }\n onPointerDown={(evt) => {\n evt.preventDefault()\n }}\n onMouseDown={(evt) => {\n if (!window.PointerEvent) evt.preventDefault()\n }}\n addonRight={(chipAddonRightProps) => (\n <IconButton\n {...chipAddonRightProps.iconButtonProps}\n contrast={!rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption([])\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n )}\n />\n ) : null}\n {!multiple && clearable && dropdownSelectedOption.length > 0 ? (\n <IconButton\n icon={<Close />}\n size='l'\n square\n disabled={rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(null)\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n ) : null}\n <Styled.IconAnimated\n {...addonRightProps.iconProps}\n {...iconProps}\n icon={<Styled.ChevronDown />}\n rotate={menuOpen ? '180deg' : '0deg'}\n />\n </>\n )}\n dropdown={(dropdownProps) => (\n <DropdownMenu\n {...menuProps}\n setRef={setMenuRef}\n open={menuOpen}\n popperReferenceId={formInputLabelId}\n secondary={!contrast}\n elevated={contrast}\n disableAutoFocus\n palette={{\n backgroundColor: palette.menuBackgroundColor,\n borderColor: palette.menuBorderColor,\n }}\n empty={menuOptions.length === 0}\n loading={menuOptionsLoading}\n loadingMessage={loadingMessage}\n loadingIcon={loadingIcon}\n loadingIconProps={{\n ...dropdownProps.iconProps,\n ...loadingIconProps,\n }}\n emptyMessage={optionsEmptyMessage}\n emptyIcon={optionsEmptyIcon}\n emptyIconProps={{\n ...dropdownProps.iconProps,\n ...optionsEmptyIconProps,\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Tab.validate(evt.key)) {\n evt.preventDefault()\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Enter.validate(evt.key)) {\n inputRef.current?.focus()\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Backspace.validate(evt.key) && !readOnly && (multiple || (!multiple && clearable))) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(multiple ? [] : null)\n\n updateInputText('')\n updateOptions('')\n }\n }}\n >\n {multiple ? (\n <DropdownMenuMultiple\n {...sizeProps}\n ref={menuListRef}\n inputRef={inputRef}\n label={label}\n name={name}\n disabled={rootProps.disabled}\n readOnly={readOnly}\n menuListId={menuListId}\n inputLabelId={inputLabelId}\n menuOptions={menuOptions}\n dropdownSelectedOption={dropdownSelectedOption}\n inputText={inputText}\n optionsMultiToggle={optionsMultiToggle}\n groupSelectedOptions={groupSelectedOptions}\n optionsMultiToggleCaption={optionsMultiToggleCaption}\n renderOption={renderOption}\n onChange={(update) => {\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }}\n />\n ) : (\n <DropdownMenuSingle\n {...sizeProps}\n ref={menuListRef}\n label={label}\n readOnly={readOnly}\n multiple={multiple}\n disabled={rootProps.disabled}\n status={status}\n menuListId={menuListId}\n inputLabelId={inputLabelId}\n menuOptions={menuOptions}\n dropdownSelectedOption={dropdownSelectedOption}\n selectedOptionRef={selectedOptionRef}\n renderOption={renderOption}\n onChange={(option) => {\n const update = { ...option }\n\n if (selectedOption === undefined) {\n updateInputText(getDropdownInputText(update))\n setDropdownSelectedOption(getDropdownSelectedOption(update))\n }\n\n if (onSelectOption) onSelectOption(update)\n\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }}\n />\n )}\n </DropdownMenu>\n )}\n />\n )\n }),\n {\n sizes: SIZES,\n displayName: COMPONENT_NAME,\n }\n)\n\nexport { Dropdown, COMPONENT_NAME }\n"],"names":["COMPONENT_NAME","Dropdown","withMergedProps","forwardRef","props","ref","size","name","labelPosition","searchable","primary","optionsMultiToggle","iconProps","menuProps","loadingIconProps","optionsEmptyIconProps","loading","autoFocus","disableAutoScrollToSelectedOption","closeMenuOnScroll","scrollMonitorTarget","contrast","selectedOption","defaultSelectedOption","icon","addonLeft","inputMode","loadingMessage","loadingIcon","maxLength","multiple","clearable","onChangeInput","onCloseMenu","onOpenMenu","onSelectOption","options","loadOptions","renderOption","groupSelectedOptions","optionsMultiToggleCaption","optionsEmptyMessage","optionsEmptyIcon","palette","placeholder","readOnly","required","status","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","form","label","rootProps","sizeProps","formInputLabelId","useMemo","id","nanoid","inputLabelId","menuListId","filteredOptions","getFilteredOptions","useFilteredOptions","loadedOptions","optionsLoading","getLoadedOptions","useLoadedOptions","dropdownSelectedOption","setDropdownSelectedOption","useState","getDropdownSelectedOption","undefined","inputText","setInputText","getDropdownInputText","focusWithin","setFocusWithin","menuOpenRequest","setMenuOpenRequest","menuOptions","menuOptionsLoading","menuOpen","disabled","inputRequired","length","inputActive","Boolean","inputRef","useRef","menuRef","setMenuRef","menuListRef","selectedOptionRef","menuOpenPrevRef","updateInputText","useCallback","inputTextValue","updateOptions","updateOptionsDebounced","createDebouncedCallback","preventBlur","evt","target","current","Node","currentTarget","contains","renderInPortal","preventDefault","useScrollMonitor","onScrollStart","focus","useLayoutEffect","useEffect","menuRect","getBoundingClientRect","selectedOptionRect","top","bottom","setTimeout","scrollTo","offsetTop","_jsx","FormInputLabel","onColored","error","success","color","labelColorDisabled","labelColor","backgroundColor","backgroundColorDisabled","backgroundColorHover","borderColor","borderColorDisabled","onClick","onPointerDown","onMouseDown","window","PointerEvent","onFocus","onBlur","relatedTarget","input","_jsxs","_Fragment","children","Styled","type","tabIndex","FormInput","role","autoComplete","autoCapitalize","autoCorrect","spellCheck","active","labelId","value","colorDisabled","placeholderColor","placeholderColorDisabled","selectionStart","selectionEnd","stopPropagation","onChange","inputValue","onKeyDown","keyboardKeys","Enter","validate","key","Space","prev","Esc","Tab","ArrowDown","menuItems","idx","findIndex","item","focusTarget","HTMLElement","focusFirstFocusable","ArrowUp","focusLastFocusable","map","option","addonLeftProps","Icon","addonRight","addonRightProps","Chip","black","cursor","title","colorHover","chipAddonRightProps","IconButton","iconButtonProps","Close","square","rotate","dropdown","dropdownProps","DropdownMenu","setRef","open","popperReferenceId","secondary","elevated","disableAutoFocus","menuBackgroundColor","menuBorderColor","empty","emptyMessage","emptyIcon","emptyIconProps","Backspace","DropdownMenuMultiple","update","DropdownMenuSingle","sizes","SIZES","displayName"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- 'use strict';var style=require('./style.js');var jsxRuntime=require('react/jsx-runtime');var index=require('../../icon-pack/src/icons/Redo/index.js');var MenuContainer=require('../MenuContainer/MenuContainer.js');var Icon=require('../Icon/Icon.js');var Text=require('../Text/Text.js');exports.DropdownMenuNoOptions=e=>{const{loadingIcon:n=jsxRuntime.jsx(style.LoadingIconAnimated,{}),emptyIcon:r=jsxRuntime.jsx(index.Redo,{}),loadingIconProps:i={},emptyIconProps:t={},loading:o,loadingMessage:s,emptyMessage:a}=e;return jsxRuntime.jsxs(MenuContainer.MenuContainer,{children:[jsxRuntime.jsx(style.IconContainer,{children:jsxRuntime.jsx(Icon.Icon,o?{preset:"brand",name:typeof n=='string'?n:void 0,icon:typeof n!='string'?n:void 0,...i}:{preset:"brand",name:typeof r=='string'?r:void 0,icon:typeof r!='string'?r:void 0,...t})}),o&&s?jsxRuntime.jsx(Text.Text,{as:"p",appearance:"body",size:"inherit",color:"inherit",textAlign:"center",wordBreak:"break-word",marginRight:12,marginBottom:12,marginLeft:12,children:s}):null,!o&&a?jsxRuntime.jsx(Text.Text,{as:"p",appearance:"body",size:"inherit",color:"inherit",textAlign:"center",wordBreak:"break-word",marginRight:12,marginBottom:12,marginLeft:12,children:a}):null]})};
1
+ 'use strict';var style=require('./style.js');var jsxRuntime=require('react/jsx-runtime');var MenuContainer=require('../MenuContainer/MenuContainer.js');var Icon=require('../Icon/Icon.js');var Text=require('../Text/Text.js');exports.DropdownMenuNoOptions=e=>{const{loadingIcon:n=jsxRuntime.jsx(style.LoadingIconAnimated,{}),emptyIcon:r=jsxRuntime.jsx(style.Redo,{}),loadingIconProps:t={},emptyIconProps:i={},loading:o,loadingMessage:s,emptyMessage:a}=e;return jsxRuntime.jsxs(MenuContainer.MenuContainer,{children:[jsxRuntime.jsx(style.IconContainer,{children:jsxRuntime.jsx(Icon.Icon,o?{preset:"brand",name:typeof n=='string'?n:void 0,icon:typeof n!='string'?n:void 0,...t}:{preset:"brand",name:typeof r=='string'?r:void 0,icon:typeof r!='string'?r:void 0,...i})}),o&&s?jsxRuntime.jsx(Text.Text,{as:"p",appearance:"body",size:"inherit",color:"inherit",textAlign:"center",wordBreak:"break-word",marginRight:12,marginBottom:12,marginLeft:12,children:s}):null,!o&&a?jsxRuntime.jsx(Text.Text,{as:"p",appearance:"body",size:"inherit",color:"inherit",textAlign:"center",wordBreak:"break-word",marginRight:12,marginBottom:12,marginLeft:12,children:a}):null]})};
2
2
  //# sourceMappingURL=DropdownMenuNoOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenuNoOptions.js","sources":["../../../../src/components/Dropdown/DropdownMenuNoOptions.tsx"],"sourcesContent":["import { Redo } from '@foxford/icon-pack'\nimport { MenuContainer } from 'components/MenuContainer'\nimport { Text } from 'components/Text'\nimport { Icon } from 'components/Icon'\nimport * as Styled from './style'\n\nimport type { DropdownMenuNoOptionsProps } from './types'\n\nconst DropdownMenuNoOptions = (props: DropdownMenuNoOptionsProps) => {\n const {\n loadingIcon = <Styled.LoadingIconAnimated />,\n emptyIcon = <Redo />,\n loadingIconProps = {},\n emptyIconProps = {},\n loading,\n loadingMessage,\n emptyMessage,\n } = props\n\n return (\n <MenuContainer>\n <Styled.IconContainer>\n {loading ? (\n <Icon\n preset='brand'\n name={typeof loadingIcon === 'string' ? loadingIcon : undefined}\n icon={typeof loadingIcon !== 'string' ? loadingIcon : undefined}\n {...loadingIconProps}\n />\n ) : (\n <Icon\n preset='brand'\n name={typeof emptyIcon === 'string' ? emptyIcon : undefined}\n icon={typeof emptyIcon !== 'string' ? emptyIcon : undefined}\n {...emptyIconProps}\n />\n )}\n </Styled.IconContainer>\n {loading && loadingMessage ? (\n <Text\n as='p'\n appearance='body'\n size='inherit'\n color='inherit'\n textAlign='center'\n wordBreak='break-word'\n marginRight={12}\n marginBottom={12}\n marginLeft={12}\n >\n {loadingMessage}\n </Text>\n ) : null}\n {!loading && emptyMessage ? (\n <Text\n as='p'\n appearance='body'\n size='inherit'\n color='inherit'\n textAlign='center'\n wordBreak='break-word'\n marginRight={12}\n marginBottom={12}\n marginLeft={12}\n >\n {emptyMessage}\n </Text>\n ) : null}\n </MenuContainer>\n )\n}\n\nexport { DropdownMenuNoOptions }\n"],"names":["props","loadingIcon","_jsx","Styled","emptyIcon","Redo","loadingIconProps","emptyIconProps","loading","loadingMessage","emptyMessage","_jsxs","MenuContainer","children","Icon","preset","name","undefined","icon","Text","as","appearance","size","color","textAlign","wordBreak","marginRight","marginBottom","marginLeft"],"mappings":"2TAQ+BA,IAC7B,MAAMC,YACJA,EAAcC,WAAAA,IAACC,MAAAA,wBAA6BC,UAC5CA,EAAYF,WAAAA,IAACG,MAAAA,SAAOC,iBACpBA,EAAmB,CAAA,EAAEC,eACrBA,EAAiB,CAAA,EAAEC,QACnBA,EAAOC,eACPA,EAAcC,aACdA,GACEV,EAEJ,OACEW,WAAAA,KAACC,cAAAA,cAAa,CAAAC,SAAA,CACZX,WAAAA,IAACC,oBAAoB,CAAAU,SAEjBX,WAAAA,IAACY,UADFN,EACM,CACHO,OAAO,QACPC,YAAaf,GAAgB,SAAWA,OAAcgB,EACtDC,YAAajB,GAAgB,SAAWA,OAAcgB,KAClDX,GAGD,CACHS,OAAO,QACPC,YAAaZ,GAAc,SAAWA,OAAYa,EAClDC,YAAad,GAAc,SAAWA,OAAYa,KAC9CV,MAITC,GAAWC,EACVP,WAAAA,IAACiB,KAAAA,KAAI,CACHC,GAAG,IACHC,WAAW,OACXC,KAAK,UACLC,MAAM,UACNC,UAAU,SACVC,UAAU,aACVC,YAAa,GACbC,aAAc,GACdC,WAAY,GAAGf,SAEdJ,IAED,MACFD,GAAWE,EACXR,WAAAA,IAACiB,KAAAA,KAAI,CACHC,GAAG,IACHC,WAAW,OACXC,KAAK,UACLC,MAAM,UACNC,UAAU,SACVC,UAAU,aACVC,YAAa,GACbC,aAAc,GACdC,WAAY,GAAGf,SAEdH,IAED"}
1
+ {"version":3,"file":"DropdownMenuNoOptions.js","sources":["../../../../src/components/Dropdown/DropdownMenuNoOptions.tsx"],"sourcesContent":["import { MenuContainer } from 'components/MenuContainer'\nimport { Text } from 'components/Text'\nimport { Icon } from 'components/Icon'\nimport * as Styled from './style'\n\nimport type { DropdownMenuNoOptionsProps } from './types'\n\nconst DropdownMenuNoOptions = (props: DropdownMenuNoOptionsProps) => {\n const {\n loadingIcon = <Styled.LoadingIconAnimated />,\n emptyIcon = <Styled.Redo />,\n loadingIconProps = {},\n emptyIconProps = {},\n loading,\n loadingMessage,\n emptyMessage,\n } = props\n\n return (\n <MenuContainer>\n <Styled.IconContainer>\n {loading ? (\n <Icon\n preset='brand'\n name={typeof loadingIcon === 'string' ? loadingIcon : undefined}\n icon={typeof loadingIcon !== 'string' ? loadingIcon : undefined}\n {...loadingIconProps}\n />\n ) : (\n <Icon\n preset='brand'\n name={typeof emptyIcon === 'string' ? emptyIcon : undefined}\n icon={typeof emptyIcon !== 'string' ? emptyIcon : undefined}\n {...emptyIconProps}\n />\n )}\n </Styled.IconContainer>\n {loading && loadingMessage ? (\n <Text\n as='p'\n appearance='body'\n size='inherit'\n color='inherit'\n textAlign='center'\n wordBreak='break-word'\n marginRight={12}\n marginBottom={12}\n marginLeft={12}\n >\n {loadingMessage}\n </Text>\n ) : null}\n {!loading && emptyMessage ? (\n <Text\n as='p'\n appearance='body'\n size='inherit'\n color='inherit'\n textAlign='center'\n wordBreak='break-word'\n marginRight={12}\n marginBottom={12}\n marginLeft={12}\n >\n {emptyMessage}\n </Text>\n ) : null}\n </MenuContainer>\n )\n}\n\nexport { DropdownMenuNoOptions }\n"],"names":["props","loadingIcon","_jsx","Styled","emptyIcon","loadingIconProps","emptyIconProps","loading","loadingMessage","emptyMessage","_jsxs","MenuContainer","children","Icon","preset","name","undefined","icon","Text","as","appearance","size","color","textAlign","wordBreak","marginRight","marginBottom","marginLeft"],"mappings":"8PAO+BA,IAC7B,MAAMC,YACJA,EAAcC,WAAAA,IAACC,MAAAA,wBAA6BC,UAC5CA,EAAYF,WAAAA,IAACC,MAAAA,SAAcE,iBAC3BA,EAAmB,CAAA,EAAEC,eACrBA,EAAiB,CAAA,EAAEC,QACnBA,EAAOC,eACPA,EAAcC,aACdA,GACET,EAEJ,OACEU,WAAAA,KAACC,cAAAA,cAAa,CAAAC,SAAA,CACZV,WAAAA,IAACC,oBAAoB,CAAAS,SAEjBV,WAAAA,IAACW,UADFN,EACM,CACHO,OAAO,QACPC,YAAad,GAAgB,SAAWA,OAAce,EACtDC,YAAahB,GAAgB,SAAWA,OAAce,KAClDX,GAGD,CACHS,OAAO,QACPC,YAAaX,GAAc,SAAWA,OAAYY,EAClDC,YAAab,GAAc,SAAWA,OAAYY,KAC9CV,MAITC,GAAWC,EACVN,WAAAA,IAACgB,KAAAA,KAAI,CACHC,GAAG,IACHC,WAAW,OACXC,KAAK,UACLC,MAAM,UACNC,UAAU,SACVC,UAAU,aACVC,YAAa,GACbC,aAAc,GACdC,WAAY,GAAGf,SAEdJ,IAED,MACFD,GAAWE,EACXP,WAAAA,IAACgB,KAAAA,KAAI,CACHC,GAAG,IACHC,WAAW,OACXC,KAAK,UACLC,MAAM,UACNC,UAAU,SACVC,UAAU,aACVC,YAAa,GACbC,aAAc,GACdC,WAAY,GAAGf,SAEdH,IAED"}
@@ -1,2 +1,2 @@
1
- import{LoadingIconAnimated,IconContainer}from'./style.mjs';import{jsx,jsxs}from'react/jsx-runtime';import{Redo}from'../../icon-pack/src/icons/Redo/index.mjs';import{MenuContainer}from'../MenuContainer/MenuContainer.mjs';import{Icon}from'../Icon/Icon.mjs';import{Text}from'../Text/Text.mjs';const DropdownMenuNoOptions=n=>{const{loadingIcon:o=jsx(LoadingIconAnimated,{}),emptyIcon:e=jsx(Redo,{}),loadingIconProps:r={},emptyIconProps:i={},loading:t,loadingMessage:a,emptyMessage:s}=n;return jsxs(MenuContainer,{children:[jsx(IconContainer,{children:jsx(Icon,t?{preset:"brand",name:typeof o=='string'?o:void 0,icon:typeof o!='string'?o:void 0,...r}:{preset:"brand",name:typeof e=='string'?e:void 0,icon:typeof e!='string'?e:void 0,...i})}),t&&a?jsx(Text,{as:"p",appearance:"body",size:"inherit",color:"inherit",textAlign:"center",wordBreak:"break-word",marginRight:12,marginBottom:12,marginLeft:12,children:a}):null,!t&&s?jsx(Text,{as:"p",appearance:"body",size:"inherit",color:"inherit",textAlign:"center",wordBreak:"break-word",marginRight:12,marginBottom:12,marginLeft:12,children:s}):null]})};export{DropdownMenuNoOptions};
1
+ import{LoadingIconAnimated,Redo,IconContainer}from'./style.mjs';import{jsx,jsxs}from'react/jsx-runtime';import{MenuContainer}from'../MenuContainer/MenuContainer.mjs';import{Icon}from'../Icon/Icon.mjs';import{Text}from'../Text/Text.mjs';const DropdownMenuNoOptions=n=>{const{loadingIcon:o=jsx(LoadingIconAnimated,{}),emptyIcon:e=jsx(Redo,{}),loadingIconProps:r={},emptyIconProps:t={},loading:i,loadingMessage:a,emptyMessage:s}=n;return jsxs(MenuContainer,{children:[jsx(IconContainer,{children:jsx(Icon,i?{preset:"brand",name:typeof o=='string'?o:void 0,icon:typeof o!='string'?o:void 0,...r}:{preset:"brand",name:typeof e=='string'?e:void 0,icon:typeof e!='string'?e:void 0,...t})}),i&&a?jsx(Text,{as:"p",appearance:"body",size:"inherit",color:"inherit",textAlign:"center",wordBreak:"break-word",marginRight:12,marginBottom:12,marginLeft:12,children:a}):null,!i&&s?jsx(Text,{as:"p",appearance:"body",size:"inherit",color:"inherit",textAlign:"center",wordBreak:"break-word",marginRight:12,marginBottom:12,marginLeft:12,children:s}):null]})};export{DropdownMenuNoOptions};
2
2
  //# sourceMappingURL=DropdownMenuNoOptions.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenuNoOptions.mjs","sources":["../../../../src/components/Dropdown/DropdownMenuNoOptions.tsx"],"sourcesContent":["import { Redo } from '@foxford/icon-pack'\nimport { MenuContainer } from 'components/MenuContainer'\nimport { Text } from 'components/Text'\nimport { Icon } from 'components/Icon'\nimport * as Styled from './style'\n\nimport type { DropdownMenuNoOptionsProps } from './types'\n\nconst DropdownMenuNoOptions = (props: DropdownMenuNoOptionsProps) => {\n const {\n loadingIcon = <Styled.LoadingIconAnimated />,\n emptyIcon = <Redo />,\n loadingIconProps = {},\n emptyIconProps = {},\n loading,\n loadingMessage,\n emptyMessage,\n } = props\n\n return (\n <MenuContainer>\n <Styled.IconContainer>\n {loading ? (\n <Icon\n preset='brand'\n name={typeof loadingIcon === 'string' ? loadingIcon : undefined}\n icon={typeof loadingIcon !== 'string' ? loadingIcon : undefined}\n {...loadingIconProps}\n />\n ) : (\n <Icon\n preset='brand'\n name={typeof emptyIcon === 'string' ? emptyIcon : undefined}\n icon={typeof emptyIcon !== 'string' ? emptyIcon : undefined}\n {...emptyIconProps}\n />\n )}\n </Styled.IconContainer>\n {loading && loadingMessage ? (\n <Text\n as='p'\n appearance='body'\n size='inherit'\n color='inherit'\n textAlign='center'\n wordBreak='break-word'\n marginRight={12}\n marginBottom={12}\n marginLeft={12}\n >\n {loadingMessage}\n </Text>\n ) : null}\n {!loading && emptyMessage ? (\n <Text\n as='p'\n appearance='body'\n size='inherit'\n color='inherit'\n textAlign='center'\n wordBreak='break-word'\n marginRight={12}\n marginBottom={12}\n marginLeft={12}\n >\n {emptyMessage}\n </Text>\n ) : null}\n </MenuContainer>\n )\n}\n\nexport { DropdownMenuNoOptions }\n"],"names":["DropdownMenuNoOptions","props","loadingIcon","_jsx","Styled","emptyIcon","Redo","loadingIconProps","emptyIconProps","loading","loadingMessage","emptyMessage","_jsxs","MenuContainer","children","Icon","preset","name","undefined","icon","Text","as","appearance","size","color","textAlign","wordBreak","marginRight","marginBottom","marginLeft"],"mappings":"kSAQA,MAAMA,sBAAyBC,IAC7B,MAAMC,YACJA,EAAcC,IAACC,wBAA6BC,UAC5CA,EAAYF,IAACG,SAAOC,iBACpBA,EAAmB,CAAA,EAAEC,eACrBA,EAAiB,CAAA,EAAEC,QACnBA,EAAOC,eACPA,EAAcC,aACdA,GACEV,EAEJ,OACEW,KAACC,cAAa,CAAAC,SAAA,CACZX,IAACC,cAAoB,CAAAU,SAEjBX,IAACY,KADFN,EACM,CACHO,OAAO,QACPC,YAAaf,GAAgB,SAAWA,OAAcgB,EACtDC,YAAajB,GAAgB,SAAWA,OAAcgB,KAClDX,GAGD,CACHS,OAAO,QACPC,YAAaZ,GAAc,SAAWA,OAAYa,EAClDC,YAAad,GAAc,SAAWA,OAAYa,KAC9CV,MAITC,GAAWC,EACVP,IAACiB,KAAI,CACHC,GAAG,IACHC,WAAW,OACXC,KAAK,UACLC,MAAM,UACNC,UAAU,SACVC,UAAU,aACVC,YAAa,GACbC,aAAc,GACdC,WAAY,GAAGf,SAEdJ,IAED,MACFD,GAAWE,EACXR,IAACiB,KAAI,CACHC,GAAG,IACHC,WAAW,OACXC,KAAK,UACLC,MAAM,UACNC,UAAU,SACVC,UAAU,aACVC,YAAa,GACbC,aAAc,GACdC,WAAY,GAAGf,SAEdH,IAED"}
1
+ {"version":3,"file":"DropdownMenuNoOptions.mjs","sources":["../../../../src/components/Dropdown/DropdownMenuNoOptions.tsx"],"sourcesContent":["import { MenuContainer } from 'components/MenuContainer'\nimport { Text } from 'components/Text'\nimport { Icon } from 'components/Icon'\nimport * as Styled from './style'\n\nimport type { DropdownMenuNoOptionsProps } from './types'\n\nconst DropdownMenuNoOptions = (props: DropdownMenuNoOptionsProps) => {\n const {\n loadingIcon = <Styled.LoadingIconAnimated />,\n emptyIcon = <Styled.Redo />,\n loadingIconProps = {},\n emptyIconProps = {},\n loading,\n loadingMessage,\n emptyMessage,\n } = props\n\n return (\n <MenuContainer>\n <Styled.IconContainer>\n {loading ? (\n <Icon\n preset='brand'\n name={typeof loadingIcon === 'string' ? loadingIcon : undefined}\n icon={typeof loadingIcon !== 'string' ? loadingIcon : undefined}\n {...loadingIconProps}\n />\n ) : (\n <Icon\n preset='brand'\n name={typeof emptyIcon === 'string' ? emptyIcon : undefined}\n icon={typeof emptyIcon !== 'string' ? emptyIcon : undefined}\n {...emptyIconProps}\n />\n )}\n </Styled.IconContainer>\n {loading && loadingMessage ? (\n <Text\n as='p'\n appearance='body'\n size='inherit'\n color='inherit'\n textAlign='center'\n wordBreak='break-word'\n marginRight={12}\n marginBottom={12}\n marginLeft={12}\n >\n {loadingMessage}\n </Text>\n ) : null}\n {!loading && emptyMessage ? (\n <Text\n as='p'\n appearance='body'\n size='inherit'\n color='inherit'\n textAlign='center'\n wordBreak='break-word'\n marginRight={12}\n marginBottom={12}\n marginLeft={12}\n >\n {emptyMessage}\n </Text>\n ) : null}\n </MenuContainer>\n )\n}\n\nexport { DropdownMenuNoOptions }\n"],"names":["DropdownMenuNoOptions","props","loadingIcon","_jsx","Styled","emptyIcon","loadingIconProps","emptyIconProps","loading","loadingMessage","emptyMessage","_jsxs","MenuContainer","children","Icon","preset","name","undefined","icon","Text","as","appearance","size","color","textAlign","wordBreak","marginRight","marginBottom","marginLeft"],"mappings":"4OAOA,MAAMA,sBAAyBC,IAC7B,MAAMC,YACJA,EAAcC,IAACC,wBAA6BC,UAC5CA,EAAYF,IAACC,SAAcE,iBAC3BA,EAAmB,CAAA,EAAEC,eACrBA,EAAiB,CAAA,EAAEC,QACnBA,EAAOC,eACPA,EAAcC,aACdA,GACET,EAEJ,OACEU,KAACC,cAAa,CAAAC,SAAA,CACZV,IAACC,cAAoB,CAAAS,SAEjBV,IAACW,KADFN,EACM,CACHO,OAAO,QACPC,YAAad,GAAgB,SAAWA,OAAce,EACtDC,YAAahB,GAAgB,SAAWA,OAAce,KAClDX,GAGD,CACHS,OAAO,QACPC,YAAaX,GAAc,SAAWA,OAAYY,EAClDC,YAAab,GAAc,SAAWA,OAAYY,KAC9CV,MAITC,GAAWC,EACVN,IAACgB,KAAI,CACHC,GAAG,IACHC,WAAW,OACXC,KAAK,UACLC,MAAM,UACNC,UAAU,SACVC,UAAU,aACVC,YAAa,GACbC,aAAc,GACdC,WAAY,GAAGf,SAEdJ,IAED,MACFD,GAAWE,EACXP,IAACgB,KAAI,CACHC,GAAG,IACHC,WAAW,OACXC,KAAK,UACLC,MAAM,UACNC,UAAU,SACVC,UAAU,aACVC,YAAa,GACbC,aAAc,GACdC,WAAY,GAAGf,SAEdH,IAED"}
@@ -1,2 +1,2 @@
1
- 'use strict';var styled=require('styled-components');var Icon=require('../Icon/Icon.js');var index=require('../../icon-pack/src/icons/LoaderFill/index.js');function _interopDefault(n){return n&&n.__esModule?n:{default:n}}var styled__default=_interopDefault(styled);const spinAnimation=styled.keyframes(["100%{transform:rotate(360deg);}"]);const IconContainer=styled__default.default.div.withConfig({displayName:"Dropdown__IconContainer",componentId:"ui__sc-519mcg-0"})(["box-sizing:border-box;display:flex;align-items:center;justify-content:center;margin:12px 0;"]);const IconAnimated=styled__default.default(Icon.Icon).withConfig({shouldForwardProp:n=>n!=='up'}).withConfig({displayName:"Dropdown__IconAnimated",componentId:"ui__sc-519mcg-1"})(["",""],n=>`\n transition-property: transform;\n transition-duration: 250ms;\n transform-origin: center;\n transform: rotate(${n.up?180:0}deg);\n `);const LoadingIconAnimated=styled__default.default(index.LoaderFill).withConfig({displayName:"Dropdown__LoadingIconAnimated",componentId:"ui__sc-519mcg-2"})(["transform-origin:center;animation:"," 1600ms infinite linear;"],spinAnimation);const InputMimic=styled__default.default.input.withConfig({displayName:"Dropdown__InputMimic",componentId:"ui__sc-519mcg-3"})(["box-sizing:border-box;position:absolute;top:0;left:0;appearance:none;border:none;padding:0;margin:0;background-color:transparent;width:100%;height:100%;opacity:0;&:focus{outline:none;}"]);exports.IconAnimated=IconAnimated,exports.IconContainer=IconContainer,exports.InputMimic=InputMimic,exports.LoadingIconAnimated=LoadingIconAnimated;
1
+ 'use strict';var styled=require('styled-components');var Icon=require('../Icon/Icon.js');var index=require('../../icon-pack/src/icons/ChevronUp/index.js');var index$1=require('../../icon-pack/src/icons/LoaderFill/index.js');var index$2=require('../../icon-pack/src/icons/Undo/index.js');function _interopDefault(n){return n&&n.__esModule?n:{default:n}}var styled__default=_interopDefault(styled);const spinAnimation=styled.keyframes(["100%{transform:rotate(360deg);}"]);const IconContainer=styled__default.default.div.withConfig({displayName:"Dropdown__IconContainer",componentId:"ui__sc-519mcg-0"})(["box-sizing:border-box;display:flex;align-items:center;justify-content:center;margin:12px 0;"]);const IconAnimated=styled__default.default(Icon.Icon).withConfig({displayName:"Dropdown__IconAnimated",componentId:"ui__sc-519mcg-1"})(["transition-property:transform;transition-duration:250ms;@media (prefers-reduced-motion:reduce){transition-duration:0ms;}"]);const ChevronDown=styled__default.default(index.ChevronUp).withConfig({displayName:"Dropdown__ChevronDown",componentId:"ui__sc-519mcg-2"})(["transform-origin:center;transform:scaleY(-1);"]);const Redo=styled__default.default(index$2.Undo).withConfig({displayName:"Dropdown__Redo",componentId:"ui__sc-519mcg-3"})(["transform-origin:center;transform:scaleX(-1);"]);const LoadingIconAnimated=styled__default.default(index$1.LoaderFill).withConfig({displayName:"Dropdown__LoadingIconAnimated",componentId:"ui__sc-519mcg-4"})(["transform-origin:center;animation:"," 1600ms infinite linear;"],spinAnimation);const InputMimic=styled__default.default.input.withConfig({displayName:"Dropdown__InputMimic",componentId:"ui__sc-519mcg-5"})(["box-sizing:border-box;position:absolute;top:0;left:0;appearance:none;border:none;padding:0;margin:0;background-color:transparent;width:100%;height:100%;opacity:0;&:focus{outline:none;}"]);exports.ChevronDown=ChevronDown,exports.IconAnimated=IconAnimated,exports.IconContainer=IconContainer,exports.InputMimic=InputMimic,exports.LoadingIconAnimated=LoadingIconAnimated,exports.Redo=Redo;
2
2
  //# sourceMappingURL=style.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sources":["../../../../src/components/Dropdown/style.ts"],"sourcesContent":["import styled, { keyframes } from 'styled-components'\nimport { LoaderFill } from '@foxford/icon-pack'\nimport { Icon } from 'components/Icon'\n\nconst spinAnimation = keyframes`\n 100% {\n transform: rotate(360deg);\n }\n`\n\nexport const IconContainer = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 12px 0;\n`\n\nexport const IconAnimated = styled(Icon).withConfig<{ up: boolean }>({\n shouldForwardProp: (propKey) => propKey !== 'up',\n})`\n ${(props) => `\n transition-property: transform;\n transition-duration: 250ms;\n transform-origin: center;\n transform: rotate(${props.up ? 180 : 0}deg);\n `}\n`\n\nexport const LoadingIconAnimated = styled(LoaderFill)`\n transform-origin: center;\n animation: ${spinAnimation} 1600ms infinite linear;\n`\n\nexport const InputMimic = styled.input`\n box-sizing: border-box;\n position: absolute;\n top: 0;\n left: 0;\n appearance: none;\n border: none;\n padding: 0;\n margin: 0;\n background-color: transparent;\n width: 100%;\n height: 100%;\n opacity: 0;\n &:focus {\n outline: none;\n }\n`\n"],"names":["spinAnimation","keyframes","IconContainer","styled","div","withConfig","displayName","componentId","IconAnimated","Icon","shouldForwardProp","propKey","props","up","LoadingIconAnimated","LoaderFill","InputMimic","input"],"mappings":"yQAIA,MAAMA,cAAgBC,OAAAA,UAAS,CAAA,0CAMlBC,cAAgBC,gBAAAA,QAAOC,IAAGC,WAAA,CAAAC,YAAA,0BAAAC,YAAA,mBAAVJ,CAAU,CAAA,gGAQhC,MAAMK,aAAeL,gBAAAA,QAAOM,WAAMJ,WAA4B,CACnEK,kBAAoBC,GAAYA,IAAY,OAC5CN,WAAA,CAAAC,YAAA,yBAAAC,YAAA,mBAF0BJ,CAE1B,CAAA,GAAA,IACGS,GAAU,gIAISA,EAAMC,GAAK,IAAM,cAIlC,MAAMC,oBAAsBX,gBAAAA,QAAOY,kBAAWV,WAAA,CAAAC,YAAA,gCAAAC,YAAA,mBAAlBJ,CAAkB,CAAA,qCAAA,4BAEtCH,qBAGFgB,WAAab,gBAAAA,QAAOc,MAAKZ,WAAA,CAAAC,YAAA,uBAAAC,YAAA,mBAAZJ,CAAY,CAAA"}
1
+ {"version":3,"file":"style.js","sources":["../../../../src/components/Dropdown/style.ts"],"sourcesContent":["import styled, { keyframes } from 'styled-components'\nimport { LoaderFill, ChevronUp, Undo } from '@foxford/icon-pack'\nimport { Icon } from 'components/Icon'\n\nconst spinAnimation = keyframes`\n 100% {\n transform: rotate(360deg);\n }\n`\n\nexport const IconContainer = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 12px 0;\n`\n\nexport const IconAnimated = styled(Icon)`\n transition-property: transform;\n transition-duration: 250ms;\n @media (prefers-reduced-motion: reduce) {\n transition-duration: 0ms;\n }\n`\n\nexport const ChevronDown = styled(ChevronUp)`\n transform-origin: center;\n transform: scaleY(-1);\n`\n\nexport const Redo = styled(Undo)`\n transform-origin: center;\n transform: scaleX(-1);\n`\n\nexport const LoadingIconAnimated = styled(LoaderFill)`\n transform-origin: center;\n animation: ${spinAnimation} 1600ms infinite linear;\n`\n\nexport const InputMimic = styled.input`\n box-sizing: border-box;\n position: absolute;\n top: 0;\n left: 0;\n appearance: none;\n border: none;\n padding: 0;\n margin: 0;\n background-color: transparent;\n width: 100%;\n height: 100%;\n opacity: 0;\n &:focus {\n outline: none;\n }\n`\n"],"names":["spinAnimation","keyframes","IconContainer","styled","div","withConfig","displayName","componentId","IconAnimated","Icon","ChevronDown","ChevronUp","Redo","Undo","LoadingIconAnimated","LoaderFill","InputMimic","input"],"mappings":"4YAIA,MAAMA,cAAgBC,OAAAA,UAAS,CAAA,0CAMlBC,cAAgBC,gBAAAA,QAAOC,IAAGC,WAAA,CAAAC,YAAA,0BAAAC,YAAA,mBAAVJ,CAAU,CAAA,gGAQhC,MAAMK,aAAeL,gBAAAA,QAAOM,WAAKJ,WAAA,CAAAC,YAAA,yBAAAC,YAAA,mBAAZJ,CAAY,CAAA,6HAQjC,MAAMO,YAAcP,gBAAAA,QAAOQ,iBAAUN,WAAA,CAAAC,YAAA,wBAAAC,YAAA,mBAAjBJ,CAAiB,CAAA,kDAKrC,MAAMS,KAAOT,gBAAAA,QAAOU,cAAKR,WAAA,CAAAC,YAAA,iBAAAC,YAAA,mBAAZJ,CAAY,CAAA,kDAKzB,MAAMW,oBAAsBX,gBAAAA,QAAOY,oBAAWV,WAAA,CAAAC,YAAA,gCAAAC,YAAA,mBAAlBJ,CAAkB,CAAA,qCAAA,4BAEtCH,qBAGFgB,WAAab,gBAAAA,QAAOc,MAAKZ,WAAA,CAAAC,YAAA,uBAAAC,YAAA,mBAAZJ,CAAY,CAAA"}
@@ -1,2 +1,2 @@
1
- import styled,{keyframes}from'styled-components';import{Icon}from'../Icon/Icon.mjs';import{LoaderFill}from'../../icon-pack/src/icons/LoaderFill/index.mjs';const spinAnimation=keyframes(["100%{transform:rotate(360deg);}"]);const IconContainer=styled.div.withConfig({displayName:"Dropdown__IconContainer",componentId:"ui__sc-519mcg-0"})(["box-sizing:border-box;display:flex;align-items:center;justify-content:center;margin:12px 0;"]);const IconAnimated=styled(Icon).withConfig({shouldForwardProp:n=>n!=='up'}).withConfig({displayName:"Dropdown__IconAnimated",componentId:"ui__sc-519mcg-1"})(["",""],n=>`\n transition-property: transform;\n transition-duration: 250ms;\n transform-origin: center;\n transform: rotate(${n.up?180:0}deg);\n `);const LoadingIconAnimated=styled(LoaderFill).withConfig({displayName:"Dropdown__LoadingIconAnimated",componentId:"ui__sc-519mcg-2"})(["transform-origin:center;animation:"," 1600ms infinite linear;"],spinAnimation);const InputMimic=styled.input.withConfig({displayName:"Dropdown__InputMimic",componentId:"ui__sc-519mcg-3"})(["box-sizing:border-box;position:absolute;top:0;left:0;appearance:none;border:none;padding:0;margin:0;background-color:transparent;width:100%;height:100%;opacity:0;&:focus{outline:none;}"]);export{IconAnimated,IconContainer,InputMimic,LoadingIconAnimated};
1
+ import styled,{keyframes}from'styled-components';import{Icon}from'../Icon/Icon.mjs';import{ChevronUp}from'../../icon-pack/src/icons/ChevronUp/index.mjs';import{LoaderFill}from'../../icon-pack/src/icons/LoaderFill/index.mjs';import{Undo}from'../../icon-pack/src/icons/Undo/index.mjs';const spinAnimation=keyframes(["100%{transform:rotate(360deg);}"]);const IconContainer=styled.div.withConfig({displayName:"Dropdown__IconContainer",componentId:"ui__sc-519mcg-0"})(["box-sizing:border-box;display:flex;align-items:center;justify-content:center;margin:12px 0;"]);const IconAnimated=styled(Icon).withConfig({displayName:"Dropdown__IconAnimated",componentId:"ui__sc-519mcg-1"})(["transition-property:transform;transition-duration:250ms;@media (prefers-reduced-motion:reduce){transition-duration:0ms;}"]);const ChevronDown=styled(ChevronUp).withConfig({displayName:"Dropdown__ChevronDown",componentId:"ui__sc-519mcg-2"})(["transform-origin:center;transform:scaleY(-1);"]);const Redo=styled(Undo).withConfig({displayName:"Dropdown__Redo",componentId:"ui__sc-519mcg-3"})(["transform-origin:center;transform:scaleX(-1);"]);const LoadingIconAnimated=styled(LoaderFill).withConfig({displayName:"Dropdown__LoadingIconAnimated",componentId:"ui__sc-519mcg-4"})(["transform-origin:center;animation:"," 1600ms infinite linear;"],spinAnimation);const InputMimic=styled.input.withConfig({displayName:"Dropdown__InputMimic",componentId:"ui__sc-519mcg-5"})(["box-sizing:border-box;position:absolute;top:0;left:0;appearance:none;border:none;padding:0;margin:0;background-color:transparent;width:100%;height:100%;opacity:0;&:focus{outline:none;}"]);export{ChevronDown,IconAnimated,IconContainer,InputMimic,LoadingIconAnimated,Redo};
2
2
  //# sourceMappingURL=style.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","sources":["../../../../src/components/Dropdown/style.ts"],"sourcesContent":["import styled, { keyframes } from 'styled-components'\nimport { LoaderFill } from '@foxford/icon-pack'\nimport { Icon } from 'components/Icon'\n\nconst spinAnimation = keyframes`\n 100% {\n transform: rotate(360deg);\n }\n`\n\nexport const IconContainer = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 12px 0;\n`\n\nexport const IconAnimated = styled(Icon).withConfig<{ up: boolean }>({\n shouldForwardProp: (propKey) => propKey !== 'up',\n})`\n ${(props) => `\n transition-property: transform;\n transition-duration: 250ms;\n transform-origin: center;\n transform: rotate(${props.up ? 180 : 0}deg);\n `}\n`\n\nexport const LoadingIconAnimated = styled(LoaderFill)`\n transform-origin: center;\n animation: ${spinAnimation} 1600ms infinite linear;\n`\n\nexport const InputMimic = styled.input`\n box-sizing: border-box;\n position: absolute;\n top: 0;\n left: 0;\n appearance: none;\n border: none;\n padding: 0;\n margin: 0;\n background-color: transparent;\n width: 100%;\n height: 100%;\n opacity: 0;\n &:focus {\n outline: none;\n }\n`\n"],"names":["spinAnimation","keyframes","IconContainer","styled","div","withConfig","displayName","componentId","IconAnimated","Icon","shouldForwardProp","propKey","props","up","LoadingIconAnimated","LoaderFill","InputMimic","input"],"mappings":"2JAIA,MAAMA,cAAgBC,UAAS,CAAA,0CAMlBC,cAAgBC,OAAOC,IAAGC,WAAA,CAAAC,YAAA,0BAAAC,YAAA,mBAAVJ,CAAU,CAAA,gGAQhC,MAAMK,aAAeL,OAAOM,MAAMJ,WAA4B,CACnEK,kBAAoBC,GAAYA,IAAY,OAC5CN,WAAA,CAAAC,YAAA,yBAAAC,YAAA,mBAF0BJ,CAE1B,CAAA,GAAA,IACGS,GAAU,gIAISA,EAAMC,GAAK,IAAM,cAIlC,MAAMC,oBAAsBX,OAAOY,YAAWV,WAAA,CAAAC,YAAA,gCAAAC,YAAA,mBAAlBJ,CAAkB,CAAA,qCAAA,4BAEtCH,qBAGFgB,WAAab,OAAOc,MAAKZ,WAAA,CAAAC,YAAA,uBAAAC,YAAA,mBAAZJ,CAAY,CAAA"}
1
+ {"version":3,"file":"style.mjs","sources":["../../../../src/components/Dropdown/style.ts"],"sourcesContent":["import styled, { keyframes } from 'styled-components'\nimport { LoaderFill, ChevronUp, Undo } from '@foxford/icon-pack'\nimport { Icon } from 'components/Icon'\n\nconst spinAnimation = keyframes`\n 100% {\n transform: rotate(360deg);\n }\n`\n\nexport const IconContainer = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 12px 0;\n`\n\nexport const IconAnimated = styled(Icon)`\n transition-property: transform;\n transition-duration: 250ms;\n @media (prefers-reduced-motion: reduce) {\n transition-duration: 0ms;\n }\n`\n\nexport const ChevronDown = styled(ChevronUp)`\n transform-origin: center;\n transform: scaleY(-1);\n`\n\nexport const Redo = styled(Undo)`\n transform-origin: center;\n transform: scaleX(-1);\n`\n\nexport const LoadingIconAnimated = styled(LoaderFill)`\n transform-origin: center;\n animation: ${spinAnimation} 1600ms infinite linear;\n`\n\nexport const InputMimic = styled.input`\n box-sizing: border-box;\n position: absolute;\n top: 0;\n left: 0;\n appearance: none;\n border: none;\n padding: 0;\n margin: 0;\n background-color: transparent;\n width: 100%;\n height: 100%;\n opacity: 0;\n &:focus {\n outline: none;\n }\n`\n"],"names":["spinAnimation","keyframes","IconContainer","styled","div","withConfig","displayName","componentId","IconAnimated","Icon","ChevronDown","ChevronUp","Redo","Undo","LoadingIconAnimated","LoaderFill","InputMimic","input"],"mappings":"2RAIA,MAAMA,cAAgBC,UAAS,CAAA,0CAMlBC,cAAgBC,OAAOC,IAAGC,WAAA,CAAAC,YAAA,0BAAAC,YAAA,mBAAVJ,CAAU,CAAA,gGAQhC,MAAMK,aAAeL,OAAOM,MAAKJ,WAAA,CAAAC,YAAA,yBAAAC,YAAA,mBAAZJ,CAAY,CAAA,6HAQjC,MAAMO,YAAcP,OAAOQ,WAAUN,WAAA,CAAAC,YAAA,wBAAAC,YAAA,mBAAjBJ,CAAiB,CAAA,kDAKrC,MAAMS,KAAOT,OAAOU,MAAKR,WAAA,CAAAC,YAAA,iBAAAC,YAAA,mBAAZJ,CAAY,CAAA,kDAKzB,MAAMW,oBAAsBX,OAAOY,YAAWV,WAAA,CAAAC,YAAA,gCAAAC,YAAA,mBAAlBJ,CAAkB,CAAA,qCAAA,4BAEtCH,qBAGFgB,WAAab,OAAOc,MAAKZ,WAAA,CAAAC,YAAA,uBAAAC,YAAA,mBAAZJ,CAAY,CAAA"}
@@ -1,2 +1,2 @@
1
- 'use strict';var styled=require('styled-components');var color=require('../../mixins/color.js');var responsiveSize=require('../../mixins/responsive-size.js');var responsiveMargin=require('../../mixins/responsive-margin.js');var style=require('../../shared/utils/style.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var styled__default=_interopDefault(styled);const shouldForwardIconProp=style.createShouldForwardProp(e=>!['vAlign','url','multicolor'].includes(e));const Root=styled__default.default.span.withConfig({shouldForwardProp:shouldForwardIconProp}).withConfig({displayName:"Icon__Root",componentId:"ui__sc-yfeniy-0"})([""," "," "," ",""],e=>`\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n color: ${e.color?color.getColor(e.color,e):'inherit'};\n vertical-align: ${e.vAlign?e.vAlign:'baseline'};\n & > svg {\n display: block;\n width: 100%;\n height: 100%;\n fill: currentcolor;\n }\n `,e=>e.url?e.multicolor?`\n background-image: url(${e.url});\n background-origin: border-box;\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n `:`\n mask-image: url(${e.url});\n mask-position: center;\n mask-repeat: no-repeat;\n mask-size: contain;\n background-color: currentcolor;\n `:'',responsiveSize.responsiveSize,responsiveMargin.responsiveMargin);exports.Root=Root;
1
+ 'use strict';var styled=require('styled-components');var color=require('../../mixins/color.js');var responsiveSize=require('../../mixins/responsive-size.js');var responsiveMargin=require('../../mixins/responsive-margin.js');var style=require('../../shared/utils/style.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var styled__default=_interopDefault(styled);const shouldForwardIconProp=style.createShouldForwardProp(e=>!['vAlign','url','multicolor','rotate','flipX','flipY'].includes(e));const Root=styled__default.default.span.withConfig({shouldForwardProp:shouldForwardIconProp}).withConfig({displayName:"Icon__Root",componentId:"ui__sc-yfeniy-0"})([""," "," "," "," ",""],e=>`\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n color: ${e.color?color.getColor(e.color,e):'inherit'};\n vertical-align: ${e.vAlign?e.vAlign:'baseline'};\n & > svg {\n display: block;\n width: 100%;\n height: 100%;\n fill: currentcolor;\n }\n `,e=>{const n=[];return e.flipY&&n.push("scaleY(-1)"),e.flipX&&n.push("scaleX(-1)"),e.rotate&&n.push(`rotate(${e.rotate})`),n.length?`\n transform: ${n.join(' ')};\n `:null},e=>e.url?e.multicolor?`\n background-image: url(${e.url});\n background-origin: border-box;\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n `:`\n mask-image: url(${e.url});\n mask-position: center;\n mask-repeat: no-repeat;\n mask-size: contain;\n background-color: currentcolor;\n `:'',responsiveSize.responsiveSize,responsiveMargin.responsiveMargin);exports.Root=Root;
2
2
  //# sourceMappingURL=style.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sources":["../../../../src/components/Icon/style.ts"],"sourcesContent":["import styled from 'styled-components'\nimport { getColor } from 'mixins/color'\nimport { responsiveSize } from 'mixins/responsive-size'\nimport { responsiveMargin } from 'mixins/responsive-margin'\nimport { createShouldForwardProp } from 'shared/utils/style'\nimport type { StyledIconProps } from './types'\n\nconst shouldForwardIconProp = createShouldForwardProp((propKey) => !['vAlign', 'url', 'multicolor'].includes(propKey))\n\nexport const Root = styled.span.withConfig<StyledIconProps>({\n shouldForwardProp: shouldForwardIconProp,\n})`\n ${(props) => `\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n color: ${props.color ? getColor(props.color, props) : 'inherit'};\n vertical-align: ${props.vAlign ? props.vAlign : 'baseline'};\n & > svg {\n display: block;\n width: 100%;\n height: 100%;\n fill: currentcolor;\n }\n `}\n\n ${(props) => {\n if (!props.url) {\n return ''\n }\n\n return props.multicolor\n ? `\n background-image: url(${props.url});\n background-origin: border-box;\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n `\n : `\n mask-image: url(${props.url});\n mask-position: center;\n mask-repeat: no-repeat;\n mask-size: contain;\n background-color: currentcolor;\n `\n }}\n\n ${responsiveSize}\n ${responsiveMargin}\n`\n"],"names":["shouldForwardIconProp","createShouldForwardProp","propKey","includes","Root","styled","span","withConfig","shouldForwardProp","displayName","componentId","props","color","getColor","vAlign","url","multicolor","responsiveSize","responsiveMargin"],"mappings":"8XAOA,MAAMA,sBAAwBC,MAAAA,wBAAyBC,IAAa,CAAC,SAAU,MAAO,cAAcC,SAASD,IAEtG,MAAME,KAAOC,gBAAAA,QAAOC,KAAKC,WAA4B,CAC1DC,kBAAmBR,wBACnBO,WAAA,CAAAE,YAAA,aAAAC,YAAA,mBAFkBL,CAElB,CAAA,GAAA,IAAA,IAAA,IAAA,IACGM,GAAU,wLAQFA,EAAMC,MAAQC,MAAAA,SAASF,EAAMC,MAAOD,GAAS,mCACpCA,EAAMG,OAASH,EAAMG,OAAS,mIAS/CH,GACIA,EAAMI,IAIJJ,EAAMK,WACT,qCAC0BL,EAAMI,oLAMhC,+BACoBJ,EAAMI,mKAZrB,GAoBTE,eAAAA,eACAC,iBAAAA"}
1
+ {"version":3,"file":"style.js","sources":["../../../../src/components/Icon/style.ts"],"sourcesContent":["import styled from 'styled-components'\nimport { getColor } from 'mixins/color'\nimport { responsiveSize } from 'mixins/responsive-size'\nimport { responsiveMargin } from 'mixins/responsive-margin'\nimport { createShouldForwardProp } from 'shared/utils/style'\nimport type { StyledIconProps } from './types'\n\nconst shouldForwardIconProp = createShouldForwardProp(\n (propKey) => !['vAlign', 'url', 'multicolor', 'rotate', 'flipX', 'flipY'].includes(propKey)\n)\n\nexport const Root = styled.span.withConfig<StyledIconProps>({\n shouldForwardProp: shouldForwardIconProp,\n})`\n ${(props) => `\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n color: ${props.color ? getColor(props.color, props) : 'inherit'};\n vertical-align: ${props.vAlign ? props.vAlign : 'baseline'};\n & > svg {\n display: block;\n width: 100%;\n height: 100%;\n fill: currentcolor;\n }\n `}\n\n ${(props) => {\n const transform = []\n\n if (props.flipY) {\n transform.push(`scaleY(-1)`)\n }\n if (props.flipX) {\n transform.push(`scaleX(-1)`)\n }\n if (props.rotate) {\n transform.push(`rotate(${props.rotate})`)\n }\n\n return transform.length\n ? `\n transform: ${transform.join(' ')};\n `\n : null\n }}\n\n ${(props) => {\n if (!props.url) {\n return ''\n }\n\n return props.multicolor\n ? `\n background-image: url(${props.url});\n background-origin: border-box;\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n `\n : `\n mask-image: url(${props.url});\n mask-position: center;\n mask-repeat: no-repeat;\n mask-size: contain;\n background-color: currentcolor;\n `\n }}\n\n ${responsiveSize}\n ${responsiveMargin}\n`\n"],"names":["shouldForwardIconProp","createShouldForwardProp","propKey","includes","Root","styled","span","withConfig","shouldForwardProp","displayName","componentId","props","color","getColor","vAlign","transform","flipY","push","flipX","rotate","length","join","url","multicolor","responsiveSize","responsiveMargin"],"mappings":"8XAOA,MAAMA,sBAAwBC,MAAAA,wBAC3BC,IAAa,CAAC,SAAU,MAAO,aAAc,SAAU,QAAS,SAASC,SAASD,IAG9E,MAAME,KAAOC,gBAAAA,QAAOC,KAAKC,WAA4B,CAC1DC,kBAAmBR,wBACnBO,WAAA,CAAAE,YAAA,aAAAC,YAAA,mBAFkBL,CAElB,CAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IACGM,GAAU,wLAQFA,EAAMC,MAAQC,MAAAA,SAASF,EAAMC,MAAOD,GAAS,mCACpCA,EAAMG,OAASH,EAAMG,OAAS,mIAS/CH,IACD,MAAMI,EAAY,GAYlB,OAVIJ,EAAMK,OACRD,EAAUE,KAAK,cAEbN,EAAMO,OACRH,EAAUE,KAAK,cAEbN,EAAMQ,QACRJ,EAAUE,KAAK,UAAUN,EAAMQ,WAG1BJ,EAAUK,OACb,sBACWL,EAAUM,KAAK,cAE1B,MAGHV,GACIA,EAAMW,IAIJX,EAAMY,WACT,qCAC0BZ,EAAMW,oLAMhC,+BACoBX,EAAMW,mKAZrB,GAoBTE,eAAAA,eACAC,iBAAAA"}