@activecollab/components 2.0.317 → 2.0.318

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Autocomplete.js","names":["React","useCallback","useState","useMemo","useEffect","useRef","useVirtualizer","handleKeyboardMovement","StyledAutocompleteBody","StyledAutocompleteNewItem","StyledAutocompleteScrollShadow","highlightText","Option","StyledOption","OptionGroup","isOptionGroup","item","options","undefined","Autocomplete","_ref","type","_ref$options","inputEl","_ref$selected","selected","emptyValue","noResultText","_ref$renderOption","renderOption","option","name","defaultValue","_ref$sortDirection","sortDirection","handleChange","optionClassName","handleEmptyAction","disabledInternalSort","AutocompleteClassName","handleDefaultOptionChange","preselectDefaultValue","_ref$keepSameOptionsO","keepSameOptionsOrder","_ref$autoHeightMax","autoHeightMax","clearInputOnSelect","_ref$mixedOptions","mixedOptions","filterCriteria","disableVirtualization","listContainerRef","itemRef","selectedOptions","Array","isArray","handleSort","opts","_opts$","isGrouped","sortOptions","a","b","aSelected","includes","id","bSelected","aMixed","bMixed","map","group","sortedGroupOptions","sort","_extends","sortList","_options$","sortedOptions","localeCompare","_useState","sortedList","setSortedList","_useState2","by","hover","setHover","_useState3","filter","setFilter","handleEmpty","e","button","_inputEl$current","current","focus","onAddNewMouseEnter","showAddNew","trim","every","v","toLowerCase","filterOptions","trimmedFilter","matchesFilter","hidden","nameMatch","hovered","reduce","acc","groupedOption","filteredOptions","length","list","showDefaultOption","flatOptions","showNoResultCondition","virtualItems","items","push","forEach","index","shouldUseVirtualization","rowVirtualizer","count","getScrollElement","estimateSize","overscan","gap","handleInputChange","target","key","value","handleHoverCallback","toggleSelected","result","_id","dispatchEvent","Event","bubbles","handleMouseEnter","handleClick","preventDefault","handleRenderOption","createElement","checked","tooltip","renderOptions","onChange","ref","onMouseEnter","onClick","className","handleOnMouseLeave","findIndex","scrollToIndex","align","handleOnKeyDown","listenerTarget","addEventListener","removeEventListener","isDefaultOptionSelected","renderVirtualItem","virtualItem","String","_StyledStyledOption","onMouseDown","$isHidden","_ref2","onScroll","onMouseLeave","style","height","Math","min","getTotalSize","overflow","width","position","getVirtualItems","virtualRow","top","left","transform","start","Fragment","displayName","_styled","withConfig","componentId"],"sources":["../../../../src/components/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import React, {\n type FC,\n useCallback,\n useState,\n useMemo,\n useEffect,\n useRef,\n type ReactNode,\n type ReactElement,\n type MutableRefObject,\n} from \"react\";\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\n\nimport { handleKeyboardMovement } from \"./HandleKeyboard\";\nimport {\n StyledAutocompleteBody,\n StyledAutocompleteNewItem,\n StyledAutocompleteScrollShadow,\n} from \"./Styles\";\nimport highlightText from \"../../hooks/useHighlightText\";\nimport { type IOptionItemProps, Option } from \"../Select/Option\";\nimport { StyledOption } from \"../Select/Option/Styles\";\nimport { type IOptionGroupProps, OptionGroup } from \"../Select/OptionGroup\";\n\nexport function isOptionGroup(\n item: IOptionGroupProps | IOptionItemProps\n): item is IOptionGroupProps {\n return (item as IOptionGroupProps).options !== undefined;\n}\n\nexport interface IAutocompleteProps {\n /** Select type: single or multiple */\n type?: \"single\" | \"multiple\";\n /** List of options or group options */\n options?: (IOptionGroupProps | IOptionItemProps)[];\n /** Selected values */\n selected?: (string | number)[] | string | number;\n /** Mixed options values */\n mixedOptions?: (string | number)[];\n /** Input Element. */\n inputEl?: MutableRefObject<HTMLInputElement | null | undefined>;\n /** Text for empty value */\n emptyValue?: string;\n /** Text for No result */\n noResultText?: string;\n /** Render option */\n renderOption?: (\n option: Record<string, ReactNode>,\n data: Record<string, unknown>\n ) => string | ReactElement;\n /** Default value that renders on top of list */\n defaultValue?: string;\n /** Sort direction for labels */\n sortDirection?: \"asc\" | \"desc\";\n /** handleChange callback */\n handleChange?: (\n e: (string | number)[] | string | number | null | undefined\n ) => void;\n /** ClassName for single option */\n optionClassName?: string;\n /** handleEmptyAction */\n handleEmptyAction?: (e: string | number) => void;\n /** Disable sorting options */\n disabledInternalSort?: boolean;\n /** ClassName for Autocomplete component */\n AutocompleteClassName?: string;\n /** handleDefaultOptionChange callback */\n handleDefaultOptionChange?: () => void;\n /** Should default value be selected */\n preselectDefaultValue?: boolean;\n /** Should order stay the same after choosing an option */\n keepSameOptionsOrder?: boolean;\n /** Set max height property for scrollbars */\n autoHeightMax?: number;\n /** Clear input on select - works in single mode */\n clearInputOnSelect?: boolean;\n /** Custom filter function for additional filtering criteria */\n filterCriteria?: (option: IOptionItemProps, filter: string) => boolean;\n disableVirtualization?: boolean;\n}\n\ninterface IHover {\n item: number | string | undefined | null;\n by: \"mouse\" | \"keyboard\" | undefined;\n}\n\ninterface VirtualItem {\n type: \"default\" | \"option\" | \"group\" | \"addNew\" | \"noResult\";\n id: string | number;\n item?: IOptionItemProps | IOptionGroupProps;\n index?: number;\n}\n\nexport const Autocomplete: FC<IAutocompleteProps> = ({\n type,\n options = [],\n inputEl,\n selected = [],\n emptyValue,\n noResultText,\n renderOption = (option) => option?.name,\n defaultValue,\n sortDirection = \"asc\",\n handleChange,\n optionClassName,\n handleEmptyAction,\n disabledInternalSort,\n AutocompleteClassName,\n handleDefaultOptionChange,\n preselectDefaultValue,\n keepSameOptionsOrder = false,\n autoHeightMax = 340,\n clearInputOnSelect,\n mixedOptions = [],\n filterCriteria,\n disableVirtualization,\n}) => {\n const listContainerRef = useRef<HTMLDivElement>(null);\n const itemRef = useRef<HTMLLIElement>(null);\n\n const selectedOptions = useMemo(() => {\n if (Array.isArray(selected)) {\n return selected;\n }\n return [selected];\n }, [selected]);\n\n const handleSort = useCallback(\n (opts) => {\n if (keepSameOptionsOrder) {\n return opts;\n }\n\n const isGrouped = Array.isArray(opts[0]?.options);\n\n const sortOptions = (a, b) => {\n const aSelected = selectedOptions.includes(a.id);\n const bSelected = selectedOptions.includes(b.id);\n const aMixed = mixedOptions.includes(a.id);\n const bMixed = mixedOptions.includes(b.id);\n\n if (aSelected && !bSelected) {\n return -1;\n }\n if (!aSelected && bSelected) {\n return 1;\n }\n if (aMixed && !bMixed) {\n return -1;\n }\n if (!aMixed && bMixed) {\n return 1;\n }\n return 0;\n };\n\n if (isGrouped) {\n return opts.map((group) => {\n const sortedGroupOptions = group.options.sort(sortOptions);\n\n return {\n ...group,\n options: sortedGroupOptions,\n };\n });\n } else {\n return opts.sort(sortOptions);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [mixedOptions, selectedOptions]\n );\n\n const sortList = useCallback(\n (options) => {\n if (disabledInternalSort) {\n return handleSort([...options]);\n }\n\n const isGrouped = Array.isArray(options[0]?.options);\n\n if (isGrouped) {\n const sortedOptions = options.map((group) => {\n const sortedGroupOptions = group.options.sort((a, b) =>\n sortDirection === \"asc\"\n ? a.name.localeCompare(b.name)\n : b.name.localeCompare(a.name)\n );\n\n return {\n ...group,\n options: handleSort(sortedGroupOptions),\n };\n });\n\n return handleSort(sortedOptions);\n } else {\n const sortedOptions = options.sort((a, b) =>\n sortDirection === \"asc\"\n ? a.name.localeCompare(b.name)\n : b.name.localeCompare(a.name)\n );\n\n return handleSort(sortedOptions);\n }\n },\n [sortDirection, disabledInternalSort, handleSort]\n );\n\n const [sortedList, setSortedList] = useState(() => sortList(options));\n\n useEffect(() => {\n setSortedList(sortList(options));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [options]);\n\n const [hover, setHover] = useState<IHover>({\n item: undefined,\n by: undefined,\n });\n const [filter, setFilter] = useState(\"\");\n\n const handleEmpty = useCallback(\n (e) => {\n if (e && e.button !== 0) {\n return;\n }\n if (handleEmptyAction) {\n inputEl?.current?.focus();\n setFilter(\"\");\n handleEmptyAction(filter);\n }\n },\n [filter, handleEmptyAction, inputEl]\n );\n\n const onAddNewMouseEnter = useCallback(\n () => setHover({ item: \"addNew\", by: \"mouse\" }),\n []\n );\n\n const showAddNew = useMemo(() => {\n return !!(\n emptyValue &&\n filter.trim() &&\n options.every((option) => {\n if (isOptionGroup(option)) {\n return option.options.every(\n (v) => v.name.toLowerCase() !== filter.trim().toLowerCase()\n );\n }\n return option.name.toLowerCase() !== filter.trim().toLowerCase();\n })\n );\n }, [emptyValue, filter, options]);\n\n const filterOptions = useCallback(\n (options, filter) => {\n const trimmedFilter = filter.trim();\n const isGrouped = options[0] && isOptionGroup(options[0]);\n\n const matchesFilter = (option: IOptionItemProps) => {\n if (option.hidden) {\n return false;\n }\n\n const nameMatch = option.name\n .toLowerCase()\n .includes(trimmedFilter.toLowerCase());\n\n if (filterCriteria && trimmedFilter) {\n return nameMatch || filterCriteria(option, trimmedFilter);\n }\n\n return nameMatch;\n };\n\n if (isGrouped) {\n let hovered = false;\n return options.reduce((acc, groupedOption) => {\n const filteredOptions = groupedOption.options.filter(matchesFilter);\n\n if (filteredOptions.length > 0) {\n if (!hovered && filter) {\n setHover({ item: filteredOptions[0].id, by: \"keyboard\" });\n }\n hovered = true;\n return [...acc, { ...groupedOption, options: filteredOptions }];\n }\n return [...acc];\n }, []);\n } else {\n const filteredOptions = options.filter(matchesFilter);\n\n if (filter && filteredOptions.length > 0) {\n setHover({ item: filteredOptions[0].id, by: \"keyboard\" });\n }\n if (filteredOptions.length === 0 && emptyValue) {\n setHover({ item: \"addNew\", by: \"keyboard\" });\n }\n return filteredOptions;\n }\n },\n [emptyValue, filterCriteria]\n );\n\n const list = useMemo(\n () => filterOptions(sortedList, filter),\n [filter, filterOptions, sortedList]\n );\n\n const showDefaultOption = useMemo(\n () => !!defaultValue && !filter,\n [defaultValue, filter]\n );\n\n const flatOptions = useMemo(() => {\n const options = list.reduce(\n (\n acc: (IOptionItemProps | IOptionGroupProps | [])[],\n option: IOptionItemProps | IOptionGroupProps\n ) => {\n if (!isOptionGroup(option)) {\n return [...acc, option];\n }\n return [...acc, ...option.options];\n },\n []\n );\n return filterOptions(options, filter);\n }, [filter, filterOptions, list]);\n\n const showNoResultCondition = useMemo(\n () =>\n noResultText &&\n !showAddNew &&\n list.length < 1 &&\n ((defaultValue && filter) || !defaultValue),\n [noResultText, showAddNew, list.length, defaultValue, filter]\n );\n\n const virtualItems = useMemo(() => {\n const items: VirtualItem[] = [];\n\n if (showDefaultOption) {\n items.push({\n type: \"default\",\n id: \"default\",\n });\n }\n\n list.forEach((item, index) => {\n if (isOptionGroup(item)) {\n items.push({\n type: \"group\",\n id: item.id,\n item,\n });\n\n item.options.forEach((option) => {\n items.push({\n type: \"option\",\n id: option.id,\n item: option,\n index,\n });\n });\n } else {\n items.push({\n type: \"option\",\n id: item.id,\n item,\n index,\n });\n }\n });\n\n if (showNoResultCondition) {\n items.push({\n type: \"noResult\",\n id: \"noResult\",\n });\n }\n\n if (showAddNew) {\n items.push({\n type: \"addNew\",\n id: \"addNew\",\n });\n }\n\n return items;\n }, [list, showDefaultOption, showNoResultCondition, showAddNew]);\n\n const shouldUseVirtualization =\n !disableVirtualization && virtualItems.length > 40;\n\n const rowVirtualizer = useVirtualizer({\n count: virtualItems.length,\n getScrollElement: () => listContainerRef.current,\n estimateSize: () => 28,\n overscan: 5,\n gap: 4,\n });\n\n const handleInputChange = useCallback((e) => {\n if (\n e.target &&\n !(e.key === \"ArrowDown\") &&\n !(e.key === \"ArrowUp\") &&\n !(e.key === \"Enter\")\n ) {\n setFilter(e.target.value);\n }\n }, []);\n\n const handleHoverCallback = useCallback(\n (e: number | string | undefined): void => {\n setHover({ item: e, by: \"mouse\" });\n },\n []\n );\n\n const toggleSelected = useCallback(\n (id) => {\n let result;\n\n if (id !== null) {\n if (type === \"multiple\") {\n if (selectedOptions.includes(id)) {\n result = selectedOptions.filter((_id) => _id !== id);\n } else {\n result = [...selectedOptions, id];\n }\n } else {\n result = id;\n }\n if (clearInputOnSelect && inputEl?.current) {\n inputEl.current.value = \"\";\n inputEl.current.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n setFilter(\"\");\n } else {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n return;\n }\n }\n\n if (typeof handleChange === \"function\") {\n handleChange(result);\n }\n },\n [\n clearInputOnSelect,\n handleChange,\n handleDefaultOptionChange,\n inputEl,\n selectedOptions,\n type,\n ]\n );\n\n const handleMouseEnter = useCallback((e) => {\n if (e === undefined || e === null) {\n return setHover({ item: null, by: \"mouse\" });\n }\n setHover({ item: e, by: \"mouse\" });\n }, []);\n\n const handleClick = useCallback(\n (e) => {\n e.preventDefault();\n toggleSelected(hover.item);\n },\n [toggleSelected, hover]\n );\n\n const handleRenderOption = useCallback(\n (item: IOptionItemProps | IOptionGroupProps, index) => {\n if (isOptionGroup(item)) {\n return (\n <OptionGroup\n checked={selectedOptions}\n name={item.name}\n tooltip={item.tooltip}\n key={item.id}\n setHover={handleHoverCallback}\n id={item.id}\n hover={hover.item}\n options={item.options}\n renderOptions={handleRenderOption}\n type={type}\n onChange={handleChange}\n filter={filter}\n mixedOptions={mixedOptions}\n />\n );\n }\n return (\n <Option\n name={item.name}\n ref={hover.item === item.id ? itemRef : null}\n key={index}\n tooltip={item.tooltip}\n onMouseEnter={handleMouseEnter}\n onClick={handleClick}\n id={item.id}\n hover={item.id === hover.item}\n className={optionClassName}\n renderOption={renderOption(\n { ...item, name: highlightText(item.name, filter) },\n {\n id: `option_${item.id}`,\n checked: selectedOptions && selectedOptions.includes(item.id),\n hover: hover.item === item.id,\n onChange: () => null,\n }\n )}\n />\n );\n },\n [\n handleClick,\n handleMouseEnter,\n hover.item,\n optionClassName,\n renderOption,\n filter,\n selectedOptions,\n handleHoverCallback,\n type,\n handleChange,\n mixedOptions,\n ]\n );\n\n const handleOnMouseLeave = useCallback(() => {\n setHover({ item: undefined, by: \"mouse\" });\n }, []);\n\n useEffect(() => {\n if (hover.by === \"keyboard\" && hover.item !== undefined) {\n const index = virtualItems.findIndex((item) => item.id === hover.item);\n if (index !== -1) {\n rowVirtualizer.scrollToIndex(index, { align: \"center\" });\n }\n }\n }, [hover, rowVirtualizer, virtualItems]);\n\n const handleOnKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n\n if (hover.item === undefined && filter === \"\") {\n return;\n }\n if (hover.item === \"addNew\") {\n handleEmpty(null);\n return;\n }\n if (hover.item === null && handleDefaultOptionChange) {\n handleDefaultOptionChange();\n return;\n }\n\n if (typeof hover.item !== \"undefined\" || hover.item !== null) {\n toggleSelected(hover.item);\n setFilter(\"\");\n }\n return;\n }\n setHover({\n item: handleKeyboardMovement(\n e,\n hover.item,\n flatOptions,\n showAddNew,\n showDefaultOption\n ),\n by: \"keyboard\",\n });\n },\n [\n filter,\n flatOptions,\n toggleSelected,\n handleDefaultOptionChange,\n handleEmpty,\n hover,\n showAddNew,\n showDefaultOption,\n ]\n );\n\n useEffect(() => {\n const listenerTarget = inputEl?.current;\n if (!listenerTarget) return;\n\n listenerTarget.addEventListener(\"input\", handleInputChange);\n listenerTarget.addEventListener(\"keydown\", handleOnKeyDown);\n return () => {\n listenerTarget.removeEventListener(\"input\", handleInputChange);\n listenerTarget.removeEventListener(\"keydown\", handleOnKeyDown);\n };\n }, [handleInputChange, handleOnKeyDown, inputEl]);\n\n const isDefaultOptionSelected = useCallback(() => {\n if (preselectDefaultValue) {\n return selectedOptions.length < 1 || selectedOptions[0] === \"\";\n } else {\n return (\n selectedOptions[0] === null ||\n selectedOptions.length === flatOptions.length\n );\n }\n }, [flatOptions.length, preselectDefaultValue, selectedOptions]);\n\n const renderVirtualItem = useCallback(\n (virtualItem: VirtualItem, index: number) => {\n switch (virtualItem.type) {\n case \"default\":\n return (\n <Option\n name={String(defaultValue)}\n ref={hover.item === null ? itemRef : null}\n hover={hover.item === null}\n onMouseEnter={handleMouseEnter}\n onClick={(e) => {\n e.preventDefault();\n toggleSelected(null);\n }}\n renderOption={renderOption(\n { name: defaultValue, id: null },\n {\n checked: isDefaultOptionSelected(),\n hover: hover.item === null,\n onChange: () => null,\n }\n )}\n />\n );\n\n case \"group\":\n if (!virtualItem.item || !isOptionGroup(virtualItem.item))\n return null;\n return (\n <OptionGroup\n checked={selectedOptions}\n name={virtualItem.item.name}\n tooltip={virtualItem.item.tooltip}\n key={virtualItem.item.id}\n setHover={handleHoverCallback}\n id={virtualItem.item.id}\n hover={hover.item}\n options={virtualItem.item.options}\n renderOptions={handleRenderOption}\n type={type}\n onChange={handleChange}\n filter={filter}\n mixedOptions={mixedOptions}\n />\n );\n\n case \"option\":\n if (!virtualItem.item || isOptionGroup(virtualItem.item)) return null;\n return (\n <Option\n name={(virtualItem.item as IOptionItemProps).name}\n ref={hover.item === virtualItem.id ? itemRef : null}\n key={index}\n tooltip={(virtualItem.item as IOptionItemProps).tooltip}\n onMouseEnter={() => handleMouseEnter(virtualItem.id)}\n onClick={handleClick}\n id={virtualItem.id}\n hover={virtualItem.id === hover.item}\n className={optionClassName}\n renderOption={renderOption(\n {\n ...(virtualItem.item as IOptionItemProps),\n name: highlightText(\n (virtualItem.item as IOptionItemProps).name,\n filter\n ),\n },\n {\n id: `option_${virtualItem.id}`,\n checked:\n selectedOptions && selectedOptions.includes(virtualItem.id),\n hover: hover.item === virtualItem.id,\n onChange: () => null,\n }\n )}\n />\n );\n\n case \"noResult\":\n return <StyledOption css=\"cursor: auto\">{noResultText}</StyledOption>;\n\n case \"addNew\":\n return (\n <StyledAutocompleteNewItem\n ref={hover.item === \"addNew\" ? itemRef : null}\n key=\"emptyValue\"\n hover={hover.item === \"addNew\"}\n onMouseDown={handleEmpty}\n onMouseEnter={onAddNewMouseEnter}\n >\n {emptyValue}\n </StyledAutocompleteNewItem>\n );\n\n default:\n return null;\n }\n },\n [\n defaultValue,\n hover.item,\n handleMouseEnter,\n renderOption,\n isDefaultOptionSelected,\n selectedOptions,\n handleHoverCallback,\n handleRenderOption,\n type,\n handleChange,\n filter,\n mixedOptions,\n handleClick,\n optionClassName,\n noResultText,\n handleEmpty,\n onAddNewMouseEnter,\n emptyValue,\n toggleSelected,\n ]\n );\n\n return (\n <StyledAutocompleteScrollShadow\n className={AutocompleteClassName}\n $isHidden={\n !defaultValue && !emptyValue && !noResultText && list.length < 1\n }\n >\n {({ onScroll }) => (\n <StyledAutocompleteBody key=\"body\" onMouseLeave={handleOnMouseLeave}>\n <div\n ref={listContainerRef}\n style={{\n height: `${Math.min(\n rowVirtualizer.getTotalSize() + 12,\n autoHeightMax\n )}px`,\n overflow: \"auto\",\n }}\n onScroll={(e) => {\n if (onScroll) onScroll(e);\n }}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {shouldUseVirtualization\n ? rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const item = virtualItems[virtualRow.index];\n return (\n <div\n key={virtualRow.index}\n data-index={virtualRow.index}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {renderVirtualItem(item, virtualRow.index)}\n </div>\n );\n })\n : virtualItems.map((item, index) => (\n <React.Fragment key={index}>\n {renderVirtualItem(item, index)}\n </React.Fragment>\n ))}\n </div>\n </div>\n </StyledAutocompleteBody>\n )}\n </StyledAutocompleteScrollShadow>\n );\n};\n\nAutocomplete.displayName = \"Autocomplete\";\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Autocomplete.js","names":["React","useCallback","useState","useMemo","useEffect","useRef","useVirtualizer","handleKeyboardMovement","StyledAutocompleteBody","StyledAutocompleteNewItem","StyledAutocompleteScrollShadow","highlightText","Option","StyledOption","OptionGroup","isOptionGroup","item","options","undefined","collectLeafIds","opts","reduce","acc","opt","map","o","id","insertAmongSameState","list","isChecked","checked","index","findIndex","name","localeCompare","i","length","slice","reconcileFlat","prev","next","frozen","nextById","Map","base","filter","has","get","toPlace","reconcileOrder","every","prevGroupById","group","_prevGroupById$get$op","_prevGroupById$get","_extends","Autocomplete","_ref","type","_ref$options","inputEl","_ref$selected","selected","emptyValue","noResultText","_ref$renderOption","renderOption","option","defaultValue","_ref$sortDirection","sortDirection","handleChange","optionClassName","handleEmptyAction","disabledInternalSort","AutocompleteClassName","handleDefaultOptionChange","preselectDefaultValue","_ref$keepSameOptionsO","keepSameOptionsOrder","_ref$autoHeightMax","autoHeightMax","clearInputOnSelect","_ref$mixedOptions","mixedOptions","filterCriteria","disableVirtualization","listContainerRef","itemRef","selectedOptions","Array","isArray","frozenRef","Set","handleSort","_opts$","isGrouped","sortOptions","a","b","aSelected","includes","bSelected","aMixed","bMixed","sort","sortList","_options$","alphaSort","sortedOptions","_useState","sortedList","setSortedList","isInitialSortRef","selectedKey","join","current","nextFrozen","forEach","add","_useState2","by","hover","setHover","_useState3","setFilter","handleEmpty","e","button","_inputEl$current","focus","onAddNewMouseEnter","showAddNew","trim","v","toLowerCase","filterOptions","trimmedFilter","matchesFilter","hidden","nameMatch","hovered","groupedOption","filteredOptions","showDefaultOption","flatOptions","showNoResultCondition","virtualItems","items","push","shouldUseVirtualization","rowVirtualizer","count","getScrollElement","estimateSize","overscan","gap","handleInputChange","target","key","value","handleHoverCallback","toggleSelected","result","_id","dispatchEvent","Event","bubbles","handleMouseEnter","handleClick","preventDefault","handleRenderOption","createElement","tooltip","renderOptions","onChange","ref","onMouseEnter","onClick","className","handleOnMouseLeave","scrollToIndex","align","handleOnKeyDown","listenerTarget","addEventListener","removeEventListener","isDefaultOptionSelected","renderVirtualItem","virtualItem","String","_StyledStyledOption","onMouseDown","$isHidden","_ref2","onScroll","onMouseLeave","style","height","Math","min","getTotalSize","overflow","width","position","getVirtualItems","virtualRow","top","left","transform","start","Fragment","displayName","_styled","withConfig","componentId"],"sources":["../../../../src/components/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import React, {\n type FC,\n useCallback,\n useState,\n useMemo,\n useEffect,\n useRef,\n type ReactNode,\n type ReactElement,\n type MutableRefObject,\n} from \"react\";\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\n\nimport { handleKeyboardMovement } from \"./HandleKeyboard\";\nimport {\n StyledAutocompleteBody,\n StyledAutocompleteNewItem,\n StyledAutocompleteScrollShadow,\n} from \"./Styles\";\nimport highlightText from \"../../hooks/useHighlightText\";\nimport { type IOptionItemProps, Option } from \"../Select/Option\";\nimport { StyledOption } from \"../Select/Option/Styles\";\nimport { type IOptionGroupProps, OptionGroup } from \"../Select/OptionGroup\";\n\nexport function isOptionGroup(\n item: IOptionGroupProps | IOptionItemProps\n): item is IOptionGroupProps {\n return (item as IOptionGroupProps).options !== undefined;\n}\n\nconst collectLeafIds = (\n opts: (IOptionGroupProps | IOptionItemProps)[]\n): (string | number)[] =>\n opts.reduce<(string | number)[]>(\n (acc, opt) =>\n isOptionGroup(opt)\n ? [...acc, ...opt.options.map((o) => o.id)]\n : [...acc, opt.id],\n []\n );\n\n// Inserts an option at its alphabetical position among the options that share\n// its checked state (checked items live at the top, so a checked option lands\n// among the checked ones, sorted).\nconst insertAmongSameState = (\n list: IOptionItemProps[],\n item: IOptionItemProps,\n isChecked: (id: string | number) => boolean\n): IOptionItemProps[] => {\n const checked = isChecked(item.id);\n let index = list.findIndex(\n (o) => isChecked(o.id) === checked && o.name.localeCompare(item.name) > 0\n );\n if (index === -1) {\n index = checked\n ? list.reduce((acc, o, i) => (isChecked(o.id) ? i + 1 : acc), 0)\n : list.length;\n }\n return [...list.slice(0, index), item, ...list.slice(index)];\n};\n\n// Frozen options keep their order (checking/unchecking never moves them).\n// Options that aren't frozen yet are slotted in among the checked items,\n// alphabetically — that's how a freshly added option finds its place.\nconst reconcileFlat = (\n prev: IOptionItemProps[],\n next: IOptionItemProps[],\n frozen: Set<string | number>,\n isChecked: (id: string | number) => boolean\n): IOptionItemProps[] => {\n const nextById = new Map(next.map((o) => [o.id, o]));\n const base = prev\n .filter((o) => frozen.has(o.id) && nextById.has(o.id))\n .map((o) => nextById.get(o.id) as IOptionItemProps);\n const toPlace = next.filter((o) => !frozen.has(o.id));\n\n return toPlace.reduce(\n (acc, item) => insertAmongSameState(acc, item, isChecked),\n base\n );\n};\n\nconst reconcileOrder = (\n prev: (IOptionGroupProps | IOptionItemProps)[],\n next: (IOptionGroupProps | IOptionItemProps)[],\n frozen: Set<string | number>,\n isChecked: (id: string | number) => boolean\n): (IOptionGroupProps | IOptionItemProps)[] => {\n if (!next.every(isOptionGroup) || !prev.every(isOptionGroup)) {\n return reconcileFlat(\n prev as IOptionItemProps[],\n next as IOptionItemProps[],\n frozen,\n isChecked\n );\n }\n\n const prevGroupById = new Map(prev.map((group) => [group.id, group]));\n\n return next.map((group) => ({\n ...group,\n options: reconcileFlat(\n prevGroupById.get(group.id)?.options ?? [],\n group.options,\n frozen,\n isChecked\n ),\n }));\n};\n\nexport interface IAutocompleteProps {\n /** Select type: single or multiple */\n type?: \"single\" | \"multiple\";\n /** List of options or group options */\n options?: (IOptionGroupProps | IOptionItemProps)[];\n /** Selected values */\n selected?: (string | number)[] | string | number;\n /** Mixed options values */\n mixedOptions?: (string | number)[];\n /** Input Element. */\n inputEl?: MutableRefObject<HTMLInputElement | null | undefined>;\n /** Text for empty value */\n emptyValue?: string;\n /** Text for No result */\n noResultText?: string;\n /** Render option */\n renderOption?: (\n option: Record<string, ReactNode>,\n data: Record<string, unknown>\n ) => string | ReactElement;\n /** Default value that renders on top of list */\n defaultValue?: string;\n /** Sort direction for labels */\n sortDirection?: \"asc\" | \"desc\";\n /** handleChange callback */\n handleChange?: (\n e: (string | number)[] | string | number | null | undefined\n ) => void;\n /** ClassName for single option */\n optionClassName?: string;\n /** handleEmptyAction */\n handleEmptyAction?: (e: string | number) => void;\n /** Disable sorting options */\n disabledInternalSort?: boolean;\n /** ClassName for Autocomplete component */\n AutocompleteClassName?: string;\n /** handleDefaultOptionChange callback */\n handleDefaultOptionChange?: () => void;\n /** Should default value be selected */\n preselectDefaultValue?: boolean;\n /** Should order stay the same after choosing an option */\n keepSameOptionsOrder?: boolean;\n /** Set max height property for scrollbars */\n autoHeightMax?: number;\n /** Clear input on select - works in single mode */\n clearInputOnSelect?: boolean;\n /** Custom filter function for additional filtering criteria */\n filterCriteria?: (option: IOptionItemProps, filter: string) => boolean;\n disableVirtualization?: boolean;\n}\n\ninterface IHover {\n item: number | string | undefined | null;\n by: \"mouse\" | \"keyboard\" | undefined;\n}\n\ninterface VirtualItem {\n type: \"default\" | \"option\" | \"group\" | \"addNew\" | \"noResult\";\n id: string | number;\n item?: IOptionItemProps | IOptionGroupProps;\n index?: number;\n}\n\nexport const Autocomplete: FC<IAutocompleteProps> = ({\n type,\n options = [],\n inputEl,\n selected = [],\n emptyValue,\n noResultText,\n renderOption = (option) => option?.name,\n defaultValue,\n sortDirection = \"asc\",\n handleChange,\n optionClassName,\n handleEmptyAction,\n disabledInternalSort,\n AutocompleteClassName,\n handleDefaultOptionChange,\n preselectDefaultValue,\n keepSameOptionsOrder = false,\n autoHeightMax = 340,\n clearInputOnSelect,\n mixedOptions = [],\n filterCriteria,\n disableVirtualization,\n}) => {\n const listContainerRef = useRef<HTMLDivElement>(null);\n const itemRef = useRef<HTMLLIElement>(null);\n\n const selectedOptions = useMemo(() => {\n if (Array.isArray(selected)) {\n return selected;\n }\n return [selected];\n }, [selected]);\n\n // Ids whose position is fixed. Starts with everything present on open; a\n // freshly added option joins this set once it becomes checked, so unchecking\n // it later won't move it. Everything frozen keeps its order on every re-sort.\n const frozenRef = useRef(new Set(collectLeafIds(options)));\n\n const handleSort = useCallback(\n (opts) => {\n if (keepSameOptionsOrder) {\n return opts;\n }\n\n const isGrouped = Array.isArray(opts[0]?.options);\n\n const sortOptions = (a, b) => {\n const aSelected = selectedOptions.includes(a.id);\n const bSelected = selectedOptions.includes(b.id);\n const aMixed = mixedOptions.includes(a.id);\n const bMixed = mixedOptions.includes(b.id);\n\n if (aSelected && !bSelected) {\n return -1;\n }\n if (!aSelected && bSelected) {\n return 1;\n }\n if (aMixed && !bMixed) {\n return -1;\n }\n if (!aMixed && bMixed) {\n return 1;\n }\n return 0;\n };\n\n if (isGrouped) {\n return opts.map((group) => ({\n ...group,\n options: [...group.options].sort(sortOptions),\n }));\n } else {\n return [...opts].sort(sortOptions);\n }\n },\n [keepSameOptionsOrder, selectedOptions, mixedOptions]\n );\n\n const sortList = useCallback(\n (options) => {\n if (disabledInternalSort) {\n return handleSort(options);\n }\n\n const alphaSort = (a, b) =>\n sortDirection === \"asc\"\n ? a.name.localeCompare(b.name)\n : b.name.localeCompare(a.name);\n\n const isGrouped = Array.isArray(options[0]?.options);\n\n if (isGrouped) {\n const sortedOptions = options.map((group) => ({\n ...group,\n options: handleSort([...group.options].sort(alphaSort)),\n }));\n\n return handleSort(sortedOptions);\n } else {\n return handleSort([...options].sort(alphaSort));\n }\n },\n [sortDirection, disabledInternalSort, handleSort]\n );\n\n const [sortedList, setSortedList] = useState(() => sortList(options));\n\n // The order is established on open. Options present then keep their place for\n // the whole session — checking/unchecking never reorders them. Options added\n // afterwards are slotted in among the checked items, alphabetically. The\n // selection key is a primitive so a fresh `selected = []` default can't loop.\n const isInitialSortRef = useRef(true);\n const selectedKey = selectedOptions.join(\",\");\n\n useEffect(() => {\n if (isInitialSortRef.current) {\n isInitialSortRef.current = false;\n return;\n }\n\n if (keepSameOptionsOrder) {\n setSortedList(sortList(options));\n return;\n }\n\n if (sortedList.length === 0) {\n frozenRef.current = new Set(collectLeafIds(options));\n setSortedList(sortList(options));\n return;\n }\n\n const isChecked = (id: string | number) => selectedOptions.includes(id);\n const frozen = frozenRef.current;\n\n const nextFrozen = new Set(frozen);\n collectLeafIds(options).forEach((id) => {\n if (!frozen.has(id) && isChecked(id)) {\n nextFrozen.add(id);\n }\n });\n frozenRef.current = nextFrozen;\n\n setSortedList(reconcileOrder(sortedList, options, frozen, isChecked));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [options, selectedKey]);\n\n const [hover, setHover] = useState<IHover>({\n item: undefined,\n by: undefined,\n });\n const [filter, setFilter] = useState(\"\");\n\n const handleEmpty = useCallback(\n (e) => {\n if (e && e.button !== 0) {\n return;\n }\n if (handleEmptyAction) {\n inputEl?.current?.focus();\n setFilter(\"\");\n handleEmptyAction(filter);\n }\n },\n [filter, handleEmptyAction, inputEl]\n );\n\n const onAddNewMouseEnter = useCallback(\n () => setHover({ item: \"addNew\", by: \"mouse\" }),\n []\n );\n\n const showAddNew = useMemo(() => {\n return !!(\n emptyValue &&\n filter.trim() &&\n options.every((option) => {\n if (isOptionGroup(option)) {\n return option.options.every(\n (v) => v.name.toLowerCase() !== filter.trim().toLowerCase()\n );\n }\n return option.name.toLowerCase() !== filter.trim().toLowerCase();\n })\n );\n }, [emptyValue, filter, options]);\n\n const filterOptions = useCallback(\n (options, filter) => {\n const trimmedFilter = filter.trim();\n const isGrouped = options[0] && isOptionGroup(options[0]);\n\n const matchesFilter = (option: IOptionItemProps) => {\n if (option.hidden) {\n return false;\n }\n\n const nameMatch = option.name\n .toLowerCase()\n .includes(trimmedFilter.toLowerCase());\n\n if (filterCriteria && trimmedFilter) {\n return nameMatch || filterCriteria(option, trimmedFilter);\n }\n\n return nameMatch;\n };\n\n if (isGrouped) {\n let hovered = false;\n return options.reduce((acc, groupedOption) => {\n const filteredOptions = groupedOption.options.filter(matchesFilter);\n\n if (filteredOptions.length > 0) {\n if (!hovered && filter) {\n setHover({ item: filteredOptions[0].id, by: \"keyboard\" });\n }\n hovered = true;\n return [...acc, { ...groupedOption, options: filteredOptions }];\n }\n return [...acc];\n }, []);\n } else {\n const filteredOptions = options.filter(matchesFilter);\n\n if (filter && filteredOptions.length > 0) {\n setHover({ item: filteredOptions[0].id, by: \"keyboard\" });\n }\n if (filteredOptions.length === 0 && emptyValue) {\n setHover({ item: \"addNew\", by: \"keyboard\" });\n }\n return filteredOptions;\n }\n },\n [emptyValue, filterCriteria]\n );\n\n const list = useMemo(\n () => filterOptions(sortedList, filter),\n [filter, filterOptions, sortedList]\n );\n\n const showDefaultOption = useMemo(\n () => !!defaultValue && !filter,\n [defaultValue, filter]\n );\n\n const flatOptions = useMemo(() => {\n const options = list.reduce(\n (\n acc: (IOptionItemProps | IOptionGroupProps | [])[],\n option: IOptionItemProps | IOptionGroupProps\n ) => {\n if (!isOptionGroup(option)) {\n return [...acc, option];\n }\n return [...acc, ...option.options];\n },\n []\n );\n return filterOptions(options, filter);\n }, [filter, filterOptions, list]);\n\n const showNoResultCondition = useMemo(\n () =>\n noResultText &&\n !showAddNew &&\n list.length < 1 &&\n ((defaultValue && filter) || !defaultValue),\n [noResultText, showAddNew, list.length, defaultValue, filter]\n );\n\n const virtualItems = useMemo(() => {\n const items: VirtualItem[] = [];\n\n if (showDefaultOption) {\n items.push({\n type: \"default\",\n id: \"default\",\n });\n }\n\n list.forEach((item, index) => {\n if (isOptionGroup(item)) {\n items.push({\n type: \"group\",\n id: item.id,\n item,\n });\n\n item.options.forEach((option) => {\n items.push({\n type: \"option\",\n id: option.id,\n item: option,\n index,\n });\n });\n } else {\n items.push({\n type: \"option\",\n id: item.id,\n item,\n index,\n });\n }\n });\n\n if (showNoResultCondition) {\n items.push({\n type: \"noResult\",\n id: \"noResult\",\n });\n }\n\n if (showAddNew) {\n items.push({\n type: \"addNew\",\n id: \"addNew\",\n });\n }\n\n return items;\n }, [list, showDefaultOption, showNoResultCondition, showAddNew]);\n\n const shouldUseVirtualization =\n !disableVirtualization && virtualItems.length > 40;\n\n const rowVirtualizer = useVirtualizer({\n count: virtualItems.length,\n getScrollElement: () => listContainerRef.current,\n estimateSize: () => 28,\n overscan: 5,\n gap: 4,\n });\n\n const handleInputChange = useCallback((e) => {\n if (\n e.target &&\n !(e.key === \"ArrowDown\") &&\n !(e.key === \"ArrowUp\") &&\n !(e.key === \"Enter\")\n ) {\n setFilter(e.target.value);\n }\n }, []);\n\n const handleHoverCallback = useCallback(\n (e: number | string | undefined): void => {\n setHover({ item: e, by: \"mouse\" });\n },\n []\n );\n\n const toggleSelected = useCallback(\n (id) => {\n let result;\n\n if (id !== null) {\n if (type === \"multiple\") {\n if (selectedOptions.includes(id)) {\n result = selectedOptions.filter((_id) => _id !== id);\n } else {\n result = [...selectedOptions, id];\n }\n } else {\n result = id;\n }\n if (clearInputOnSelect && inputEl?.current) {\n inputEl.current.value = \"\";\n inputEl.current.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n setFilter(\"\");\n } else {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n return;\n }\n }\n\n if (typeof handleChange === \"function\") {\n handleChange(result);\n }\n },\n [\n clearInputOnSelect,\n handleChange,\n handleDefaultOptionChange,\n inputEl,\n selectedOptions,\n type,\n ]\n );\n\n const handleMouseEnter = useCallback((e) => {\n if (e === undefined || e === null) {\n return setHover({ item: null, by: \"mouse\" });\n }\n setHover({ item: e, by: \"mouse\" });\n }, []);\n\n const handleClick = useCallback(\n (e) => {\n e.preventDefault();\n toggleSelected(hover.item);\n },\n [toggleSelected, hover]\n );\n\n const handleRenderOption = useCallback(\n (item: IOptionItemProps | IOptionGroupProps, index) => {\n if (isOptionGroup(item)) {\n return (\n <OptionGroup\n checked={selectedOptions}\n name={item.name}\n tooltip={item.tooltip}\n key={item.id}\n setHover={handleHoverCallback}\n id={item.id}\n hover={hover.item}\n options={item.options}\n renderOptions={handleRenderOption}\n type={type}\n onChange={handleChange}\n filter={filter}\n mixedOptions={mixedOptions}\n />\n );\n }\n return (\n <Option\n name={item.name}\n ref={hover.item === item.id ? itemRef : null}\n key={index}\n tooltip={item.tooltip}\n onMouseEnter={handleMouseEnter}\n onClick={handleClick}\n id={item.id}\n hover={item.id === hover.item}\n className={optionClassName}\n renderOption={renderOption(\n { ...item, name: highlightText(item.name, filter) },\n {\n id: `option_${item.id}`,\n checked: selectedOptions && selectedOptions.includes(item.id),\n hover: hover.item === item.id,\n onChange: () => null,\n }\n )}\n />\n );\n },\n [\n handleClick,\n handleMouseEnter,\n hover.item,\n optionClassName,\n renderOption,\n filter,\n selectedOptions,\n handleHoverCallback,\n type,\n handleChange,\n mixedOptions,\n ]\n );\n\n const handleOnMouseLeave = useCallback(() => {\n setHover({ item: undefined, by: \"mouse\" });\n }, []);\n\n useEffect(() => {\n if (hover.by === \"keyboard\" && hover.item !== undefined) {\n const index = virtualItems.findIndex((item) => item.id === hover.item);\n if (index !== -1) {\n rowVirtualizer.scrollToIndex(index, { align: \"center\" });\n }\n }\n }, [hover, rowVirtualizer, virtualItems]);\n\n const handleOnKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n\n if (hover.item === undefined && filter === \"\") {\n return;\n }\n if (hover.item === \"addNew\") {\n handleEmpty(null);\n return;\n }\n if (hover.item === null && handleDefaultOptionChange) {\n handleDefaultOptionChange();\n return;\n }\n\n if (typeof hover.item !== \"undefined\" || hover.item !== null) {\n toggleSelected(hover.item);\n setFilter(\"\");\n }\n return;\n }\n setHover({\n item: handleKeyboardMovement(\n e,\n hover.item,\n flatOptions,\n showAddNew,\n showDefaultOption\n ),\n by: \"keyboard\",\n });\n },\n [\n filter,\n flatOptions,\n toggleSelected,\n handleDefaultOptionChange,\n handleEmpty,\n hover,\n showAddNew,\n showDefaultOption,\n ]\n );\n\n useEffect(() => {\n const listenerTarget = inputEl?.current;\n if (!listenerTarget) return;\n\n listenerTarget.addEventListener(\"input\", handleInputChange);\n listenerTarget.addEventListener(\"keydown\", handleOnKeyDown);\n return () => {\n listenerTarget.removeEventListener(\"input\", handleInputChange);\n listenerTarget.removeEventListener(\"keydown\", handleOnKeyDown);\n };\n }, [handleInputChange, handleOnKeyDown, inputEl]);\n\n const isDefaultOptionSelected = useCallback(() => {\n if (preselectDefaultValue) {\n return selectedOptions.length < 1 || selectedOptions[0] === \"\";\n } else {\n return (\n selectedOptions[0] === null ||\n selectedOptions.length === flatOptions.length\n );\n }\n }, [flatOptions.length, preselectDefaultValue, selectedOptions]);\n\n const renderVirtualItem = useCallback(\n (virtualItem: VirtualItem, index: number) => {\n switch (virtualItem.type) {\n case \"default\":\n return (\n <Option\n name={String(defaultValue)}\n ref={hover.item === null ? itemRef : null}\n hover={hover.item === null}\n onMouseEnter={handleMouseEnter}\n onClick={(e) => {\n e.preventDefault();\n toggleSelected(null);\n }}\n renderOption={renderOption(\n { name: defaultValue, id: null },\n {\n checked: isDefaultOptionSelected(),\n hover: hover.item === null,\n onChange: () => null,\n }\n )}\n />\n );\n\n case \"group\":\n if (!virtualItem.item || !isOptionGroup(virtualItem.item))\n return null;\n return (\n <OptionGroup\n checked={selectedOptions}\n name={virtualItem.item.name}\n tooltip={virtualItem.item.tooltip}\n key={virtualItem.item.id}\n setHover={handleHoverCallback}\n id={virtualItem.item.id}\n hover={hover.item}\n options={virtualItem.item.options}\n renderOptions={handleRenderOption}\n type={type}\n onChange={handleChange}\n filter={filter}\n mixedOptions={mixedOptions}\n />\n );\n\n case \"option\":\n if (!virtualItem.item || isOptionGroup(virtualItem.item)) return null;\n return (\n <Option\n name={(virtualItem.item as IOptionItemProps).name}\n ref={hover.item === virtualItem.id ? itemRef : null}\n key={index}\n tooltip={(virtualItem.item as IOptionItemProps).tooltip}\n onMouseEnter={() => handleMouseEnter(virtualItem.id)}\n onClick={handleClick}\n id={virtualItem.id}\n hover={virtualItem.id === hover.item}\n className={optionClassName}\n renderOption={renderOption(\n {\n ...(virtualItem.item as IOptionItemProps),\n name: highlightText(\n (virtualItem.item as IOptionItemProps).name,\n filter\n ),\n },\n {\n id: `option_${virtualItem.id}`,\n checked:\n selectedOptions && selectedOptions.includes(virtualItem.id),\n hover: hover.item === virtualItem.id,\n onChange: () => null,\n }\n )}\n />\n );\n\n case \"noResult\":\n return <StyledOption css=\"cursor: auto\">{noResultText}</StyledOption>;\n\n case \"addNew\":\n return (\n <StyledAutocompleteNewItem\n ref={hover.item === \"addNew\" ? itemRef : null}\n key=\"emptyValue\"\n hover={hover.item === \"addNew\"}\n onMouseDown={handleEmpty}\n onMouseEnter={onAddNewMouseEnter}\n >\n {emptyValue}\n </StyledAutocompleteNewItem>\n );\n\n default:\n return null;\n }\n },\n [\n defaultValue,\n hover.item,\n handleMouseEnter,\n renderOption,\n isDefaultOptionSelected,\n selectedOptions,\n handleHoverCallback,\n handleRenderOption,\n type,\n handleChange,\n filter,\n mixedOptions,\n handleClick,\n optionClassName,\n noResultText,\n handleEmpty,\n onAddNewMouseEnter,\n emptyValue,\n toggleSelected,\n ]\n );\n\n return (\n <StyledAutocompleteScrollShadow\n className={AutocompleteClassName}\n $isHidden={\n !defaultValue && !emptyValue && !noResultText && list.length < 1\n }\n >\n {({ onScroll }) => (\n <StyledAutocompleteBody key=\"body\" onMouseLeave={handleOnMouseLeave}>\n <div\n ref={listContainerRef}\n style={{\n height: `${Math.min(\n rowVirtualizer.getTotalSize() + 12,\n autoHeightMax\n )}px`,\n overflow: \"auto\",\n }}\n onScroll={(e) => {\n if (onScroll) onScroll(e);\n }}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {shouldUseVirtualization\n ? rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const item = virtualItems[virtualRow.index];\n return (\n <div\n key={virtualRow.index}\n data-index={virtualRow.index}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {renderVirtualItem(item, virtualRow.index)}\n </div>\n );\n })\n : virtualItems.map((item, index) => (\n <React.Fragment key={index}>\n {renderVirtualItem(item, index)}\n </React.Fragment>\n ))}\n </div>\n </div>\n </StyledAutocompleteBody>\n )}\n </StyledAutocompleteScrollShadow>\n );\n};\n\nAutocomplete.displayName = \"Autocomplete\";\n"],"mappings":"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","ignoreList":[]}
package/dist/index.js CHANGED
@@ -17975,6 +17975,63 @@
17975
17975
  function isOptionGroup(item) {
17976
17976
  return item.options !== undefined;
17977
17977
  }
17978
+ var collectLeafIds = function collectLeafIds(opts) {
17979
+ return opts.reduce(function (acc, opt) {
17980
+ return isOptionGroup(opt) ? [...acc, ...opt.options.map(function (o) {
17981
+ return o.id;
17982
+ })] : [...acc, opt.id];
17983
+ }, []);
17984
+ };
17985
+
17986
+ // Inserts an option at its alphabetical position among the options that share
17987
+ // its checked state (checked items live at the top, so a checked option lands
17988
+ // among the checked ones, sorted).
17989
+ var insertAmongSameState = function insertAmongSameState(list, item, isChecked) {
17990
+ var checked = isChecked(item.id);
17991
+ var index = list.findIndex(function (o) {
17992
+ return isChecked(o.id) === checked && o.name.localeCompare(item.name) > 0;
17993
+ });
17994
+ if (index === -1) {
17995
+ index = checked ? list.reduce(function (acc, o, i) {
17996
+ return isChecked(o.id) ? i + 1 : acc;
17997
+ }, 0) : list.length;
17998
+ }
17999
+ return [...list.slice(0, index), item, ...list.slice(index)];
18000
+ };
18001
+
18002
+ // Frozen options keep their order (checking/unchecking never moves them).
18003
+ // Options that aren't frozen yet are slotted in among the checked items,
18004
+ // alphabetically — that's how a freshly added option finds its place.
18005
+ var reconcileFlat = function reconcileFlat(prev, next, frozen, isChecked) {
18006
+ var nextById = new Map(next.map(function (o) {
18007
+ return [o.id, o];
18008
+ }));
18009
+ var base = prev.filter(function (o) {
18010
+ return frozen.has(o.id) && nextById.has(o.id);
18011
+ }).map(function (o) {
18012
+ return nextById.get(o.id);
18013
+ });
18014
+ var toPlace = next.filter(function (o) {
18015
+ return !frozen.has(o.id);
18016
+ });
18017
+ return toPlace.reduce(function (acc, item) {
18018
+ return insertAmongSameState(acc, item, isChecked);
18019
+ }, base);
18020
+ };
18021
+ var reconcileOrder = function reconcileOrder(prev, next, frozen, isChecked) {
18022
+ if (!next.every(isOptionGroup) || !prev.every(isOptionGroup)) {
18023
+ return reconcileFlat(prev, next, frozen, isChecked);
18024
+ }
18025
+ var prevGroupById = new Map(prev.map(function (group) {
18026
+ return [group.id, group];
18027
+ }));
18028
+ return next.map(function (group) {
18029
+ var _prevGroupById$get$op, _prevGroupById$get;
18030
+ return _objectSpread2(_objectSpread2({}, group), {}, {
18031
+ options: reconcileFlat((_prevGroupById$get$op = (_prevGroupById$get = prevGroupById.get(group.id)) === null || _prevGroupById$get === void 0 ? void 0 : _prevGroupById$get.options) !== null && _prevGroupById$get$op !== void 0 ? _prevGroupById$get$op : [], group.options, frozen, isChecked)
18032
+ });
18033
+ });
18034
+ };
17978
18035
  var Autocomplete = function Autocomplete(_ref) {
17979
18036
  var type = _ref.type,
17980
18037
  _ref$options = _ref.options,
@@ -18015,6 +18072,11 @@
18015
18072
  }
18016
18073
  return [selected];
18017
18074
  }, [selected]);
18075
+
18076
+ // Ids whose position is fixed. Starts with everything present on open; a
18077
+ // freshly added option joins this set once it becomes checked, so unchecking
18078
+ // it later won't move it. Everything frozen keeps its order on every re-sort.
18079
+ var frozenRef = React.useRef(new Set(collectLeafIds(options)));
18018
18080
  var handleSort = React.useCallback(function (opts) {
18019
18081
  var _opts$;
18020
18082
  if (keepSameOptionsOrder) {
@@ -18042,38 +18104,32 @@
18042
18104
  };
18043
18105
  if (isGrouped) {
18044
18106
  return opts.map(function (group) {
18045
- var sortedGroupOptions = group.options.sort(sortOptions);
18046
18107
  return _objectSpread2(_objectSpread2({}, group), {}, {
18047
- options: sortedGroupOptions
18108
+ options: [...group.options].sort(sortOptions)
18048
18109
  });
18049
18110
  });
18050
18111
  } else {
18051
- return opts.sort(sortOptions);
18112
+ return [...opts].sort(sortOptions);
18052
18113
  }
18053
- },
18054
- // eslint-disable-next-line react-hooks/exhaustive-deps
18055
- [mixedOptions, selectedOptions]);
18114
+ }, [keepSameOptionsOrder, selectedOptions, mixedOptions]);
18056
18115
  var sortList = React.useCallback(function (options) {
18057
18116
  var _options$;
18058
18117
  if (disabledInternalSort) {
18059
- return handleSort([...options]);
18118
+ return handleSort(options);
18060
18119
  }
18120
+ var alphaSort = function alphaSort(a, b) {
18121
+ return sortDirection === "asc" ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name);
18122
+ };
18061
18123
  var isGrouped = Array.isArray((_options$ = options[0]) === null || _options$ === void 0 ? void 0 : _options$.options);
18062
18124
  if (isGrouped) {
18063
18125
  var sortedOptions = options.map(function (group) {
18064
- var sortedGroupOptions = group.options.sort(function (a, b) {
18065
- return sortDirection === "asc" ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name);
18066
- });
18067
18126
  return _objectSpread2(_objectSpread2({}, group), {}, {
18068
- options: handleSort(sortedGroupOptions)
18127
+ options: handleSort([...group.options].sort(alphaSort))
18069
18128
  });
18070
18129
  });
18071
18130
  return handleSort(sortedOptions);
18072
18131
  } else {
18073
- var _sortedOptions = options.sort(function (a, b) {
18074
- return sortDirection === "asc" ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name);
18075
- });
18076
- return handleSort(_sortedOptions);
18132
+ return handleSort([...options].sort(alphaSort));
18077
18133
  }
18078
18134
  }, [sortDirection, disabledInternalSort, handleSort]);
18079
18135
  var _useState = React.useState(function () {
@@ -18082,10 +18138,41 @@
18082
18138
  _useState2 = _slicedToArray(_useState, 2),
18083
18139
  sortedList = _useState2[0],
18084
18140
  setSortedList = _useState2[1];
18141
+
18142
+ // The order is established on open. Options present then keep their place for
18143
+ // the whole session — checking/unchecking never reorders them. Options added
18144
+ // afterwards are slotted in among the checked items, alphabetically. The
18145
+ // selection key is a primitive so a fresh `selected = []` default can't loop.
18146
+ var isInitialSortRef = React.useRef(true);
18147
+ var selectedKey = selectedOptions.join(",");
18085
18148
  React.useEffect(function () {
18086
- setSortedList(sortList(options));
18149
+ if (isInitialSortRef.current) {
18150
+ isInitialSortRef.current = false;
18151
+ return;
18152
+ }
18153
+ if (keepSameOptionsOrder) {
18154
+ setSortedList(sortList(options));
18155
+ return;
18156
+ }
18157
+ if (sortedList.length === 0) {
18158
+ frozenRef.current = new Set(collectLeafIds(options));
18159
+ setSortedList(sortList(options));
18160
+ return;
18161
+ }
18162
+ var isChecked = function isChecked(id) {
18163
+ return selectedOptions.includes(id);
18164
+ };
18165
+ var frozen = frozenRef.current;
18166
+ var nextFrozen = new Set(frozen);
18167
+ collectLeafIds(options).forEach(function (id) {
18168
+ if (!frozen.has(id) && isChecked(id)) {
18169
+ nextFrozen.add(id);
18170
+ }
18171
+ });
18172
+ frozenRef.current = nextFrozen;
18173
+ setSortedList(reconcileOrder(sortedList, options, frozen, isChecked));
18087
18174
  // eslint-disable-next-line react-hooks/exhaustive-deps
18088
- }, [options]);
18175
+ }, [options, selectedKey]);
18089
18176
  var _useState3 = React.useState({
18090
18177
  item: undefined,
18091
18178
  by: undefined