@owp/core 2.5.33 → 2.5.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index16.js +4 -4
- package/dist/_virtual/index17.js +4 -4
- package/dist/_virtual/index18.js +4 -4
- package/dist/_virtual/index19.js +4 -4
- package/dist/_virtual/index20.js +2 -2
- package/dist/_virtual/index21.js +2 -2
- package/dist/_virtual/index22.js +2 -2
- package/dist/_virtual/index3.js +2 -2
- package/dist/_virtual/index4.js +2 -2
- package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js +68 -62
- package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js.map +1 -1
- package/dist/components/OwpDialog/OwpAlertDialog.js +19 -18
- package/dist/components/OwpDialog/OwpAlertDialog.js.map +1 -1
- package/dist/components/OwpDialog/OwpDialog.js +34 -31
- package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
- package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js +18 -0
- package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js.map +1 -0
- package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js +25 -15
- package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js.map +1 -1
- package/dist/components/OwpLayout/OwpLayout.js.map +1 -1
- package/dist/components/OwpNumberField/OwpNumberField.js +45 -24
- package/dist/components/OwpNumberField/OwpNumberField.js.map +1 -1
- package/dist/components/OwpPicker/OwpDatePicker.js +103 -103
- package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
- package/dist/components/OwpScrollbars/OwpScrollbars.js +79 -52
- package/dist/components/OwpScrollbars/OwpScrollbars.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +157 -157
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
- package/dist/components/OwpTable/OwpDataTable.js +377 -342
- package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +20 -19
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTable/internal/OwpTableBase.js +81 -78
- package/dist/components/OwpTable/internal/OwpTableBase.js.map +1 -1
- package/dist/components/OwpTable/internal/treeGridTableStyle.js +88 -31
- package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +304 -262
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +229 -222
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +282 -277
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
- package/dist/configs/layoutConfig.js +0 -6
- package/dist/configs/layoutConfig.js.map +1 -1
- package/dist/constants/treeGrid.js +59 -46
- package/dist/constants/treeGrid.js.map +1 -1
- package/dist/constants.js +18 -18
- package/dist/constants.js.map +1 -1
- package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +15 -15
- package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -1
- package/dist/hooks/internal/useNavbar.js +4 -4
- package/dist/hooks/useConfirm.js +1 -1
- package/dist/hooks/useConfirm.js.map +1 -1
- package/dist/hooks/useOwpDialogs.js +19 -0
- package/dist/hooks/useOwpDialogs.js.map +1 -0
- package/dist/hooks.js +34 -32
- package/dist/hooks.js.map +1 -1
- package/dist/index.js +69 -71
- package/dist/index.js.map +1 -1
- package/dist/layout/Layout.js +23 -27
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/components/layouts/FooterLayout.js.map +1 -1
- package/dist/layout/components/menus/PasswordChangeMenu.js +25 -25
- package/dist/layout/components/menus/PasswordChangeMenu.js.map +1 -1
- package/dist/layout/components/toggles/NavigationSearchToggle.js +4 -4
- package/dist/layout/components/toggles/NavigationSearchToggle.js.map +1 -1
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +1 -1
- package/dist/layout/components/toggles/ThemePreviewToggle.js +14 -14
- package/dist/layout/components/toggles/ThemePreviewToggle.js.map +1 -1
- package/dist/node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/match/index.js +1 -1
- package/dist/node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/parse/index.js +1 -1
- package/dist/node_modules/.pnpm/inko@1.1.1/node_modules/inko/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/index.js +1 -1
- package/dist/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js +1 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
- package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.d.ts +5 -3
- package/dist/types/components/OwpDialog/OwpAlertDialog.d.ts +1 -1
- package/dist/types/components/OwpDialog/internal/useDialogOpenFocusCleanup.d.ts +5 -0
- package/dist/types/components/OwpErrorBoundary/OwpErrorBoundary.d.ts +8 -14
- package/dist/types/components/OwpNumberField/OwpNumberField.d.ts +18 -4
- package/dist/types/components/OwpScrollbars/OwpScrollbars.d.ts +28 -14
- package/dist/types/components/OwpTable/internal/OwpTableBase.d.ts +3 -1
- package/dist/types/components/OwpTable/internal/treeGridTableStyle.d.ts +61 -2
- package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +2 -1
- package/dist/types/configs/layoutConfig.d.ts +0 -6
- package/dist/types/constants/index.d.ts +0 -1
- package/dist/types/constants/treeGrid.d.ts +9 -0
- package/dist/types/features/themePreview/dialogs/ThemePreviewDialog.d.ts +1 -1
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/useOwpDialogs.d.ts +5 -0
- package/dist/types/hooks/useOwpSettings.d.ts +0 -6
- package/dist/types/index.d.ts +0 -1
- package/dist/types/store/atoms/owpSettingsAtoms.d.ts +0 -6
- package/dist/types/types/OwpDialogTypes.d.ts +1 -0
- package/dist/types/types/OwpRouteTypes.d.ts +25 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/utils/index.d.ts +0 -1
- package/dist/types/utils/internal/blurActiveElement.d.ts +4 -0
- package/dist/utils/internal/blurActiveElement.js +12 -0
- package/dist/utils/internal/blurActiveElement.js.map +1 -0
- package/dist/utils/{navigationUtils.js → internal/navigationUtils.js} +3 -3
- package/dist/utils/internal/navigationUtils.js.map +1 -0
- package/dist/utils.js +23 -25
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/OwpEventEmitter/OwpEventEmitter.js +0 -51
- package/dist/components/OwpEventEmitter/OwpEventEmitter.js.map +0 -1
- package/dist/layout/components/layouts/LeftSideLayout.js +0 -13
- package/dist/layout/components/layouts/LeftSideLayout.js.map +0 -1
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js +0 -66
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js.map +0 -1
- package/dist/node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/css/perfect-scrollbar.css +0 -1
- package/dist/types/components/OwpEventEmitter/OwpEventEmitter.d.ts +0 -27
- package/dist/types/components/OwpEventEmitter/index.d.ts +0 -1
- package/dist/types/layout/components/layouts/LeftSideLayout.d.ts +0 -6
- package/dist/types/utils/common/OwpUtils.d.ts +0 -119
- package/dist/types/utils/common/index.d.ts +0 -1
- package/dist/utils/common/OwpUtils.js +0 -196
- package/dist/utils/common/OwpUtils.js.map +0 -1
- package/dist/utils/navigationUtils.js.map +0 -1
- /package/dist/types/utils/{navigationUtils.d.ts → internal/navigationUtils.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpSelectorAutocomplete.js","sources":["../../../src/components/OwpSelectorBase/OwpSelectorAutocomplete.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n Autocomplete,\n Box,\n Checkbox,\n Chip,\n CircularProgress,\n ClickAwayListener,\n IconButton,\n Paper,\n Popper,\n TextField,\n} from '@mui/material';\nimport useAutocomplete from '@mui/material/useAutocomplete';\nimport { alpha, type SxProps, type Theme } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport {\n type FocusEvent as ReactFocusEvent,\n type ForwardedRef,\n type HTMLAttributes,\n type Key,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type MouseEvent as ReactMouseEvent,\n type MutableRefObject,\n type SyntheticEvent,\n type UIEvent as ReactUIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type {\n OwpSelectorBaseHookResult,\n OwpSelectorBaseOption,\n OwpSelectorBaseProps,\n} from './types';\nimport {\n SELECTOR_ALL_OPTION_LABEL_SX,\n SELECTOR_ALL_VALUE_LABEL_SX,\n} from './selectorBaseStyles';\nimport { isSelectorAllOption } from './utils';\n\ninterface OwpSelectorAutocompleteProps {\n hookResult: OwpSelectorBaseHookResult;\n props: OwpSelectorBaseProps;\n}\n\nconst MULTIPLE_VISIBLE_CHIP_COUNT = 2;\nconst AUTOCOMPLETE_MIN_WIDTH = 152;\nconst MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH = 72;\nconst SELECTOR_CLEAR_ICON_FONT_SIZE = 18.57;\nconst STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT = '11px !important';\nconst OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT = '2px !important';\nconst OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT = '5px !important';\nconst AUTOCOMPLETE_VIRTUALIZATION_THRESHOLD = 100;\nconst AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT = 36;\nconst AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING = 8;\nconst AUTOCOMPLETE_VIRTUALIZED_VISIBLE_ITEM_COUNT = 8;\nconst AUTOCOMPLETE_VIRTUALIZED_OVERSCAN_ITEM_COUNT = 8;\nconst AUTOCOMPLETE_POPUP_INDICATOR_WIDTH = 30;\nconst AUTOCOMPLETE_CLEAR_INDICATOR_WIDTH = 26;\nconst AUTOCOMPLETE_SEARCH_DIACRITICS_REGEX = /[\\u0300-\\u036f]/g;\n\ntype SelectorAutocompleteKeyDownEvent = ReactKeyboardEvent<HTMLDivElement> & {\n defaultMuiPrevented?: boolean;\n};\n\ntype SelectorAutocompleteGetOptionProps = (renderedOption: {\n option: OwpSelectorBaseOption;\n index: number;\n}) => HTMLAttributes<HTMLLIElement> & {\n key: Key;\n};\n\ninterface OwpVirtualizedAutocompleteOptionListProps {\n getListboxProps: () => HTMLAttributes<HTMLUListElement>;\n getOptionProps: SelectorAutocompleteGetOptionProps;\n options: OwpSelectorBaseOption[];\n selectedOption?: OwpSelectorBaseOption | null;\n}\n\ninterface OwpVirtualizedSingleSelectorAutocompleteProps {\n autocompleteInputValue?: string;\n autocompleteSx: SxProps<Theme>;\n className?: string;\n disableClientFilter?: boolean;\n disabled?: boolean;\n error?: boolean;\n fullWidth?: boolean;\n helperText?: ReactNode;\n label?: ReactNode;\n loading?: boolean;\n loadingText: ReactNode;\n noOptionsText: ReactNode;\n onAutocompleteInputChange?: (nextInputValue: string, reason: string) => void;\n options: OwpSelectorBaseOption[];\n placeholder?: string;\n required?: boolean;\n resolvedTextFieldVariant: NonNullable<OwpSelectorBaseProps['textFieldProps']>['variant'];\n selectSingleValue: (nextValue: string) => void;\n selectedOption: OwpSelectorBaseOption | null;\n showAllOption: boolean;\n singleAutocompleteInputSx?: SxProps<Theme>;\n textFieldProps?: OwpSelectorBaseProps['textFieldProps'];\n}\n\n/**\n * forwarded ref와 내부 ref 동기화\n * @param forwardedRef 외부 ref\n * @param node 현재 DOM 노드\n */\nconst assignAutocompleteListboxRef = (\n forwardedRef: ForwardedRef<HTMLElement>,\n node: HTMLElement | null,\n) => {\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n return;\n }\n\n if (forwardedRef) {\n forwardedRef.current = node;\n }\n};\n\n/**\n * 가상 목록 렌더링 인덱스 계산\n * @param optionCount option 개수\n * @param visibleStartIndex visible 시작 인덱스\n * @param visibleEndIndex visible 종료 인덱스\n * @param selectedOptionIndex 선택 option 인덱스\n */\nconst getVirtualizedOptionIndexes = (\n optionCount: number,\n visibleStartIndex: number,\n visibleEndIndex: number,\n selectedOptionIndex: number,\n) => {\n const indexSet = new Set<number>();\n const addIndex = (index: number) => {\n if (index >= 0 && index < optionCount) {\n indexSet.add(index);\n }\n };\n\n addIndex(0);\n addIndex(optionCount - 1);\n addIndex(selectedOptionIndex);\n\n for (let index = visibleStartIndex; index < visibleEndIndex; index += 1) {\n addIndex(index);\n }\n\n return Array.from(indexSet).sort((leftIndex, rightIndex) => leftIndex - rightIndex);\n};\n\n/**\n * 가상 Autocomplete listbox sx\n * @param height listbox 높이\n */\nconst getVirtualizedAutocompleteListboxSx = (height?: number): SxProps<Theme>[] => [\n {\n listStyle: 'none',\n margin: 0,\n maxHeight: '40vh',\n overflow: 'auto',\n padding: 0,\n position: 'relative',\n ...(height ? { height } : {}),\n '& .MuiAutocomplete-option': {\n alignItems: 'center',\n boxSizing: 'border-box',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'flex-start',\n minHeight: 48,\n outline: 0,\n overflow: 'hidden',\n paddingBottom: 0.75,\n paddingLeft: 2,\n paddingRight: 2,\n paddingTop: 0.75,\n WebkitTapHighlightColor: 'transparent',\n '@media (min-width:600px)': {\n minHeight: 'auto',\n },\n '&.Mui-focused': {\n backgroundColor: (theme) => theme.palette.action.hover,\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n '&.Mui-focusVisible': {\n backgroundColor: (theme) => theme.palette.action.focus,\n },\n '&[aria-disabled=\"true\"]': {\n opacity: (theme) => theme.palette.action.disabledOpacity,\n pointerEvents: 'none',\n },\n '&[aria-selected=\"true\"]': {\n backgroundColor: (theme) =>\n alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),\n '&.Mui-focused': {\n backgroundColor: (theme) =>\n alpha(\n theme.palette.primary.main,\n theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity,\n ),\n '@media (hover: none)': {\n backgroundColor: (theme) => theme.palette.action.selected,\n },\n },\n '&.Mui-focusVisible': {\n backgroundColor: (theme) =>\n alpha(\n theme.palette.primary.main,\n theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity,\n ),\n },\n },\n },\n },\n];\n\n/**\n * useAutocomplete 기반 대용량 옵션 목록 렌더링\n * @param props option list 렌더링 props\n */\nconst OwpVirtualizedAutocompleteOptionList = ({\n getListboxProps,\n getOptionProps,\n options,\n selectedOption,\n}: OwpVirtualizedAutocompleteOptionListProps) => {\n const listboxProps = getListboxProps() as HTMLAttributes<HTMLElement> & {\n ref?: ForwardedRef<HTMLElement>;\n };\n const { ref: forwardedListboxRef, style, ...restListboxProps } = listboxProps;\n const listboxRef = useRef<HTMLElement | null>(null);\n const [startIndex, setStartIndex] = useState(0);\n const optionCount = options.length;\n const visibleStartIndex = Math.max(0, Math.min(startIndex, Math.max(optionCount - 1, 0)));\n const visibleEndIndex = Math.min(\n optionCount,\n visibleStartIndex +\n AUTOCOMPLETE_VIRTUALIZED_VISIBLE_ITEM_COUNT +\n AUTOCOMPLETE_VIRTUALIZED_OVERSCAN_ITEM_COUNT * 2,\n );\n const selectedOptionIndex = useMemo(() => {\n if (!selectedOption) {\n return -1;\n }\n\n for (let index = 0; index < optionCount; index += 1) {\n if (options[index].value === selectedOption.value) {\n return index;\n }\n }\n\n return -1;\n }, [optionCount, options, selectedOption]);\n const renderedOptionIndexes = useMemo(\n () =>\n getVirtualizedOptionIndexes(\n optionCount,\n visibleStartIndex,\n visibleEndIndex,\n selectedOptionIndex,\n ),\n [optionCount, selectedOptionIndex, visibleEndIndex, visibleStartIndex],\n );\n const listboxHeight =\n Math.min(optionCount, AUTOCOMPLETE_VIRTUALIZED_VISIBLE_ITEM_COUNT) *\n AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT +\n AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING * 2;\n\n const handleRef = useCallback(\n (node: HTMLElement | null) => {\n listboxRef.current = node;\n assignAutocompleteListboxRef(forwardedListboxRef, node);\n },\n [forwardedListboxRef],\n );\n\n const handleScroll = (event: ReactUIEvent<HTMLElement>) => {\n const nextStartIndex = Math.max(\n 0,\n Math.floor(\n (event.currentTarget.scrollTop - AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING) /\n AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT,\n ) - AUTOCOMPLETE_VIRTUALIZED_OVERSCAN_ITEM_COUNT,\n );\n\n setStartIndex((previousStartIndex) =>\n previousStartIndex === nextStartIndex ? previousStartIndex : nextStartIndex,\n );\n };\n\n useEffect(() => {\n setStartIndex(0);\n\n if (listboxRef.current) {\n listboxRef.current.scrollTop = 0;\n }\n }, [optionCount]);\n\n return (\n <Box\n component=\"div\"\n {...restListboxProps}\n ref={handleRef}\n onScroll={handleScroll}\n style={style}\n sx={getVirtualizedAutocompleteListboxSx(listboxHeight) as SxProps<Theme>}\n >\n <Box\n component=\"ul\"\n sx={{\n height:\n optionCount * AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT +\n AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING * 2,\n listStyle: 'none',\n margin: 0,\n padding: 0,\n position: 'relative',\n }}\n >\n {renderedOptionIndexes.map((optionIndex) => {\n const option = options[optionIndex];\n const optionProps = getOptionProps({ option, index: optionIndex });\n const { key, ...restOptionProps } = optionProps;\n const optionTop =\n AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING +\n optionIndex * AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT;\n\n return (\n <li\n key={key}\n {...restOptionProps}\n className={clsx('MuiAutocomplete-option', restOptionProps.className)}\n style={{\n ...restOptionProps.style,\n height: AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT,\n left: 0,\n minHeight: AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT,\n position: 'absolute',\n right: 0,\n top: optionTop,\n }}\n >\n {renderAutocompleteOptionLabel(option)}\n </li>\n );\n })}\n </Box>\n </Box>\n );\n};\n\n/**\n * 현재 키 이벤트 기준 입력값 반환\n * @param event 키보드 이벤트\n * @param fallbackValue 제어 입력 fallback 값\n */\nconst getCurrentAutocompleteInputValue = (\n event: SelectorAutocompleteKeyDownEvent,\n fallbackValue?: string,\n) => {\n const eventTarget = event.target;\n\n if (eventTarget instanceof HTMLInputElement) {\n return eventTarget.value;\n }\n\n return fallbackValue ?? '';\n};\n\n/**\n * Autocomplete 옵션 라벨 문자열 변환\n * @param label 옵션 라벨\n */\nconst getAutocompleteOptionLabel = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * Autocomplete 검색 문자열 정규화\n * @param text 검색 대상 문자열\n */\nconst normalizeAutocompleteSearchText = (text: string) =>\n text.normalize('NFD').replace(AUTOCOMPLETE_SEARCH_DIACRITICS_REGEX, '').toLowerCase();\n\n/**\n * 임시 입력 편집 중 MUI 내부 선택값 reset 무시 여부\n * @param hasPendingInputEdit 임시 입력 편집 여부\n * @param reason input change reason\n */\nconst shouldIgnorePendingAutocompleteInputReset = (\n hasPendingInputEdit: boolean,\n reason: string,\n) => hasPendingInputEdit && reason === 'reset';\n\n/**\n * clear 버튼 기준 Autocomplete input 포커스 복원\n * @param element clear 버튼 element\n */\nconst focusAutocompleteInputFromClearElement = (element: HTMLElement) => {\n const inputElement = element\n .closest('.MuiAutocomplete-root')\n ?.querySelector<HTMLInputElement>('input');\n\n if (!inputElement) {\n return;\n }\n\n window.requestAnimationFrame(() => {\n inputElement.focus();\n inputElement.setSelectionRange(inputElement.value.length, inputElement.value.length);\n });\n};\n\n/**\n * Autocomplete 옵션 라벨 렌더링\n * @param option 선택 옵션\n */\nconst renderAutocompleteOptionLabel = (option: OwpSelectorBaseOption) => (\n <Box\n component=\"span\"\n sx={isSelectorAllOption(option) ? SELECTOR_ALL_OPTION_LABEL_SX : undefined}\n >\n {option.label}\n </Box>\n);\n\n/**\n * useAutocomplete 기반 단일 대용량 선택기\n * @param props 대용량 단일 선택기 props\n */\nconst OwpVirtualizedSingleSelectorAutocomplete = ({\n autocompleteInputValue,\n autocompleteSx,\n className,\n disableClientFilter,\n disabled,\n error,\n fullWidth,\n helperText,\n label,\n loading,\n loadingText,\n noOptionsText,\n onAutocompleteInputChange,\n options,\n placeholder,\n required,\n resolvedTextFieldVariant,\n selectSingleValue,\n selectedOption,\n showAllOption,\n singleAutocompleteInputSx,\n textFieldProps,\n}: OwpVirtualizedSingleSelectorAutocompleteProps) => {\n const isAutocompleteInputValueControlled = autocompleteInputValue !== undefined;\n const hasPendingAutocompleteInputEditRef = useRef(false);\n const skipNextAutocompleteBlurRestoreRef = useRef(false);\n const [uncontrolledAutocompleteInputValue, setUncontrolledAutocompleteInputValue] = useState(\n () => (selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : ''),\n );\n const resolvedAutocompleteInputValue = isAutocompleteInputValueControlled\n ? autocompleteInputValue\n : uncontrolledAutocompleteInputValue;\n const normalizedOptionLabelMap = useMemo(\n () =>\n new Map(\n options.map((option) => [\n option.value,\n normalizeAutocompleteSearchText(getAutocompleteOptionLabel(option.label)),\n ]),\n ),\n [options],\n );\n const setAutocompleteInputDisplayValue = useCallback(\n (nextInputValue: string) => {\n if (!isAutocompleteInputValueControlled) {\n setUncontrolledAutocompleteInputValue(nextInputValue);\n }\n },\n [isAutocompleteInputValueControlled],\n );\n const clearAutocompleteInputDisplayValue = useCallback((reason: string) => {\n hasPendingAutocompleteInputEditRef.current = true;\n setAutocompleteInputDisplayValue('');\n onAutocompleteInputChange?.('', reason);\n }, [onAutocompleteInputChange, setAutocompleteInputDisplayValue]);\n const restoreAutocompleteInputDisplayValue = useCallback(() => {\n const restoredInputValue = selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : '';\n\n hasPendingAutocompleteInputEditRef.current = false;\n setAutocompleteInputDisplayValue(restoredInputValue);\n onAutocompleteInputChange?.(restoredInputValue, 'reset');\n }, [onAutocompleteInputChange, selectedOption, setAutocompleteInputDisplayValue]);\n const filterOptions = useCallback(\n (\n nextOptions: OwpSelectorBaseOption[],\n state: { inputValue: string },\n ) => {\n if (disableClientFilter) {\n return nextOptions;\n }\n\n const inputValue = normalizeAutocompleteSearchText(state.inputValue);\n\n if (!inputValue) {\n return nextOptions;\n }\n\n const filteredOptions: OwpSelectorBaseOption[] = [];\n\n for (const option of nextOptions) {\n if (normalizedOptionLabelMap.get(option.value)?.includes(inputValue)) {\n filteredOptions.push(option);\n }\n }\n\n return filteredOptions;\n },\n [disableClientFilter, normalizedOptionLabelMap],\n );\n const {\n anchorEl,\n dirty,\n getClearProps,\n getInputLabelProps,\n getInputProps,\n getListboxProps,\n getOptionProps,\n getPopupIndicatorProps,\n getRootProps,\n groupedOptions,\n popupOpen,\n setAnchorEl,\n } = useAutocomplete<OwpSelectorBaseOption, false, false, false>({\n componentName: 'OwpSelectorAutocomplete',\n disabled,\n filterOptions,\n getOptionKey: (option) => option.value,\n getOptionLabel: (option) => getAutocompleteOptionLabel(option.label),\n inputValue: resolvedAutocompleteInputValue,\n isOptionEqualToValue: (option, selected) => option.value === selected.value,\n onChange: (_event, nextOption, reason) => {\n if (reason === 'clear' || reason === 'removeOption') {\n clearAutocompleteInputDisplayValue(reason);\n return;\n }\n\n hasPendingAutocompleteInputEditRef.current = false;\n\n if (!nextOption || (showAllOption && isSelectorAllOption(nextOption))) {\n setAutocompleteInputDisplayValue(\n nextOption ? getAutocompleteOptionLabel(nextOption.label) : '',\n );\n selectSingleValue('');\n return;\n }\n\n setAutocompleteInputDisplayValue(getAutocompleteOptionLabel(nextOption.label));\n selectSingleValue(nextOption.value);\n },\n onInputChange: (_event, nextInputValue, reason) => {\n if (\n shouldIgnorePendingAutocompleteInputReset(\n hasPendingAutocompleteInputEditRef.current,\n reason,\n )\n ) {\n setAutocompleteInputDisplayValue('');\n return;\n }\n\n if (reason === 'input') {\n hasPendingAutocompleteInputEditRef.current = true;\n }\n\n setAutocompleteInputDisplayValue(nextInputValue);\n onAutocompleteInputChange?.(nextInputValue, reason);\n },\n options,\n selectOnFocus: true,\n value: selectedOption,\n });\n const rootProps = getRootProps();\n const inputProps = getInputProps();\n const inputLabelProps = getInputLabelProps();\n const clearProps = getClearProps();\n const popupIndicatorProps = getPopupIndicatorProps();\n const shouldShowClearIndicator = dirty && !disabled && resolvedAutocompleteInputValue !== '';\n const htmlInputSlotProps = textFieldProps?.slotProps?.htmlInput as\n | (HTMLAttributes<HTMLInputElement> & { className?: string })\n | undefined;\n const {\n className: htmlInputClassName,\n onBlur: onHtmlInputBlur,\n onKeyDown: onHtmlInputKeyDown,\n ...restHtmlInputSlotProps\n } = htmlInputSlotProps ?? {};\n const inputSlotClassName = (\n textFieldProps?.slotProps?.input as { className?: string } | undefined\n )?.className;\n const setAutocompleteAnchorEl = useCallback(\n (node: HTMLElement | null) => {\n (setAnchorEl as unknown as (anchorElement: HTMLElement | null) => void)(node);\n },\n [setAnchorEl],\n );\n const handleClearClick = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipNextAutocompleteBlurRestoreRef.current = false;\n clearAutocompleteInputDisplayValue('clear');\n focusAutocompleteInputFromClearElement(event.currentTarget);\n };\n const handleClearMouseDown = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipNextAutocompleteBlurRestoreRef.current = true;\n };\n const handleInputKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n onHtmlInputKeyDown?.(event);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (event.key === 'Escape' || event.key === 'Tab') {\n restoreAutocompleteInputDisplayValue();\n return;\n }\n\n if (event.key !== 'Backspace' && event.key !== 'Delete') {\n return;\n }\n\n if (!selectedOption) {\n return;\n }\n\n const currentInputValue = event.currentTarget.value;\n const selectedOptionLabel = getAutocompleteOptionLabel(selectedOption.label);\n const hasSelectedInputText =\n event.currentTarget.selectionStart !== event.currentTarget.selectionEnd;\n\n if (\n currentInputValue === '' ||\n currentInputValue === selectedOptionLabel ||\n hasSelectedInputText\n ) {\n event.preventDefault();\n (event as SelectorAutocompleteKeyDownEvent).defaultMuiPrevented = true;\n clearAutocompleteInputDisplayValue('input');\n }\n };\n const handleInputBlur = (event: ReactFocusEvent<HTMLInputElement>) => {\n inputProps.onBlur?.(event);\n onHtmlInputBlur?.(event);\n\n if (skipNextAutocompleteBlurRestoreRef.current) {\n skipNextAutocompleteBlurRestoreRef.current = false;\n return;\n }\n\n restoreAutocompleteInputDisplayValue();\n };\n\n useEffect(() => {\n if (isAutocompleteInputValueControlled) {\n return;\n }\n\n if (hasPendingAutocompleteInputEditRef.current) {\n return;\n }\n\n setUncontrolledAutocompleteInputValue(\n selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : '',\n );\n }, [isAutocompleteInputValueControlled, selectedOption]);\n\n return (\n <Box\n {...rootProps}\n className={clsx(\n 'MuiAutocomplete-root min-w-128',\n fullWidth && 'MuiAutocomplete-fullWidth',\n popupOpen && 'Mui-expanded',\n shouldShowClearIndicator && 'MuiAutocomplete-hasClearIcon',\n 'MuiAutocomplete-hasPopupIcon',\n className,\n )}\n sx={\n [\n autocompleteSx,\n fullWidth ? { width: '100%' } : undefined,\n {\n '& .MuiAutocomplete-inputRoot': {\n paddingRight: `${\n AUTOCOMPLETE_POPUP_INDICATOR_WIDTH +\n (shouldShowClearIndicator ? AUTOCOMPLETE_CLEAR_INDICATOR_WIDTH : 0)\n }px !important`,\n position: 'relative',\n },\n '& .MuiAutocomplete-inputRoot .MuiAutocomplete-input': {\n minWidth: 30,\n width: 0,\n },\n '& .MuiAutocomplete-input': {\n flexGrow: 1,\n textOverflow: 'ellipsis',\n },\n '& .MuiAutocomplete-endAdornment': {\n alignItems: 'center',\n display: 'flex',\n position: 'absolute',\n right: resolvedTextFieldVariant === 'standard' ? 0 : 9,\n top: '50%',\n transform: 'translate(0, -50%)',\n },\n '& .MuiAutocomplete-clearIndicator': {\n marginRight: -0.25,\n padding: 0.5,\n visibility: 'visible',\n },\n '& .MuiAutocomplete-popupIndicator': {\n marginRight: -0.25,\n padding: 0.25,\n },\n '& .MuiAutocomplete-popupIndicatorOpen': {\n transform: 'rotate(180deg)',\n },\n },\n ] as SxProps<Theme>\n }\n >\n <TextField\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n htmlInput: {\n ...inputProps,\n ...restHtmlInputSlotProps,\n className: clsx(\n 'MuiAutocomplete-input',\n inputProps.className,\n htmlInputClassName,\n ),\n onBlur: handleInputBlur,\n onKeyDown: handleInputKeyDown,\n },\n input: {\n ...textFieldProps?.slotProps?.input,\n ref: setAutocompleteAnchorEl,\n className: clsx('MuiAutocomplete-inputRoot', inputSlotClassName),\n sx: {\n ...(singleAutocompleteInputSx ?? {}),\n ...((textFieldProps?.slotProps?.input as { sx?: object } | undefined)?.sx ?? {}),\n },\n endAdornment: (\n <Box className=\"MuiAutocomplete-endAdornment\">\n {loading ? <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} /> : null}\n {shouldShowClearIndicator ? (\n <IconButton\n className=\"MuiAutocomplete-clearIndicator m-0\"\n onClick={handleClearClick}\n onMouseDown={handleClearMouseDown}\n size=\"small\"\n tabIndex={clearProps.tabIndex}\n type=\"button\"\n >\n <ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />\n </IconButton>\n ) : null}\n <IconButton\n className={clsx(\n 'MuiAutocomplete-popupIndicator m-0',\n popupOpen && 'MuiAutocomplete-popupIndicatorOpen',\n )}\n onClick={(event) => popupIndicatorProps.onClick?.(event)}\n size=\"small\"\n disabled={disabled}\n tabIndex={popupIndicatorProps.tabIndex}\n type=\"button\"\n >\n <ArrowDropDownIcon />\n </IconButton>\n </Box>\n ),\n },\n inputLabel: {\n ...inputLabelProps,\n ...textFieldProps?.slotProps?.inputLabel,\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n {anchorEl ? (\n <Popper\n anchorEl={anchorEl}\n open={popupOpen}\n placement=\"bottom-start\"\n style={{ width: anchorEl.clientWidth }}\n sx={{ zIndex: 99999 }}\n >\n <Paper\n sx={{\n '& .MuiAutocomplete-noOptions': {\n fontSize: 14,\n px: 1,\n py: 1.5,\n whiteSpace: 'nowrap',\n },\n }}\n >\n {loading && groupedOptions.length === 0 ? (\n <Box sx={{ fontSize: 14, px: 1, py: 1.5, whiteSpace: 'nowrap' }}>\n {loadingText}\n </Box>\n ) : null}\n {!loading && groupedOptions.length === 0 ? (\n <Box\n className=\"MuiAutocomplete-noOptions\"\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n role=\"presentation\"\n >\n {noOptionsText}\n </Box>\n ) : null}\n {groupedOptions.length > 0 ? (\n <OwpVirtualizedAutocompleteOptionList\n getListboxProps={getListboxProps}\n getOptionProps={getOptionProps}\n options={groupedOptions}\n selectedOption={selectedOption}\n />\n ) : null}\n </Paper>\n </Popper>\n ) : null}\n </Box>\n );\n};\n\n/**\n * Autocomplete 기반 공통 선택기\n * @param props Autocomplete 렌더링 props\n */\nexport const OwpSelectorAutocomplete = ({ hookResult, props }: OwpSelectorAutocompleteProps) => {\n const { t } = useOwpTranslation();\n const {\n autocompleteInputValue,\n autocompleteVirtualizationThreshold,\n className,\n disableClientFilter,\n disabled,\n error,\n fullWidth,\n helperText,\n label,\n loading,\n loadingText,\n multiple,\n noOptionsText,\n onAutocompleteInputChange,\n placeholder,\n required,\n showAllOption = true,\n textFieldProps,\n valueTextAlign,\n } = props;\n const {\n allOption,\n clearSelection,\n isAllSelected,\n resolvedOptions,\n restoreAllSelection,\n selectAll,\n selectedOption,\n selectedOptions,\n selectMultipleValues,\n selectSingleValue,\n } = hookResult;\n const options = useMemo(\n () => (showAllOption ? [allOption, ...resolvedOptions] : resolvedOptions),\n [allOption, resolvedOptions, showAllOption],\n );\n const resolvedAutocompleteVirtualizationThreshold =\n autocompleteVirtualizationThreshold === false\n ? Number.POSITIVE_INFINITY\n : Math.max(1, autocompleteVirtualizationThreshold ?? AUTOCOMPLETE_VIRTUALIZATION_THRESHOLD);\n const shouldUseVirtualizedSingleAutocomplete =\n options.length >= resolvedAutocompleteVirtualizationThreshold;\n const filteredSelectedOptions = useMemo(\n () => selectedOptions.filter((option) => !isSelectorAllOption(option)),\n [selectedOptions],\n );\n const hiddenSelectedOptions = useMemo(\n () => (isAllSelected ? [] : filteredSelectedOptions.slice(MULTIPLE_VISIBLE_CHIP_COUNT)),\n [filteredSelectedOptions, isAllSelected],\n );\n const hiddenSelectedOptionCount = hiddenSelectedOptions.length;\n const [hiddenChipAnchorEl, setHiddenChipAnchorEl] = useState<HTMLElement | null>(null);\n const autocompleteRootRef = useRef<HTMLDivElement | null>(null);\n const resolvedNoOptionsText =\n noOptionsText ??\n t(disableClientFilter ? 'Message.검색 결과 없음' : 'Message.조회된 결과가 없습니다.');\n const resolvedLoadingText = loadingText ?? t('Common.로딩 중...');\n const shouldRestoreAllOnClearRef = useRef(\n multiple &&\n showAllOption &&\n ((props.value ?? props.defaultValue) == null || (props.value ?? props.defaultValue) === ''),\n );\n const autocompleteSlotProps = {\n clearIndicator: {\n className: 'm-0 p-0',\n size: 'small',\n tabIndex: -1,\n },\n paper: {\n sx: {\n '& .MuiAutocomplete-noOptions': {\n fontSize: 14,\n px: 1,\n py: 1.5,\n whiteSpace: 'nowrap',\n },\n },\n },\n popupIndicator: {\n className: 'm-0 p-0',\n size: 'small',\n tabIndex: -1,\n },\n } as const;\n const resolvedTextFieldVariant = textFieldProps?.variant ?? 'standard';\n const singleAutocompleteInputPaddingLeft =\n resolvedTextFieldVariant === 'standard'\n ? STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT\n : resolvedTextFieldVariant === 'outlined'\n ? textFieldProps?.size === 'small'\n ? OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT\n : OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT\n : undefined;\n const singleAutocompleteInputSx =\n singleAutocompleteInputPaddingLeft || valueTextAlign\n ? {\n '& .MuiAutocomplete-input': {\n ...(singleAutocompleteInputPaddingLeft\n ? { paddingLeft: singleAutocompleteInputPaddingLeft }\n : {}),\n ...(valueTextAlign ? { textAlign: valueTextAlign } : {}),\n },\n }\n : undefined;\n const autocompleteSx = {\n minWidth: AUTOCOMPLETE_MIN_WIDTH,\n '& .MuiAutocomplete-endAdornment': {\n '& .MuiAutocomplete-clearIndicator + .MuiAutocomplete-popupIndicator': {\n ml: 0,\n },\n '& .MuiIconButton-root': {\n m: 0,\n p: 0,\n },\n '& > :not(style) + :not(style)': {\n ml: 0,\n },\n alignItems: 'center',\n gap: 0,\n right: 0,\n },\n } as const;\n const multipleAutocompleteSx = {\n ...autocompleteSx,\n '& .MuiAutocomplete-inputRoot .MuiAutocomplete-input': {\n flexBasis: MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH,\n minWidth: MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH,\n },\n } as const;\n const isSingleAutocompleteInputValueControlled = autocompleteInputValue !== undefined;\n const singleAutocompleteHasPendingInputEditRef = useRef(false);\n const skipNextSingleAutocompleteBlurRestoreRef = useRef(false);\n const [singleAutocompleteInputValue, setSingleAutocompleteInputValue] = useState(\n () => (selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : ''),\n );\n const resolvedSingleAutocompleteInputValue = isSingleAutocompleteInputValueControlled\n ? autocompleteInputValue\n : singleAutocompleteInputValue;\n const singleAutocompleteHtmlInputSlotProps = textFieldProps?.slotProps?.htmlInput as\n | (HTMLAttributes<HTMLInputElement> & { className?: string })\n | undefined;\n const {\n className: singleAutocompleteHtmlInputClassName,\n onBlur: onSingleAutocompleteHtmlInputBlur,\n onKeyDown: onSingleAutocompleteHtmlInputKeyDown,\n ...restSingleAutocompleteHtmlInputSlotProps\n } = singleAutocompleteHtmlInputSlotProps ?? {};\n\n const setSingleAutocompleteInputDisplayValue = useCallback(\n (nextInputValue: string) => {\n if (!isSingleAutocompleteInputValueControlled) {\n setSingleAutocompleteInputValue(nextInputValue);\n }\n },\n [isSingleAutocompleteInputValueControlled],\n );\n\n const clearSingleAutocompleteInputDisplayValue = useCallback(\n (reason: string, shouldNotifyInputChange = true) => {\n singleAutocompleteHasPendingInputEditRef.current = true;\n setSingleAutocompleteInputDisplayValue('');\n\n if (shouldNotifyInputChange) {\n onAutocompleteInputChange?.('', reason);\n }\n },\n [onAutocompleteInputChange, setSingleAutocompleteInputDisplayValue],\n );\n\n const restoreSingleAutocompleteInputDisplayValue = useCallback(() => {\n const restoredInputValue = selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : '';\n\n singleAutocompleteHasPendingInputEditRef.current = false;\n setSingleAutocompleteInputDisplayValue(restoredInputValue);\n onAutocompleteInputChange?.(restoredInputValue, 'reset');\n }, [onAutocompleteInputChange, selectedOption, setSingleAutocompleteInputDisplayValue]);\n\n useEffect(() => {\n if (!hiddenSelectedOptionCount) {\n setHiddenChipAnchorEl(null);\n }\n }, [hiddenSelectedOptionCount]);\n\n useEffect(() => {\n if (multiple || isSingleAutocompleteInputValueControlled) {\n return;\n }\n\n if (singleAutocompleteHasPendingInputEditRef.current) {\n return;\n }\n\n setSingleAutocompleteInputValue(\n selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : '',\n );\n }, [isSingleAutocompleteInputValueControlled, multiple, selectedOption]);\n\n useEffect(() => {\n if (!shouldRestoreAllOnClearRef.current) {\n return;\n }\n\n const formElement = autocompleteRootRef.current?.closest('form');\n\n if (!formElement) {\n return;\n }\n\n const handleFormReset = () => {\n window.setTimeout(() => {\n restoreAllSelection();\n }, 0);\n };\n\n formElement.addEventListener('reset', handleFormReset);\n\n return () => {\n formElement.removeEventListener('reset', handleFormReset);\n };\n }, [restoreAllSelection]);\n\n const handleHiddenChipPopperClose = () => {\n setHiddenChipAnchorEl(null);\n };\n\n const handleHiddenChipSummaryMouseDown = (event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n };\n\n const handleHiddenChipSummaryClick = (event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n setHiddenChipAnchorEl((previousAnchorElement) =>\n previousAnchorElement === event.currentTarget ? null : event.currentTarget,\n );\n };\n\n const handleHiddenChipDelete = (optionValue: string) => {\n selectMultipleValues(\n filteredSelectedOptions\n .filter((option) => option.value !== optionValue)\n .map((option) => option.value),\n );\n };\n\n const handleMultipleRootKeyDown = (event: SelectorAutocompleteKeyDownEvent) => {\n const currentInputValue = getCurrentAutocompleteInputValue(event, autocompleteInputValue);\n\n if (\n (isAllSelected || hiddenSelectedOptionCount > 0) &&\n currentInputValue === '' &&\n (event.key === 'Backspace' || event.key === 'Delete')\n ) {\n event.defaultMuiPrevented = true;\n event.preventDefault();\n event.stopPropagation();\n }\n\n textFieldProps?.onKeyDown?.(\n event as Parameters<NonNullable<typeof textFieldProps.onKeyDown>>[0],\n );\n };\n\n const handleSingleAutocompleteClearMouseDown = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipNextSingleAutocompleteBlurRestoreRef.current = true;\n };\n\n const handleSingleAutocompleteClearClick = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipNextSingleAutocompleteBlurRestoreRef.current = false;\n clearSingleAutocompleteInputDisplayValue('clear');\n focusAutocompleteInputFromClearElement(event.currentTarget);\n };\n\n const handleSingleAutocompleteInputKeyDown = (\n event: ReactKeyboardEvent<HTMLInputElement>,\n ) => {\n onSingleAutocompleteHtmlInputKeyDown?.(event);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (event.key === 'Escape' || event.key === 'Tab') {\n restoreSingleAutocompleteInputDisplayValue();\n return;\n }\n\n if (event.key !== 'Backspace' && event.key !== 'Delete') {\n return;\n }\n\n if (!selectedOption) {\n return;\n }\n\n const currentInputValue = event.currentTarget.value;\n const selectedOptionLabel = getAutocompleteOptionLabel(selectedOption.label);\n const hasSelectedInputText =\n event.currentTarget.selectionStart !== event.currentTarget.selectionEnd;\n\n if (\n currentInputValue === '' ||\n currentInputValue === selectedOptionLabel ||\n hasSelectedInputText\n ) {\n event.preventDefault();\n (event as SelectorAutocompleteKeyDownEvent).defaultMuiPrevented = true;\n clearSingleAutocompleteInputDisplayValue('input');\n }\n };\n\n const handleSingleAutocompleteInputBlur = (\n event: ReactFocusEvent<HTMLInputElement>,\n muiInputBlur?: HTMLAttributes<HTMLInputElement>['onBlur'],\n ) => {\n if (skipNextSingleAutocompleteBlurRestoreRef.current) {\n skipNextSingleAutocompleteBlurRestoreRef.current = false;\n return;\n }\n\n muiInputBlur?.(event);\n onSingleAutocompleteHtmlInputBlur?.(event);\n restoreSingleAutocompleteInputDisplayValue();\n };\n\n const singleAutocompleteSlotProps = {\n ...autocompleteSlotProps,\n clearIndicator: {\n ...autocompleteSlotProps.clearIndicator,\n onClick: handleSingleAutocompleteClearClick,\n onMouseDown: handleSingleAutocompleteClearMouseDown,\n },\n } as const;\n\n if (!multiple && shouldUseVirtualizedSingleAutocomplete) {\n return (\n <OwpVirtualizedSingleSelectorAutocomplete\n autocompleteInputValue={autocompleteInputValue}\n autocompleteSx={autocompleteSx}\n className={className}\n disableClientFilter={disableClientFilter}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n loading={loading}\n loadingText={resolvedLoadingText}\n noOptionsText={resolvedNoOptionsText}\n onAutocompleteInputChange={onAutocompleteInputChange}\n options={options}\n placeholder={placeholder}\n required={required}\n resolvedTextFieldVariant={resolvedTextFieldVariant}\n selectSingleValue={selectSingleValue}\n selectedOption={selectedOption}\n showAllOption={showAllOption}\n singleAutocompleteInputSx={singleAutocompleteInputSx}\n textFieldProps={textFieldProps}\n />\n );\n }\n\n if (multiple) {\n return (\n <>\n <Autocomplete\n ref={autocompleteRootRef as MutableRefObject<HTMLDivElement | null>}\n className={clsx('min-w-128', className)}\n disableCloseOnSelect\n disabled={disabled}\n filterOptions={disableClientFilter ? (nextOptions) => nextOptions : undefined}\n fullWidth={fullWidth}\n inputValue={autocompleteInputValue}\n loading={loading}\n multiple\n options={options}\n clearText=\"\"\n closeText=\"\"\n clearIcon={<ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />}\n openText=\"\"\n popupIcon={<ArrowDropDownIcon />}\n sx={multipleAutocompleteSx}\n value={selectedOptions}\n getOptionLabel={(option) => getAutocompleteOptionLabel(option.label)}\n getOptionKey={(option) => option.value}\n isOptionEqualToValue={(option, selected) => option.value === selected.value}\n loadingText={resolvedLoadingText}\n noOptionsText={resolvedNoOptionsText}\n onChange={(\n _event: SyntheticEvent,\n nextOptions: OwpSelectorBaseOption[],\n reason: string,\n details,\n ) => {\n const currentInputValue =\n _event.type === 'keydown'\n ? getCurrentAutocompleteInputValue(\n _event as SelectorAutocompleteKeyDownEvent,\n autocompleteInputValue,\n )\n : (autocompleteInputValue ?? '');\n\n if (\n reason === 'removeOption' &&\n _event.type === 'keydown' &&\n currentInputValue === '' &&\n (isAllSelected || hiddenSelectedOptionCount > 0)\n ) {\n _event.preventDefault();\n _event.stopPropagation();\n return;\n }\n\n if (reason === 'clear') {\n if (shouldRestoreAllOnClearRef.current) {\n selectAll();\n return;\n }\n\n clearSelection();\n return;\n }\n\n if (showAllOption && details?.option && isSelectorAllOption(details.option)) {\n if (isAllSelected) {\n clearSelection();\n return;\n }\n\n selectAll();\n return;\n }\n\n selectMultipleValues(\n nextOptions\n .filter((option) => !isSelectorAllOption(option))\n .map((option) => option.value),\n );\n }}\n onInputChange={(_event, nextInputValue, reason) => {\n onAutocompleteInputChange?.(nextInputValue, reason);\n }}\n onKeyDown={handleMultipleRootKeyDown}\n slotProps={autocompleteSlotProps}\n renderInput={(params) => (\n <TextField\n {...params}\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder ?? t('Common.검색')}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n input: {\n ...params.InputProps,\n ...textFieldProps?.slotProps?.input,\n endAdornment: (\n <>\n {loading ? (\n <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} />\n ) : null}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n )}\n renderOption={(optionProps, option, state) => {\n const { key, ...restOptionProps } = optionProps;\n\n return (\n <li key={key} {...restOptionProps}>\n <Checkbox checked={state.selected} className=\"!mr-8 !p-0\" size=\"small\" />\n {renderAutocompleteOptionLabel(option)}\n </li>\n );\n }}\n renderValue={(nextSelectedOptions, getItemProps) => {\n if (showAllOption && isAllSelected) {\n return [\n <Box\n component=\"span\"\n key={allOption.value}\n sx={SELECTOR_ALL_VALUE_LABEL_SX}\n >\n {allOption.label}\n </Box>,\n ];\n }\n\n const visibleSelectedOptions = nextSelectedOptions\n .filter((option) => !isSelectorAllOption(option))\n .slice(0, MULTIPLE_VISIBLE_CHIP_COUNT);\n\n return [\n ...visibleSelectedOptions.map((option, index) => {\n const { key, ...itemProps } = getItemProps({ index });\n\n return (\n <Chip\n {...itemProps}\n key={key}\n label={option.label}\n size=\"small\"\n sx={{ borderRadius: 1, mr: 0.5 }}\n />\n );\n }),\n ...(hiddenSelectedOptionCount > 0\n ? [\n <Chip\n key=\"owp-selector-hidden-chip-summary\"\n clickable\n label={`+${hiddenSelectedOptionCount}`}\n onClick={handleHiddenChipSummaryClick}\n onMouseDown={handleHiddenChipSummaryMouseDown}\n size=\"small\"\n sx={(theme) => ({\n backgroundColor: alpha(theme.palette.primary.main, 0.14),\n border: `1px solid ${alpha(theme.palette.primary.main, 0.22)}`,\n borderRadius: 1,\n color: theme.palette.primary.dark,\n fontWeight: 600,\n mr: 0.5,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.2),\n },\n })}\n />,\n ]\n : []),\n ];\n }}\n />\n <Popper\n anchorEl={hiddenChipAnchorEl}\n open={Boolean(hiddenChipAnchorEl) && hiddenSelectedOptionCount > 0}\n placement=\"bottom-start\"\n sx={{ zIndex: (theme) => theme.zIndex.modal }}\n >\n <ClickAwayListener onClickAway={handleHiddenChipPopperClose}>\n <Paper\n className=\"mt-4\"\n sx={{\n border: (theme) => `1px solid ${alpha(theme.palette.common.black, 0.12)}`,\n display: 'flex',\n flexWrap: 'wrap',\n gap: 0.75,\n maxWidth: 280,\n p: 1,\n }}\n >\n {hiddenSelectedOptions.map((option) => (\n <Chip\n key={option.value}\n label={option.label}\n onDelete={() => handleHiddenChipDelete(option.value)}\n size=\"small\"\n sx={{ borderRadius: 1 }}\n />\n ))}\n </Paper>\n </ClickAwayListener>\n </Popper>\n </>\n );\n }\n\n return (\n <Autocomplete\n className={clsx('min-w-128', className)}\n disabled={disabled}\n filterOptions={disableClientFilter ? (nextOptions) => nextOptions : undefined}\n fullWidth={fullWidth}\n inputValue={resolvedSingleAutocompleteInputValue}\n loading={loading}\n options={options}\n clearText=\"\"\n closeText=\"\"\n clearIcon={<ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />}\n openText=\"\"\n popupIcon={<ArrowDropDownIcon />}\n sx={autocompleteSx}\n value={selectedOption}\n getOptionLabel={(option) => getAutocompleteOptionLabel(option.label)}\n getOptionKey={(option) => option.value}\n isOptionEqualToValue={(option, selected) => option.value === selected.value}\n loadingText={resolvedLoadingText}\n noOptionsText={resolvedNoOptionsText}\n onChange={(_event: SyntheticEvent, nextOption, reason) => {\n if (reason === 'clear' || reason === 'removeOption') {\n clearSingleAutocompleteInputDisplayValue(reason, false);\n return;\n }\n\n singleAutocompleteHasPendingInputEditRef.current = false;\n\n if (!nextOption || (showAllOption && isSelectorAllOption(nextOption))) {\n setSingleAutocompleteInputDisplayValue(\n nextOption ? getAutocompleteOptionLabel(nextOption.label) : '',\n );\n selectSingleValue('');\n return;\n }\n\n setSingleAutocompleteInputDisplayValue(getAutocompleteOptionLabel(nextOption.label));\n selectSingleValue(nextOption.value);\n }}\n onInputChange={(_event, nextInputValue, reason) => {\n if (\n shouldIgnorePendingAutocompleteInputReset(\n singleAutocompleteHasPendingInputEditRef.current,\n reason,\n )\n ) {\n setSingleAutocompleteInputDisplayValue('');\n return;\n }\n\n if (reason === 'input' || reason === 'clear') {\n singleAutocompleteHasPendingInputEditRef.current = true;\n }\n\n setSingleAutocompleteInputDisplayValue(nextInputValue);\n onAutocompleteInputChange?.(nextInputValue, reason);\n }}\n slotProps={singleAutocompleteSlotProps}\n renderInput={(params) => (\n <TextField\n {...params}\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n htmlInput: {\n ...params.inputProps,\n ...restSingleAutocompleteHtmlInputSlotProps,\n className: clsx(\n params.inputProps.className,\n singleAutocompleteHtmlInputClassName,\n ),\n onBlur: (event: ReactFocusEvent<HTMLInputElement>) => {\n handleSingleAutocompleteInputBlur(event, params.inputProps.onBlur);\n },\n onKeyDown: handleSingleAutocompleteInputKeyDown,\n },\n input: {\n ...params.InputProps,\n ...textFieldProps?.slotProps?.input,\n sx: {\n ...(singleAutocompleteInputSx ?? {}),\n ...((params.InputProps as { sx?: object }).sx ?? {}),\n ...((textFieldProps?.slotProps?.input as { sx?: object } | undefined)?.sx ?? {}),\n },\n endAdornment: (\n <>\n {loading ? (\n <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} />\n ) : null}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n )}\n selectOnFocus\n renderOption={(optionProps, option) => {\n const { key, ...restOptionProps } = optionProps;\n\n return (\n <li key={key} {...restOptionProps}>\n {renderAutocompleteOptionLabel(option)}\n </li>\n );\n }}\n />\n );\n};\n"],"names":["MULTIPLE_VISIBLE_CHIP_COUNT","AUTOCOMPLETE_MIN_WIDTH","MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH","SELECTOR_CLEAR_ICON_FONT_SIZE","STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT","OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT","OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT","AUTOCOMPLETE_VIRTUALIZATION_THRESHOLD","AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT","AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING","AUTOCOMPLETE_VIRTUALIZED_VISIBLE_ITEM_COUNT","AUTOCOMPLETE_VIRTUALIZED_OVERSCAN_ITEM_COUNT","AUTOCOMPLETE_POPUP_INDICATOR_WIDTH","AUTOCOMPLETE_CLEAR_INDICATOR_WIDTH","AUTOCOMPLETE_SEARCH_DIACRITICS_REGEX","assignAutocompleteListboxRef","__name","forwardedRef","node","getVirtualizedOptionIndexes","optionCount","visibleStartIndex","visibleEndIndex","selectedOptionIndex","indexSet","addIndex","index","leftIndex","rightIndex","getVirtualizedAutocompleteListboxSx","height","theme","alpha","OwpVirtualizedAutocompleteOptionList","getListboxProps","getOptionProps","options","selectedOption","listboxProps","forwardedListboxRef","style","restListboxProps","listboxRef","useRef","startIndex","setStartIndex","useState","useMemo","renderedOptionIndexes","listboxHeight","handleRef","useCallback","handleScroll","event","nextStartIndex","previousStartIndex","useEffect","jsx","Box","optionIndex","option","optionProps","key","restOptionProps","optionTop","clsx","getCurrentAutocompleteInputValue","fallbackValue","eventTarget","getAutocompleteOptionLabel","label","normalizeAutocompleteSearchText","text","shouldIgnorePendingAutocompleteInputReset","hasPendingInputEdit","reason","focusAutocompleteInputFromClearElement","element","inputElement","_a","renderAutocompleteOptionLabel","isSelectorAllOption","SELECTOR_ALL_OPTION_LABEL_SX","OwpVirtualizedSingleSelectorAutocomplete","autocompleteInputValue","autocompleteSx","className","disableClientFilter","disabled","error","fullWidth","helperText","loading","loadingText","noOptionsText","onAutocompleteInputChange","placeholder","required","resolvedTextFieldVariant","selectSingleValue","showAllOption","singleAutocompleteInputSx","textFieldProps","isAutocompleteInputValueControlled","hasPendingAutocompleteInputEditRef","skipNextAutocompleteBlurRestoreRef","uncontrolledAutocompleteInputValue","setUncontrolledAutocompleteInputValue","resolvedAutocompleteInputValue","normalizedOptionLabelMap","setAutocompleteInputDisplayValue","nextInputValue","clearAutocompleteInputDisplayValue","restoreAutocompleteInputDisplayValue","restoredInputValue","filterOptions","nextOptions","state","inputValue","filteredOptions","anchorEl","dirty","getClearProps","getInputLabelProps","getInputProps","getPopupIndicatorProps","getRootProps","groupedOptions","popupOpen","setAnchorEl","useAutocomplete","selected","_event","nextOption","rootProps","inputProps","inputLabelProps","clearProps","popupIndicatorProps","shouldShowClearIndicator","htmlInputSlotProps","htmlInputClassName","onHtmlInputBlur","onHtmlInputKeyDown","restHtmlInputSlotProps","inputSlotClassName","_c","_b","setAutocompleteAnchorEl","handleClearClick","handleClearMouseDown","handleInputKeyDown","currentInputValue","selectedOptionLabel","hasSelectedInputText","handleInputBlur","jsxs","TextField","_d","_f","_e","CircularProgress","IconButton","ClearIcon","ArrowDropDownIcon","_g","Popper","Paper","OwpSelectorAutocomplete","hookResult","props","t","useOwpTranslation","autocompleteVirtualizationThreshold","multiple","valueTextAlign","allOption","clearSelection","isAllSelected","resolvedOptions","restoreAllSelection","selectAll","selectedOptions","selectMultipleValues","resolvedAutocompleteVirtualizationThreshold","shouldUseVirtualizedSingleAutocomplete","filteredSelectedOptions","hiddenSelectedOptions","hiddenSelectedOptionCount","hiddenChipAnchorEl","setHiddenChipAnchorEl","autocompleteRootRef","resolvedNoOptionsText","resolvedLoadingText","shouldRestoreAllOnClearRef","autocompleteSlotProps","singleAutocompleteInputPaddingLeft","multipleAutocompleteSx","isSingleAutocompleteInputValueControlled","singleAutocompleteHasPendingInputEditRef","skipNextSingleAutocompleteBlurRestoreRef","singleAutocompleteInputValue","setSingleAutocompleteInputValue","resolvedSingleAutocompleteInputValue","singleAutocompleteHtmlInputSlotProps","singleAutocompleteHtmlInputClassName","onSingleAutocompleteHtmlInputBlur","onSingleAutocompleteHtmlInputKeyDown","restSingleAutocompleteHtmlInputSlotProps","setSingleAutocompleteInputDisplayValue","clearSingleAutocompleteInputDisplayValue","shouldNotifyInputChange","restoreSingleAutocompleteInputDisplayValue","formElement","handleFormReset","handleHiddenChipPopperClose","handleHiddenChipSummaryMouseDown","handleHiddenChipSummaryClick","previousAnchorElement","handleHiddenChipDelete","optionValue","handleMultipleRootKeyDown","handleSingleAutocompleteClearMouseDown","handleSingleAutocompleteClearClick","handleSingleAutocompleteInputKeyDown","handleSingleAutocompleteInputBlur","muiInputBlur","singleAutocompleteSlotProps","Fragment","Autocomplete","details","params","Checkbox","nextSelectedOptions","getItemProps","SELECTOR_ALL_VALUE_LABEL_SX","itemProps","createElement","Chip","ClickAwayListener"],"mappings":";;;;;;;;;;;;;;AAmDA,MAAMA,KAA8B,GAC9BC,KAAyB,KACzBC,KAAwC,IACxCC,KAAgC,OAChCC,KAA2C,mBAC3CC,KAA2C,kBAC3CC,KAAiD,kBACjDC,KAAwC,KACxCC,KAAuC,IACvCC,KAA2C,GAC3CC,KAA8C,GAC9CC,KAA+C,GAC/CC,KAAqC,IACrCC,KAAqC,IACrCC,KAAuC,oBAkDvCC,KAA+B,gBAAAC,EAAA,CACnCC,GACAC,MACG;AACH,MAAI,OAAOD,KAAiB,YAAY;AACtC,IAAAA,EAAaC,CAAI;AACjB;AAAA,EACF;AAEA,EAAID,MACFA,EAAa,UAAUC;AAE3B,GAZqC,iCAqB/BC,KAA8B,gBAAAH,EAAA,CAClCI,GACAC,GACAC,GACAC,MACG;AACH,QAAMC,wBAAe,IAAA,GACfC,IAAW,gBAAAT,EAAA,CAACU,MAAkB;AAClC,IAAIA,KAAS,KAAKA,IAAQN,KACxBI,EAAS,IAAIE,CAAK;AAAA,EAEtB,GAJiB;AAMjB,EAAAD,EAAS,CAAC,GACVA,EAASL,IAAc,CAAC,GACxBK,EAASF,CAAmB;AAE5B,WAASG,IAAQL,GAAmBK,IAAQJ,GAAiBI,KAAS;AACpE,IAAAD,EAASC,CAAK;AAGhB,SAAO,MAAM,KAAKF,CAAQ,EAAE,KAAK,CAACG,GAAWC,MAAeD,IAAYC,CAAU;AACpF,GAtBoC,gCA4B9BC,KAAsC,gBAAAb,EAAA,CAACc,MAAsC;AAAA,EACjF;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,GAAIA,IAAS,EAAE,QAAAA,EAAA,IAAW,CAAA;AAAA,IAC1B,6BAA6B;AAAA,MAC3B,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,MACV,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,yBAAyB;AAAA,MACzB,4BAA4B;AAAA,QAC1B,WAAW;AAAA,MAAA;AAAA,MAEb,iBAAiB;AAAA,QACf,iBAAiB,gBAAAd,EAAA,CAACe,MAAUA,EAAM,QAAQ,OAAO,OAAhC;AAAA,QACjB,wBAAwB;AAAA,UACtB,iBAAiB;AAAA,QAAA;AAAA,MACnB;AAAA,MAEF,sBAAsB;AAAA,QACpB,iBAAiB,gBAAAf,EAAA,CAACe,MAAUA,EAAM,QAAQ,OAAO,OAAhC;AAAA,MAAgC;AAAA,MAEnD,2BAA2B;AAAA,QACzB,SAAS,gBAAAf,EAAA,CAACe,MAAUA,EAAM,QAAQ,OAAO,iBAAhC;AAAA,QACT,eAAe;AAAA,MAAA;AAAA,MAEjB,2BAA2B;AAAA,QACzB,iBAAiB,gBAAAf,EAAA,CAACe,MAChBC,EAAMD,EAAM,QAAQ,QAAQ,MAAMA,EAAM,QAAQ,OAAO,eAAe,GADvD;AAAA,QAEjB,iBAAiB;AAAA,UACf,iBAAiB,gBAAAf,EAAA,CAACe,MAChBC;AAAA,YACED,EAAM,QAAQ,QAAQ;AAAA,YACtBA,EAAM,QAAQ,OAAO,kBAAkBA,EAAM,QAAQ,OAAO;AAAA,UAAA,GAH/C;AAAA,UAKjB,wBAAwB;AAAA,YACtB,iBAAiB,gBAAAf,EAAA,CAACe,MAAUA,EAAM,QAAQ,OAAO,UAAhC;AAAA,UAAgC;AAAA,QACnD;AAAA,QAEF,sBAAsB;AAAA,UACpB,iBAAiB,gBAAAf,EAAA,CAACe,MAChBC;AAAA,YACED,EAAM,QAAQ,QAAQ;AAAA,YACtBA,EAAM,QAAQ,OAAO,kBAAkBA,EAAM,QAAQ,OAAO;AAAA,UAAA,GAH/C;AAAA,QAIf;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEJ,GA9D4C,wCAoEtCE,KAAuC,gBAAAjB,EAAA,CAAC;AAAA,EAC5C,iBAAAkB;AAAA,EACA,gBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,gBAAAC;AACF,MAAiD;AAC/C,QAAMC,IAAeJ,EAAA,GAGf,EAAE,KAAKK,GAAqB,OAAAC,GAAO,GAAGC,MAAqBH,GAC3DI,IAAaC,EAA2B,IAAI,GAC5C,CAACC,GAAYC,CAAa,IAAIC,GAAS,CAAC,GACxC1B,IAAcgB,EAAQ,QACtBf,IAAoB,KAAK,IAAI,GAAG,KAAK,IAAIuB,GAAY,KAAK,IAAIxB,IAAc,GAAG,CAAC,CAAC,CAAC,GAClFE,IAAkB,KAAK;AAAA,IAC3BF;AAAA,IACAC,IACEX,KACAC,KAA+C;AAAA,EAAA,GAE7CY,IAAsBwB,GAAQ,MAAM;AACxC,QAAI,CAACV;AACH,aAAO;AAGT,aAASX,IAAQ,GAAGA,IAAQN,GAAaM,KAAS;AAChD,UAAIU,EAAQV,CAAK,EAAE,UAAUW,EAAe;AAC1C,eAAOX;AAIX,WAAO;AAAA,EACT,GAAG,CAACN,GAAagB,GAASC,CAAc,CAAC,GACnCW,KAAwBD;AAAA,IAC5B,MACE5B;AAAA,MACEC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAAA,IAEJ,CAACH,GAAaG,GAAqBD,GAAiBD,CAAiB;AAAA,EAAA,GAEjE4B,IACJ,KAAK,IAAI7B,GAAaV,EAA2C,IAC/DF,KACFC,KAA2C,GAEvCyC,IAAYC;AAAA,IAChB,CAACjC,MAA6B;AAC5B,MAAAwB,EAAW,UAAUxB,GACrBH,GAA6BwB,GAAqBrB,CAAI;AAAA,IACxD;AAAA,IACA,CAACqB,CAAmB;AAAA,EAAA,GAGhBa,IAAe,gBAAApC,EAAA,CAACqC,MAAqC;AACzD,UAAMC,IAAiB,KAAK;AAAA,MAC1B;AAAA,MACA,KAAK;AAAA,SACFD,EAAM,cAAc,YAAY5C,MAC/BD;AAAA,MAAA,IACAG;AAAA,IAAA;AAGN,IAAAkC;AAAA,MAAc,CAACU,MACbA,MAAuBD,IAAiBC,IAAqBD;AAAA,IAAA;AAAA,EAEjE,GAZqB;AAcrB,SAAAE,GAAU,MAAM;AACd,IAAAX,EAAc,CAAC,GAEXH,EAAW,YACbA,EAAW,QAAQ,YAAY;AAAA,EAEnC,GAAG,CAACtB,CAAW,CAAC,GAGd,gBAAAqC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACT,GAAGjB;AAAA,MACJ,KAAKS;AAAA,MACL,UAAUE;AAAA,MACV,OAAAZ;AAAA,MACA,IAAIX,GAAoCoB,CAAa;AAAA,MAErD,UAAA,gBAAAQ;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,IAAI;AAAA,YACF,QACEtC,IAAcZ,KACdC,KAA2C;AAAA,YAC7C,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,UAAU;AAAA,UAAA;AAAA,UAGX,UAAAuC,GAAsB,IAAI,CAACW,MAAgB;AAC1C,kBAAMC,IAASxB,EAAQuB,CAAW,GAC5BE,IAAc1B,EAAe,EAAE,QAAAyB,GAAQ,OAAOD,GAAa,GAC3D,EAAE,KAAAG,GAAK,GAAGC,EAAA,IAAoBF,GAC9BG,IACJvD,KACAkD,IAAcnD;AAEhB,mBACE,gBAAAiD;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEE,GAAGM;AAAA,gBACJ,WAAWE,EAAK,0BAA0BF,EAAgB,SAAS;AAAA,gBACnE,OAAO;AAAA,kBACL,GAAGA,EAAgB;AAAA,kBACnB,QAAQvD;AAAA,kBACR,MAAM;AAAA,kBACN,WAAWA;AAAA,kBACX,UAAU;AAAA,kBACV,OAAO;AAAA,kBACP,KAAKwD;AAAA,gBAAA;AAAA,gBAGN,aAA8BJ,CAAM;AAAA,cAAA;AAAA,cAbhCE;AAAA,YAAA;AAAA,UAgBX,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN,GAjI6C,yCAwIvCI,KAAmC,gBAAAlD,EAAA,CACvCqC,GACAc,MACG;AACH,QAAMC,IAAcf,EAAM;AAE1B,SAAIe,aAAuB,mBAClBA,EAAY,QAGdD,KAAiB;AAC1B,GAXyC,qCAiBnCE,IAA6B,gBAAArD,EAAA,CAACsD,MAC3B,OAAOA,KAAU,YAAY,OAAOA,KAAU,WAAW,GAAGA,CAAK,KAAK,IAD5C,+BAQ7BC,KAAkC,gBAAAvD,EAAA,CAACwD,MACvCA,EAAK,UAAU,KAAK,EAAE,QAAQ1D,IAAsC,EAAE,EAAE,YAAA,GADlC,oCAQlC2D,KAA4C,gBAAAzD,EAAA,CAChD0D,GACAC,MACGD,KAAuBC,MAAW,SAHW,8CAS5CC,KAAyC,gBAAA5D,EAAA,CAAC6D,MAAyB;;AACvE,QAAMC,KAAeC,IAAAF,EAClB,QAAQ,uBAAuB,MADb,gBAAAE,EAEjB,cAAgC;AAEpC,EAAKD,KAIL,OAAO,sBAAsB,MAAM;AACjC,IAAAA,EAAa,MAAA,GACbA,EAAa,kBAAkBA,EAAa,MAAM,QAAQA,EAAa,MAAM,MAAM;AAAA,EACrF,CAAC;AACH,GAb+C,2CAmBzCE,KAAgC,gBAAAhE,EAAA,CAAC4C,MACrC,gBAAAH;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,WAAU;AAAA,IACV,IAAIuB,EAAoBrB,CAAM,IAAIsB,KAA+B;AAAA,IAEhE,UAAAtB,EAAO;AAAA,EAAA;AACV,GANoC,kCAahCuB,KAA2C,gBAAAnE,EAAA,CAAC;AAAA,EAChD,wBAAAoE;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,OAAArB;AAAA,EACA,SAAAsB;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,SAAA3D;AAAA,EACA,aAAA4D;AAAA,EACA,UAAAC;AAAA,EACA,0BAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,gBAAA9D;AAAA,EACA,eAAA+D;AAAA,EACA,2BAAAC;AAAA,EACA,gBAAAC;AACF,MAAqD;;AACnD,QAAMC,IAAqCnB,MAA2B,QAChEoB,IAAqC7D,EAAO,EAAK,GACjD8D,IAAqC9D,EAAO,EAAK,GACjD,CAAC+D,IAAoCC,EAAqC,IAAI7D;AAAA,IAClF,MAAOT,IAAiBgC,EAA2BhC,EAAe,KAAK,IAAI;AAAA,EAAA,GAEvEuE,KAAiCL,IACnCnB,IACAsB,IACEG,IAA2B9D;AAAA,IAC/B,MACE,IAAI;AAAA,MACFX,EAAQ,IAAI,CAACwB,MAAW;AAAA,QACtBA,EAAO;AAAA,QACPW,GAAgCF,EAA2BT,EAAO,KAAK,CAAC;AAAA,MAAA,CACzE;AAAA,IAAA;AAAA,IAEL,CAACxB,CAAO;AAAA,EAAA,GAEJ0E,IAAmC3D;AAAA,IACvC,CAAC4D,MAA2B;AAC1B,MAAKR,KACHI,GAAsCI,CAAc;AAAA,IAExD;AAAA,IACA,CAACR,CAAkC;AAAA,EAAA,GAE/BS,IAAqC7D,EAAY,CAACwB,MAAmB;AACzE,IAAA6B,EAAmC,UAAU,IAC7CM,EAAiC,EAAE,GACnCf,KAAA,QAAAA,EAA4B,IAAIpB;AAAA,EAClC,GAAG,CAACoB,GAA2Be,CAAgC,CAAC,GAC1DG,IAAuC9D,EAAY,MAAM;AAC7D,UAAM+D,IAAqB7E,IAAiBgC,EAA2BhC,EAAe,KAAK,IAAI;AAE/F,IAAAmE,EAAmC,UAAU,IAC7CM,EAAiCI,CAAkB,GACnDnB,KAAA,QAAAA,EAA4BmB,GAAoB;AAAA,EAClD,GAAG,CAACnB,GAA2B1D,GAAgByE,CAAgC,CAAC,GAC1EK,IAAgBhE;AAAA,IACpB,CACEiE,GACAC,MACG;;AACH,UAAI9B;AACF,eAAO6B;AAGT,YAAME,IAAa/C,GAAgC8C,EAAM,UAAU;AAEnE,UAAI,CAACC;AACH,eAAOF;AAGT,YAAMG,KAA2C,CAAA;AAEjD,iBAAW3D,MAAUwD;AACnB,SAAIrC,KAAA8B,EAAyB,IAAIjD,GAAO,KAAK,MAAzC,QAAAmB,GAA4C,SAASuC,MACvDC,GAAgB,KAAK3D,EAAM;AAI/B,aAAO2D;AAAA,IACT;AAAA,IACA,CAAChC,GAAqBsB,CAAwB;AAAA,EAAA,GAE1C;AAAA,IACJ,UAAAW;AAAA,IACA,OAAAC;AAAA,IACA,eAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAA1F;AAAA,IACA,gBAAAC;AAAA,IACA,wBAAA0F;AAAA,IACA,cAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,IACEC,GAA4D;AAAA,IAC9D,eAAe;AAAA,IACf,UAAA1C;AAAA,IACA,eAAA2B;AAAA,IACA,cAAc,gBAAAnG,EAAA,CAAC4C,MAAWA,EAAO,OAAnB;AAAA,IACd,gBAAgB,gBAAA5C,EAAA,CAAC4C,MAAWS,EAA2BT,EAAO,KAAK,GAAnD;AAAA,IAChB,YAAYgD;AAAA,IACZ,sBAAsB,gBAAA5F,EAAA,CAAC4C,GAAQuE,MAAavE,EAAO,UAAUuE,EAAS,OAAhD;AAAA,IACtB,UAAU,gBAAAnH,EAAA,CAACoH,GAAQC,GAAY1D,MAAW;AACxC,UAAIA,MAAW,WAAWA,MAAW,gBAAgB;AACnD,QAAAqC,EAAmCrC,CAAM;AACzC;AAAA,MACF;AAIA,UAFA6B,EAAmC,UAAU,IAEzC,CAAC6B,KAAejC,KAAiBnB,EAAoBoD,CAAU,GAAI;AACrE,QAAAvB;AAAA,UACEuB,IAAahE,EAA2BgE,EAAW,KAAK,IAAI;AAAA,QAAA,GAE9DlC,EAAkB,EAAE;AACpB;AAAA,MACF;AAEA,MAAAW,EAAiCzC,EAA2BgE,EAAW,KAAK,CAAC,GAC7ElC,EAAkBkC,EAAW,KAAK;AAAA,IACpC,GAlBU;AAAA,IAmBV,eAAe,gBAAArH,EAAA,CAACoH,GAAQrB,GAAgBpC,MAAW;AACjD,UACEF;AAAA,QACE+B,EAAmC;AAAA,QACnC7B;AAAA,MAAA,GAEF;AACA,QAAAmC,EAAiC,EAAE;AACnC;AAAA,MACF;AAEA,MAAInC,MAAW,YACb6B,EAAmC,UAAU,KAG/CM,EAAiCC,CAAc,GAC/ChB,KAAA,QAAAA,EAA4BgB,GAAgBpC;AAAA,IAC9C,GAjBe;AAAA,IAkBf,SAAAvC;AAAA,IACA,eAAe;AAAA,IACf,OAAOC;AAAA,EAAA,CACR,GACKiG,IAAYR,GAAA,GACZS,IAAaX,EAAA,GACbY,KAAkBb,GAAA,GAClBc,KAAaf,GAAA,GACbgB,KAAsBb,GAAA,GACtBc,IAA2BlB,MAAS,CAACjC,KAAYoB,OAAmC,IACpFgC,KAAqB7D,KAAAuB,KAAA,gBAAAA,EAAgB,cAAhB,gBAAAvB,GAA2B,WAGhD;AAAA,IACJ,WAAW8D;AAAA,IACX,QAAQC;AAAA,IACR,WAAWC;AAAA,IACX,GAAGC;AAAA,EAAA,IACDJ,KAAsB,CAAA,GACpBK,MACJC,MAAAC,KAAA7C,KAAA,gBAAAA,EAAgB,cAAhB,gBAAA6C,GAA2B,UAA3B,gBAAAD,GACC,WACGE,KAA0BjG;AAAA,IAC9B,CAACjC,MAA6B;AAC3B,MAAA+G,GAAuE/G,CAAI;AAAA,IAC9E;AAAA,IACA,CAAC+G,EAAW;AAAA,EAAA,GAERoB,KAAmB,gBAAArI,EAAA,CAACqC,MAA8C;AACtE,IAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA,GACNoD,EAAmC,UAAU,IAC7CO,EAAmC,OAAO,GAC1CpC,GAAuCvB,EAAM,aAAa;AAAA,EAC5D,GANyB,qBAOnBiG,KAAuB,gBAAAtI,EAAA,CAACqC,MAA8C;AAC1E,IAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA,GACNoD,EAAmC,UAAU;AAAA,EAC/C,GAJ6B,yBAKvB8C,KAAqB,gBAAAvI,EAAA,CAACqC,MAAgD;AAG1E,QAFA0F,MAAA,QAAAA,GAAqB1F,IAEjBA,EAAM,oBAAoBmC;AAC5B;AAGF,QAAInC,EAAM,QAAQ,YAAYA,EAAM,QAAQ,OAAO;AACjD,MAAA4D,EAAA;AACA;AAAA,IACF;AAMA,QAJI5D,EAAM,QAAQ,eAAeA,EAAM,QAAQ,YAI3C,CAAChB;AACH;AAGF,UAAMmH,IAAoBnG,EAAM,cAAc,OACxCoG,IAAsBpF,EAA2BhC,EAAe,KAAK,GACrEqH,KACJrG,EAAM,cAAc,mBAAmBA,EAAM,cAAc;AAE7D,KACEmG,MAAsB,MACtBA,MAAsBC,KACtBC,QAEArG,EAAM,eAAA,GACLA,EAA2C,sBAAsB,IAClE2D,EAAmC,OAAO;AAAA,EAE9C,GAlC2B,uBAmCrB2C,IAAkB,gBAAA3I,EAAA,CAACqC,MAA6C;;AAIpE,SAHA0B,IAAAwD,EAAW,WAAX,QAAAxD,EAAA,KAAAwD,GAAoBlF,IACpByF,MAAA,QAAAA,GAAkBzF,IAEdoD,EAAmC,SAAS;AAC9C,MAAAA,EAAmC,UAAU;AAC7C;AAAA,IACF;AAEA,IAAAQ,EAAA;AAAA,EACF,GAVwB;AAYxB,SAAAzD,GAAU,MAAM;AACd,IAAI+C,KAIAC,EAAmC,WAIvCG;AAAA,MACEtE,IAAiBgC,EAA2BhC,EAAe,KAAK,IAAI;AAAA,IAAA;AAAA,EAExE,GAAG,CAACkE,GAAoClE,CAAc,CAAC,GAGrD,gBAAAuH;AAAA,IAAClG;AAAA,IAAA;AAAA,MACE,GAAG4E;AAAA,MACJ,WAAWrE;AAAA,QACT;AAAA,QACAyB,KAAa;AAAA,QACbsC,MAAa;AAAA,QACbW,KAA4B;AAAA,QAC5B;AAAA,QACArD;AAAA,MAAA;AAAA,MAEF,IACE;AAAA,QACED;AAAA,QACAK,IAAY,EAAE,OAAO,OAAA,IAAW;AAAA,QAChC;AAAA,UACE,gCAAgC;AAAA,YAC9B,cAAc,GACZ9E,MACC+H,IAA2B9H,KAAqC,EACnE;AAAA,YACA,UAAU;AAAA,UAAA;AAAA,UAEZ,uDAAuD;AAAA,YACrD,UAAU;AAAA,YACV,OAAO;AAAA,UAAA;AAAA,UAET,4BAA4B;AAAA,YAC1B,UAAU;AAAA,YACV,cAAc;AAAA,UAAA;AAAA,UAEhB,mCAAmC;AAAA,YACjC,YAAY;AAAA,YACZ,SAAS;AAAA,YACT,UAAU;AAAA,YACV,OAAOqF,MAA6B,aAAa,IAAI;AAAA,YACrD,KAAK;AAAA,YACL,WAAW;AAAA,UAAA;AAAA,UAEb,qCAAqC;AAAA,YACnC,aAAa;AAAA,YACb,SAAS;AAAA,YACT,YAAY;AAAA,UAAA;AAAA,UAEd,qCAAqC;AAAA,YACnC,aAAa;AAAA,YACb,SAAS;AAAA,UAAA;AAAA,UAEX,yCAAyC;AAAA,YACvC,WAAW;AAAA,UAAA;AAAA,QACb;AAAA,MACF;AAAA,MAIJ,UAAA;AAAA,QAAA,gBAAAzC;AAAA,UAACoG;AAAA,UAAA;AAAA,YACE,GAAGvD;AAAA,YACJ,UAAAd;AAAA,YACA,OAAAC;AAAA,YACA,WAAAC;AAAA,YACA,YAAAC;AAAA,YACA,OAAArB;AAAA,YACA,aAAA0B;AAAA,YACA,UAAAC;AAAA,YACA,WAAW;AAAA,cACT,GAAGK,KAAA,gBAAAA,EAAgB;AAAA,cACnB,WAAW;AAAA,gBACT,GAAGiC;AAAA,gBACH,GAAGS;AAAA,gBACH,WAAW/E;AAAA,kBACT;AAAA,kBACAsE,EAAW;AAAA,kBACXM;AAAA,gBAAA;AAAA,gBAEF,QAAQc;AAAA,gBACR,WAAWJ;AAAA,cAAA;AAAA,cAEb,OAAO;AAAA,gBACL,IAAGO,KAAAxD,KAAA,gBAAAA,EAAgB,cAAhB,gBAAAwD,GAA2B;AAAA,gBAC9B,KAAKV;AAAA,gBACL,WAAWnF,EAAK,6BAA6BgF,EAAkB;AAAA,gBAC/D,IAAI;AAAA,kBACF,GAAI5C,KAA6B,CAAA;AAAA,kBACjC,KAAK0D,MAAAC,KAAA1D,KAAA,gBAAAA,EAAgB,cAAhB,gBAAA0D,GAA2B,UAA3B,gBAAAD,GAAkE,OAAM,CAAA;AAAA,gBAAC;AAAA,gBAEhF,cACE,gBAAAH,EAAClG,GAAA,EAAI,WAAU,gCACZ,UAAA;AAAA,kBAAAkC,IAAU,gBAAAnC,EAACwG,IAAA,EAAiB,OAAM,WAAU,MAAM,IAAI,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG,IAAK;AAAA,kBAC5EtB,IACC,gBAAAlF;AAAA,oBAACyG;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAASb;AAAA,sBACT,aAAaC;AAAA,sBACb,MAAK;AAAA,sBACL,UAAUb,GAAW;AAAA,sBACrB,MAAK;AAAA,sBAEL,4BAAC0B,IAAA,EAAU,IAAI,EAAE,UAAUhK,KAA8B,CAAG;AAAA,oBAAA;AAAA,kBAAA,IAE5D;AAAA,kBACJ,gBAAAsD;AAAA,oBAACyG;AAAA,oBAAA;AAAA,sBACC,WAAWjG;AAAA,wBACT;AAAA,wBACA+D,MAAa;AAAA,sBAAA;AAAA,sBAEf,SAAS,gBAAAhH,EAAA,CAACqC,MAAA;;AAAU,gCAAA0B,IAAA2D,GAAoB,YAApB,gBAAA3D,EAAA,KAAA2D,IAA8BrF;AAAA,yBAAzC;AAAA,sBACT,MAAK;AAAA,sBACL,UAAAmC;AAAA,sBACA,UAAUkD,GAAoB;AAAA,sBAC9B,MAAK;AAAA,sBAEL,4BAAC0B,IAAA,CAAA,CAAkB;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACrB,EAAA,CACF;AAAA,cAAA;AAAA,cAGJ,YAAY;AAAA,gBACV,GAAG5B;AAAA,gBACH,IAAG6B,KAAA/D,KAAA,gBAAAA,EAAgB,cAAhB,gBAAA+D,GAA2B;AAAA,cAAA;AAAA,YAChC;AAAA,YAEF,SAASnE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEVsB,KACC,gBAAA/D;AAAA,UAAC6G;AAAA,UAAA;AAAA,YACC,UAAA9C;AAAA,YACA,MAAMQ;AAAA,YACN,WAAU;AAAA,YACV,OAAO,EAAE,OAAOR,GAAS,YAAA;AAAA,YACzB,IAAI,EAAE,QAAQ,MAAA;AAAA,YAEd,UAAA,gBAAAoC;AAAA,cAACW;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,gCAAgC;AAAA,oBAC9B,UAAU;AAAA,oBACV,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,YAAY;AAAA,kBAAA;AAAA,gBACd;AAAA,gBAGD,UAAA;AAAA,kBAAA3E,KAAWmC,EAAe,WAAW,IACpC,gBAAAtE,EAACC,GAAA,EAAI,IAAI,EAAE,UAAU,IAAI,IAAI,GAAG,IAAI,KAAK,YAAY,SAAA,GAClD,aACH,IACE;AAAA,kBACH,CAACkC,KAAWmC,EAAe,WAAW,IACrC,gBAAAtE;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,aAAa,gBAAA1C,EAAA,CAACqC,MAAU;AACtB,wBAAAA,EAAM,eAAA;AAAA,sBACR,GAFa;AAAA,sBAGb,MAAK;AAAA,sBAEJ,UAAAyC;AAAA,oBAAA;AAAA,kBAAA,IAED;AAAA,kBACHiC,EAAe,SAAS,IACvB,gBAAAtE;AAAA,oBAACxB;AAAA,oBAAA;AAAA,sBACC,iBAAAC;AAAA,sBACA,gBAAAC;AAAA,sBACA,SAAS4F;AAAA,sBACT,gBAAA1F;AAAA,oBAAA;AAAA,kBAAA,IAEA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACN;AAAA,QAAA,IAEA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV,GAnaiD,6CAyapCmI,KAA0B,gBAAAxJ,EAAA,CAAC,EAAE,YAAAyJ,GAAY,OAAAC,QAA0C;;AAC9F,QAAM,EAAE,GAAAC,EAAA,IAAMC,GAAA,GACR;AAAA,IACJ,wBAAAxF;AAAA,IACA,qCAAAyF;AAAA,IACA,WAAAvF;AAAA,IACA,qBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC;AAAA,IACA,YAAAC;AAAA,IACA,OAAArB;AAAA,IACA,SAAAsB;AAAA,IACA,aAAAC;AAAA,IACA,UAAAiF;AAAA,IACA,eAAAhF;AAAA,IACA,2BAAAC;AAAA,IACA,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAG,IAAgB;AAAA,IAChB,gBAAAE;AAAA,IACA,gBAAAyE;AAAA,EAAA,IACEL,GACE;AAAA,IACJ,WAAAM;AAAA,IACA,gBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAhJ;AAAA,IACA,iBAAAiJ;AAAA,IACA,sBAAAC;AAAA,IACA,mBAAApF;AAAA,EAAA,IACEsE,GACErI,IAAUW;AAAA,IACd,MAAOqD,IAAgB,CAAC4E,GAAW,GAAGG,EAAe,IAAIA;AAAA,IACzD,CAACH,GAAWG,IAAiB/E,CAAa;AAAA,EAAA,GAEtCoF,KACJX,MAAwC,KACpC,OAAO,oBACP,KAAK,IAAI,GAAGA,KAAuCtK,EAAqC,GACxFkL,KACJrJ,EAAQ,UAAUoJ,IACdE,KAA0B3I;AAAA,IAC9B,MAAMuI,EAAgB,OAAO,CAAC1H,MAAW,CAACqB,EAAoBrB,CAAM,CAAC;AAAA,IACrE,CAAC0H,CAAe;AAAA,EAAA,GAEZK,KAAwB5I;AAAA,IAC5B,MAAOmI,IAAgB,CAAA,IAAKQ,GAAwB,MAAM1L,EAA2B;AAAA,IACrF,CAAC0L,IAAyBR,CAAa;AAAA,EAAA,GAEnCU,IAA4BD,GAAsB,QAClD,CAACE,IAAoBC,EAAqB,IAAIhJ,GAA6B,IAAI,GAC/EiJ,KAAsBpJ,EAA8B,IAAI,GACxDqJ,KACJlG,MACA6E,EAAEpF,IAAsB,qBAAqB,uBAAuB,GAChE0G,IAAsBpG,KAAe8E,EAAE,gBAAgB,GACvDuB,KAA6BvJ;AAAA,IACjCmI,KACE1E,OACEsE,EAAM,SAASA,EAAM,iBAAiB,SAASA,EAAM,SAASA,EAAM,kBAAkB;AAAA,EAAA,GAEtFyB,KAAwB;AAAA,IAC5B,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,OAAO;AAAA,MACL,IAAI;AAAA,QACF,gCAAgC;AAAA,UAC9B,UAAU;AAAA,UACV,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,YAAY;AAAA,QAAA;AAAA,MACd;AAAA,IACF;AAAA,IAEF,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ,GAEIjG,KAA2BI,KAAA,gBAAAA,EAAgB,YAAW,YACtD8F,IACJlG,MAA6B,aACzB9F,KACA8F,MAA6B,cAC3BI,KAAA,gBAAAA,EAAgB,UAAS,UACvBhG,KACAD,KACF,QACFgG,KACJ+F,KAAsCrB,IAClC;AAAA,IACE,4BAA4B;AAAA,MAC1B,GAAIqB,IACA,EAAE,aAAaA,EAAA,IACf,CAAA;AAAA,MACJ,GAAIrB,IAAiB,EAAE,WAAWA,MAAmB,CAAA;AAAA,IAAC;AAAA,EACxD,IAEF,QACA1F,KAAiB;AAAA,IACrB,UAAUpF;AAAA,IACV,mCAAmC;AAAA,MACjC,uEAAuE;AAAA,QACrE,IAAI;AAAA,MAAA;AAAA,MAEN,yBAAyB;AAAA,QACvB,GAAG;AAAA,QACH,GAAG;AAAA,MAAA;AAAA,MAEL,iCAAiC;AAAA,QAC/B,IAAI;AAAA,MAAA;AAAA,MAEN,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,OAAO;AAAA,IAAA;AAAA,EACT,GAEIoM,KAAyB;AAAA,IAC7B,GAAGhH;AAAA,IACH,uDAAuD;AAAA,MACrD,WAAWnF;AAAA,MACX,UAAUA;AAAA,IAAA;AAAA,EACZ,GAEIoM,IAA2ClH,MAA2B,QACtEmH,IAA2C5J,EAAO,EAAK,GACvD6J,KAA2C7J,EAAO,EAAK,GACvD,CAAC8J,IAA8BC,EAA+B,IAAI5J;AAAA,IACtE,MAAOT,IAAiBgC,EAA2BhC,EAAe,KAAK,IAAI;AAAA,EAAA,GAEvEsK,KAAuCL,IACzClH,IACAqH,IACEG,MAAuC7H,KAAAuB,KAAA,gBAAAA,EAAgB,cAAhB,gBAAAvB,GAA2B,WAGlE;AAAA,IACJ,WAAW8H;AAAA,IACX,QAAQC;AAAA,IACR,WAAWC;AAAA,IACX,GAAGC;AAAA,EAAA,IACDJ,MAAwC,CAAA,GAEtCK,IAAyC9J;AAAA,IAC7C,CAAC4D,MAA2B;AAC1B,MAAKuF,KACHI,GAAgC3F,CAAc;AAAA,IAElD;AAAA,IACA,CAACuF,CAAwC;AAAA,EAAA,GAGrCY,KAA2C/J;AAAA,IAC/C,CAACwB,GAAgBwI,IAA0B,OAAS;AAClD,MAAAZ,EAAyC,UAAU,IACnDU,EAAuC,EAAE,GAErCE,MACFpH,KAAA,QAAAA,EAA4B,IAAIpB;AAAA,IAEpC;AAAA,IACA,CAACoB,GAA2BkH,CAAsC;AAAA,EAAA,GAG9DG,KAA6CjK,EAAY,MAAM;AACnE,UAAM+D,IAAqB7E,IAAiBgC,EAA2BhC,EAAe,KAAK,IAAI;AAE/F,IAAAkK,EAAyC,UAAU,IACnDU,EAAuC/F,CAAkB,GACzDnB,KAAA,QAAAA,EAA4BmB,GAAoB;AAAA,EAClD,GAAG,CAACnB,GAA2B1D,GAAgB4K,CAAsC,CAAC;AAEtF,EAAAzJ,GAAU,MAAM;AACd,IAAKoI,KACHE,GAAsB,IAAI;AAAA,EAE9B,GAAG,CAACF,CAAyB,CAAC,GAE9BpI,GAAU,MAAM;AACd,IAAIsH,KAAYwB,KAIZC,EAAyC,WAI7CG;AAAA,MACErK,IAAiBgC,EAA2BhC,EAAe,KAAK,IAAI;AAAA,IAAA;AAAA,EAExE,GAAG,CAACiK,GAA0CxB,GAAUzI,CAAc,CAAC,GAEvEmB,GAAU,MAAM;;AACd,QAAI,CAAC0I,GAA2B;AAC9B;AAGF,UAAMmB,KAActI,IAAAgH,GAAoB,YAApB,gBAAAhH,EAA6B,QAAQ;AAEzD,QAAI,CAACsI;AACH;AAGF,UAAMC,IAAkB,gBAAAtM,EAAA,MAAM;AAC5B,aAAO,WAAW,MAAM;AACtB,QAAAoK,GAAA;AAAA,MACF,GAAG,CAAC;AAAA,IACN,GAJwB;AAMxB,WAAAiC,EAAY,iBAAiB,SAASC,CAAe,GAE9C,MAAM;AACX,MAAAD,EAAY,oBAAoB,SAASC,CAAe;AAAA,IAC1D;AAAA,EACF,GAAG,CAAClC,EAAmB,CAAC;AAExB,QAAMmC,KAA8B,gBAAAvM,EAAA,MAAM;AACxC,IAAA8K,GAAsB,IAAI;AAAA,EAC5B,GAFoC,gCAI9B0B,KAAmC,gBAAAxM,EAAA,CAACqC,MAAwC;AAChF,IAAAA,EAAM,eAAA;AAAA,EACR,GAFyC,qCAInCoK,KAA+B,gBAAAzM,EAAA,CAACqC,MAAwC;AAC5E,IAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA,GAENyI;AAAA,MAAsB,CAAC4B,MACrBA,MAA0BrK,EAAM,gBAAgB,OAAOA,EAAM;AAAA,IAAA;AAAA,EAEjE,GAPqC,iCAS/BsK,KAAyB,gBAAA3M,EAAA,CAAC4M,MAAwB;AACtD,IAAArC;AAAA,MACEG,GACG,OAAO,CAAC9H,MAAWA,EAAO,UAAUgK,CAAW,EAC/C,IAAI,CAAChK,MAAWA,EAAO,KAAK;AAAA,IAAA;AAAA,EAEnC,GAN+B,2BAQzBiK,KAA4B,gBAAA7M,EAAA,CAACqC,MAA4C;;AAC7E,UAAMmG,IAAoBtF,GAAiCb,GAAO+B,CAAsB;AAExF,KACG8F,KAAiBU,IAA4B,MAC9CpC,MAAsB,OACrBnG,EAAM,QAAQ,eAAeA,EAAM,QAAQ,cAE5CA,EAAM,sBAAsB,IAC5BA,EAAM,eAAA,GACNA,EAAM,gBAAA,KAGR0B,IAAAuB,KAAA,gBAAAA,EAAgB,cAAhB,QAAAvB,EAAA;AAAA,MAAAuB;AAAA,MACEjD;AAAA;AAAA,EAEJ,GAhBkC,8BAkB5ByK,IAAyC,gBAAA9M,EAAA,CAACqC,MAA8C;AAC5F,IAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA,GACNmJ,GAAyC,UAAU;AAAA,EACrD,GAJ+C,2CAMzCuB,IAAqC,gBAAA/M,EAAA,CAACqC,MAA8C;AACxF,IAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA,GACNmJ,GAAyC,UAAU,IACnDU,GAAyC,OAAO,GAChDtI,GAAuCvB,EAAM,aAAa;AAAA,EAC5D,GAN2C,uCAQrC2K,IAAuC,gBAAAhN,EAAA,CAC3CqC,MACG;AAGH,QAFA0J,MAAA,QAAAA,GAAuC1J,IAEnCA,EAAM,oBAAoBmC;AAC5B;AAGF,QAAInC,EAAM,QAAQ,YAAYA,EAAM,QAAQ,OAAO;AACjD,MAAA+J,GAAA;AACA;AAAA,IACF;AAMA,QAJI/J,EAAM,QAAQ,eAAeA,EAAM,QAAQ,YAI3C,CAAChB;AACH;AAGF,UAAMmH,IAAoBnG,EAAM,cAAc,OACxCoG,IAAsBpF,EAA2BhC,EAAe,KAAK,GACrEqH,IACJrG,EAAM,cAAc,mBAAmBA,EAAM,cAAc;AAE7D,KACEmG,MAAsB,MACtBA,MAAsBC,KACtBC,OAEArG,EAAM,eAAA,GACLA,EAA2C,sBAAsB,IAClE6J,GAAyC,OAAO;AAAA,EAEpD,GApC6C,yCAsCvCe,KAAoC,gBAAAjN,EAAA,CACxCqC,GACA6K,MACG;AACH,QAAI1B,GAAyC,SAAS;AACpD,MAAAA,GAAyC,UAAU;AACnD;AAAA,IACF;AAEA,IAAA0B,KAAA,QAAAA,EAAe7K,IACfyJ,MAAA,QAAAA,GAAoCzJ,IACpC+J,GAAA;AAAA,EACF,GAZ0C,sCAcpCe,KAA8B;AAAA,IAClC,GAAGhC;AAAA,IACH,gBAAgB;AAAA,MACd,GAAGA,GAAsB;AAAA,MACzB,SAAS4B;AAAA,MACT,aAAaD;AAAA,IAAA;AAAA,EACf;AAGF,SAAI,CAAChD,KAAYW,KAEb,gBAAAhI;AAAA,IAAC0B;AAAA,IAAA;AAAA,MACC,wBAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,WAAAC;AAAA,MACA,qBAAAC;AAAA,MACA,UAAAC;AAAA,MACA,OAAAC;AAAA,MACA,WAAAC;AAAA,MACA,YAAAC;AAAA,MACA,OAAArB;AAAA,MACA,SAAAsB;AAAA,MACA,aAAaqG;AAAA,MACb,eAAeD;AAAA,MACf,2BAAAjG;AAAA,MACA,SAAA3D;AAAA,MACA,aAAA4D;AAAA,MACA,UAAAC;AAAA,MACA,0BAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,gBAAA9D;AAAA,MACA,eAAA+D;AAAA,MACA,2BAAAC;AAAA,MACA,gBAAAC;AAAA,IAAA;AAAA,EAAA,IAKFwE,IAEA,gBAAAlB,EAAAwE,IAAA,EACE,UAAA;AAAA,IAAA,gBAAA3K;AAAA,MAAC4K;AAAA,MAAA;AAAA,QACC,KAAKtC;AAAA,QACL,WAAW9H,EAAK,aAAaqB,CAAS;AAAA,QACtC,sBAAoB;AAAA,QACpB,UAAAE;AAAA,QACA,eAAeD,IAAsB,CAAC6B,MAAgBA,IAAc;AAAA,QACpE,WAAA1B;AAAA,QACA,YAAYN;AAAA,QACZ,SAAAQ;AAAA,QACA,UAAQ;AAAA,QACR,SAAAxD;AAAA,QACA,WAAU;AAAA,QACV,WAAU;AAAA,QACV,WAAW,gBAAAqB,EAAC0G,IAAA,EAAU,IAAI,EAAE,UAAUhK,MAAiC;AAAA,QACvE,UAAS;AAAA,QACT,6BAAYiK,IAAA,EAAkB;AAAA,QAC9B,IAAIiC;AAAA,QACJ,OAAOf;AAAA,QACP,gBAAgB,gBAAAtK,EAAA,CAAC4C,MAAWS,EAA2BT,EAAO,KAAK,GAAnD;AAAA,QAChB,cAAc,gBAAA5C,EAAA,CAAC4C,MAAWA,EAAO,OAAnB;AAAA,QACd,sBAAsB,gBAAA5C,EAAA,CAAC4C,GAAQuE,MAAavE,EAAO,UAAUuE,EAAS,OAAhD;AAAA,QACtB,aAAa8D;AAAA,QACb,eAAeD;AAAA,QACf,UAAU,gBAAAhL,EAAA,CACRoH,GACAhB,GACAzC,GACA2J,MACG;AACH,gBAAM9E,IACJpB,EAAO,SAAS,YACZlE;AAAA,YACEkE;AAAA,YACAhD;AAAA,UAAA,IAEDA,KAA0B;AAEjC,cACET,MAAW,kBACXyD,EAAO,SAAS,aAChBoB,MAAsB,OACrB0B,KAAiBU,IAA4B,IAC9C;AACA,YAAAxD,EAAO,eAAA,GACPA,EAAO,gBAAA;AACP;AAAA,UACF;AAEA,cAAIzD,MAAW,SAAS;AACtB,gBAAIuH,GAA2B,SAAS;AACtC,cAAAb,GAAA;AACA;AAAA,YACF;AAEA,YAAAJ,EAAA;AACA;AAAA,UACF;AAEA,cAAI7E,MAAiBkI,KAAA,QAAAA,EAAS,WAAUrJ,EAAoBqJ,EAAQ,MAAM,GAAG;AAC3E,gBAAIpD,GAAe;AACjB,cAAAD,EAAA;AACA;AAAA,YACF;AAEA,YAAAI,GAAA;AACA;AAAA,UACF;AAEA,UAAAE;AAAA,YACEnE,EACG,OAAO,CAACxD,OAAW,CAACqB,EAAoBrB,EAAM,CAAC,EAC/C,IAAI,CAACA,OAAWA,GAAO,KAAK;AAAA,UAAA;AAAA,QAEnC,GAlDU;AAAA,QAmDV,eAAe,gBAAA5C,EAAA,CAACoH,GAAQrB,GAAgBpC,MAAW;AACjD,UAAAoB,KAAA,QAAAA,EAA4BgB,GAAgBpC;AAAA,QAC9C,GAFe;AAAA,QAGf,WAAWkJ;AAAA,QACX,WAAW1B;AAAA,QACX,aAAa,gBAAAnL,EAAA,CAACuN;;AACZ,iCAAA9K;AAAA,YAACoG;AAAA,YAAA;AAAA,cACE,GAAG0E;AAAA,cACH,GAAGjI;AAAA,cACJ,UAAAd;AAAA,cACA,OAAAC;AAAA,cACA,WAAAC;AAAA,cACA,YAAAC;AAAA,cACA,OAAArB;AAAA,cACA,aAAa0B,KAAe2E,EAAE,WAAW;AAAA,cACzC,UAAA1E;AAAA,cACA,WAAW;AAAA,gBACT,GAAGK,KAAA,gBAAAA,EAAgB;AAAA,gBACnB,OAAO;AAAA,kBACL,GAAGiI,EAAO;AAAA,kBACV,IAAGxJ,IAAAuB,KAAA,gBAAAA,EAAgB,cAAhB,gBAAAvB,EAA2B;AAAA,kBAC9B,cACE,gBAAA6E,EAAAwE,IAAA,EACG,UAAA;AAAA,oBAAAxI,IACC,gBAAAnC,EAACwG,IAAA,EAAiB,OAAM,WAAU,MAAM,IAAI,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG,IAC3D;AAAA,oBACHsE,EAAO,WAAW;AAAA,kBAAA,EAAA,CACrB;AAAA,gBAAA;AAAA,cAEJ;AAAA,cAEF,SAASrI;AAAA,YAAA;AAAA,UAAA;AAAA,WA1BA;AAAA,QA6Bb,cAAc,gBAAAlF,EAAA,CAAC6C,GAAaD,GAAQyD,MAAU;AAC5C,gBAAM,EAAE,KAAAvD,GAAK,GAAGC,EAAA,IAAoBF;AAEpC,iBACE,gBAAA+F,EAAC,MAAA,EAAc,GAAG7F,GAChB,UAAA;AAAA,YAAA,gBAAAN,EAAC+K,MAAS,SAASnH,EAAM,UAAU,WAAU,cAAa,MAAK,SAAQ;AAAA,YACtErC,GAA8BpB,CAAM;AAAA,UAAA,EAAA,GAF9BE,CAGT;AAAA,QAEJ,GATc;AAAA,QAUd,aAAa,gBAAA9C,EAAA,CAACyN,GAAqBC,MAC7BtI,KAAiB8E,IACZ;AAAA,UACL,gBAAAzH;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAEV,IAAIiL;AAAA,cAEH,UAAA3D,EAAU;AAAA,YAAA;AAAA,YAHNA,EAAU;AAAA,UAAA;AAAA,QAIjB,IAQG;AAAA,UACL,GAL6ByD,EAC5B,OAAO,CAAC7K,MAAW,CAACqB,EAAoBrB,CAAM,CAAC,EAC/C,MAAM,GAAG5D,EAA2B,EAGX,IAAI,CAAC4D,GAAQlC,MAAU;AAC/C,kBAAM,EAAE,KAAAoC,IAAK,GAAG8K,GAAA,IAAcF,EAAa,EAAE,OAAAhN,GAAO;AAEpD,mBACE,gBAAAmN;AAAA,cAACC;AAAA,cAAA;AAAA,gBACE,GAAGF;AAAA,gBACJ,KAAA9K;AAAA,gBACA,OAAOF,EAAO;AAAA,gBACd,MAAK;AAAA,gBACL,IAAI,EAAE,cAAc,GAAG,IAAI,IAAA;AAAA,cAAI;AAAA,YAAA;AAAA,UAGrC,CAAC;AAAA,UACD,GAAIgI,IAA4B,IAC5B;AAAA,YACE,gBAAAnI;AAAA,cAACqL;AAAA,cAAA;AAAA,gBAEC,WAAS;AAAA,gBACT,OAAO,IAAIlD,CAAyB;AAAA,gBACpC,SAAS6B;AAAA,gBACT,aAAaD;AAAA,gBACb,MAAK;AAAA,gBACL,IAAI,gBAAAxM,EAAA,CAACe,OAAW;AAAA,kBACd,iBAAiBC,EAAMD,EAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,kBACvD,QAAQ,aAAaC,EAAMD,EAAM,QAAQ,QAAQ,MAAM,IAAI,CAAC;AAAA,kBAC5D,cAAc;AAAA,kBACd,OAAOA,EAAM,QAAQ,QAAQ;AAAA,kBAC7B,YAAY;AAAA,kBACZ,IAAI;AAAA,kBACJ,WAAW;AAAA,oBACT,iBAAiBC,EAAMD,EAAM,QAAQ,QAAQ,MAAM,GAAG;AAAA,kBAAA;AAAA,gBACxD,IATE;AAAA,cAUJ;AAAA,cAhBI;AAAA,YAAA;AAAA,UAiBN,IAEF,CAAA;AAAA,QAAC,GArDI;AAAA,MAuDb;AAAA,IAAA;AAAA,IAEF,gBAAA0B;AAAA,MAAC6G;AAAA,MAAA;AAAA,QACC,UAAUuB;AAAA,QACV,MAAM,EAAQA,MAAuBD,IAA4B;AAAA,QACjE,WAAU;AAAA,QACV,IAAI,EAAE,QAAQ,gBAAA5K,EAAA,CAACe,MAAUA,EAAM,OAAO,OAAxB,UAAwB;AAAA,QAEtC,UAAA,gBAAA0B,EAACsL,IAAA,EAAkB,aAAaxB,IAC9B,UAAA,gBAAA9J;AAAA,UAAC8G;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAI;AAAA,cACF,QAAQ,gBAAAvJ,EAAA,CAACe,MAAU,aAAaC,EAAMD,EAAM,QAAQ,OAAO,OAAO,IAAI,CAAC,IAA/D;AAAA,cACR,SAAS;AAAA,cACT,UAAU;AAAA,cACV,KAAK;AAAA,cACL,UAAU;AAAA,cACV,GAAG;AAAA,YAAA;AAAA,YAGJ,UAAA4J,GAAsB,IAAI,CAAC/H,MAC1B,gBAAAH;AAAA,cAACqL;AAAA,cAAA;AAAA,gBAEC,OAAOlL,EAAO;AAAA,gBACd,UAAU,gBAAA5C,EAAA,MAAM2M,GAAuB/J,EAAO,KAAK,GAAzC;AAAA,gBACV,MAAK;AAAA,gBACL,IAAI,EAAE,cAAc,EAAA;AAAA,cAAE;AAAA,cAJjBA,EAAO;AAAA,YAAA,CAMf;AAAA,UAAA;AAAA,QAAA,EACH,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF,IAKF,gBAAAH;AAAA,IAAC4K;AAAA,IAAA;AAAA,MACC,WAAWpK,EAAK,aAAaqB,CAAS;AAAA,MACtC,UAAAE;AAAA,MACA,eAAeD,IAAsB,CAAC6B,MAAgBA,IAAc;AAAA,MACpE,WAAA1B;AAAA,MACA,YAAYiH;AAAA,MACZ,SAAA/G;AAAA,MACA,SAAAxD;AAAA,MACA,WAAU;AAAA,MACV,WAAU;AAAA,MACV,WAAW,gBAAAqB,EAAC0G,IAAA,EAAU,IAAI,EAAE,UAAUhK,MAAiC;AAAA,MACvE,UAAS;AAAA,MACT,6BAAYiK,IAAA,EAAkB;AAAA,MAC9B,IAAI/E;AAAA,MACJ,OAAOhD;AAAA,MACP,gBAAgB,gBAAArB,EAAA,CAAC4C,MAAWS,EAA2BT,EAAO,KAAK,GAAnD;AAAA,MAChB,cAAc,gBAAA5C,EAAA,CAAC4C,MAAWA,EAAO,OAAnB;AAAA,MACd,sBAAsB,gBAAA5C,EAAA,CAAC4C,GAAQuE,MAAavE,EAAO,UAAUuE,EAAS,OAAhD;AAAA,MACtB,aAAa8D;AAAA,MACb,eAAeD;AAAA,MACf,UAAU,gBAAAhL,EAAA,CAACoH,GAAwBC,GAAY1D,MAAW;AACxD,YAAIA,MAAW,WAAWA,MAAW,gBAAgB;AACnD,UAAAuI,GAAyCvI,GAAQ,EAAK;AACtD;AAAA,QACF;AAIA,YAFA4H,EAAyC,UAAU,IAE/C,CAAClE,KAAejC,KAAiBnB,EAAoBoD,CAAU,GAAI;AACrE,UAAA4E;AAAA,YACE5E,IAAahE,EAA2BgE,EAAW,KAAK,IAAI;AAAA,UAAA,GAE9DlC,EAAkB,EAAE;AACpB;AAAA,QACF;AAEA,QAAA8G,EAAuC5I,EAA2BgE,EAAW,KAAK,CAAC,GACnFlC,EAAkBkC,EAAW,KAAK;AAAA,MACpC,GAlBU;AAAA,MAmBV,eAAe,gBAAArH,EAAA,CAACoH,GAAQrB,GAAgBpC,MAAW;AACjD,YACEF;AAAA,UACE8H,EAAyC;AAAA,UACzC5H;AAAA,QAAA,GAEF;AACA,UAAAsI,EAAuC,EAAE;AACzC;AAAA,QACF;AAEA,SAAItI,MAAW,WAAWA,MAAW,aACnC4H,EAAyC,UAAU,KAGrDU,EAAuClG,CAAc,GACrDhB,KAAA,QAAAA,EAA4BgB,GAAgBpC;AAAA,MAC9C,GAjBe;AAAA,MAkBf,WAAWwJ;AAAA,MACX,aAAa,gBAAAnN,EAAA,CAACuN;;AACZ,+BAAA9K;AAAA,UAACoG;AAAA,UAAA;AAAA,YACE,GAAG0E;AAAA,YACH,GAAGjI;AAAA,YACJ,UAAAd;AAAA,YACA,OAAAC;AAAA,YACA,WAAAC;AAAA,YACA,YAAAC;AAAA,YACA,OAAArB;AAAA,YACA,aAAA0B;AAAA,YACA,UAAAC;AAAA,YACA,WAAW;AAAA,cACT,GAAGK,KAAA,gBAAAA,EAAgB;AAAA,cACnB,WAAW;AAAA,gBACT,GAAGiI,EAAO;AAAA,gBACV,GAAGvB;AAAA,gBACH,WAAW/I;AAAA,kBACTsK,EAAO,WAAW;AAAA,kBAClB1B;AAAA,gBAAA;AAAA,gBAEF,QAAQ,gBAAA7L,EAAA,CAACqC,MAA6C;AACpD,kBAAA4K,GAAkC5K,GAAOkL,EAAO,WAAW,MAAM;AAAA,gBACnE,GAFQ;AAAA,gBAGR,WAAWP;AAAA,cAAA;AAAA,cAEb,OAAO;AAAA,gBACL,GAAGO,EAAO;AAAA,gBACV,IAAGxJ,IAAAuB,KAAA,gBAAAA,EAAgB,cAAhB,gBAAAvB,EAA2B;AAAA,gBAC9B,IAAI;AAAA,kBACF,GAAIsB,MAA6B,CAAA;AAAA,kBACjC,GAAKkI,EAAO,WAA+B,MAAM,CAAA;AAAA,kBACjD,KAAKrF,KAAAC,IAAA7C,KAAA,gBAAAA,EAAgB,cAAhB,gBAAA6C,EAA2B,UAA3B,gBAAAD,EAAkE,OAAM,CAAA;AAAA,gBAAC;AAAA,gBAEhF,cACE,gBAAAU,EAAAwE,IAAA,EACG,UAAA;AAAA,kBAAAxI,IACC,gBAAAnC,EAACwG,IAAA,EAAiB,OAAM,WAAU,MAAM,IAAI,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG,IAC3D;AAAA,kBACHsE,EAAO,WAAW;AAAA,gBAAA,EAAA,CACrB;AAAA,cAAA;AAAA,YAEJ;AAAA,YAEF,SAASrI;AAAA,UAAA;AAAA,QAAA;AAAA,SA3CA;AAAA,MA8Cb,eAAa;AAAA,MACb,cAAc,gBAAAlF,EAAA,CAAC6C,GAAaD,MAAW;AACrC,cAAM,EAAE,KAAAE,GAAK,GAAGC,EAAA,IAAoBF;AAEpC,iCACG,MAAA,EAAc,GAAGE,GACf,UAAAiB,GAA8BpB,CAAM,KAD9BE,CAET;AAAA,MAEJ,GARc;AAAA,IAQd;AAAA,EAAA;AAGN,GA5rBuC;"}
|
|
1
|
+
{"version":3,"file":"OwpSelectorAutocomplete.js","sources":["../../../src/components/OwpSelectorBase/OwpSelectorAutocomplete.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n Autocomplete,\n Box,\n Checkbox,\n Chip,\n CircularProgress,\n ClickAwayListener,\n IconButton,\n Paper,\n Popper,\n TextField,\n} from '@mui/material';\nimport useAutocomplete from '@mui/material/useAutocomplete';\nimport { alpha, type SxProps, type Theme } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport {\n type FocusEvent as ReactFocusEvent,\n type ForwardedRef,\n type HTMLAttributes,\n type Key,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type MouseEvent as ReactMouseEvent,\n type MutableRefObject,\n type SyntheticEvent,\n type UIEvent as ReactUIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type {\n OwpSelectorBaseHookResult,\n OwpSelectorBaseOption,\n OwpSelectorBaseProps,\n} from './types';\nimport {\n SELECTOR_ALL_OPTION_LABEL_SX,\n SELECTOR_ALL_VALUE_LABEL_SX,\n} from './selectorBaseStyles';\nimport { isSelectorAllOption } from './utils';\n\ninterface OwpSelectorAutocompleteProps {\n hookResult: OwpSelectorBaseHookResult;\n props: OwpSelectorBaseProps;\n}\n\nconst MULTIPLE_VISIBLE_CHIP_COUNT = 2;\nconst AUTOCOMPLETE_MIN_WIDTH = 152;\nconst MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH = 72;\nconst SELECTOR_CLEAR_ICON_FONT_SIZE = 18.57;\nconst STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT = '11px !important';\nconst OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT = '2px !important';\nconst OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT = '5px !important';\nconst AUTOCOMPLETE_VIRTUALIZATION_THRESHOLD = 100;\nconst AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT = 36;\nconst AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING = 8;\nconst AUTOCOMPLETE_VIRTUALIZED_VISIBLE_ITEM_COUNT = 8;\nconst AUTOCOMPLETE_VIRTUALIZED_OVERSCAN_ITEM_COUNT = 8;\nconst AUTOCOMPLETE_POPUP_INDICATOR_WIDTH = 30;\nconst AUTOCOMPLETE_CLEAR_INDICATOR_WIDTH = 26;\nconst AUTOCOMPLETE_SEARCH_DIACRITICS_REGEX = /[\\u0300-\\u036f]/g;\n\ntype SelectorAutocompleteKeyDownEvent = ReactKeyboardEvent<HTMLDivElement> & {\n defaultMuiPrevented?: boolean;\n};\n\ntype SelectorAutocompleteGetOptionProps = (renderedOption: {\n option: OwpSelectorBaseOption;\n index: number;\n}) => HTMLAttributes<HTMLLIElement> & {\n key: Key;\n};\n\ninterface OwpVirtualizedAutocompleteOptionListProps {\n getListboxProps: () => HTMLAttributes<HTMLUListElement>;\n getOptionProps: SelectorAutocompleteGetOptionProps;\n options: OwpSelectorBaseOption[];\n selectedOption?: OwpSelectorBaseOption | null;\n}\n\ninterface OwpVirtualizedSingleSelectorAutocompleteProps {\n autocompleteInputValue?: string;\n autocompleteSx: SxProps<Theme>;\n className?: string;\n disableClientFilter?: boolean;\n disabled?: boolean;\n error?: boolean;\n fullWidth?: boolean;\n helperText?: ReactNode;\n label?: ReactNode;\n loading?: boolean;\n loadingText: ReactNode;\n noOptionsText: ReactNode;\n onAutocompleteInputChange?: (nextInputValue: string, reason: string) => void;\n options: OwpSelectorBaseOption[];\n placeholder?: string;\n required?: boolean;\n resolvedTextFieldVariant: NonNullable<OwpSelectorBaseProps['textFieldProps']>['variant'];\n selectSingleValue: (nextValue: string) => void;\n selectedOption: OwpSelectorBaseOption | null;\n showAllOption: boolean;\n singleAutocompleteInputSx?: SxProps<Theme>;\n textFieldProps?: OwpSelectorBaseProps['textFieldProps'];\n}\n\n/**\n * forwarded ref와 내부 ref 동기화\n * @param forwardedRef 외부 ref\n * @param node 현재 DOM 노드\n */\nconst assignAutocompleteListboxRef = (\n forwardedRef: ForwardedRef<HTMLElement>,\n node: HTMLElement | null,\n) => {\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n return;\n }\n\n if (forwardedRef) {\n forwardedRef.current = node;\n }\n};\n\n/**\n * 가상 목록 렌더링 인덱스 계산\n * @param optionCount option 개수\n * @param visibleStartIndex visible 시작 인덱스\n * @param visibleEndIndex visible 종료 인덱스\n * @param selectedOptionIndex 선택 option 인덱스\n */\nconst getVirtualizedOptionIndexes = (\n optionCount: number,\n visibleStartIndex: number,\n visibleEndIndex: number,\n selectedOptionIndex: number,\n) => {\n const indexSet = new Set<number>();\n const addIndex = (index: number) => {\n if (index >= 0 && index < optionCount) {\n indexSet.add(index);\n }\n };\n\n addIndex(0);\n addIndex(optionCount - 1);\n addIndex(selectedOptionIndex);\n\n for (let index = visibleStartIndex; index < visibleEndIndex; index += 1) {\n addIndex(index);\n }\n\n return Array.from(indexSet).sort((leftIndex, rightIndex) => leftIndex - rightIndex);\n};\n\n/**\n * 가상 Autocomplete listbox sx\n * @param height listbox 높이\n */\nconst getVirtualizedAutocompleteListboxSx = (height?: number): SxProps<Theme>[] => [\n {\n listStyle: 'none',\n margin: 0,\n maxHeight: '40vh',\n overflow: 'auto',\n padding: 0,\n position: 'relative',\n ...(height ? { height } : {}),\n '& .MuiAutocomplete-option': {\n alignItems: 'center',\n boxSizing: 'border-box',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'flex-start',\n minHeight: 48,\n outline: 0,\n overflow: 'hidden',\n paddingBottom: 0.75,\n paddingLeft: 2,\n paddingRight: 2,\n paddingTop: 0.75,\n WebkitTapHighlightColor: 'transparent',\n '@media (min-width:600px)': {\n minHeight: 'auto',\n },\n '&.Mui-focused': {\n backgroundColor: (theme) => theme.palette.action.hover,\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n '&.Mui-focusVisible': {\n backgroundColor: (theme) => theme.palette.action.focus,\n },\n '&[aria-disabled=\"true\"]': {\n opacity: (theme) => theme.palette.action.disabledOpacity,\n pointerEvents: 'none',\n },\n '&[aria-selected=\"true\"]': {\n backgroundColor: (theme) =>\n alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),\n '&.Mui-focused': {\n backgroundColor: (theme) =>\n alpha(\n theme.palette.primary.main,\n theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity,\n ),\n '@media (hover: none)': {\n backgroundColor: (theme) => theme.palette.action.selected,\n },\n },\n '&.Mui-focusVisible': {\n backgroundColor: (theme) =>\n alpha(\n theme.palette.primary.main,\n theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity,\n ),\n },\n },\n },\n },\n];\n\n/**\n * useAutocomplete 기반 대용량 옵션 목록 렌더링\n * @param props option list 렌더링 props\n */\nconst OwpVirtualizedAutocompleteOptionList = ({\n getListboxProps,\n getOptionProps,\n options,\n selectedOption,\n}: OwpVirtualizedAutocompleteOptionListProps) => {\n const listboxProps = getListboxProps() as HTMLAttributes<HTMLElement> & {\n ref?: ForwardedRef<HTMLElement>;\n };\n const { ref: forwardedListboxRef, style, ...restListboxProps } = listboxProps;\n const listboxRef = useRef<HTMLElement | null>(null);\n const [startIndex, setStartIndex] = useState(0);\n const optionCount = options.length;\n const visibleStartIndex = Math.max(0, Math.min(startIndex, Math.max(optionCount - 1, 0)));\n const visibleEndIndex = Math.min(\n optionCount,\n visibleStartIndex +\n AUTOCOMPLETE_VIRTUALIZED_VISIBLE_ITEM_COUNT +\n AUTOCOMPLETE_VIRTUALIZED_OVERSCAN_ITEM_COUNT * 2,\n );\n const selectedOptionIndex = useMemo(() => {\n if (!selectedOption) {\n return -1;\n }\n\n for (let index = 0; index < optionCount; index += 1) {\n if (options[index].value === selectedOption.value) {\n return index;\n }\n }\n\n return -1;\n }, [optionCount, options, selectedOption]);\n const renderedOptionIndexes = useMemo(\n () =>\n getVirtualizedOptionIndexes(\n optionCount,\n visibleStartIndex,\n visibleEndIndex,\n selectedOptionIndex,\n ),\n [optionCount, selectedOptionIndex, visibleEndIndex, visibleStartIndex],\n );\n const listboxHeight =\n Math.min(optionCount, AUTOCOMPLETE_VIRTUALIZED_VISIBLE_ITEM_COUNT) *\n AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT +\n AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING * 2;\n\n const handleRef = useCallback(\n (node: HTMLElement | null) => {\n listboxRef.current = node;\n assignAutocompleteListboxRef(forwardedListboxRef, node);\n },\n [forwardedListboxRef],\n );\n\n const handleScroll = (event: ReactUIEvent<HTMLElement>) => {\n const nextStartIndex = Math.max(\n 0,\n Math.floor(\n (event.currentTarget.scrollTop - AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING) /\n AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT,\n ) - AUTOCOMPLETE_VIRTUALIZED_OVERSCAN_ITEM_COUNT,\n );\n\n setStartIndex((previousStartIndex) =>\n previousStartIndex === nextStartIndex ? previousStartIndex : nextStartIndex,\n );\n };\n\n useEffect(() => {\n setStartIndex(0);\n\n if (listboxRef.current) {\n listboxRef.current.scrollTop = 0;\n }\n }, [optionCount]);\n\n return (\n <Box\n component=\"div\"\n {...restListboxProps}\n ref={handleRef}\n onScroll={handleScroll}\n style={style}\n sx={getVirtualizedAutocompleteListboxSx(listboxHeight) as SxProps<Theme>}\n >\n <Box\n component=\"ul\"\n sx={{\n height:\n optionCount * AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT +\n AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING * 2,\n listStyle: 'none',\n margin: 0,\n padding: 0,\n position: 'relative',\n }}\n >\n {renderedOptionIndexes.map((optionIndex) => {\n const option = options[optionIndex];\n const optionProps = getOptionProps({ option, index: optionIndex });\n const { key, ...restOptionProps } = optionProps;\n const optionTop =\n AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING +\n optionIndex * AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT;\n\n return (\n <li\n key={key}\n {...restOptionProps}\n className={clsx('MuiAutocomplete-option', restOptionProps.className)}\n style={{\n ...restOptionProps.style,\n height: AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT,\n left: 0,\n minHeight: AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT,\n position: 'absolute',\n right: 0,\n top: optionTop,\n }}\n >\n {renderAutocompleteOptionLabel(option)}\n </li>\n );\n })}\n </Box>\n </Box>\n );\n};\n\n/**\n * 현재 키 이벤트 기준 입력값 반환\n * @param event 키보드 이벤트\n * @param fallbackValue 제어 입력 fallback 값\n */\nconst getCurrentAutocompleteInputValue = (\n event: SelectorAutocompleteKeyDownEvent,\n fallbackValue?: string,\n) => {\n const eventTarget = event.target;\n\n if (eventTarget instanceof HTMLInputElement) {\n return eventTarget.value;\n }\n\n return fallbackValue ?? '';\n};\n\n/**\n * Autocomplete 옵션 라벨 문자열 변환\n * @param label 옵션 라벨\n */\nconst getAutocompleteOptionLabel = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * Autocomplete 검색 문자열 정규화\n * @param text 검색 대상 문자열\n */\nconst normalizeAutocompleteSearchText = (text: string) =>\n text.normalize('NFD').replace(AUTOCOMPLETE_SEARCH_DIACRITICS_REGEX, '').toLowerCase();\n\n/**\n * 임시 입력 편집 중 MUI 내부 선택값 reset 무시 여부\n * @param hasPendingInputEdit 임시 입력 편집 여부\n * @param reason input change reason\n */\nconst shouldIgnorePendingAutocompleteInputReset = (\n hasPendingInputEdit: boolean,\n reason: string,\n) => hasPendingInputEdit && reason === 'reset';\n\n/**\n * clear 버튼 기준 Autocomplete input 포커스 복원\n * @param element clear 버튼 element\n */\nconst focusAutocompleteInputFromClearElement = (element: HTMLElement) => {\n const inputElement = element\n .closest('.MuiAutocomplete-root')\n ?.querySelector<HTMLInputElement>('input');\n\n if (!inputElement) {\n return;\n }\n\n window.requestAnimationFrame(() => {\n inputElement.focus();\n inputElement.setSelectionRange(inputElement.value.length, inputElement.value.length);\n });\n};\n\n/**\n * Autocomplete 옵션 라벨 렌더링\n * @param option 선택 옵션\n */\nconst renderAutocompleteOptionLabel = (option: OwpSelectorBaseOption) => (\n <Box\n component=\"span\"\n sx={isSelectorAllOption(option) ? SELECTOR_ALL_OPTION_LABEL_SX : undefined}\n >\n {option.label}\n </Box>\n);\n\n/**\n * useAutocomplete 기반 단일 대용량 선택기\n * @param props 대용량 단일 선택기 props\n */\nconst OwpVirtualizedSingleSelectorAutocomplete = ({\n autocompleteInputValue,\n autocompleteSx,\n className,\n disableClientFilter,\n disabled,\n error,\n fullWidth,\n helperText,\n label,\n loading,\n loadingText,\n noOptionsText,\n onAutocompleteInputChange,\n options,\n placeholder,\n required,\n resolvedTextFieldVariant,\n selectSingleValue,\n selectedOption,\n showAllOption,\n singleAutocompleteInputSx,\n textFieldProps,\n}: OwpVirtualizedSingleSelectorAutocompleteProps) => {\n const isAutocompleteInputValueControlled = autocompleteInputValue !== undefined;\n const hasPendingAutocompleteInputEditRef = useRef(false);\n const skipNextAutocompleteBlurRestoreRef = useRef(false);\n const [uncontrolledAutocompleteInputValue, setUncontrolledAutocompleteInputValue] = useState(\n () => (selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : ''),\n );\n const resolvedAutocompleteInputValue = isAutocompleteInputValueControlled\n ? autocompleteInputValue\n : uncontrolledAutocompleteInputValue;\n const normalizedOptionLabelMap = useMemo(\n () =>\n new Map(\n options.map((option) => [\n option.value,\n normalizeAutocompleteSearchText(getAutocompleteOptionLabel(option.label)),\n ]),\n ),\n [options],\n );\n const setAutocompleteInputDisplayValue = useCallback(\n (nextInputValue: string) => {\n if (!isAutocompleteInputValueControlled) {\n setUncontrolledAutocompleteInputValue(nextInputValue);\n }\n },\n [isAutocompleteInputValueControlled],\n );\n const clearAutocompleteInputDisplayValue = useCallback((reason: string) => {\n hasPendingAutocompleteInputEditRef.current = true;\n setAutocompleteInputDisplayValue('');\n onAutocompleteInputChange?.('', reason);\n }, [onAutocompleteInputChange, setAutocompleteInputDisplayValue]);\n const restoreAutocompleteInputDisplayValue = useCallback(() => {\n const restoredInputValue = selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : '';\n\n hasPendingAutocompleteInputEditRef.current = false;\n setAutocompleteInputDisplayValue(restoredInputValue);\n onAutocompleteInputChange?.(restoredInputValue, 'reset');\n }, [onAutocompleteInputChange, selectedOption, setAutocompleteInputDisplayValue]);\n const filterOptions = useCallback(\n (\n nextOptions: OwpSelectorBaseOption[],\n state: { inputValue: string },\n ) => {\n if (disableClientFilter) {\n return nextOptions;\n }\n\n const inputValue = normalizeAutocompleteSearchText(state.inputValue);\n\n if (!inputValue) {\n return nextOptions;\n }\n\n const filteredOptions: OwpSelectorBaseOption[] = [];\n\n for (const option of nextOptions) {\n if (normalizedOptionLabelMap.get(option.value)?.includes(inputValue)) {\n filteredOptions.push(option);\n }\n }\n\n return filteredOptions;\n },\n [disableClientFilter, normalizedOptionLabelMap],\n );\n const {\n anchorEl,\n dirty,\n getClearProps,\n getInputLabelProps,\n getInputProps,\n getListboxProps,\n getOptionProps,\n getPopupIndicatorProps,\n getRootProps,\n groupedOptions,\n popupOpen,\n setAnchorEl,\n } = useAutocomplete<OwpSelectorBaseOption, false, false, false>({\n componentName: 'OwpSelectorAutocomplete',\n disabled,\n filterOptions,\n getOptionKey: (option) => option.value,\n getOptionLabel: (option) => getAutocompleteOptionLabel(option.label),\n inputValue: resolvedAutocompleteInputValue,\n isOptionEqualToValue: (option, selected) => option.value === selected.value,\n onChange: (_event, nextOption, reason) => {\n if (reason === 'clear' || reason === 'removeOption') {\n clearAutocompleteInputDisplayValue(reason);\n return;\n }\n\n hasPendingAutocompleteInputEditRef.current = false;\n\n if (!nextOption || (showAllOption && isSelectorAllOption(nextOption))) {\n setAutocompleteInputDisplayValue(\n nextOption ? getAutocompleteOptionLabel(nextOption.label) : '',\n );\n selectSingleValue('');\n return;\n }\n\n setAutocompleteInputDisplayValue(getAutocompleteOptionLabel(nextOption.label));\n selectSingleValue(nextOption.value);\n },\n onInputChange: (_event, nextInputValue, reason) => {\n if (\n shouldIgnorePendingAutocompleteInputReset(\n hasPendingAutocompleteInputEditRef.current,\n reason,\n )\n ) {\n setAutocompleteInputDisplayValue('');\n return;\n }\n\n if (reason === 'input') {\n hasPendingAutocompleteInputEditRef.current = true;\n }\n\n setAutocompleteInputDisplayValue(nextInputValue);\n onAutocompleteInputChange?.(nextInputValue, reason);\n },\n options,\n selectOnFocus: true,\n value: selectedOption,\n });\n const rootProps = getRootProps();\n const inputProps = getInputProps();\n const inputLabelProps = getInputLabelProps();\n const clearProps = getClearProps();\n const popupIndicatorProps = getPopupIndicatorProps();\n const shouldShowClearIndicator = dirty && !disabled && resolvedAutocompleteInputValue !== '';\n const htmlInputSlotProps = textFieldProps?.slotProps?.htmlInput as\n | (HTMLAttributes<HTMLInputElement> & { className?: string })\n | undefined;\n const {\n className: htmlInputClassName,\n onBlur: onHtmlInputBlur,\n onKeyDown: onHtmlInputKeyDown,\n ...restHtmlInputSlotProps\n } = htmlInputSlotProps ?? {};\n const inputSlotClassName = (\n textFieldProps?.slotProps?.input as { className?: string } | undefined\n )?.className;\n const setAutocompleteAnchorEl = useCallback(\n (node: HTMLElement | null) => {\n (setAnchorEl as unknown as (anchorElement: HTMLElement | null) => void)(node);\n },\n [setAnchorEl],\n );\n const handleClearClick = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipNextAutocompleteBlurRestoreRef.current = false;\n clearAutocompleteInputDisplayValue('clear');\n selectSingleValue('');\n focusAutocompleteInputFromClearElement(event.currentTarget);\n };\n const handleClearMouseDown = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipNextAutocompleteBlurRestoreRef.current = true;\n };\n const handleInputKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n onHtmlInputKeyDown?.(event);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (event.key === 'Escape' || event.key === 'Tab') {\n restoreAutocompleteInputDisplayValue();\n return;\n }\n\n if (event.key !== 'Backspace' && event.key !== 'Delete') {\n return;\n }\n\n if (!selectedOption) {\n return;\n }\n\n const currentInputValue = event.currentTarget.value;\n const selectedOptionLabel = getAutocompleteOptionLabel(selectedOption.label);\n const hasSelectedInputText =\n event.currentTarget.selectionStart !== event.currentTarget.selectionEnd;\n\n if (\n currentInputValue === '' ||\n currentInputValue === selectedOptionLabel ||\n hasSelectedInputText\n ) {\n event.preventDefault();\n (event as SelectorAutocompleteKeyDownEvent).defaultMuiPrevented = true;\n clearAutocompleteInputDisplayValue('input');\n }\n };\n const handleInputBlur = (event: ReactFocusEvent<HTMLInputElement>) => {\n inputProps.onBlur?.(event);\n onHtmlInputBlur?.(event);\n\n if (skipNextAutocompleteBlurRestoreRef.current) {\n skipNextAutocompleteBlurRestoreRef.current = false;\n return;\n }\n\n restoreAutocompleteInputDisplayValue();\n };\n\n useEffect(() => {\n if (isAutocompleteInputValueControlled) {\n return;\n }\n\n if (hasPendingAutocompleteInputEditRef.current) {\n return;\n }\n\n setUncontrolledAutocompleteInputValue(\n selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : '',\n );\n }, [isAutocompleteInputValueControlled, selectedOption]);\n\n return (\n <Box\n {...rootProps}\n className={clsx(\n 'MuiAutocomplete-root min-w-128',\n fullWidth && 'MuiAutocomplete-fullWidth',\n popupOpen && 'Mui-expanded',\n shouldShowClearIndicator && 'MuiAutocomplete-hasClearIcon',\n 'MuiAutocomplete-hasPopupIcon',\n className,\n )}\n sx={\n [\n autocompleteSx,\n fullWidth ? { width: '100%' } : undefined,\n {\n '& .MuiAutocomplete-inputRoot': {\n paddingRight: `${\n AUTOCOMPLETE_POPUP_INDICATOR_WIDTH +\n (shouldShowClearIndicator ? AUTOCOMPLETE_CLEAR_INDICATOR_WIDTH : 0)\n }px !important`,\n position: 'relative',\n },\n '& .MuiAutocomplete-inputRoot .MuiAutocomplete-input': {\n minWidth: 30,\n width: 0,\n },\n '& .MuiAutocomplete-input': {\n flexGrow: 1,\n textOverflow: 'ellipsis',\n },\n '& .MuiAutocomplete-endAdornment': {\n alignItems: 'center',\n display: 'flex',\n position: 'absolute',\n right: resolvedTextFieldVariant === 'standard' ? 0 : 9,\n top: '50%',\n transform: 'translate(0, -50%)',\n },\n '& .MuiAutocomplete-clearIndicator': {\n marginRight: -0.25,\n padding: 0.5,\n visibility: 'visible',\n },\n '& .MuiAutocomplete-popupIndicator': {\n marginRight: -0.25,\n padding: 0.25,\n },\n '& .MuiAutocomplete-popupIndicatorOpen': {\n transform: 'rotate(180deg)',\n },\n },\n ] as SxProps<Theme>\n }\n >\n <TextField\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n htmlInput: {\n ...inputProps,\n ...restHtmlInputSlotProps,\n className: clsx(\n 'MuiAutocomplete-input',\n inputProps.className,\n htmlInputClassName,\n ),\n onBlur: handleInputBlur,\n onKeyDown: handleInputKeyDown,\n },\n input: {\n ...textFieldProps?.slotProps?.input,\n ref: setAutocompleteAnchorEl,\n className: clsx('MuiAutocomplete-inputRoot', inputSlotClassName),\n sx: {\n ...(singleAutocompleteInputSx ?? {}),\n ...((textFieldProps?.slotProps?.input as { sx?: object } | undefined)?.sx ?? {}),\n },\n endAdornment: (\n <Box className=\"MuiAutocomplete-endAdornment\">\n {loading ? <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} /> : null}\n {shouldShowClearIndicator ? (\n <IconButton\n className=\"MuiAutocomplete-clearIndicator m-0\"\n onClick={handleClearClick}\n onMouseDown={handleClearMouseDown}\n size=\"small\"\n tabIndex={clearProps.tabIndex}\n type=\"button\"\n >\n <ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />\n </IconButton>\n ) : null}\n <IconButton\n className={clsx(\n 'MuiAutocomplete-popupIndicator m-0',\n popupOpen && 'MuiAutocomplete-popupIndicatorOpen',\n )}\n onClick={(event) => popupIndicatorProps.onClick?.(event)}\n size=\"small\"\n disabled={disabled}\n tabIndex={popupIndicatorProps.tabIndex}\n type=\"button\"\n >\n <ArrowDropDownIcon />\n </IconButton>\n </Box>\n ),\n },\n inputLabel: {\n ...inputLabelProps,\n ...textFieldProps?.slotProps?.inputLabel,\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n {anchorEl ? (\n <Popper\n anchorEl={anchorEl}\n open={popupOpen}\n placement=\"bottom-start\"\n style={{ width: anchorEl.clientWidth }}\n sx={{ zIndex: 99999 }}\n >\n <Paper\n sx={{\n '& .MuiAutocomplete-noOptions': {\n fontSize: 14,\n px: 1,\n py: 1.5,\n whiteSpace: 'nowrap',\n },\n }}\n >\n {loading && groupedOptions.length === 0 ? (\n <Box sx={{ fontSize: 14, px: 1, py: 1.5, whiteSpace: 'nowrap' }}>\n {loadingText}\n </Box>\n ) : null}\n {!loading && groupedOptions.length === 0 ? (\n <Box\n className=\"MuiAutocomplete-noOptions\"\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n role=\"presentation\"\n >\n {noOptionsText}\n </Box>\n ) : null}\n {groupedOptions.length > 0 ? (\n <OwpVirtualizedAutocompleteOptionList\n getListboxProps={getListboxProps}\n getOptionProps={getOptionProps}\n options={groupedOptions}\n selectedOption={selectedOption}\n />\n ) : null}\n </Paper>\n </Popper>\n ) : null}\n </Box>\n );\n};\n\n/**\n * Autocomplete 기반 공통 선택기\n * @param props Autocomplete 렌더링 props\n */\nexport const OwpSelectorAutocomplete = ({ hookResult, props }: OwpSelectorAutocompleteProps) => {\n const { t } = useOwpTranslation();\n const {\n autocompleteInputValue,\n autocompleteVirtualizationThreshold,\n className,\n disableClientFilter,\n disabled,\n error,\n fullWidth,\n helperText,\n label,\n loading,\n loadingText,\n multiple,\n noOptionsText,\n onAutocompleteInputChange,\n placeholder,\n required,\n showAllOption = true,\n textFieldProps,\n valueTextAlign,\n } = props;\n const {\n allOption,\n clearSelection,\n isAllSelected,\n resolvedOptions,\n restoreAllSelection,\n selectAll,\n selectedOption,\n selectedOptions,\n selectMultipleValues,\n selectSingleValue,\n } = hookResult;\n const options = useMemo(\n () => (showAllOption ? [allOption, ...resolvedOptions] : resolvedOptions),\n [allOption, resolvedOptions, showAllOption],\n );\n const resolvedAutocompleteVirtualizationThreshold =\n autocompleteVirtualizationThreshold === false\n ? Number.POSITIVE_INFINITY\n : Math.max(1, autocompleteVirtualizationThreshold ?? AUTOCOMPLETE_VIRTUALIZATION_THRESHOLD);\n const shouldUseVirtualizedSingleAutocomplete =\n options.length >= resolvedAutocompleteVirtualizationThreshold;\n const filteredSelectedOptions = useMemo(\n () => selectedOptions.filter((option) => !isSelectorAllOption(option)),\n [selectedOptions],\n );\n const hiddenSelectedOptions = useMemo(\n () => (isAllSelected ? [] : filteredSelectedOptions.slice(MULTIPLE_VISIBLE_CHIP_COUNT)),\n [filteredSelectedOptions, isAllSelected],\n );\n const hiddenSelectedOptionCount = hiddenSelectedOptions.length;\n const [hiddenChipAnchorEl, setHiddenChipAnchorEl] = useState<HTMLElement | null>(null);\n const autocompleteRootRef = useRef<HTMLDivElement | null>(null);\n const resolvedNoOptionsText =\n noOptionsText ??\n t(disableClientFilter ? 'Message.검색 결과 없음' : 'Message.조회된 결과가 없습니다.');\n const resolvedLoadingText = loadingText ?? t('Common.로딩 중...');\n const shouldRestoreAllOnClearRef = useRef(\n multiple &&\n showAllOption &&\n ((props.value ?? props.defaultValue) == null || (props.value ?? props.defaultValue) === ''),\n );\n const autocompleteSlotProps = {\n clearIndicator: {\n className: 'm-0 p-0',\n size: 'small',\n tabIndex: -1,\n },\n paper: {\n sx: {\n '& .MuiAutocomplete-noOptions': {\n fontSize: 14,\n px: 1,\n py: 1.5,\n whiteSpace: 'nowrap',\n },\n },\n },\n popupIndicator: {\n className: 'm-0 p-0',\n size: 'small',\n tabIndex: -1,\n },\n } as const;\n const resolvedTextFieldVariant = textFieldProps?.variant ?? 'standard';\n const singleAutocompleteInputPaddingLeft =\n resolvedTextFieldVariant === 'standard'\n ? STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT\n : resolvedTextFieldVariant === 'outlined'\n ? textFieldProps?.size === 'small'\n ? OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT\n : OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT\n : undefined;\n const singleAutocompleteInputSx =\n singleAutocompleteInputPaddingLeft || valueTextAlign\n ? {\n '& .MuiAutocomplete-input': {\n ...(singleAutocompleteInputPaddingLeft\n ? { paddingLeft: singleAutocompleteInputPaddingLeft }\n : {}),\n ...(valueTextAlign ? { textAlign: valueTextAlign } : {}),\n },\n }\n : undefined;\n const autocompleteSx = {\n minWidth: AUTOCOMPLETE_MIN_WIDTH,\n '& .MuiAutocomplete-endAdornment': {\n '& .MuiAutocomplete-clearIndicator + .MuiAutocomplete-popupIndicator': {\n ml: 0,\n },\n '& .MuiIconButton-root': {\n m: 0,\n p: 0,\n },\n '& > :not(style) + :not(style)': {\n ml: 0,\n },\n alignItems: 'center',\n gap: 0,\n right: 0,\n },\n } as const;\n const multipleAutocompleteSx = {\n ...autocompleteSx,\n '& .MuiAutocomplete-inputRoot .MuiAutocomplete-input': {\n flexBasis: MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH,\n minWidth: MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH,\n },\n } as const;\n const isSingleAutocompleteInputValueControlled = autocompleteInputValue !== undefined;\n const singleAutocompleteHasPendingInputEditRef = useRef(false);\n const skipNextSingleAutocompleteBlurRestoreRef = useRef(false);\n const [singleAutocompleteInputValue, setSingleAutocompleteInputValue] = useState(\n () => (selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : ''),\n );\n const resolvedSingleAutocompleteInputValue = isSingleAutocompleteInputValueControlled\n ? autocompleteInputValue\n : singleAutocompleteInputValue;\n const singleAutocompleteHtmlInputSlotProps = textFieldProps?.slotProps?.htmlInput as\n | (HTMLAttributes<HTMLInputElement> & { className?: string })\n | undefined;\n const {\n className: singleAutocompleteHtmlInputClassName,\n onBlur: onSingleAutocompleteHtmlInputBlur,\n onKeyDown: onSingleAutocompleteHtmlInputKeyDown,\n ...restSingleAutocompleteHtmlInputSlotProps\n } = singleAutocompleteHtmlInputSlotProps ?? {};\n\n const setSingleAutocompleteInputDisplayValue = useCallback(\n (nextInputValue: string) => {\n if (!isSingleAutocompleteInputValueControlled) {\n setSingleAutocompleteInputValue(nextInputValue);\n }\n },\n [isSingleAutocompleteInputValueControlled],\n );\n\n const clearSingleAutocompleteInputDisplayValue = useCallback(\n (reason: string, shouldNotifyInputChange = true) => {\n singleAutocompleteHasPendingInputEditRef.current = true;\n setSingleAutocompleteInputDisplayValue('');\n\n if (shouldNotifyInputChange) {\n onAutocompleteInputChange?.('', reason);\n }\n },\n [onAutocompleteInputChange, setSingleAutocompleteInputDisplayValue],\n );\n\n const restoreSingleAutocompleteInputDisplayValue = useCallback(() => {\n const restoredInputValue = selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : '';\n\n singleAutocompleteHasPendingInputEditRef.current = false;\n setSingleAutocompleteInputDisplayValue(restoredInputValue);\n onAutocompleteInputChange?.(restoredInputValue, 'reset');\n }, [onAutocompleteInputChange, selectedOption, setSingleAutocompleteInputDisplayValue]);\n\n useEffect(() => {\n if (!hiddenSelectedOptionCount) {\n setHiddenChipAnchorEl(null);\n }\n }, [hiddenSelectedOptionCount]);\n\n useEffect(() => {\n if (multiple || isSingleAutocompleteInputValueControlled) {\n return;\n }\n\n if (singleAutocompleteHasPendingInputEditRef.current) {\n return;\n }\n\n setSingleAutocompleteInputValue(\n selectedOption ? getAutocompleteOptionLabel(selectedOption.label) : '',\n );\n }, [isSingleAutocompleteInputValueControlled, multiple, selectedOption]);\n\n useEffect(() => {\n if (!shouldRestoreAllOnClearRef.current) {\n return;\n }\n\n const formElement = autocompleteRootRef.current?.closest('form');\n\n if (!formElement) {\n return;\n }\n\n const handleFormReset = () => {\n window.setTimeout(() => {\n restoreAllSelection();\n }, 0);\n };\n\n formElement.addEventListener('reset', handleFormReset);\n\n return () => {\n formElement.removeEventListener('reset', handleFormReset);\n };\n }, [restoreAllSelection]);\n\n const handleHiddenChipPopperClose = () => {\n setHiddenChipAnchorEl(null);\n };\n\n const handleHiddenChipSummaryMouseDown = (event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n };\n\n const handleHiddenChipSummaryClick = (event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n setHiddenChipAnchorEl((previousAnchorElement) =>\n previousAnchorElement === event.currentTarget ? null : event.currentTarget,\n );\n };\n\n const handleHiddenChipDelete = (optionValue: string) => {\n selectMultipleValues(\n filteredSelectedOptions\n .filter((option) => option.value !== optionValue)\n .map((option) => option.value),\n );\n };\n\n const handleMultipleRootKeyDown = (event: SelectorAutocompleteKeyDownEvent) => {\n const currentInputValue = getCurrentAutocompleteInputValue(event, autocompleteInputValue);\n\n if (\n (isAllSelected || hiddenSelectedOptionCount > 0) &&\n currentInputValue === '' &&\n (event.key === 'Backspace' || event.key === 'Delete')\n ) {\n event.defaultMuiPrevented = true;\n event.preventDefault();\n event.stopPropagation();\n }\n\n textFieldProps?.onKeyDown?.(\n event as Parameters<NonNullable<typeof textFieldProps.onKeyDown>>[0],\n );\n };\n\n const handleSingleAutocompleteClearMouseDown = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipNextSingleAutocompleteBlurRestoreRef.current = true;\n };\n\n const handleSingleAutocompleteClearClick = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipNextSingleAutocompleteBlurRestoreRef.current = false;\n clearSingleAutocompleteInputDisplayValue('clear');\n selectSingleValue('');\n focusAutocompleteInputFromClearElement(event.currentTarget);\n };\n\n const handleSingleAutocompleteInputKeyDown = (\n event: ReactKeyboardEvent<HTMLInputElement>,\n ) => {\n onSingleAutocompleteHtmlInputKeyDown?.(event);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (event.key === 'Escape' || event.key === 'Tab') {\n restoreSingleAutocompleteInputDisplayValue();\n return;\n }\n\n if (event.key !== 'Backspace' && event.key !== 'Delete') {\n return;\n }\n\n if (!selectedOption) {\n return;\n }\n\n const currentInputValue = event.currentTarget.value;\n const selectedOptionLabel = getAutocompleteOptionLabel(selectedOption.label);\n const hasSelectedInputText =\n event.currentTarget.selectionStart !== event.currentTarget.selectionEnd;\n\n if (\n currentInputValue === '' ||\n currentInputValue === selectedOptionLabel ||\n hasSelectedInputText\n ) {\n event.preventDefault();\n (event as SelectorAutocompleteKeyDownEvent).defaultMuiPrevented = true;\n clearSingleAutocompleteInputDisplayValue('input');\n }\n };\n\n const handleSingleAutocompleteInputBlur = (\n event: ReactFocusEvent<HTMLInputElement>,\n muiInputBlur?: HTMLAttributes<HTMLInputElement>['onBlur'],\n ) => {\n if (skipNextSingleAutocompleteBlurRestoreRef.current) {\n skipNextSingleAutocompleteBlurRestoreRef.current = false;\n return;\n }\n\n muiInputBlur?.(event);\n onSingleAutocompleteHtmlInputBlur?.(event);\n restoreSingleAutocompleteInputDisplayValue();\n };\n\n const singleAutocompleteSlotProps = {\n ...autocompleteSlotProps,\n clearIndicator: {\n ...autocompleteSlotProps.clearIndicator,\n onClick: handleSingleAutocompleteClearClick,\n onMouseDown: handleSingleAutocompleteClearMouseDown,\n },\n } as const;\n\n if (!multiple && shouldUseVirtualizedSingleAutocomplete) {\n return (\n <OwpVirtualizedSingleSelectorAutocomplete\n autocompleteInputValue={autocompleteInputValue}\n autocompleteSx={autocompleteSx}\n className={className}\n disableClientFilter={disableClientFilter}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n loading={loading}\n loadingText={resolvedLoadingText}\n noOptionsText={resolvedNoOptionsText}\n onAutocompleteInputChange={onAutocompleteInputChange}\n options={options}\n placeholder={placeholder}\n required={required}\n resolvedTextFieldVariant={resolvedTextFieldVariant}\n selectSingleValue={selectSingleValue}\n selectedOption={selectedOption}\n showAllOption={showAllOption}\n singleAutocompleteInputSx={singleAutocompleteInputSx}\n textFieldProps={textFieldProps}\n />\n );\n }\n\n if (multiple) {\n return (\n <>\n <Autocomplete\n ref={autocompleteRootRef as MutableRefObject<HTMLDivElement | null>}\n className={clsx('min-w-128', className)}\n disableCloseOnSelect\n disabled={disabled}\n filterOptions={disableClientFilter ? (nextOptions) => nextOptions : undefined}\n fullWidth={fullWidth}\n inputValue={autocompleteInputValue}\n loading={loading}\n multiple\n options={options}\n clearText=\"\"\n closeText=\"\"\n clearIcon={<ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />}\n openText=\"\"\n popupIcon={<ArrowDropDownIcon />}\n sx={multipleAutocompleteSx}\n value={selectedOptions}\n getOptionLabel={(option) => getAutocompleteOptionLabel(option.label)}\n getOptionKey={(option) => option.value}\n isOptionEqualToValue={(option, selected) => option.value === selected.value}\n loadingText={resolvedLoadingText}\n noOptionsText={resolvedNoOptionsText}\n onChange={(\n _event: SyntheticEvent,\n nextOptions: OwpSelectorBaseOption[],\n reason: string,\n details,\n ) => {\n const currentInputValue =\n _event.type === 'keydown'\n ? getCurrentAutocompleteInputValue(\n _event as SelectorAutocompleteKeyDownEvent,\n autocompleteInputValue,\n )\n : (autocompleteInputValue ?? '');\n\n if (\n reason === 'removeOption' &&\n _event.type === 'keydown' &&\n currentInputValue === '' &&\n (isAllSelected || hiddenSelectedOptionCount > 0)\n ) {\n _event.preventDefault();\n _event.stopPropagation();\n return;\n }\n\n if (reason === 'clear') {\n if (shouldRestoreAllOnClearRef.current) {\n selectAll();\n return;\n }\n\n clearSelection();\n return;\n }\n\n if (showAllOption && details?.option && isSelectorAllOption(details.option)) {\n if (isAllSelected) {\n clearSelection();\n return;\n }\n\n selectAll();\n return;\n }\n\n selectMultipleValues(\n nextOptions\n .filter((option) => !isSelectorAllOption(option))\n .map((option) => option.value),\n );\n }}\n onInputChange={(_event, nextInputValue, reason) => {\n onAutocompleteInputChange?.(nextInputValue, reason);\n }}\n onKeyDown={handleMultipleRootKeyDown}\n slotProps={autocompleteSlotProps}\n renderInput={(params) => (\n <TextField\n {...params}\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder ?? t('Common.검색')}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n input: {\n ...params.InputProps,\n ...textFieldProps?.slotProps?.input,\n endAdornment: (\n <>\n {loading ? (\n <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} />\n ) : null}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n )}\n renderOption={(optionProps, option, state) => {\n const { key, ...restOptionProps } = optionProps;\n\n return (\n <li key={key} {...restOptionProps}>\n <Checkbox checked={state.selected} className=\"!mr-8 !p-0\" size=\"small\" />\n {renderAutocompleteOptionLabel(option)}\n </li>\n );\n }}\n renderValue={(nextSelectedOptions, getItemProps) => {\n if (showAllOption && isAllSelected) {\n return [\n <Box\n component=\"span\"\n key={allOption.value}\n sx={SELECTOR_ALL_VALUE_LABEL_SX}\n >\n {allOption.label}\n </Box>,\n ];\n }\n\n const visibleSelectedOptions = nextSelectedOptions\n .filter((option) => !isSelectorAllOption(option))\n .slice(0, MULTIPLE_VISIBLE_CHIP_COUNT);\n\n return [\n ...visibleSelectedOptions.map((option, index) => {\n const { key, ...itemProps } = getItemProps({ index });\n\n return (\n <Chip\n {...itemProps}\n key={key}\n label={option.label}\n size=\"small\"\n sx={{ borderRadius: 1, mr: 0.5 }}\n />\n );\n }),\n ...(hiddenSelectedOptionCount > 0\n ? [\n <Chip\n key=\"owp-selector-hidden-chip-summary\"\n clickable\n label={`+${hiddenSelectedOptionCount}`}\n onClick={handleHiddenChipSummaryClick}\n onMouseDown={handleHiddenChipSummaryMouseDown}\n size=\"small\"\n sx={(theme) => ({\n backgroundColor: alpha(theme.palette.primary.main, 0.14),\n border: `1px solid ${alpha(theme.palette.primary.main, 0.22)}`,\n borderRadius: 1,\n color: theme.palette.primary.dark,\n fontWeight: 600,\n mr: 0.5,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.2),\n },\n })}\n />,\n ]\n : []),\n ];\n }}\n />\n <Popper\n anchorEl={hiddenChipAnchorEl}\n open={Boolean(hiddenChipAnchorEl) && hiddenSelectedOptionCount > 0}\n placement=\"bottom-start\"\n sx={{ zIndex: (theme) => theme.zIndex.modal }}\n >\n <ClickAwayListener onClickAway={handleHiddenChipPopperClose}>\n <Paper\n className=\"mt-4\"\n sx={{\n border: (theme) => `1px solid ${alpha(theme.palette.common.black, 0.12)}`,\n display: 'flex',\n flexWrap: 'wrap',\n gap: 0.75,\n maxWidth: 280,\n p: 1,\n }}\n >\n {hiddenSelectedOptions.map((option) => (\n <Chip\n key={option.value}\n label={option.label}\n onDelete={() => handleHiddenChipDelete(option.value)}\n size=\"small\"\n sx={{ borderRadius: 1 }}\n />\n ))}\n </Paper>\n </ClickAwayListener>\n </Popper>\n </>\n );\n }\n\n return (\n <Autocomplete\n className={clsx('min-w-128', className)}\n disabled={disabled}\n filterOptions={disableClientFilter ? (nextOptions) => nextOptions : undefined}\n fullWidth={fullWidth}\n inputValue={resolvedSingleAutocompleteInputValue}\n loading={loading}\n options={options}\n clearText=\"\"\n closeText=\"\"\n clearIcon={<ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />}\n openText=\"\"\n popupIcon={<ArrowDropDownIcon />}\n sx={autocompleteSx}\n value={selectedOption}\n getOptionLabel={(option) => getAutocompleteOptionLabel(option.label)}\n getOptionKey={(option) => option.value}\n isOptionEqualToValue={(option, selected) => option.value === selected.value}\n loadingText={resolvedLoadingText}\n noOptionsText={resolvedNoOptionsText}\n onChange={(_event: SyntheticEvent, nextOption, reason) => {\n if (reason === 'clear' || reason === 'removeOption') {\n clearSingleAutocompleteInputDisplayValue(reason, false);\n return;\n }\n\n singleAutocompleteHasPendingInputEditRef.current = false;\n\n if (!nextOption || (showAllOption && isSelectorAllOption(nextOption))) {\n setSingleAutocompleteInputDisplayValue(\n nextOption ? getAutocompleteOptionLabel(nextOption.label) : '',\n );\n selectSingleValue('');\n return;\n }\n\n setSingleAutocompleteInputDisplayValue(getAutocompleteOptionLabel(nextOption.label));\n selectSingleValue(nextOption.value);\n }}\n onInputChange={(_event, nextInputValue, reason) => {\n if (\n shouldIgnorePendingAutocompleteInputReset(\n singleAutocompleteHasPendingInputEditRef.current,\n reason,\n )\n ) {\n setSingleAutocompleteInputDisplayValue('');\n return;\n }\n\n if (reason === 'input' || reason === 'clear') {\n singleAutocompleteHasPendingInputEditRef.current = true;\n }\n\n setSingleAutocompleteInputDisplayValue(nextInputValue);\n onAutocompleteInputChange?.(nextInputValue, reason);\n }}\n slotProps={singleAutocompleteSlotProps}\n renderInput={(params) => (\n <TextField\n {...params}\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n htmlInput: {\n ...params.inputProps,\n ...restSingleAutocompleteHtmlInputSlotProps,\n className: clsx(\n params.inputProps.className,\n singleAutocompleteHtmlInputClassName,\n ),\n onBlur: (event: ReactFocusEvent<HTMLInputElement>) => {\n handleSingleAutocompleteInputBlur(event, params.inputProps.onBlur);\n },\n onKeyDown: handleSingleAutocompleteInputKeyDown,\n },\n input: {\n ...params.InputProps,\n ...textFieldProps?.slotProps?.input,\n sx: {\n ...(singleAutocompleteInputSx ?? {}),\n ...((params.InputProps as { sx?: object }).sx ?? {}),\n ...((textFieldProps?.slotProps?.input as { sx?: object } | undefined)?.sx ?? {}),\n },\n endAdornment: (\n <>\n {loading ? (\n <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} />\n ) : null}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n )}\n selectOnFocus\n renderOption={(optionProps, option) => {\n const { key, ...restOptionProps } = optionProps;\n\n return (\n <li key={key} {...restOptionProps}>\n {renderAutocompleteOptionLabel(option)}\n </li>\n );\n }}\n />\n );\n};\n"],"names":["MULTIPLE_VISIBLE_CHIP_COUNT","AUTOCOMPLETE_MIN_WIDTH","MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH","SELECTOR_CLEAR_ICON_FONT_SIZE","STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT","OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT","OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT","AUTOCOMPLETE_VIRTUALIZATION_THRESHOLD","AUTOCOMPLETE_VIRTUALIZED_ITEM_HEIGHT","AUTOCOMPLETE_VIRTUALIZED_LISTBOX_PADDING","AUTOCOMPLETE_VIRTUALIZED_VISIBLE_ITEM_COUNT","AUTOCOMPLETE_VIRTUALIZED_OVERSCAN_ITEM_COUNT","AUTOCOMPLETE_POPUP_INDICATOR_WIDTH","AUTOCOMPLETE_CLEAR_INDICATOR_WIDTH","AUTOCOMPLETE_SEARCH_DIACRITICS_REGEX","assignAutocompleteListboxRef","__name","forwardedRef","node","getVirtualizedOptionIndexes","optionCount","visibleStartIndex","visibleEndIndex","selectedOptionIndex","indexSet","addIndex","index","leftIndex","rightIndex","getVirtualizedAutocompleteListboxSx","height","theme","alpha","OwpVirtualizedAutocompleteOptionList","getListboxProps","getOptionProps","options","selectedOption","listboxProps","forwardedListboxRef","style","restListboxProps","listboxRef","useRef","startIndex","setStartIndex","useState","useMemo","renderedOptionIndexes","listboxHeight","handleRef","useCallback","handleScroll","event","nextStartIndex","previousStartIndex","useEffect","jsx","Box","optionIndex","option","optionProps","key","restOptionProps","optionTop","clsx","getCurrentAutocompleteInputValue","fallbackValue","eventTarget","getAutocompleteOptionLabel","label","normalizeAutocompleteSearchText","text","shouldIgnorePendingAutocompleteInputReset","hasPendingInputEdit","reason","focusAutocompleteInputFromClearElement","element","inputElement","_a","renderAutocompleteOptionLabel","isSelectorAllOption","SELECTOR_ALL_OPTION_LABEL_SX","OwpVirtualizedSingleSelectorAutocomplete","autocompleteInputValue","autocompleteSx","className","disableClientFilter","disabled","error","fullWidth","helperText","loading","loadingText","noOptionsText","onAutocompleteInputChange","placeholder","required","resolvedTextFieldVariant","selectSingleValue","showAllOption","singleAutocompleteInputSx","textFieldProps","isAutocompleteInputValueControlled","hasPendingAutocompleteInputEditRef","skipNextAutocompleteBlurRestoreRef","uncontrolledAutocompleteInputValue","setUncontrolledAutocompleteInputValue","resolvedAutocompleteInputValue","normalizedOptionLabelMap","setAutocompleteInputDisplayValue","nextInputValue","clearAutocompleteInputDisplayValue","restoreAutocompleteInputDisplayValue","restoredInputValue","filterOptions","nextOptions","state","inputValue","filteredOptions","anchorEl","dirty","getClearProps","getInputLabelProps","getInputProps","getPopupIndicatorProps","getRootProps","groupedOptions","popupOpen","setAnchorEl","useAutocomplete","selected","_event","nextOption","rootProps","inputProps","inputLabelProps","clearProps","popupIndicatorProps","shouldShowClearIndicator","htmlInputSlotProps","htmlInputClassName","onHtmlInputBlur","onHtmlInputKeyDown","restHtmlInputSlotProps","inputSlotClassName","_c","_b","setAutocompleteAnchorEl","handleClearClick","handleClearMouseDown","handleInputKeyDown","currentInputValue","selectedOptionLabel","hasSelectedInputText","handleInputBlur","jsxs","TextField","_d","_f","_e","CircularProgress","IconButton","ClearIcon","ArrowDropDownIcon","_g","Popper","Paper","OwpSelectorAutocomplete","hookResult","props","t","useOwpTranslation","autocompleteVirtualizationThreshold","multiple","valueTextAlign","allOption","clearSelection","isAllSelected","resolvedOptions","restoreAllSelection","selectAll","selectedOptions","selectMultipleValues","resolvedAutocompleteVirtualizationThreshold","shouldUseVirtualizedSingleAutocomplete","filteredSelectedOptions","hiddenSelectedOptions","hiddenSelectedOptionCount","hiddenChipAnchorEl","setHiddenChipAnchorEl","autocompleteRootRef","resolvedNoOptionsText","resolvedLoadingText","shouldRestoreAllOnClearRef","autocompleteSlotProps","singleAutocompleteInputPaddingLeft","multipleAutocompleteSx","isSingleAutocompleteInputValueControlled","singleAutocompleteHasPendingInputEditRef","skipNextSingleAutocompleteBlurRestoreRef","singleAutocompleteInputValue","setSingleAutocompleteInputValue","resolvedSingleAutocompleteInputValue","singleAutocompleteHtmlInputSlotProps","singleAutocompleteHtmlInputClassName","onSingleAutocompleteHtmlInputBlur","onSingleAutocompleteHtmlInputKeyDown","restSingleAutocompleteHtmlInputSlotProps","setSingleAutocompleteInputDisplayValue","clearSingleAutocompleteInputDisplayValue","shouldNotifyInputChange","restoreSingleAutocompleteInputDisplayValue","formElement","handleFormReset","handleHiddenChipPopperClose","handleHiddenChipSummaryMouseDown","handleHiddenChipSummaryClick","previousAnchorElement","handleHiddenChipDelete","optionValue","handleMultipleRootKeyDown","handleSingleAutocompleteClearMouseDown","handleSingleAutocompleteClearClick","handleSingleAutocompleteInputKeyDown","handleSingleAutocompleteInputBlur","muiInputBlur","singleAutocompleteSlotProps","Fragment","Autocomplete","details","params","Checkbox","nextSelectedOptions","getItemProps","SELECTOR_ALL_VALUE_LABEL_SX","itemProps","createElement","Chip","ClickAwayListener"],"mappings":"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"}
|