sales-frontend-components 0.0.117 → 0.0.118

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/form/form-checkbox-button.tsx","../src/form/form-checkbox.tsx","../src/form/form-date-picker.tsx","../src/form/form-date-range-picker.tsx","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/modal/common.tsx","../src/modal/standard/address-search/address-search-modal.tsx","../src/modal/standard/address-search/use-search-address.tsx","../src/modal/standard/bank-stock-search/constants.tsx","../src/modal/standard/bank-stock-search/use-bank-stock-search.tsx","../src/modal/standard/bank-stock-search/bank-stock-search-modal.tsx","../src/modal/standard/customer-search/use-customer-search.tsx","../src/modal/standard/customer-search/customer-search.tsx","../src/modal/standard/customer-search/customer-search-modal.tsx","../src/modal/standard/nationality-search/nationality-search-modal.tsx","../src/modal/standard/nationality-search/use-search-nationality.tsx","../src/modal/standard/nxl-one/hook/index.tsx","../src/modal/standard/nxl-one/use-nxl-one-modal.tsx","../src/modal/standard/visa-search/visa-search-modal.tsx","../src/modal/standard/visa-search/use-search-visa.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search-result.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search-modal.tsx","../src/modal/pre-standard/employee-search-modal/constants.ts","../src/modal/pre-standard/employee-search-modal/employee-search-result.tsx","../src/modal/pre-standard/employee-search-modal/employee-search.tsx","../src/modal/pre-standard/employee-search-modal/employee-search-modal.tsx","../src/modal/pre-standard/job-search-modal/constants.ts","../src/modal/pre-standard/job-search-modal/job-search-detail.tsx","../src/modal/pre-standard/job-search-modal/job-search-category.tsx","../src/modal/pre-standard/job-search-modal/job-search-favorite.tsx","../src/modal/pre-standard/job-search-modal/job-search-result.tsx","../src/modal/pre-standard/job-search-modal/job-search.tsx","../src/modal/pre-standard/job-search-modal/use-job-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-grade.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search.tsx","../src/modal/pre-standard/vehicle-search-modal/use-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/use-job-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search.tsx","../src/modal/pre-standard/organization-search-modal/organization-search-result.tsx","../src/modal/pre-standard/organization-search-modal/organization-search.tsx","../src/modal/pre-standard/organization-search-modal/organization-search-modal.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search-modal.tsx","../src/form/form-search-job-field.tsx","../src/form/form-segment.tsx","../src/form/form-select.tsx","../src/form/form-text-field.tsx","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx","../src/canvas-paint/use-canvas-paint.ts","../src/canvas-paint/dummyData.ts","../src/remote-identity-verification/use-remote-identity-verification.tsx"],"sourcesContent":["import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { CheckboxButton, type CheckboxButtonProps } from 'sales-frontend-design-system';\n\nexport const FormCheckboxButton = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxButtonProps, 'id'>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <CheckboxButton\n {...props}\n {...field}\n id={field.name}\n checked={field.value ?? false}\n error={fieldState.invalid}\n onChange={(checked) => {\n field.onChange(checked);\n props.onChange?.(checked);\n }}\n >\n {children}\n </CheckboxButton>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { Checkbox, CheckboxProps } from 'sales-frontend-design-system';\n\nexport const FormCheckbox = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxProps, 'id'>) => {\n const { field } = useController({ name, control, disabled });\n\n return (\n <Checkbox {...props} {...field} id={field.name} checked={field.value} onChange={field.onChange}>\n {children}\n </Checkbox>\n );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, isDate, type DatePickerSingleHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [selected, setSelected] = React.useState<Date | undefined>();\n\n React.useEffect(() => {\n if (isDate(field.value) && field.value !== selected) {\n setSelected(field.value);\n }\n }, [field.value]);\n\n return (\n <DatePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n\n defaultValue: selected,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DateRangePicker, type PeriodDate, type DatePickerRangeHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDateRangePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerRangeHtmlProps) => {\n const { field, fieldState } = useController({\n name,\n control,\n disabled,\n defaultValue\n });\n const [selected, setSelected] = React.useState<PeriodDate | undefined>();\n\n React.useEffect(() => {\n const fieldValue = field.value as PeriodDate | undefined;\n\n // 1. field.value가 없을 경우, selected도 초기화\n if (!fieldValue) {\n setSelected(undefined);\n\n return;\n }\n\n // 2. selected가 없거나,\n // 3. field.value와 selected의 startDate 또는 endDate가 다를 경우에만 setSelected 실행\n const isStartDateDifferent = fieldValue.startDate?.getTime() !== selected?.startDate?.getTime();\n const isEndDateDifferent = fieldValue.endDate?.getTime() !== selected?.endDate?.getTime();\n\n if (!selected || isStartDateDifferent || isEndDateDifferent) {\n // console.warn('field.value 업데이트 감지, selected 업데이트');\n setSelected(fieldValue);\n }\n }, [field.value]);\n\n return (\n <DateRangePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: selected,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue.call(this, arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn this && this[arg] || arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(this, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, this && this[key] || key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { JSX } from 'react';\n\nexport const highlightOnSearchKeyword = (originalText: string, targetString: string) => {\n if (!targetString || !originalText?.includes(targetString)) {\n return originalText;\n }\n const replacedText: (string | JSX.Element)[] = [];\n const splitText = originalText.split(targetString);\n\n for (let i = 0; i < splitText.length; i++) {\n replacedText.push(splitText[i] || '');\n if (i < splitText.length - 1) {\n replacedText.push(\n <span key={`search-keyword-highlight-${i}-${Math.random()}`} className=\"text-primary\">\n {targetString}\n </span>\n );\n }\n }\n\n return replacedText;\n};\n\nexport const getGenderName = (genderCode?: string) => {\n switch (genderCode) {\n case '1':\n case '3':\n return '남성';\n case '2':\n case '4':\n return '여성';\n default:\n return '';\n }\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { AddressResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { Button, FormCore, Modal, ModalBaseProps, RadioGroup, FormField, Radio } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { AddressComponentProps, AddressSearchDetailInputProps, AddressSearchResultProps, Step } from './address.types';\nimport styles from './select-address.module.scss';\nimport { useSearchAddress } from './use-search-address';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\nexport const AddressSearchInitialText = () => {\n return (\n <div className={cx('search-result-list')}>\n <p className={cx('guide-title')}>이렇게 검색해 보세요.</p>\n <ul className={cx('guide')}>\n <li>도로명/지명과 건물번호를 함께 입력해주세요</li>\n <li>예) 63로 50, 여의도동 60</li>\n <li>지명은 동/읍/면/리로 입력해주세요</li>\n <li>예) 여의도동, 역삼동</li>\n <li>우편번호 다섯자리를 모두 입력해주세요</li>\n <li>예) 07345, 06232</li>\n </ul>\n </div>\n );\n};\n\nexport const AddressSearchResult = ({\n addressSearchList,\n onChange,\n searchKeyword,\n selectedAddress\n}: AddressSearchResultProps) => {\n return (\n <div className={cx('search-result-list')}>\n <p className={cx('guide-title')}>\n 총 <span className=\"text-primary\">{addressSearchList.length}</span>건의 검색결과\n </p>\n\n {addressSearchList.length > 0 && (\n <RadioGroup\n items={addressSearchList.map((item: AddressResponseDto) => {\n return {\n value: JSON.stringify(item),\n select:\n item.roadNameBaseAddress === selectedAddress?.roadNameBaseAddress &&\n item.roadNameDetailAddress === selectedAddress?.roadNameDetailAddress &&\n item.mainBuildingName === selectedAddress?.mainBuildingName,\n label: (\n <div className={cx('search-result')}>\n <div className={cx('zipcode')}>\n {highlightOnSearchKeyword(`${item.firstPostalCode}${item.secondPostalCode}`, searchKeyword)}\n </div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>\n {highlightOnSearchKeyword(\n `${item.roadNameBaseAddress} ${item.roadNameDetailAddress} ${item.mainBuildingName}`,\n searchKeyword\n )}\n </span>\n <span className={cx('old-address')}>\n {highlightOnSearchKeyword(\n `${item.landNumberBaseAddress} ${item.landNumberDetailAddress}`,\n searchKeyword\n )}\n </span>\n </div>\n </div>\n ),\n id: JSON.stringify(item)\n };\n })}\n className={cx('radio-group')}\n name=\"address-search\"\n size=\"medium\"\n defaultValue={''}\n onChange={onChange}\n />\n )}\n\n {addressSearchList.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n );\n};\n\nexport const AddressSearchDetailInput = ({\n selectedStandardizationAddress,\n onDetailChange,\n step,\n onStandardizationChange,\n detailAddressInput\n}: AddressSearchDetailInputProps) => {\n const { land, road } = selectedStandardizationAddress;\n\n return (\n <div className={cx('search-result-list')}>\n <Radio.Root\n name=\"address-search-standardization\"\n size=\"medium\"\n defaultValue={JSON.stringify(selectedStandardizationAddress)}\n >\n <Radio.Item\n className={cx('radio-group')}\n value={JSON.stringify(selectedStandardizationAddress)}\n onChange={onStandardizationChange}\n >\n <div className={cx('search-result')}>\n <div\n className={cx('zipcode')}\n >{`${selectedStandardizationAddress.land?.firstPostalCode}${land?.secondPostalCode}`}</div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>{`${road?.baseAddress} ${road?.detailAddress}`}</span>\n <span className={cx('old-address')}>{`${land?.baseAddress} ${land?.detailAddress}`}</span>\n </div>\n </div>\n </Radio.Item>\n </Radio.Root>\n <div className=\"d-flex gap-medium items-center\">\n <FormField.Label id=\"detail\" style={{ width: '90px' }}>\n 상세주소\n </FormField.Label>\n <FormField.TextField\n rootProps={{\n style: {\n display: 'flex',\n flex: 1\n }\n }}\n placeholder=\"상세주소 입력\"\n onChange={onDetailChange}\n size=\"small\"\n value={detailAddressInput}\n {...(step === 'detail-input' && { autoFocus: true })}\n />\n </div>\n </div>\n );\n};\n\nexport interface AddressSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n step: Step;\n selectedAddress: AddressResponseDto;\n addressList: AddressResponseDto[];\n filterList: AddressResponseDto[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n onNext: () => void;\n setSelectedAddress: (address: AddressResponseDto) => void;\n setDetailAddress: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onSelectChange: (value: string) => void;\n}\n\ninterface Props {\n setValue: (address: AddressComponentProps) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function AddressComponent({ isOpen, onClose, setValue }: Props) {\n const {\n onAddressSearchClear,\n addressSearchKeyword,\n addressSearchStep,\n onAddressSearchNext,\n nextButtonDisabled,\n detailAddressInput,\n addressSearchList,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n selectedAddress,\n onStandardizationChange,\n selectedStandardizationAddress,\n isLoading\n } = useSearchAddress({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"주소 검색\" showCloseButton />\n <Modal.Body>\n <InputBox clearable endElement={<IconMainUiSearch onClick={search} />} onClear={onAddressSearchClear}>\n <Input\n {...(addressSearchStep !== 'detail-input' && { autoFocus: true })}\n onChange={onSearch}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n />\n </InputBox>\n {addressSearchStep === 'initial' && <AddressSearchInitialText />}\n {!isLoading && addressSearchStep === 'search-result' && (\n <AddressSearchResult\n onChange={onSelectChange}\n addressSearchList={addressSearchList}\n searchKeyword={addressSearchKeyword}\n selectedAddress={selectedAddress}\n />\n )}\n {!isLoading &&\n addressSearchStep === 'detail-input' &&\n selectedAddress &&\n selectedStandardizationAddress && (\n <AddressSearchDetailInput\n selectedStandardizationAddress={selectedStandardizationAddress}\n onStandardizationChange={onStandardizationChange}\n onDetailChange={setDetail}\n step={addressSearchStep}\n detailAddressInput={detailAddressInput}\n />\n )}\n </Modal.Body>\n <Modal.Footer>\n {addressSearchStep !== 'initial' && (\n <Button\n onClick={onAddressSearchNext}\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n // disabled={nextButtonDisabled}\n >\n {addressSearchStep === 'search-result' && '다음(1/2)'}\n {addressSearchStep === 'detail-input' && '확인(2/2)'}\n </Button>\n )}\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport {\n AddressResponseDto,\n AddressStandardizationListRequestDto,\n useSearchAddressQuery,\n useSearchAddressStandardizationQuery,\n useSearchPostalCodeQuery\n} from 'sales-frontend-api/method';\nimport { ModalUtils, useModalState } from 'sales-frontend-design-system';\n\nimport { AddressComponent } from './address-search-modal';\nimport { AddressComponentProps, AddressStandardization, Step } from './address.types';\n\ninterface Props {\n setValue: (address: AddressComponentProps) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchAddress({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [step, setStep] = useState<Step>('initial');\n const [selectedAddress, setSelectedAddress] = useState<AddressResponseDto>();\n const [selectedStandardizationAddress, setSelectedStandardizationAddress] = useState<AddressStandardization>();\n const [searchInput, setSearchInput] = useState<string>('');\n const [detailAddressInput, setDetailAddressInput] = useState<string>('');\n const [displayList, setDisplayList] = useState<AddressResponseDto[]>([]);\n const [searchType, setSearchType] = useState<'address' | 'postalcode'>('address');\n\n const [standardizationParams, setStandardizationParams] = useState<AddressStandardizationListRequestDto>({\n firstPostalCode: '',\n secondPostalCode: '',\n baseAddress: '',\n detailAddress: '',\n roadNameYn: 'Y'\n });\n\n const { data: addressData, isLoading: isLoadingAddress } = useSearchAddressQuery(\n { searchKeyWord: searchKeyword },\n { enabled: !!searchKeyword && searchType === 'address' }\n );\n\n const { data: postalData, isLoading: isLoadingPostalCode } = useSearchPostalCodeQuery(\n { searchWordName: searchKeyword },\n { enabled: !!searchKeyword && searchType === 'postalcode' }\n );\n\n const { data: standardizedData } = useSearchAddressStandardizationQuery(standardizationParams, {\n enabled: !!standardizationParams?.baseAddress\n });\n\n const [nextButtonDisabled, setNextButtonDisabled] = useState<boolean>(false);\n const onNext = () => {\n if (step === 'search-result' && nextButtonDisabled) {\n ModalUtils.alert(\n '주소를 선택하지 않으면 다음 단계로 이동할 수 없습니다.\\n주소를 선택한 후 다시 시도해주세요.',\n '선택 주소 없음',\n { modalId: 'search-modal-address-no-selected' }\n );\n\n return;\n }\n\n if (step === 'search-result') {\n setStep('detail-input');\n setNextButtonDisabled(true);\n if (selectedAddress) {\n setStandardizationParams({\n firstPostalCode: selectedAddress.firstPostalCode,\n secondPostalCode: selectedAddress.secondPostalCode,\n baseAddress: selectedAddress.roadNameBaseAddress,\n detailAddress: selectedAddress.roadNameDetailAddress,\n roadNameYn: 'Y'\n });\n }\n } else {\n selectedStandardizationAddress &&\n setValue({\n ...selectedStandardizationAddress,\n detailAddressInput\n });\n onClose();\n }\n };\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 1) {\n const isNumeric = /^[0-9]+$/.test(searchInput);\n setSearchType(isNumeric ? 'postalcode' : 'address');\n setSearchKeyword(searchInput);\n setStep('search-result');\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n setNextButtonDisabled(true);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색결과 Radio 버튼 선택시, onChange\n */\n const onSelectChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.value;\n if (selected) {\n // const adr = displayList?.find((item) => {\n // return JSON.stringify(item) === selected;\n // });\n // setSelectedAddress(adr);\n setSelectedAddress(JSON.parse(selected));\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 표준화 검색결과 Radio 버튼 선택시,\n */\n const onStandardizationChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.value;\n if (selected) {\n setSelectedStandardizationAddress(JSON.parse(selected));\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n setStep('initial');\n }, []);\n\n /**\n * 상세주소 저장\n */\n const setDetail = (e: React.ChangeEvent<HTMLInputElement>) => {\n const detail = e.target.value;\n setDetailAddressInput(detail);\n if (detail) {\n setNextButtonDisabled(false);\n } else {\n setNextButtonDisabled(true);\n }\n };\n\n useEffect(() => {\n if (searchType === 'address' && addressData?.data?.addressList) {\n setDisplayList(addressData.data.addressList);\n } else if (searchType === 'postalcode' && postalData?.data?.postalCodeList) {\n console.log('transformedList', postalData.data.postalCodeList);\n const transformedList: AddressResponseDto[] = postalData.data.postalCodeList.map((p) => ({\n firstPostalCode: p.originalNumber1PostalCode,\n secondPostalCode: p.originalNumber2PostalCode,\n roadNameBaseAddress: p.roadNameBaseAddress,\n roadNameDetailAddress: p.roadNameDetailAddress,\n landNumberBaseAddress: p.landNumberBaseAddress,\n landNumberDetailAddress: p.landNumberDetailAddress,\n mainBuildingName: p.mainBuildingName\n }));\n setDisplayList(transformedList);\n }\n }, [addressData, postalData, searchType]);\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n\n setStep('initial');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n useEffect(() => {\n const road = standardizedData?.data?.addressStandardizationList[1];\n const land = standardizedData?.data?.addressStandardizationList[2];\n\n if (road && land) {\n setSelectedStandardizationAddress({\n land,\n road\n });\n }\n }, [standardizedData]);\n\n return {\n selectedStandardizationAddress,\n onStandardizationChange,\n onAddressSearchClear: onClear,\n onAddressSearchNext: onNext,\n addressSearchKeyword: searchKeyword,\n addressSearchList: displayList,\n addressSearchStep: step,\n selectedAddress,\n addressSearchOnValueChange: onSelectChange,\n nextButtonDisabled,\n detailAddressInput,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n isLoading: isLoadingAddress || isLoadingPostalCode\n };\n}\n\nexport const useAddressComponent = () => {\n const [fullAddress, setFullAddress] = useState<AddressComponentProps>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const AddressSearchComponent = () => (\n <AddressComponent isOpen={isOpen} onClose={closeModal} setValue={setFullAddress} />\n );\n\n return {\n fullAddress,\n openModal,\n AddressSearchComponent\n };\n};\n","import {\n IconGraphicsBankABNAMRO,\n IconGraphicsBankBusan,\n IconGraphicsBankDaegu,\n IconGraphicsBankGwangju,\n IconGraphicsBankGyeongnam,\n IconGraphicsBankHankookCity,\n IconGraphicsBankHsbc,\n IconGraphicsBankJangGiSinYong,\n IconGraphicsBankJeju,\n IconGraphicsBankJeochuk,\n IconGraphicsBankJeonbuk,\n IconGraphicsBankJiyeokNonghyeop,\n IconGraphicsBankKBank,\n IconGraphicsBankKakaoBank,\n IconGraphicsBankKebHana,\n IconGraphicsBankKiup,\n IconGraphicsBankKukmin,\n IconGraphicsBankNhNonghyeop,\n IconGraphicsBankPost,\n IconGraphicsBankSaemaulGeumgo,\n IconGraphicsBankSaneop,\n IconGraphicsBankSanlim,\n IconGraphicsBankScJeil,\n IconGraphicsBankSinhan,\n IconGraphicsBankSinhyeop,\n IconGraphicsBankSuhyeop,\n IconGraphicsBankTossBank,\n IconGraphicsBankWoori,\n IconGraphicsStockBugukJeungkwon,\n IconGraphicsStockDaesinJeungkwon,\n IconGraphicsStockDbGeumyungTujajeungkwon,\n IconGraphicsStockGyoboJeungkwon,\n IconGraphicsStockHanaGeumyungTujajeungkwon,\n IconGraphicsStockHankookTujajeungkwon,\n IconGraphicsStockHanwhaTujajeungkwon,\n IconGraphicsStockHiTujajeungkwon,\n IconGraphicsStockHochulEopsum,\n IconGraphicsStockHyundaiChaJeungkwon,\n IconGraphicsStockKakaoPayJeungkwon,\n IconGraphicsStockKbJeungkwon,\n IconGraphicsStockKiwoomJeungkwon,\n IconGraphicsStockMeritzJeungkwon,\n IconGraphicsStockMiraeAssetJeungkwon,\n IconGraphicsStockNhTujajeungkwon,\n IconGraphicsStockNhWooriTujajeungkwon,\n IconGraphicsStockSamsungJeungkwon,\n IconGraphicsStockSinhanTujajeungkwon,\n IconGraphicsStockSinyeongJeungkwon,\n IconGraphicsStockSkJeungkwon,\n IconGraphicsStockYuantaJeungkwon,\n IconGraphicsStockYujinTujajeungkwon\n} from 'sales-frontend-assets';\nexport const BANK_STOCK_SEARCH_MODAL_TABS = [\n {\n value: 'bank',\n label: '은행'\n },\n {\n value: 'stock',\n label: '증권사'\n }\n];\n\nexport const CODE_ICON_LIST = [\n {\n codeVal: '002',\n codeName: '산업은행',\n replaceName: '산업',\n icon: <IconGraphicsBankSaneop />\n },\n {\n codeVal: '003',\n codeName: '기업은행',\n replaceName: '기업',\n icon: <IconGraphicsBankKiup />\n },\n {\n codeVal: '004',\n codeName: '국민은행',\n replaceName: '국민',\n icon: <IconGraphicsBankKukmin />\n },\n {\n codeVal: '007',\n codeName: '수협은행',\n replaceName: '수협',\n icon: <IconGraphicsBankSuhyeop />\n },\n {\n codeVal: '009',\n codeName: '장기신용은행',\n replaceName: '장기신용',\n icon: <IconGraphicsBankJangGiSinYong />\n },\n {\n codeVal: '011',\n codeName: '농협은행',\n replaceName: 'NH농협',\n icon: <IconGraphicsBankNhNonghyeop />\n },\n {\n codeVal: '012',\n codeName: '농조',\n replaceName: '지역농협',\n icon: <IconGraphicsBankJiyeokNonghyeop />\n },\n {\n codeVal: '020',\n codeName: '우리은행',\n replaceName: '우리',\n icon: <IconGraphicsBankWoori />\n },\n {\n codeVal: '023',\n codeName: '스탠다드차타드',\n replaceName: 'SC제일',\n icon: <IconGraphicsBankScJeil />\n },\n {\n codeVal: '026',\n codeName: '(구)신한은행',\n replaceName: '신한',\n icon: <IconGraphicsBankSinhan />\n },\n {\n codeVal: '027',\n codeName: '한국씨티은행',\n replaceName: '한국씨티',\n icon: <IconGraphicsBankHankookCity />\n },\n {\n codeVal: '031',\n codeName: 'iM(대구)뱅크',\n replaceName: '대구',\n icon: <IconGraphicsBankDaegu />\n },\n {\n codeVal: '032',\n codeName: '부산은행',\n replaceName: '부산',\n icon: <IconGraphicsBankBusan />\n },\n {\n codeVal: '034',\n codeName: '광주은행',\n replaceName: '광주',\n icon: <IconGraphicsBankGwangju />\n },\n {\n codeVal: '035',\n codeName: '제주은행',\n replaceName: '제주',\n icon: <IconGraphicsBankJeju />\n },\n {\n codeVal: '037',\n codeName: '전북은행',\n replaceName: '전북',\n icon: <IconGraphicsBankJeonbuk />\n },\n {\n codeVal: '039',\n codeName: '경남은행',\n replaceName: '경남',\n icon: <IconGraphicsBankGyeongnam />\n },\n {\n codeVal: '045',\n codeName: '새마을금고중앙회',\n replaceName: '새마을금고',\n icon: <IconGraphicsBankSaemaulGeumgo />\n },\n {\n codeVal: '048',\n codeName: '신협',\n replaceName: '신협',\n icon: <IconGraphicsBankSinhyeop />\n },\n {\n codeVal: '050',\n codeName: '저축은행',\n replaceName: '저축',\n icon: <IconGraphicsBankJeochuk />\n },\n {\n codeVal: '054',\n codeName: 'HSBC은행',\n replaceName: 'HSBC',\n icon: <IconGraphicsBankHsbc />\n },\n {\n codeVal: '056',\n codeName: '에이비엔암로은행',\n replaceName: '에이비엔암로',\n icon: <IconGraphicsBankABNAMRO />\n },\n {\n codeVal: '064',\n codeName: '산림조합중앙회',\n replaceName: '산림조합',\n icon: <IconGraphicsBankSanlim />\n },\n {\n codeVal: '071',\n codeName: '우체국',\n replaceName: '우체국',\n icon: <IconGraphicsBankPost />\n },\n {\n codeVal: '081',\n codeName: 'KEB하나은행',\n replaceName: 'KEB하나',\n icon: <IconGraphicsBankKebHana />\n },\n {\n codeVal: '088',\n codeName: '신한은행',\n replaceName: '신한',\n icon: <IconGraphicsBankSinhan />\n },\n {\n codeVal: '089',\n codeName: '케이뱅크',\n replaceName: '케이뱅크',\n icon: <IconGraphicsBankKBank />\n },\n {\n codeVal: '090',\n codeName: '카카오뱅크',\n replaceName: '카카오뱅크',\n icon: <IconGraphicsBankKakaoBank />\n },\n {\n codeVal: '092',\n codeName: '토스뱅크',\n replaceName: '토스뱅크',\n icon: <IconGraphicsBankTossBank />\n },\n {\n codeVal: '209',\n codeName: '유안타증권',\n replaceName: '유안타증권',\n icon: <IconGraphicsStockYuantaJeungkwon />\n },\n {\n codeVal: '218',\n codeName: 'KB증권',\n replaceName: 'KB증권',\n icon: <IconGraphicsStockKbJeungkwon />\n },\n {\n codeVal: '230',\n codeName: '미래에셋증권',\n replaceName: '미래에셋증권',\n icon: <IconGraphicsStockMiraeAssetJeungkwon />\n },\n {\n codeVal: '238',\n codeName: '대우증권',\n replaceName: '대우증권',\n icon: <IconGraphicsStockMiraeAssetJeungkwon />\n },\n {\n codeVal: '240',\n codeName: '삼성증권',\n replaceName: '삼성증권',\n icon: <IconGraphicsStockSamsungJeungkwon />\n },\n {\n codeVal: '243',\n codeName: '한국투자증권',\n replaceName: '한국투자증권',\n icon: <IconGraphicsStockHankookTujajeungkwon />\n },\n {\n codeVal: '247',\n codeName: '우리투자증권',\n replaceName: 'NH(우리)투자증권',\n icon: <IconGraphicsStockNhWooriTujajeungkwon />\n },\n {\n codeVal: '261',\n codeName: '교보증권',\n replaceName: '교보증권',\n icon: <IconGraphicsStockGyoboJeungkwon />\n },\n {\n codeVal: '262',\n codeName: '하이투자증권',\n replaceName: '하이투자증권',\n icon: <IconGraphicsStockHiTujajeungkwon />\n },\n {\n codeVal: '263',\n codeName: '현대차투자증권',\n replaceName: '현대차증권',\n icon: <IconGraphicsStockHyundaiChaJeungkwon />\n },\n {\n codeVal: '264',\n codeName: '키움증권',\n replaceName: '키움증권',\n icon: <IconGraphicsStockKiwoomJeungkwon />\n },\n {\n codeVal: '266',\n codeName: 'SK증권',\n replaceName: 'SK증권',\n icon: <IconGraphicsStockSkJeungkwon />\n },\n {\n codeVal: '267',\n codeName: '대신증권',\n replaceName: '대신증권',\n icon: <IconGraphicsStockDaesinJeungkwon />\n },\n {\n codeVal: '269',\n codeName: '한화증권',\n replaceName: '한화투자증권',\n icon: <IconGraphicsStockHanwhaTujajeungkwon />\n },\n {\n codeVal: '270',\n codeName: '하나대투증권',\n replaceName: '하나금융투자증권',\n icon: <IconGraphicsStockHanaGeumyungTujajeungkwon />\n },\n {\n codeVal: '278',\n codeName: '신한금융투자',\n replaceName: '신한금융투자증권',\n icon: <IconGraphicsStockSinhanTujajeungkwon />\n },\n {\n codeVal: '279',\n codeName: '동부증권',\n replaceName: 'DB금융투자증권',\n icon: <IconGraphicsStockDbGeumyungTujajeungkwon />\n },\n {\n codeVal: '280',\n codeName: '유진투자증권',\n replaceName: '유진투자증권',\n icon: <IconGraphicsStockYujinTujajeungkwon />\n },\n {\n codeVal: '287',\n codeName: '메리츠증권',\n replaceName: '메리츠증권',\n icon: <IconGraphicsStockMeritzJeungkwon />\n },\n {\n codeVal: '288',\n codeName: '카카오페이증권',\n replaceName: '카카오페이증권',\n icon: <IconGraphicsStockKakaoPayJeungkwon />\n },\n {\n codeVal: '289',\n codeName: 'NH투자증권',\n replaceName: 'NH투자증권',\n icon: <IconGraphicsStockNhTujajeungkwon />\n },\n {\n codeVal: '290',\n codeName: '부국증권',\n replaceName: '부국증권',\n icon: <IconGraphicsStockBugukJeungkwon />\n },\n {\n codeVal: '291',\n codeName: '신영증권',\n replaceName: '신영증권',\n icon: <IconGraphicsStockSinyeongJeungkwon />\n }\n];\n","import { CodeDto, useSearchCommonCodeQuery } from 'sales-frontend-api/method';\n\nexport function useBankStockSearch({ onSelect }: { onSelect: (item: CodeDto) => void }) {\n const { data } = useSearchCommonCodeQuery({ commonCodeId: 'BANK_ORGN_DVSN_CODE' });\n const bankStockList = data?.data?.commonCodeList?.[0]?.codeList;\n\n const handleSelect = (item: CodeDto) => {\n onSelect(item);\n };\n\n const bankList = bankStockList?.filter((bank) => bank.codeVal?.startsWith('0'));\n\n const stockList = bankStockList?.filter((stock) => stock.codeVal?.startsWith('2'));\n\n return {\n bankList,\n stockList,\n handleSelect\n };\n}\n","import { IconGraphicsStockHochulEopsum } from 'sales-frontend-assets';\nimport { Modal } from 'sales-frontend-design-system';\n\nimport styles from './bank-stock-search-modal.module.scss';\nimport { CODE_ICON_LIST } from './constants';\nimport { useBankStockSearch } from './use-bank-stock-search';\n\nimport type { BankStockSearchModalProps } from './types';\nimport type { CodeDto } from 'sales-frontend-api/method';\n\nfunction chunk<T>(array: T[], size: number): T[][] {\n return Array.from({ length: Math.ceil(array.length / size) }, (v, i) => array.slice(i * size, i * size + size));\n}\n\nexport function BankStockSearchModal({ open, onClose, onSelect }: BankStockSearchModalProps) {\n const { bankList, stockList, handleSelect } = useBankStockSearch({\n onSelect\n });\n\n const renderItems = (list: CodeDto[]) => {\n const chunkedList = chunk(list, 5);\n\n return (\n <div className={styles['list-container']}>\n {chunkedList.map((chunk, chunkIndex) => (\n <div key={chunkIndex} className={styles.row}>\n {chunk.map((item) => {\n const findItem = CODE_ICON_LIST.find((icon) => icon.codeVal === item.codeVal);\n\n /**\n * 서버에서 받은 목록중 icon과 치환이름이 없는 케이스 처리\n * 기본 아이콘, 기본 이름 노출\n */\n const convertedItem = findItem\n ? findItem\n : {\n icon: <IconGraphicsStockHochulEopsum />,\n replaceName: item.codeName\n };\n\n return (\n <div key={`${item.codeVal}-${chunkIndex}`} className={styles.item} onClick={() => handleSelect(item)}>\n <div className={styles['icon-wrapper']}>{convertedItem?.icon}</div>\n <span> {convertedItem?.replaceName}</span>\n </div>\n );\n })}\n {chunk.length < 5 &&\n Array.from({ length: 5 - chunk.length }).map((_, i) => (\n <div key={`placeholder-${chunkIndex}-${i}`} className={styles.item} style={{ visibility: 'hidden' }} />\n ))}\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <Modal.Root isOpen={open} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"은행/증권사 선택\" showCloseButton />\n <Modal.Body>\n <div className={styles.container}>\n <div className={styles.section}>\n <p className={styles['section-title']}>은행사</p>\n {renderItems(bankList || [])}\n </div>\n <div className={styles.section}>\n <p className={styles['section-title']}>증권사</p>\n {renderItems(stockList || [])}\n </div>\n </div>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { useSearchCustomerListQuery, type CustomerDto } from 'sales-frontend-api/method';\nimport { useDropDown } from 'sales-frontend-design-system';\n\n// const mockCustomers: CustomerDto[] = [\n// { customerId: '1', customerName: '김한화', birthDate: '1999.01.01', genderCode: '남성' },\n// {\n// customerId: '2',\n// customerName: '김한화생명',\n// birthDate: '1989.01.01',\n// genderCode: '여성',\n// baseAddress: '서울시 마포구'\n// },\n// {\n// customerId: '3',\n// customerName: '김한화손해보험',\n// birthDate: '1999.01.01',\n// genderCode: '남성',\n// baseAddress: '서울시 마포구'\n// }\n// ];\n\nexport const useCustomerSearch = (onSelect?: (customer: CustomerDto) => void) => {\n const { triggerRef, isOpen, setIsOpen, DropDown } = useDropDown();\n const [searchKeyword, setSearchKeyword] = useState('');\n const [searchInput, setSearchInput] = useState('');\n const [customerList, setCustomerList] = useState<CustomerDto[]>([]);\n const [selectedCustomer, setSelectedCustomer] = useState<CustomerDto | null>(null);\n\n const { data } = useSearchCustomerListQuery({ customerName: searchKeyword });\n\n const search = () => {\n if (searchInput.length >= 2) {\n setSearchKeyword(searchInput);\n setIsOpen(true);\n } else {\n setCustomerList([]);\n setSearchKeyword('');\n setIsOpen(false);\n }\n };\n\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n search();\n }\n };\n\n const onSearchInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchInput(e.target.value);\n if (e.target.value.length < 2) {\n setCustomerList([]);\n setSearchKeyword('');\n setIsOpen(false);\n }\n };\n\n const onClear = () => {\n setSearchInput('');\n setSearchKeyword('');\n setCustomerList([]);\n setSelectedCustomer(null);\n setIsOpen(false);\n };\n\n const handleSelectItem = (customer: CustomerDto) => {\n setSelectedCustomer(customer);\n setSearchInput(customer.customerName || '');\n setCustomerList([]);\n setIsOpen(false);\n if (onSelect) {\n onSelect(customer);\n }\n };\n\n useEffect(() => {\n const filtered = data?.data?.custList?.filter((c) =>\n c.customerName?.toLowerCase().includes(searchInput.toLowerCase())\n );\n setCustomerList(filtered || []);\n }, [data, searchInput]);\n\n return {\n triggerRef,\n isOpen,\n DropDown,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n onKeyUp,\n search,\n onClear,\n handleSelectItem,\n selectedCustomer,\n setSearchInput,\n setCustomerList,\n setSearchKeyword,\n setIsOpen\n };\n};\n","import { JSX } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { convertDateString, FormCore, List, ListItem } from 'sales-frontend-design-system';\n\nimport { getGenderName, highlightOnSearchKeyword } from '../../common';\n\nimport styles from './customer-search.module.scss';\nimport { useCustomerSearch } from './use-customer-search';\n\nimport type { CustomerSearchProps } from 'sales-frontend-api/method';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\nexport const CustomerSearch = ({ onSelectCustomer, placeholder, rootProps, ...props }: CustomerSearchProps) => {\n const {\n triggerRef,\n isOpen,\n DropDown,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n onKeyUp,\n search,\n onClear,\n handleSelectItem\n } = useCustomerSearch(onSelectCustomer);\n\n return (\n <div className={cx('container')}>\n <div className={cx('search-bar')}>\n <InputBox {...rootProps} endElement={<IconMainUiSearch onClick={search} />} onClear={onClear} clearable>\n <Input\n {...props}\n onChange={onSearchInputChange}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder={placeholder || '고객명을 두 글자 이상 입력해주세요.'}\n size=\"large\"\n ref={triggerRef}\n />\n </InputBox>\n </div>\n {isOpen && customerList.length > 0 && (\n <DropDown>\n <div className={cx('result-container')}>\n <List>\n {customerList.map((customer, index) => (\n <ListItem\n key={`cust-item-${customer.customerId}-${index}`}\n onClick={() => handleSelectItem(customer)}\n selectable\n >\n <div className={cx('customer-item')}>\n <div className={cx('name')}>\n {highlightOnSearchKeyword(customer.customerName || '', searchKeyword)}\n </div>\n <div className={cx('details')}>\n <span>\n {customer.birthDate &&\n convertDateString({\n dateString: customer.birthDate,\n fromFormat: 'YYYYMMDD',\n toFormat: 'YYYY.MM.DD'\n })}\n </span>\n <span className={cx('separator')}>|</span>\n <span>{getGenderName(customer.genderCode)}</span>\n {customer.baseAddress && (\n <>\n <span className={cx('separator')}>|</span>\n <span>{customer.baseAddress}</span>\n </>\n )}\n </div>\n </div>\n </ListItem>\n ))}\n </List>\n </div>\n </DropDown>\n )}\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { convertDateString, FormCore, List, ListItem, Modal } from 'sales-frontend-design-system';\n\nimport { getGenderName, highlightOnSearchKeyword } from '../../common';\n\nimport styles from './customer-search.module.scss';\nimport { useCustomerSearch } from './use-customer-search';\n\nimport type { CustomerDto } from 'sales-frontend-api/method';\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\ninterface Props {\n isOpen: boolean;\n closeModal: () => void;\n onSelect?: (customer: CustomerDto) => void;\n}\nexport function CustomerSearchModal({ isOpen, closeModal, onSelect }: Props) {\n const {\n triggerRef,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n setSearchKeyword,\n setSearchInput,\n setCustomerList,\n onKeyUp,\n search,\n onClear,\n handleSelectItem\n } = useCustomerSearch(onSelect);\n\n return (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"고객 검색\" showCloseButton />\n <Modal.Body>\n <InputBox endElement={<IconMainUiSearch onClick={search} />} onClear={onClear} clearable>\n <Input\n onChange={onSearchInputChange}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"고객명을 두 글자 이상 입력해주세요.\"\n size=\"large\"\n ref={triggerRef}\n />\n </InputBox>\n {searchKeyword && (\n <p className={cx('result-count')}>\n 총 <span className=\"text-primary\">{customerList.length}</span>건의 검색결과\n </p>\n )}\n {searchKeyword && customerList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n {searchKeyword && customerList.length > 0 && (\n <div>\n {customerList.length > 0 && (\n <List rootProps={{ style: { width: '100%' } }}>\n {customerList.map((customer, index) => (\n <ListItem\n key={`cust-item-${customer.customerId}-${index}`}\n onClick={() => {\n handleSelectItem(customer);\n setSearchKeyword('');\n setSearchInput('');\n setCustomerList([]);\n closeModal();\n }}\n selectable\n >\n <div className={cx('customer-item', 'modal')}>\n <div className={cx('name')}>\n {highlightOnSearchKeyword(customer.customerName || '', searchKeyword)}\n </div>\n <div className={cx('details', 'modal')}>\n <span>\n {customer.birthDate &&\n convertDateString({\n dateString: customer.birthDate,\n fromFormat: 'YYYYMMDD',\n toFormat: 'YYYY.MM.DD'\n })}\n </span>\n <span className={cx('separator')}>|</span>\n <span>{getGenderName(customer.genderCode)}</span>\n {customer.baseAddress && (\n <>\n <span className={cx('separator')}>|</span>\n <span>{customer.baseAddress}</span>\n </>\n )}\n </div>\n </div>\n </ListItem>\n ))}\n </List>\n )}\n </div>\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { NationalityResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, Modal, ModalBaseProps } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { NationalitySearchResultProps } from './nationality.types';\nimport styles from './select-nationality.module.scss';\nimport { useSearchNationality } from './use-search-nationality';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\ninterface NationalitySearchInitialTextProps {\n setSearchKeyword: (keyword: string) => void;\n setSearchInput: (keyword: string) => void;\n}\n\n/**\n * 자주 찾는 국적 목록\n * 대한민국, 중국, 베트남, 미국, 러시아\n */\nconst favoriteList: NationalityResponseDto[] = [\n {\n nationalityCode: 'KR',\n nationalityCodeName: '대한민국',\n isoNumberNationalityCode: '410',\n nationalityEnglishAbbreviationName: 'KOR'\n },\n {\n nationalityCode: 'CN',\n nationalityCodeName: '중국',\n isoNumberNationalityCode: '156',\n nationalityEnglishAbbreviationName: 'CHN'\n },\n {\n nationalityCode: 'VN',\n nationalityCodeName: '베트남',\n isoNumberNationalityCode: '704',\n nationalityEnglishAbbreviationName: 'VNM'\n },\n {\n nationalityCode: 'US',\n nationalityCodeName: '미국',\n isoNumberNationalityCode: '840',\n nationalityEnglishAbbreviationName: 'USA'\n },\n {\n nationalityCode: 'RU',\n nationalityCodeName: '러시아',\n isoNumberNationalityCode: '643',\n nationalityEnglishAbbreviationName: 'RUS'\n }\n];\n\nexport const NationalitySearchInitialText = ({\n setSearchInput,\n setSearchKeyword\n}: NationalitySearchInitialTextProps) => {\n const set = (keyword: string) => {\n setSearchInput(keyword);\n setSearchKeyword(keyword);\n };\n\n return (\n <div className={cx('favorite-container')}>\n <p className={cx('favorite-title')}>많이 찾는 국적</p>\n <ul className={cx('favorite')}>\n {favoriteList.map((item, index) => (\n <li key={`${item.nationalityCode}-${index}`} onClick={() => set(item.nationalityCodeName)}>\n <button>{item.nationalityCodeName}</button>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport const NationalitySearchResult = ({ nationalityList, searchKeyWord, onSelect }: NationalitySearchResultProps) => {\n const [filterList, setFilterList] = useState<NationalityResponseDto[]>([]);\n\n useEffect(() => {\n const filterList = nationalityList.filter((item) => item.nationalityCodeName.includes(searchKeyWord)) || [];\n setFilterList(filterList);\n }, [nationalityList, searchKeyWord]);\n\n return (\n <div className=\"mt-4\">\n <p className={cx('favorite-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n <ul className={cx('favorite')}>\n {filterList.length > 0 &&\n filterList.map((item, index) => {\n return (\n <li key={`${index}-${item.nationalityCode}`} onClick={() => onSelect(item.nationalityCodeName)}>\n <button>{highlightOnSearchKeyword(item.nationalityCodeName, searchKeyWord)}</button>\n </li>\n );\n })}\n </ul>\n {filterList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyWord}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n </div>\n );\n};\n\nexport interface NationalitySearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n nationalityList: string[];\n filterList: string[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n setSelectedNationality: (nationality: string) => void;\n}\n\ninterface Props {\n setValue: (nationality: NationalityResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function NationalityComponent({ isOpen, onClose, setValue }: Props) {\n const {\n search,\n onClear,\n searchKeyWord,\n onKeyUp,\n onSearch,\n searchList,\n searchInput,\n onSelect,\n setSearchInput,\n setSearchKeyword\n } = useSearchNationality({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"국적 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={\n <button>\n <IconMainUiSearch onClick={search} />\n </button>\n }\n onClear={onClear}\n className={cx('search-input')}\n >\n <Input\n onChange={onSearch}\n onKeyUp={onKeyUp}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n value={searchInput}\n />\n </InputBox>\n {!searchKeyWord && (\n <NationalitySearchInitialText setSearchInput={setSearchInput} setSearchKeyword={setSearchKeyword} />\n )}\n {searchKeyWord && (\n <NationalitySearchResult nationalityList={searchList} searchKeyWord={searchKeyWord} onSelect={onSelect} />\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { NationalityResponseDto, useSearchNationalityQuery } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { NationalityComponent } from './nationality-search-modal';\ninterface Props {\n setValue: (nationality: NationalityResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function useSearchNationality({ setValue, onClose, isOpen }: Props) {\n const [searchKeyWord, setSearchKeyword] = useState<string>('');\n const [selectedNationality, setSelectedNationality] = useState<string>();\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchNationalityQuery({ searchKeyWord });\n const searchList = data?.data.nationalityList || [];\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 0) {\n setSearchKeyword(searchInput);\n setSelectedNationality('');\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const currentValue = (e.target as HTMLInputElement).value;\n\n /**\n * 음절 완성시마다 검색\n */\n if (currentValue.length === 0 || currentValue.slice(-1).normalize('NFD').length > 1) {\n search();\n }\n\n // /**\n // * 엔터키 입력시 검색\n // */\n // if (e.key === 'Enter') {\n // search();\n // }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedNationality('');\n }, []);\n\n const onSelect = (nationality: string) => {\n setSelectedNationality(nationality);\n const value = searchList.find((item) => item.nationalityCodeName === nationality);\n value && setValue(value);\n onClose();\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedNationality('');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onClear,\n searchKeyWord,\n searchList,\n selectedNationality,\n onSearch,\n onKeyUp,\n search,\n searchInput,\n onSelect,\n setSearchKeyword,\n setSearchInput\n };\n}\n\nexport const useNationalityComponent = () => {\n const [nationality, setNationality] = useState<NationalityResponseDto>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const NationalitySearchComponent = () => (\n <NationalityComponent isOpen={isOpen} onClose={closeModal} setValue={setNationality} />\n );\n\n return {\n nationality,\n openModal,\n NationalitySearchComponent\n };\n};\n","import { useCallback, useEffect } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nexport type NxlOneProps = {\n bizCode: string;\n tmplCode: string;\n ncsrInfoUuid?: string;\n nlcCtfnId?: string;\n // TYPE\n t?: string;\n};\n\nexport type NxlOneResponse = {\n action?: 'error' | 'close' | 'complete';\n redirectUrl?: string;\n nlcCtfnId?: string;\n};\n\nconst url = (() => {\n const type = isClient() ? window.location.hostname : '';\n if (type.includes('localhost') || type.includes('local.hanwhalife.com')) {\n return 'https://nxl-nlc-stg.hanwhalife.com';\n }\n if (type.includes('dev')) {\n return 'https://nxl-nlc-dev.hanwhalife.com';\n } else if (type.includes('stg')) {\n return 'https://nxl-nlc-stg.hanwhalife.com';\n } else {\n return 'https://nxl-nlc.hanwhalife.com';\n }\n})();\n\ntype OpenOptionType = {\n popupWidth?: number;\n popupHeight?: number;\n popupLeft?: number;\n popupTop?: number;\n windowName?: string;\n};\n\nexport default function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t = 'dp' }: NxlOneProps) {\n const buildUrl = useCallback(() => {\n const targetUrl = new URL('/auth/v1', url);\n targetUrl.searchParams.set('bizCode', bizCode);\n targetUrl.searchParams.set('tmplCode', tmplCode);\n\n if (nlcCtfnId) {\n targetUrl.searchParams.set('nlcCtfnId', nlcCtfnId);\n }\n\n if (t) {\n targetUrl.searchParams.set('t', t);\n }\n\n if (ncsrInfoUuid) {\n targetUrl.searchParams.set('ncsrInfoUuid', ncsrInfoUuid);\n }\n\n return targetUrl.toString();\n }, [bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t]);\n\n /**\n * NEXTLAB ONE 인증 페이지로 이동합니다.\n * 인증이 완료된 후, 관리자 페이지에서 정의한 프로세스 완료 URL로 이동합니다.\n */\n const redirect = () => {\n const targetUrl = buildUrl();\n location.href = targetUrl;\n };\n\n /**\n * NEXTLAB ONE 인증을 팝업으로 엽니다.\n * @param options 팝업의 크기, 위치, 창 이름을 정의합니다.\n * @returns 완료 URL 또는 인증 ID가 담긴 Query String이 포함된 전체 완료 URL을 반환합니다.\n *\n * @example\n * const { open } = useNxlOne();\n *\n * const handleClick = async () => {\n * try {\n * const result = await open({ popupWidth: 500, popupHeight: 500 });\n * console.log(result);\n * }\n */\n const open = async (options?: OpenOptionType) => {\n return new Promise<NxlOneResponse>((resolve, reject) => {\n const targetUrl = buildUrl();\n console.log('targetUrl', targetUrl);\n const width = (options && options.popupWidth) || 720;\n const height = (options && options.popupHeight) || 720;\n\n const left = (options && options.popupLeft) || (window.screen.width - width) / 2;\n const top = (options && options.popupTop) || (window.screen.height - height) / 2;\n\n const popupFeatures = `width=${width},height=${height},left=${left},top=${top}`;\n const popup = window.open(targetUrl, (options && options.windowName) || '_self_cert', popupFeatures);\n\n if (!popup) {\n reject(new Error('차단되거나 열리지 않았습니다.'));\n\n return;\n }\n\n const isSettled = false;\n\n const handleMessage = (event: MessageEvent) => {\n console.log('popup message event', event.origin, new URL(targetUrl).origin);\n\n if (event.origin !== new URL(targetUrl).origin) {\n return;\n }\n\n if (isSettled) {\n return;\n }\n\n if (event.data) {\n resolve(event.data);\n } else {\n reject(new Error('인증이 취소되거나 실패했습니다.'));\n }\n\n popup.close();\n window.removeEventListener('message', handleMessage);\n };\n window.addEventListener('message', handleMessage);\n });\n };\n\n const Iframe = function ({\n height = 720,\n className,\n style,\n allow,\n sandbox = 'allow-scripts allow-forms allow-same-origin',\n onSuccess,\n onError,\n onClose,\n strictOrigin = true\n }: {\n height?: number | string;\n className?: string;\n style?: React.CSSProperties;\n allow?: string;\n sandbox?: string;\n onSuccess?: (response: NxlOneResponse) => void;\n onError?: (response: NxlOneResponse) => void;\n onClose?: (response: NxlOneResponse) => void;\n strictOrigin?: boolean;\n }) {\n const targetUrl = buildUrl();\n\n useEffect(() => {\n if (!onSuccess && !onError) {\n return;\n }\n\n const handler = (e: MessageEvent) => {\n console.log('message event', e);\n\n /** 테스트를 위해 주석처리 */\n // if (strictOrigin && e.origin !== url) {\n // console.warn('Invalid origin:', e.origin);\n\n // return;\n // }\n\n const d = e.data as NxlOneResponse;\n if (d) {\n if (d.action === 'close') {\n onClose?.(d);\n } else if (d.action === 'error') {\n onError?.(d);\n } else if (d.action === 'complete') {\n onSuccess?.(d);\n }\n } else {\n onError?.({\n action: 'error',\n nlcCtfnId: '',\n redirectUrl: ''\n });\n }\n };\n\n window.addEventListener('message', handler as EventListener);\n\n return () => window.removeEventListener('message', handler as EventListener);\n }, [onClose, onError, onSuccess, strictOrigin]);\n\n return (\n <iframe\n src={targetUrl}\n width=\"100%\"\n height={typeof height === 'number' ? `${height}px` : height}\n style={{ border: 0, ...style }}\n className={className}\n sandbox={sandbox}\n {...(allow ? { allow } : {})}\n />\n );\n };\n\n return { open, redirect, Iframe };\n}\n","'use client';\n\n/**\n * @todo 추후 실제 넥스트랩 모듈로 교체필요\n */\nimport { Modal, useModalState } from 'sales-frontend-design-system';\nimport { isClient } from 'sales-frontend-utils';\n\nimport useNxlOne, { NxlOneResponse } from './hook';\n\nexport type Step =\n | 'appInit'\n | 'tabletEformInit'\n | 'tabletEformRe'\n | 'tabletEformSubInfo'\n | 'smartphoneEformSubInfo'\n | 'smartphoneEformAlimtalkInit'\n | 'smartphoneEformAlimtalkRe'\n | 'tabletNewCustomer'\n | 'tabletNewCustomerLegalRep'\n | 'tabletCustomerInfoPlanAgreement'\n | 'tabletCustomerInfoProductAgreement';\n\nexport interface CodeSet {\n dev: {\n bizCode: string;\n tmplCode: string;\n };\n stg: {\n bizCode: string;\n tmplCode: string;\n };\n}\n\n/**\n * 본인인증 템플릿코드, 비즈코드 참조객체\n */\nexport const CODES: Record<Step, CodeSet> = {\n appInit: {\n dev: {\n tmplCode: 'HST',\n bizCode: 'DPS'\n },\n stg: {\n tmplCode: 'R7Y',\n bizCode: 'DPS'\n }\n },\n\n tabletEformInit: {\n dev: {\n tmplCode: '4X2',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'NO7',\n bizCode: 'DET'\n }\n },\n\n tabletEformRe: {\n dev: {\n tmplCode: 'WJ1',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'WQF',\n bizCode: 'DET'\n }\n },\n\n tabletEformSubInfo: {\n dev: {\n tmplCode: 'GJB',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'C1D',\n bizCode: 'DET'\n }\n },\n\n smartphoneEformSubInfo: {\n dev: {\n tmplCode: 'YOQ',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'FLL',\n bizCode: 'DES'\n }\n },\n\n smartphoneEformAlimtalkInit: {\n dev: {\n tmplCode: '8YA',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'T9L',\n bizCode: 'DES'\n }\n },\n\n smartphoneEformAlimtalkRe: {\n dev: {\n tmplCode: 'NPK',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'YMV',\n bizCode: 'DES'\n }\n },\n\n tabletNewCustomer: {\n dev: {\n tmplCode: '948',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'YQM',\n bizCode: 'DIS'\n }\n },\n\n tabletNewCustomerLegalRep: {\n dev: {\n tmplCode: 'SBI',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'FB3',\n bizCode: 'DIS'\n }\n },\n\n tabletCustomerInfoPlanAgreement: {\n dev: {\n tmplCode: 'QCA',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'AST',\n bizCode: 'DIS'\n }\n },\n\n tabletCustomerInfoProductAgreement: {\n dev: {\n tmplCode: 'I7K',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'XG6',\n bizCode: 'DIS'\n }\n }\n};\n\ninterface Props {\n onSuccess?: (result: NxlOneResponse) => void;\n onError?: (result: NxlOneResponse) => void;\n onClose?: (result: NxlOneResponse) => void;\n modalSize?: 'small' | 'medium' | 'large' | 'full-screen';\n env: 'stg' | 'dev';\n /**\n * @property 'appInit'\n *\n * 업무명 : 영업지원 앱 로그인,\n * 상세업무명 : 앱 초기 설정 본인인증 (2차인증)\n * @property 'tabletEformInit'\n *\n * 업무명 : [태블릿] 전자청약(최초 진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 모두 진행)\n * @property 'tabletEformRe'\n *\n * 업무명 : [태블릿] 전자청약(재진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 모두 진행)\n * @property 'tabletEformSubInfo'\n *\n * 업무명 : [태블릿] 전자청약 [청약 부속정보 확인] 단계,\n * 상세업무명 : 지정대리청구서비스 특약신청 시 실명확인\n * @property 'smartphoneEformSubInfo'\n *\n * 업무명 : [스마트폰] 전자청약 [청약 부속정보 확인] 단계,\n * 상세업무명 : 지정대리청구서비스 특약신청 시 실명확인\n * @property 'smartphoneEformAlimtalkInit'\n *\n * 업무명 : [스마트폰] 전자청약 알림톡(최초 진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 개별 진행)\n * @property 'smartphoneEformAlimtalkRe'\n *\n * 업무명 : [스마트폰] 전자청약 알림톡(재진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 개별 진행)\n * @property 'tabletNewCustomer'\n *\n * 업무명 : [태블릿] 신규고객등록,\n * 상세업무명 : 고객정보 본인인증\n * @property 'tabletNewCustomerLegalRep'\n *\n * 업무명 : [태블릿] 신규고객등록,\n * 상세업무명 : 법정대리인 본인인증(친권자1,2 개별 진행)\n * @property 'tabletCustomerInfoPlanAgreement'\n *\n * 업무명 : [태블릿] 고객정보조회,\n * 상세업무명 : 가입설계동의갱신 인증\n * @property 'tabletCustomerInfoProductAgreement'\n *\n * 업무명 : [태블릿] 고객정보조회,\n * 상세업무명 : 상품소개동의갱신 인증\n */\n step: Step;\n}\n\n/**\n * onSuccess, onError, onClose 이벤트 핸들러 구현 필요\n * onSuccess: 인증 성공 시 호출, 결과 데이터를 부모 창으로 전달\n * onError: 인증 실패 시 호출, 에러 정보를 부모 창으로 전달\n * onClose: 인증 창이 닫힐 때 호출, 필요에 따라 추가 작업 수행\n * modalSize: 모달 크기 설정 (예: 'small', 'medium', 'large', 'full-screen')\n * bizCode 및 tmplCode: NXL ONE 서비스에서 제공하는 비즈니스 코드 및 템플릿 코드\n */\nexport function useNxlOneModal({\n onSuccess = (result) => {\n console.log('on success', JSON.stringify(result));\n },\n onError = (result) => {\n console.log('on error', JSON.stringify(result));\n },\n onClose = (result) => {\n console.log('on close', JSON.stringify(result));\n },\n modalSize = 'medium',\n step = 'appInit',\n env = 'stg'\n}: Props) {\n const { isOpen, openModal, closeModal } = useModalState();\n const { bizCode, tmplCode } = CODES[step][env];\n\n const { Iframe, open } = useNxlOne({\n bizCode,\n tmplCode\n });\n\n return {\n openNxlOneModal: () => {\n const type = isClient() ? window.location.hostname : '';\n if (type.includes('localhost') || type.includes('local.hanwhalife.com')) {\n open({ popupWidth: 500, popupHeight: 500 }).then((result) => {\n onSuccess(result);\n });\n } else {\n openModal();\n }\n },\n closeNxlOneModal: closeModal,\n isNxlOneModalOpen: isOpen,\n NxlModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize={modalSize}>\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Body raw>\n <Iframe\n onSuccess={onSuccess}\n onError={onError}\n onClose={(result) => {\n onClose(result);\n closeModal();\n }}\n />\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { VisaStatusResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, Modal, ModalBaseProps } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './select-visa.module.scss';\nimport { useSearchVisa } from './use-search-visa';\nimport { VisaSearchResultProps } from './visa.types';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\ninterface VisaSearchInitialTextProps {\n visaList: VisaStatusResponseDto[];\n onSelect: (visa: VisaStatusResponseDto) => void;\n}\nexport const VisaSearchInitialText = ({ visaList, onSelect }: VisaSearchInitialTextProps) => {\n return (\n <div className={cx('favorite-container')}>\n <ul className={cx('favorite')}>\n {visaList.map((item, index) => {\n return (\n <li key={`${index}-${item.integrationCodeValueName}`} onClick={() => onSelect(item)}>\n <button>{item.integrationCodeValueName}</button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nexport const VisaSearchResult = ({ visaList, searchKeyword, onSelect }: VisaSearchResultProps) => {\n const [filterList, setFilterList] = useState<VisaStatusResponseDto[]>([]);\n\n useEffect(() => {\n const filterList = visaList.filter((item) => item.integrationCodeValueName?.includes(searchKeyword)) || [];\n setFilterList(filterList);\n }, [visaList, searchKeyword]);\n\n return (\n <div className=\"mt-4\">\n <p className={cx('favorite-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n <ul className={cx('favorite')}>\n {filterList.length > 0 &&\n filterList.map((item, index) => {\n return (\n <li key={`${index}-${item.integrationCodeValueName}`} onClick={() => onSelect(item)}>\n <button>{highlightOnSearchKeyword(`${item.integrationCodeValueName}`, searchKeyword)}</button>\n </li>\n );\n })}\n </ul>\n {filterList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n </div>\n );\n};\n\nexport interface VisaSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n visaList: string[];\n filterList: string[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n setSelectedVisa: (visa: string) => void;\n}\n\ninterface Props {\n setValue: (visa: VisaStatusResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function VisaComponent({ isOpen, onClose, setValue }: Props) {\n const { search, onClear, searchKeyword, onKeyUp, onSearch, searchList, searchInput, onSelect } = useSearchVisa({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"체류자격 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={\n <button>\n <IconMainUiSearch onClick={search} />\n </button>\n }\n onClear={onClear}\n className={cx('search-input')}\n >\n <Input\n onChange={onSearch}\n onKeyUp={onKeyUp}\n placeholder=\"코드, 자격명 입력\"\n size=\"large\"\n value={searchInput}\n />\n </InputBox>\n {!searchKeyword && <VisaSearchInitialText visaList={searchList} onSelect={onSelect} />}\n {searchKeyword && (\n <VisaSearchResult visaList={searchList} searchKeyword={searchKeyword} onSelect={onSelect} />\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { useSearchVisaQuery, VisaStatusResponseDto } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { VisaComponent } from './visa-search-modal';\ninterface Props {\n setValue: (visa: VisaStatusResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchVisa({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [selectedVisa, setSelectedVisa] = useState<VisaStatusResponseDto>();\n const [searchInput, setSearchInput] = useState<string>('');\n\n // const { data: visaList } = useSearchModalAddressQuery({ searchKeyword });\n\n const { data: visaList } = useSearchVisaQuery();\n const searchList: VisaStatusResponseDto[] = visaList?.data?.visaStatusList || [];\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 0) {\n setSearchKeyword(searchInput);\n setSelectedVisa(undefined);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedVisa(undefined);\n }, []);\n\n const onSelect = (visa: VisaStatusResponseDto) => {\n setSelectedVisa(visa);\n setValue(visa);\n onClose();\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedVisa(undefined);\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onClear,\n searchKeyword,\n searchList,\n selectedVisa,\n onSearch,\n onKeyUp,\n search,\n searchInput,\n onSelect,\n setSearchKeyword,\n setSearchInput\n };\n}\n\nexport const useVisaComponent = () => {\n const [visa, setVisa] = useState<VisaStatusResponseDto>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const VisaSearchComponent = () => <VisaComponent isOpen={isOpen} onClose={closeModal} setValue={setVisa} />;\n\n return {\n visa,\n openModal,\n VisaSearchComponent\n };\n};\n","import classNames from 'classnames/bind';\nimport { PersonalCustomerProfileResponseDto } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './dea-customer-search-modal.module.scss';\n\ninterface DeaCustomerSearchResultProps {\n customerList: PersonalCustomerProfileResponseDto[];\n onCustomerSelect: (customer: PersonalCustomerProfileResponseDto) => void;\n selectedCustomer: PersonalCustomerProfileResponseDto | null;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function DeaCustomerSearchResult({\n customerList,\n onCustomerSelect,\n selectedCustomer\n}: DeaCustomerSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{customerList.length}</span>건의 검색결과\n </p>\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>고객ID</th>\n <th className={cx('th-padding')}>고객명</th>\n <th className={cx('th-padding')}>주민등록번호</th>\n <th className={cx('th-padding')}>직종업종명</th>\n <th className={cx('th-padding')}>전화번호</th>\n <th className={cx('th-padding')}>주소</th>\n </tr>\n </thead>\n <tbody>\n {customerList.length > 0 ? (\n customerList.map((customer, index) => (\n <tr key={`cust-item-${customer.customerId}-${index}}`}>\n <td>\n <input\n type=\"radio\"\n name=\"customer\"\n value={customer.customerId || ''}\n checked={selectedCustomer?.customerId === customer.customerId}\n onChange={() => onCustomerSelect(customer)}\n />\n </td>\n <td>{customer.customerId}</td>\n <td>{customer.customerName}</td>\n <td>{customer.residentNumber}</td>\n <td>{customer.occupationKindName}</td>\n <td>{customer.mobilePhoneNumber}</td>\n <td>{customer.address}</td>\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={7}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </Table>\n </div>\n );\n}\n","/* eslint-disable react/no-unknown-property */\nimport React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { PersonalCustomerProfileRequestDto, PersonalCustomerProfileResponseDto } from 'sales-frontend-api/method';\nimport { Button, FormField, Select } from 'sales-frontend-design-system';\nimport { getE2EDataIDs } from 'sales-frontend-utils';\n\nimport styles from './dea-customer-search-modal.module.scss';\nimport { DeaCustomerSearchResult } from './dea-customer-search-result';\n\nconst { TextField } = FormField;\n\n// ASTx2 is loaded from an external script, declare it here to inform TypeScript.\ndeclare const $ASTX2: any;\n\ninterface DeaCustomerSearchProps {\n setSearchParams: (params?: PersonalCustomerProfileRequestDto) => void;\n customerList: PersonalCustomerProfileResponseDto[];\n onCustomerSelect: (customer: PersonalCustomerProfileResponseDto) => void;\n selectedCustomer: PersonalCustomerProfileResponseDto | null;\n isLoading: boolean;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function DeaCustomerSearch({\n setSearchParams,\n customerList,\n onCustomerSelect,\n selectedCustomer\n}: DeaCustomerSearchProps) {\n const [residentNumberFront, setResidentNumberFront] = useState('');\n const [residentNumberBack, setResidentNumberBack] = useState('');\n\n const handleSearch = () => {\n getE2EDataIDs(['residentNumberFront', 'residentNumberBack'], (e2edata: any) => {\n setSearchParams({\n residentNumberFront,\n residentNumberBack,\n e2edata\n });\n });\n };\n\n const handleReset = () => {\n setResidentNumberFront('');\n setResidentNumberBack('');\n setSearchParams();\n };\n\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n e.key === 'Enter' && handleSearch();\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n //입력값이 숫자나 백스페이스가 아니면 false\n if (!(e.key === 'Backspace' || !isNaN(parseInt(e.key)))) {\n e.preventDefault();\n }\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">고객 구분</FormField.Label>\n <Select value=\"personal\" placeholder=\"개인\" disabled style={{ width: '100px' }}>\n <Select.Option value=\"personal\">개인</Select.Option>\n </Select>\n <FormField.Label className=\"subtitle3 text-body-1\">주민등록번호</FormField.Label>\n <TextField\n name=\"residentNumberFront\"\n value={residentNumberFront}\n maxLength={6}\n placeholder=\"앞 6자리 입력\"\n onChange={(e) => setResidentNumberFront(e.target.value)}\n size=\"medium\"\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n rootProps={{\n className: cx('search-input'),\n onClear: () => {\n setResidentNumberFront('');\n }\n }}\n />\n -\n <TextField\n type=\"password\"\n name=\"residentNumberBack\"\n value={residentNumberBack}\n maxLength={7}\n placeholder=\"뒤 7자리 입력\"\n /** ASTx2 e2e 설정 */\n //@ts-ignore\n e2e_type=\"1\"\n /** 숫자타입만 입력받는 설정 */\n e2e_inputtype=\"1\"\n onChange={(e) => setResidentNumberBack(e.target.value)}\n size=\"medium\"\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n rootProps={{\n className: cx('search-input'),\n onClear: () => {\n setResidentNumberBack('');\n }\n }}\n />\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n <DeaCustomerSearchResult\n customerList={customerList}\n onCustomerSelect={onCustomerSelect}\n selectedCustomer={selectedCustomer}\n />\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {\n getDspCustomerListMethod,\n PersonalCustomerProfileRequestDto,\n PersonalCustomerProfileResponseDto\n} from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\nimport { initASTX2, loadScript } from 'sales-frontend-utils';\n\nimport { DeaCustomerSearch } from './dea-customer-search';\n\ninterface DeaCustomerSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSave: (customer: PersonalCustomerProfileResponseDto) => void;\n}\n\nexport const DeaCustomerSearchModal: React.FC<DeaCustomerSearchModalProps> = ({ isOpen, onClose, onSave }) => {\n const [selectedCustomer, setSelectedCustomer] = useState<PersonalCustomerProfileResponseDto | null>(null);\n const [searchParams, setSearchParams] = useState<PersonalCustomerProfileRequestDto>();\n\n const { data, isFetching } = useQuery({\n queryKey: ['deaCustomerSearch', searchParams],\n queryFn: () => getDspCustomerListMethod(searchParams!),\n enabled: !!searchParams,\n retry: false\n });\n\n const [customerList, setCustomerList] = useState<PersonalCustomerProfileResponseDto[]>([]);\n loadScript();\n\n useEffect(() => {\n if (data?.data) {\n setCustomerList(data.data);\n } else {\n setCustomerList([]);\n }\n }, [data]);\n\n useEffect(() => {\n setSelectedCustomer(null);\n }, [customerList]);\n\n useEffect(() => {\n initASTX2();\n }, []);\n\n const handleCustomerSelect = (customer: PersonalCustomerProfileResponseDto) => {\n setSelectedCustomer(customer);\n };\n\n const handleSave = () => {\n if (selectedCustomer) {\n onSave(selectedCustomer);\n onClose();\n }\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"고객 검색\" showCloseButton />\n <Modal.Body>\n <DeaCustomerSearch\n setSearchParams={setSearchParams}\n customerList={customerList}\n onCustomerSelect={handleCustomerSelect}\n selectedCustomer={selectedCustomer}\n isLoading={isFetching}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSave}\n disabled={!selectedCustomer}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","import { EmployeeDivisionCodeType } from 'sales-frontend-api/method';\n\nexport const EMPLOYEE_SEARCH_TABS: { label: string; value: EmployeeDivisionCodeType }[] = [\n { value: 'WHOL', label: '전체' },\n { value: 'FP', label: 'FP' },\n { value: 'WKIS', label: '내근' }\n];\n","import classNames from 'classnames/bind';\nimport { EmployeeProfileResponseDto } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Checkbox, CheckboxButton, Radio, RadioGroup, Table } from 'sales-frontend-design-system';\n\nimport styles from './employee-search-modal.module.scss';\n\ninterface EmployeeSearchResultProps {\n filteredEmployees: EmployeeProfileResponseDto[];\n onEmployeeSelect: (employee: EmployeeProfileResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function EmployeeSearchResult({ filteredEmployees, onEmployeeSelect }: EmployeeSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredEmployees.length}</span>건의 검색결과\n </p>\n {filteredEmployees.length > 0 ? (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>사원번호</th>\n <th className={cx('th-padding')}>사원명</th>\n <th className={cx('th-padding')}>소속기관명</th>\n <th className={cx('th-padding')}>사원구분</th>\n </tr>\n </thead>\n <tbody>\n {filteredEmployees.map((employee) => {\n return (\n <>\n <tr>\n <td>\n <input\n type=\"radio\"\n name=\"employee\"\n value={employee.employeeNumber || ''}\n onChange={(e) => {\n /**\n * @todo Radio.Item 라디오 선택시, 현재라디오를 checked 상태로 만들수가 없다....\n */\n onEmployeeSelect(employee);\n }}\n ></input>\n </td>\n <td>{employee.employeeNumber}</td>\n <td>{employee.employeeName}</td>\n <td>{employee.organizationName}</td>\n <td>{employee.employeeDivisionCode}</td>\n </tr>\n </>\n );\n })}\n </tbody>\n </Table>\n ) : (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>사원번호</th>\n <th className={cx('th-padding')}>사원명</th>\n <th className={cx('th-padding')}>소속기관명</th>\n <th className={cx('th-padding')}>사원구분</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td colSpan={5}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n </tbody>\n </Table>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { EmployeeDivisionCodeType, EmployeeProfileResponseDto } from 'sales-frontend-api/method';\nimport { Button, FormField, Select } from 'sales-frontend-design-system';\n\nimport { EMPLOYEE_SEARCH_TABS } from './constants';\nimport styles from './employee-search-modal.module.scss';\nimport { EmployeeSearchResult } from './employee-search-result';\n\nconst { TextField } = FormField;\n\ninterface EmployeeSearchProps {\n activeTab: EmployeeDivisionCodeType;\n onTabChange: (value: EmployeeDivisionCodeType) => void;\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n searchInput: string;\n setSearchInput: (value: string) => void;\n employeeList: EmployeeProfileResponseDto[];\n onEmployeeSelect: (employee: EmployeeProfileResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function EmployeeSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchTerm,\n searchInput,\n setSearchInput,\n employeeList,\n onEmployeeSelect\n}: EmployeeSearchProps) {\n const handleSearch = () => {\n setSearchTerm(searchInput);\n };\n\n const handleReset = () => {\n setSearchTerm('');\n setSearchInput('');\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">성명/사번</FormField.Label>\n <TextField\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n onKeyUp={(e) => e.key === 'Enter' && handleSearch()}\n rootProps={{\n onClear: handleReset,\n clearable: true\n }}\n />\n </div>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">사원 구분</FormField.Label>\n <Select\n value={activeTab}\n onChange={(value) => onTabChange(value as EmployeeDivisionCodeType)}\n className={styles.select}\n size=\"medium\"\n >\n {EMPLOYEE_SEARCH_TABS.map((option, index) => (\n <Select.Option key={`${option.value}-${index}`} value={option.value}>\n {option.label}\n </Select.Option>\n ))}\n </Select>\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n {searchTerm && (\n <EmployeeSearchResult\n filteredEmployees={employeeList}\n onEmployeeSelect={onEmployeeSelect}\n searchTerm={searchTerm}\n />\n )}\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport {\n EmployeeDivisionCodeType,\n EmployeeProfileResponseDto,\n useSearchEmployeeProfileQuery\n} from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { EmployeeSearch } from './employee-search';\n\ninterface EmployeeSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSelect: (employee: EmployeeProfileResponseDto) => void;\n}\n\nexport const EmployeeSearchModal: React.FC<EmployeeSearchModalProps> = ({ isOpen, onClose, onSelect }) => {\n const [activeTab, setActiveTab] = useState<EmployeeDivisionCodeType>('WHOL');\n const [selectedEmployee, setSelectedEmployee] = useState<EmployeeProfileResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchEmployeeProfileQuery({\n searchWord: searchTerm,\n employeeDivisionCode: activeTab\n });\n\n const [employeeList, setEmployeeList] = useState<EmployeeProfileResponseDto[]>([]);\n\n useEffect(() => {\n if (data?.data) {\n setEmployeeList(data.data);\n } else {\n setEmployeeList([]);\n }\n }, [data]);\n\n const handleEmployeeSelect = (employee: EmployeeProfileResponseDto) => {\n setSelectedEmployee(employee);\n };\n\n const handleSelect = () => {\n if (selectedEmployee) {\n onSelect(selectedEmployee);\n onClose();\n }\n };\n\n const onTabChange = (value: EmployeeDivisionCodeType) => {\n setSearchTerm('');\n setSearchInput('');\n setActiveTab(value);\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"사원 검색\" showCloseButton />\n <Modal.Body>\n <EmployeeSearch\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n searchInput={searchInput}\n setSearchInput={setSearchInput}\n employeeList={employeeList}\n onEmployeeSelect={handleEmployeeSelect}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSelect}\n disabled={!selectedEmployee}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","export const JOB_SEARCH_TABS = [\n { value: 'jobName', label: '직종명 검색' },\n { value: 'jobCode', label: '분류로 검색' }\n];\n","import { useSearchOccupationDetailQuery } from 'sales-frontend-api/method';\nimport { Table } from 'sales-frontend-design-system';\n\ninterface Props {\n occupationTypeCode: string;\n occupationIndustryCode: string;\n}\n\nexport function JobSearchDetail({ occupationTypeCode, occupationIndustryCode }: Props) {\n const { data: detail } = useSearchOccupationDetailQuery({\n occupationIndustryCode,\n occupationIndustryTypeCode: occupationTypeCode || '1'\n });\n\n if (!detail || !detail.data) {\n return null;\n }\n const {\n /** @description 직종해설내용 */\n occupationExplanationContent,\n /** @description 직업예시명 */\n occupationExampleName,\n /** @description 위험등급명 */\n riskGradeName,\n /** @description 위험등급코드 */\n riskGradeCode,\n /** @description 상해위험등급코드명 */\n injuryRiskGradeCodeName,\n /** @description 상해위험등급코드 */\n injuryRiskGradeCode,\n /** @description 입원등급코드명 */\n hospitalizationGradeCodeName,\n /** @description 입원등급코드 */\n hospitalizationGradeCode,\n /** @description 상해직종코드 */\n injuryOccupationCode\n } = detail.data;\n\n return (\n <>\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th className=\"px-small\">직종 해설</th>\n <td className=\"px-small\">{occupationExplanationContent}</td>\n </tr>\n <tr>\n <th className=\"px-small\">직종 예시</th>\n <td className=\"px-small\">{occupationExampleName}</td>\n </tr>\n <tr>\n <th className=\"px-small\">위험 등급</th>\n <td className=\"px-small\">\n {riskGradeName}({riskGradeCode})\n </td>\n </tr>\n <tr>\n <th className=\"px-small\">입원 등급</th>\n <td className=\"px-small\">\n {hospitalizationGradeCodeName}({hospitalizationGradeCode})\n </td>\n </tr>\n <tr>\n <th className=\"px-small\">상해 등급</th>\n <td className=\"px-small\">\n {injuryRiskGradeCodeName}({injuryRiskGradeCode})\n </td>\n </tr>\n </tbody>\n </Table>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchCategory({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('category-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')} onToggle={() => {}}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}-${index}-accordion`}\n key={`item-${job.occupationIndustryCode}-${index}`}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item size=\"small\" value={job.occupationIndustryCode} onChange={() => onJobSelect(job)}>\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}({job.occupationIndustryCode})\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio, Table } from 'sales-frontend-design-system';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchFavorite({ filteredJobs, onJobSelect }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p>많이 찾는 직종</p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n key={`item-${job.occupationIndustryCode}-${index}`}\n id={`item-${job.occupationIndustryCode}-${index}`}\n className={cx('accordion-item')}\n >\n <Accordion.HeaderDiv className={cx('accordion-header-item')}>\n <Radio.Item\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => onJobSelect(job)}\n className={cx('radio-item')}\n >\n {job.occupationIndustryName}({job.occupationIndustryCode})\n </Radio.Item>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchResult({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}`}\n key={`item-${job.occupationIndustryCode}-${index}}`}\n // onClick={() => accordion.toggleItem(`item-${job.code}`)}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item\n id={`item-${job.occupationIndustryCode}`}\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => {\n onJobSelect(job);\n }}\n >\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import { Dispatch, SetStateAction } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { Tab, FormField, Select } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearchCategory } from './job-search-category';\nimport { JobSearchFavorite } from './job-search-favorite';\nimport styles from './job-search-modal.module.scss';\nimport { JobSearchResult } from './job-search-result';\n\nconst { TextField } = FormField;\ninterface JobSearchProps {\n activeTab: string;\n onTabChange: (value: string) => void;\n searchTerm: string;\n setSearchInput: (value: string) => void;\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchInput: string;\n setSearchTerm: (value: string) => void;\n firstCategory: string;\n setFirstCategory: Dispatch<SetStateAction<string>>;\n secondCategory: string;\n setSecondCategory: Dispatch<SetStateAction<string>>;\n firstCategoryList: OccupationResponseDto[];\n secondCategoryList: OccupationResponseDto[];\n jobList?: OccupationResponseDto[];\n isLoading: boolean;\n}\nconst cx = classNames.bind(styles);\nconst { Option } = Select;\nexport function JobSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchInput,\n filteredJobs,\n onJobSelect,\n setSearchTerm,\n searchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList,\n isLoading\n}: JobSearchProps) {\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n setSearchTerm(searchInput);\n }\n };\n\n return (\n <>\n <Tab.Root\n defaultValue={activeTab}\n onValueChange={onTabChange}\n scroll=\"fixed\"\n size=\"small\"\n variant=\"sub\"\n style={{ gap: 0, overflow: 'visible' }}\n >\n {JOB_SEARCH_TABS.map((tab, index) => (\n <Tab.Item key={`${tab.value}-${index}`} value={tab.value}>\n {tab.label}\n </Tab.Item>\n ))}\n </Tab.Root>\n <div>\n {activeTab === 'jobName' && (\n <div className={cx('favorite-jobs-section')}>\n <TextField\n placeholder=\"직종명 검색\"\n value={searchInput}\n onKeyUp={onKeyUp}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n rootProps={{\n endElement: <IconMainUiSearch onClick={() => setSearchTerm(searchInput)} />,\n onClear: () => {\n setSearchTerm('');\n setSearchInput('');\n }\n }}\n />\n {!searchTerm && <JobSearchFavorite filteredJobs={filteredJobs} onJobSelect={onJobSelect} />}\n {searchTerm && !isLoading && (\n <JobSearchResult filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n {activeTab === 'jobCode' && (\n <div className={cx('select-jobs-section')}>\n <div className={cx('category-section')}>\n <Select\n name=\"first_category\"\n onChange={(value) => {\n setFirstCategory(value);\n setSecondCategory('');\n }}\n placeholder=\"대분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={firstCategory}\n >\n {firstCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n <Select\n name=\"second_category\"\n onChange={setSecondCategory}\n placeholder=\"중분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={secondCategory}\n disabled={!firstCategory}\n >\n {secondCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n </div>\n\n {firstCategory && secondCategory && !isLoading && (\n <JobSearchCategory filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport {\n OccupationResponseDto,\n useSearchOccupationDetailQuery,\n useSearchOccupationQuery\n} from 'sales-frontend-api/method';\nimport { Button, Modal, ModalUtils, useModalState } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearch } from './job-search';\n\n/**\n * 초기값(많이 찾는 직종)\n * 회사 사무직 종사자\n * 경영지원 사무직 종사자\n * 주부\n * 주방장 및 조리사\n * 보험설계사(당사)\n */\nconst initData: OccupationResponseDto[] = [\n {\n occupationIndustryCode: '430101',\n occupationIndustryName: '회사 사무직 종사자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '400301',\n occupationIndustryName: '경영지원 사무직 관리자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '510201',\n occupationIndustryName: '전업주부',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '442501',\n occupationIndustryName: '주방장 및 조리사(선박 조리사 제외)',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '450303',\n occupationIndustryName: '보험설계사(당사)',\n occupationTypeCode: null,\n historySequence: 0\n }\n];\n\nconst useJobSearch = () => {\n const [activeTab, setActiveTab] = useState<string>(JOB_SEARCH_TABS[0]?.value ?? '');\n const [selectedJob, setSelectedJob] = useState<OccupationResponseDto | null>(null);\n // const [selectedJobDetail, setSelectedJobDetail] = useState<OccupationDetailResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n const handleJobSelect = (job: OccupationResponseDto) => {\n setSelectedJob(job);\n };\n const [firstCategory, setFirstCategory] = useState<string>('');\n const [secondCategory, setSecondCategory] = useState<string>('');\n const [jobList, setJobList] = useState<OccupationResponseDto[]>(initData);\n const [firstCategoryList, setFirstCategoryList] = useState<OccupationResponseDto[]>([]);\n const [secondCategoryList, setSecondCategoryList] = useState<OccupationResponseDto[]>([]);\n\n const { data: detail } = useSearchOccupationDetailQuery({\n occupationIndustryCode: selectedJob?.occupationIndustryCode || '',\n occupationIndustryTypeCode: '1'\n });\n\n const selectedJobDetail = detail?.data;\n\n const { data, isLoading } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: searchTerm ? '4' : '3',\n occupationSubCategoryCode: secondCategory,\n searchOccupationIndustryName: searchTerm\n });\n const { data: firstCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: '',\n occupationSearchTypeCode: '1',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n const { data: secondCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: '2',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n\n const reset = () => {\n setSearchInput('');\n setSearchTerm('');\n setFirstCategory('');\n setSecondCategory('');\n };\n useEffect(() => {\n reset();\n }, [activeTab]);\n\n useEffect(() => {\n setSelectedJob(null);\n\n if (data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 있는 경우 */\n const filteredJobs = data.data.occupationList.filter((job) => job.occupationIndustryName.includes(searchTerm));\n setJobList(filteredJobs);\n } else if (!data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 없는 경우 */\n setJobList([]);\n } else if (!searchTerm && activeTab === 'jobName') {\n /** 검색어가 없고, 검색된 데이터가 없는 경우 , 많이 찾는 직종 노출 */\n setJobList(initData);\n } else if (activeTab === 'jobCode' && firstCategory && secondCategory) {\n /** 대분류, 중분류 선택된 경우 */\n setJobList(data?.data.occupationList || []);\n }\n }, [searchTerm, data, firstCategory, secondCategory, secondCategoryData, activeTab]);\n\n useEffect(() => {\n if (firstCategoryData) {\n setFirstCategoryList(firstCategoryData.data.occupationList);\n }\n }, [firstCategoryData]);\n\n useEffect(() => {\n if (secondCategoryData) {\n setSecondCategoryList(secondCategoryData.data.occupationList);\n }\n }, [secondCategoryData]);\n\n return {\n activeTab,\n setActiveTab,\n selectedJob,\n setSelectedJob,\n searchTerm,\n setSearchTerm,\n handleJobSelect,\n filteredJobs: jobList,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n secondCategoryList,\n firstCategoryList,\n reset,\n isLoading,\n selectedJobDetail\n };\n};\n\nexport function useJobSearchModal() {\n const {\n activeTab,\n setActiveTab,\n searchTerm,\n setSearchTerm,\n filteredJobs,\n handleJobSelect,\n selectedJob,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList,\n setSelectedJob,\n selectedJobDetail,\n reset,\n isLoading\n } = useJobSearch();\n\n const { isOpen, openModal, closeModal } = useModalState();\n const onTabChange = (value: string) => {\n reset();\n setActiveTab(value);\n };\n\n const openInitModal = () => {\n reset();\n setSelectedJob(null);\n setActiveTab('jobName');\n openModal();\n };\n\n const closeModalWithCheck = () => {\n if (!selectedJob) {\n ModalUtils.alert('직종을 선택하지 않았습니다. 직종 선택 후 다시 시도해주세요.', '직종을 선택해주세요.', {\n modalId: 'job-search-alert-no-selected'\n });\n\n return;\n }\n closeModal();\n };\n\n return {\n JobSearchModal: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>\n <JobSearch\n firstCategory={firstCategory}\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n setSecondCategory={setSecondCategory}\n isLoading={isLoading}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={closeModalWithCheck}\n // disabled={!selectedJob}\n >\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n ),\n JobSearchComponent: (\n <JobSearch\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n firstCategory={firstCategory}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n setSecondCategory={setSecondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n isLoading={isLoading}\n />\n ),\n isJobSearchOpen: isOpen,\n openJobSearchModal: openInitModal,\n closeJobSearchModal: closeModal,\n selectedJob,\n selectedJobDetail,\n resetJobSearch: reset,\n setSelectedJob\n };\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { IconIllustGrade } from 'sales-frontend-assets';\n\nimport styles from './job-vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\n\ninterface JobVehicleSearchGradeProps {\n riskGrade?: string | number;\n hospitalizationGrade?: string | number;\n}\n\nexport const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }: JobVehicleSearchGradeProps) => {\n return (\n <div className={cx('grade-section')}>\n <div className={cx('icon-title')}>\n <IconIllustGrade />\n <span className=\"typo-title5 text-body\">등급</span>\n </div>\n <p className=\"typo-body2 text-body_3\">직종, 운전 여부 선택시 자동으로 산정됩니다.</p>\n\n <div className={cx('grade-list')}>\n <div className={cx('grade')}>\n <span>위험등급</span>\n <span className=\"text-primary typo-subtitle3\">{riskGrade || '-'}</span>\n </div>\n <div className={cx('grade')}>\n <span>입원등급</span>\n <span className=\"text-primary typo-subtitle3\">{hospitalizationGrade || '-'}</span>\n </div>\n </div>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { VehicleTypeResponseDto } from 'sales-frontend-api/method';\nimport { Radio } from 'sales-frontend-design-system';\n\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface VehicleSearchProps {\n vehicles: VehicleTypeResponseDto[];\n onVehicleSelect: (vehicle: VehicleTypeResponseDto) => void;\n selectedVehicle?: VehicleTypeResponseDto;\n}\n\nexport function VehicleSearch({ vehicles, onVehicleSelect, selectedVehicle }: VehicleSearchProps) {\n return (\n <div className={cx('vehicle-search-section')}>\n <p>운전 차종</p>\n <Radio.Root\n name=\"vehicle-selection\"\n size=\"small\"\n className={cx('vehicle-radio-root')}\n defaultValue={selectedVehicle?.integrationCodeValue || ''}\n >\n {vehicles.map((vehicle, index) => (\n <Radio.Item\n key={`item-${vehicle.integrationCodeValue}-${index}`}\n id={`item-${vehicle.integrationCodeValue}`}\n size=\"small\"\n value={vehicle.integrationCodeValue || ''}\n onChange={(e) => {\n const { value } = e.target;\n const selected = vehicles.find((v) => v.integrationCodeValue === value);\n if (selected) {\n onVehicleSelect(selected);\n }\n }}\n className={cx('item')}\n >\n {vehicle.integrationCodeValueName}({vehicle.integrationCodeValue})\n </Radio.Item>\n ))}\n </Radio.Root>\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport { useSearchVehicleQuery, VehicleTypeResponseDto } from 'sales-frontend-api/method';\n\nimport { VehicleSearch } from './vehicle-search';\n\nexport const useVehicleSearch = () => {\n const [selectedVehicle, setSelectedVehicle] = useState<VehicleTypeResponseDto>();\n const { data } = useSearchVehicleQuery();\n\n // useSearchVehicleQuery\n return {\n VehicleSearchComponent: (\n <VehicleSearch\n vehicles={data?.data?.vehicleTypeList || []}\n onVehicleSelect={setSelectedVehicle}\n selectedVehicle={selectedVehicle}\n />\n ),\n selectedVehicle,\n setSelectedVehicle,\n vehicleList: data\n };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useSearchRiskGradeQuery } from 'sales-frontend-api/method';\n\nimport { useJobSearchModal } from '../job-search-modal/use-job-search';\nimport { useVehicleSearch } from '../vehicle-search-modal/use-vehicle-search';\n\nexport const useJobVehicleSearch = () => {\n const [rightPanelView, setRightPanelView] = useState('jobSearch'); // 'jobSearch' or 'vehicleSelection'\n const [riskGrade, setRiskGrade] = useState<string>('');\n const [hospitalizationGrade, setHospitalizationGrade] = useState<string>('');\n const { selectedJob, JobSearchComponent, selectedJobDetail, resetJobSearch, setSelectedJob } = useJobSearchModal();\n\n const { selectedVehicle, VehicleSearchComponent, setSelectedVehicle } = useVehicleSearch();\n const { data: riskGradeData } = useSearchRiskGradeQuery(\n {\n occupationIndustryCode: selectedJob?.occupationIndustryCode || '',\n vehicleTypeCode: selectedVehicle?.integrationCodeValue || ''\n },\n {\n enabled: !!selectedJob && !!selectedVehicle\n }\n );\n\n const reset = () => {\n setSelectedJob(null);\n resetJobSearch();\n setSelectedVehicle(undefined);\n setRiskGrade('');\n setHospitalizationGrade('');\n };\n\n useEffect(() => {\n if (selectedJob && selectedVehicle && riskGradeData) {\n const { riskGradeCode, riskGradeName } = riskGradeData.data;\n /**\n * 직종,차종이 모두 선택된 경우 등급 계산 API 호출\n * @todo 입원등급 조회 불가한 상태라 고정값으로 일단 노출합니다.\n * RiskGradeResponseDto\n riskGradeCode?: string;\n riskGradeName?: string;\n */\n\n setRiskGrade(`${riskGradeName}(${riskGradeCode})`);\n setHospitalizationGrade(\n `${selectedJobDetail?.hospitalizationGradeCodeName}(${selectedJobDetail?.hospitalizationGradeCode})`\n );\n }\n }, [selectedJob, selectedVehicle, riskGradeData, selectedJobDetail]);\n\n return {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch: JobSearchComponent,\n VehicleSearch: VehicleSearchComponent,\n riskGrade,\n hospitalizationGrade,\n resetJobVehicleSearch: reset\n };\n};\n","import classNames from 'classnames/bind';\nimport { IconIllustJob, IconIllustVehicle, IconSubUiArrowRight } from 'sales-frontend-assets';\nimport { ModalUtils, useModalState } from 'sales-frontend-design-system';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { JobVehicleSearchGrade } from './job-vehicle-search-grade';\nconst cx = classNames.bind(styles);\nimport styles from './job-vehicle-search-modal.module.scss';\nimport { useJobVehicleSearch } from './use-job-vehicle-search';\n\nexport function useJobVehicleSearchModal() {\n const {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch,\n VehicleSearch,\n riskGrade,\n hospitalizationGrade,\n resetJobVehicleSearch\n } = useJobVehicleSearch();\n const { isOpen, openModal, closeModal } = useModalState();\n\n const validate = () => {\n if (!selectedJob && !selectedVehicle) {\n return ModalUtils.alert(\n '직종과 운전 여부·차종을 모두 선택해야 등급 산정이 가능합니다.',\n '직종과 운전 여부·차종을 선택해주세요',\n {\n modalSize: 'small'\n }\n );\n }\n if (!selectedJob) {\n return ModalUtils.alert('직종을 선택해야 등급 산정이 가능합니다.', '직종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n if (!selectedVehicle) {\n return ModalUtils.alert('운전 여부·차종을 선택해야 등급 산정이 가능합니다.', '운전 여부·차종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n closeModal();\n };\n\n const openInitModal = () => {\n resetJobVehicleSearch();\n openModal();\n };\n\n return {\n selectedJob,\n selectedVehicle,\n riskGrade,\n hospitalizationGrade,\n isOpenJobVehicleModal: isOpen,\n openJobVehicleModal: openInitModal,\n closeJobVehicleModal: closeModal,\n JobVehicleSearchModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종·운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n <>\n <div className={cx('left-panel')}>\n <div className={cx('card-section')}>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'jobSearch' })}\n onClick={() => setRightPanelView('jobSearch')}\n >\n <div className={cx('card-title')}>\n <IconIllustJob className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>직종</span>\n <IconSubUiArrowRight />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedJob ? selectedJob.occupationIndustryName : '미선택'}\n </div>\n </div>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'vehicleSelection' })}\n onClick={() => setRightPanelView('vehicleSelection')}\n >\n <div className={cx('card-title')}>\n <IconIllustVehicle className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>운전 여부·차종</span>\n <IconSubUiArrowRight />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedVehicle?.integrationCodeValueName}\n {selectedVehicle?.integrationCodeValue || '미선택'}\n </div>\n </div>\n </div>\n <JobVehicleSearchGrade riskGrade={riskGrade} hospitalizationGrade={hospitalizationGrade} />\n </div>\n <div className={cx('right-panel')}>{rightPanelView === 'jobSearch' ? JobSearch : VehicleSearch}</div>\n </>\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={validate}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import classNames from 'classnames/bind';\nimport { OrganizationProfileResponse } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './organization-search-modal.module.scss';\n\ninterface OrganizationSearchResultProps {\n filteredOrganizations: OrganizationProfileResponse[];\n onOrganizationSelect: (organization: OrganizationProfileResponse) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function OrganizationSearchResult({\n filteredOrganizations,\n onOrganizationSelect\n}: OrganizationSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredOrganizations.length}</span>건의 검색결과\n </p>\n {filteredOrganizations.length > 0 ? (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>기관코드</th>\n <th className={cx('th-padding')}>기관명</th>\n </tr>\n </thead>\n <tbody>\n {filteredOrganizations.map((organization, index) => {\n return (\n <tr key={`${organization.organizationCode}-${index}`}>\n <td>\n <input\n type=\"radio\"\n name=\"organization\"\n value={organization.organizationCode || ''}\n onChange={() => onOrganizationSelect(organization)}\n />\n </td>\n <td>{organization.organizationCode}</td>\n <td>{organization.organizationName}</td>\n </tr>\n );\n })}\n </tbody>\n </Table>\n ) : (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>기관코드</th>\n <th className={cx('th-padding')}>기관명</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td colSpan={3}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n </tbody>\n </Table>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OrganizationProfileResponse } from 'sales-frontend-api/method';\nimport { Button, FormField } from 'sales-frontend-design-system';\n\nimport styles from './organization-search-modal.module.scss';\nimport { OrganizationSearchResult } from './organization-search-result';\n\nconst { TextField } = FormField;\n\ninterface OrganizationSearchProps {\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n searchInput: string;\n setSearchInput: (value: string) => void;\n organizationList: OrganizationProfileResponse[];\n onOrganizationSelect: (organization: OrganizationProfileResponse) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function OrganizationSearch({\n searchTerm,\n setSearchTerm,\n searchInput,\n setSearchInput,\n organizationList,\n onOrganizationSelect\n}: OrganizationSearchProps) {\n const handleSearch = () => {\n setSearchTerm(searchInput);\n };\n\n const handleReset = () => {\n setSearchTerm('');\n setSearchInput('');\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">기관명/코드</FormField.Label>\n <TextField\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n size=\"medium\"\n onKeyUp={(e) => e.key === 'Enter' && handleSearch()}\n rootProps={{\n className: cx('search-input'),\n clearable: true,\n onClear: handleReset\n }}\n />\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n {searchTerm && (\n <OrganizationSearchResult\n filteredOrganizations={organizationList}\n onOrganizationSelect={onOrganizationSelect}\n searchTerm={searchTerm}\n />\n )}\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { OrganizationProfileResponse, useSearchOrganizationQuery } from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { OrganizationSearch } from './organization-search';\n\ninterface OrganizationSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSelect: (organization: OrganizationProfileResponse) => void;\n}\n\nexport const OrganizationSearchModal: React.FC<OrganizationSearchModalProps> = ({ isOpen, onClose, onSelect }) => {\n const [selectedOrganization, setSelectedOrganization] = useState<OrganizationProfileResponse | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchOrganizationQuery({\n searchWord: searchTerm\n });\n\n const [organizationList, setOrganizationList] = useState<OrganizationProfileResponse[]>([]);\n\n useEffect(() => {\n if (data?.data) {\n setOrganizationList(data.data);\n } else {\n setOrganizationList([]);\n }\n }, [data]);\n\n const handleOrganizationSelect = (organization: OrganizationProfileResponse) => {\n setSelectedOrganization(organization);\n };\n\n const handleSelect = () => {\n if (selectedOrganization) {\n onSelect(selectedOrganization);\n onClose();\n }\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"기관 검색\" showCloseButton />\n <Modal.Body>\n <OrganizationSearch\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n searchInput={searchInput}\n setSearchInput={setSearchInput}\n organizationList={organizationList}\n onOrganizationSelect={handleOrganizationSelect}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSelect}\n disabled={!selectedOrganization}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { useVehicleSearch } from './use-vehicle-search';\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface JobVehicleSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function JobVehicleSearchModal({ onClose }: JobVehicleSearchModalProps) {\n const { selectedVehicle, VehicleSearchComponent } = useVehicleSearch();\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n {VehicleSearchComponent}\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={onClose}>\n 확인({selectedVehicle?.integrationCodeValueName || '미선택'})-{selectedVehicle?.integrationCodeValue}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n\nimport { useEffect, useState } from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField, type SegmentItems } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from '../modal';\n\nexport const FormSearchJobField = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n size = 'medium',\n placeholder = '직종 검색',\n onValueChange,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> &\n Omit<FormField.TextFieldProps, 'defaultValue'> & {\n onValueChange?: (value?: SegmentItems) => void;\n defaultValue?: SegmentItems;\n }) => {\n const [selected, setSelected] = useState<SegmentItems | undefined>(defaultValue);\n\n const { field, fieldState } = useController({ name, control, disabled });\n const { JobSearchModal, openJobSearchModal, selectedJob } = useJobSearchModal();\n\n useEffect(() => {\n if (selectedJob) {\n field.onChange(selectedJob.occupationIndustryName);\n setSelected({ label: selectedJob.occupationIndustryName, value: selectedJob.occupationIndustryCode });\n onValueChange?.({ label: selectedJob.occupationIndustryName, value: selectedJob.occupationIndustryCode });\n }\n }, [selectedJob]);\n\n return (\n <>\n <FormField.ComboBox\n {...props}\n {...field}\n id={field.name}\n error={fieldState.invalid || error}\n value={selected?.label ?? ''}\n icon=\"search\"\n size={size}\n placeholder={placeholder}\n autoComplete=\"off\"\n onClick={openJobSearchModal}\n />\n {JobSearchModal}\n </>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { SegmentGroup, type SegmentGroupHtmlProps } from 'sales-frontend-design-system';\n\nexport interface FormSegmentGroupProps<TFormValues extends FieldValues>\n extends Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'>,\n Omit<SegmentGroupHtmlProps, 'defaultValue'> {\n disabledItems?: string[];\n}\n\nexport const FormSegmentGroup = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n disabledItems,\n items,\n ...props\n}: FormSegmentGroupProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const itemList = items.map((item) => {\n return {\n ...item,\n disabled: disabledItems?.includes(item.value)\n };\n });\n\n return (\n <SegmentGroup\n {...props}\n tabIndex={0}\n id={field.name}\n ref={field.ref}\n defaultValue={field.value}\n disabled={field.disabled}\n error={fieldState.invalid}\n onBlur={field.onBlur}\n items={itemList}\n onValueChange={(selected) => {\n field.onChange(selected);\n props.onValueChange?.(selected);\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OptionProps, Select, SelectProps } from 'sales-frontend-design-system';\n\nimport type { SegmentItems } from 'sales-frontend-design-system';\n\n/**\n * 영업지원 시스템 셀렉트필드\n * @param param0\n * @returns\n */\n\ntype FormSelectProps<TFormValues extends FieldValues> = Pick<\n UseControllerProps<TFormValues>,\n 'name' | 'control' | 'disabled'\n> &\n Omit<SelectProps, 'defaultValue'>;\n\nexport const FormSelect = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n children,\n ...props\n}: FormSelectProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <Select\n {...props}\n id={field.name}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onBlur={field.onBlur}\n value={field.value}\n onChange={(selected) => {\n field.onChange(selected);\n }}\n >\n {children}\n </Select>\n );\n};\n\nconst FormSelectOption = ({ children, value, ...rest }: OptionProps) => {\n return (\n <Select.Option value={value} {...rest}>\n {children}\n </Select.Option>\n );\n};\n\ninterface IFormSelectGroupProps<TFormValues extends FieldValues> extends FormSelectProps<TFormValues> {\n options: SegmentItems[];\n optionsProps?: Omit<OptionProps, 'children' | 'value'>;\n}\n\nconst FormSelectGroup = <TFormValues extends FieldValues>({\n options,\n optionsProps,\n ...props\n}: Omit<IFormSelectGroupProps<TFormValues>, 'children'>) => {\n return (\n <FormSelect {...props}>\n {options.map(\n (option) =>\n option.label && (\n <FormSelectOption key={option.value} value={option.value} {...optionsProps}>\n {option.label}\n </FormSelectOption>\n )\n )}\n </FormSelect>\n );\n};\n\nFormSelect.Option = FormSelectOption;\nFormSelect.Group = FormSelectGroup;\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField } from 'sales-frontend-design-system';\n\nexport const FormTextField = <TFormValues extends FieldValues>({\n name,\n control,\n size = 'medium',\n disabled,\n error,\n onBlur,\n onChange,\n rootProps,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & FormField.TextFieldProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <FormField.TextField\n {...props}\n id={field.name}\n size={size}\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { ModalUtils } from 'sales-frontend-design-system';\n\nimport styles from './step-indicator.module.scss';\n\nimport type { StepIndicatorProps, StepItem } from './step-indicator.types';\n\nconst cx = classNames.bind(styles);\n\nexport const StepIndicator = ({\n items,\n onClickItem,\n currentIndex = 0,\n defaultValue = '',\n dotCount = 3,\n isLoading\n}: StepIndicatorProps) => {\n const [steps, setSteps] = React.useState<StepItem[]>(\n Array.from({ length: 10 }).map(() => ({ label: '-', value: '' }))\n );\n const [current, setCurrent] = React.useState(currentIndex);\n\n React.useEffect(() => {\n if (items.length > 0) {\n setSteps(items);\n items.map((item, idx) => {\n if (item.value === defaultValue) {\n setCurrent(idx);\n }\n });\n }\n }, [items, defaultValue]);\n\n const handleClickStep = (item: StepItem) => {\n const index = steps.findIndex((step) => step.value === item.value);\n\n if (index === -1) {\n console.error('error not found index');\n\n return;\n }\n\n if (steps[index < 1 ? index : index - 1]?.isCompleted) {\n onClickItem?.(item);\n } else {\n ModalUtils.alert('이전 단계를 모두 완료해야 선택한 단계로\\n이동할 수 있습니다.', '이전 단계를 먼저 진행해주세요');\n }\n };\n\n return (\n <div className={cx('stepper-layout', { loading: isLoading })}>\n <div className={cx('stepper')}>\n {steps.map((item, idx) => (\n <React.Fragment key={`num-${idx}`}>\n <div\n className={cx(\n 'circle',\n { completed: item.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n {item.isCompleted ? <span className={cx('completed-icon')} /> : idx + 1}\n </div>\n {/* 다음 단계가 있을 때만 dot 렌더링 */}\n {idx < steps.length - 1 &&\n Array.from({ length: dotCount }).map((_, dotIdx) => (\n <span key={`dot-${idx}-${dotIdx}`} className={cx('dot')} />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n <ul className={cx('step-labels')}>\n {steps.map((item, idx) => (\n <li\n key={`label-${idx}`}\n className={cx(\n { completed: steps[idx < 1 ? idx : idx - 1]?.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n <span className=\"text-ellipsis\">{item.label ?? item.value}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { IconIllustCamera } from 'sales-frontend-assets';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './camera.module.scss';\nimport { AttachedPhoto, cameraItemType } from './camera.types';\n\nconst cx = classNames.bind(styles);\n\nexport interface AttachmentProps {\n photos: AttachedPhoto[];\n onAddPhoto: () => void;\n onRemovePhoto: (id: string) => void;\n /* false이면 사진이 1장 이상일 때만 표시 */\n show: boolean;\n type?: cameraItemType;\n buttonText?: string;\n}\n\nexport function Attachment({\n photos,\n onAddPhoto,\n onRemovePhoto,\n show,\n type = 'multiple',\n buttonText\n}: AttachmentProps) {\n const handleAddPhoto = () => {\n onAddPhoto();\n };\n\n const handleRemovePhoto = (id: string) => {\n onRemovePhoto(id);\n };\n\n const renderPhotoSingle = () => {\n if (photos.length === 0) {\n return (\n <div className={cx('single-photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button-single')} onClick={handleAddPhoto}>\n <IconIllustCamera />\n <span>{buttonText || '사진 첨부하기'}</span>\n </button>\n </div>\n );\n }\n\n return photos.map((photo) => (\n <div key={photo.id} className={cx('single-photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n ));\n };\n\n const renderPhotoGrid = () => {\n const maxPhotos = type === 'single' ? 1 : 4;\n const gridItems = [];\n\n if (photos.length < maxPhotos) {\n gridItems.push(\n <div key=\"add-photo\" className={cx('photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button')} onClick={handleAddPhoto}>\n <IconIllustCamera />\n <span>{buttonText || '첨부하기'}</span>\n <span className={cx('photo-count')}>\n (<span className={cx('photo-count-number')}>{photos.length}</span>/{maxPhotos})\n </span>\n </button>\n </div>\n );\n }\n\n photos.forEach((photo) => {\n gridItems.push(\n <div key={photo.id} className={cx('photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n );\n });\n\n return gridItems;\n };\n\n const isVisible = show || (!show && photos.length > 0);\n\n if (!isVisible) {\n return null;\n }\n\n if (type === 'single') {\n return <div className={cx('photo-single')}>{renderPhotoSingle()}</div>;\n }\n\n return <div className={cx('photo-grid', { linear: type === 'linear' })}>{renderPhotoGrid()}</div>;\n}\n","import { cameraOptions } from './camera.types';\n\n// 3mb\nconst maxImageSize = 3 * 1024 * 1024;\n/**\n *\n * 이미지를 파라미터로 전달하고, 설정한 리사이즈 옵션에 따라 이미지를 리사이징하고 리턴한다.\n * 리턴하는 데이터타입은 전달받은 데이터 타입과 동일하게 한다.\n * base64 string을 전달받은 경우는 base64 string을 리턴하고\n * file 타입을 전달받은 경우는 file 타입을 리턴한다.\n *\n * options 규칙\n * width 와 height 중 1개가 존재하는 경우 해당 사이즈에 맞게 원본비율유지하여 축소한다.\n * width 와 height 가 모두 존재하는 경우 해당 사이즈에 맞게 원본비율을 무시하고 리사이즈한다.\n *\n * filesize 옵션이 존재하는 경우는 width,height 옵션을 무시하고, filesize 이하로 원본비율 축소한다.\n *\n * width, height 의 단위는 px 이다.\n *\n * ext는 리턴데이터 타입이 파일인 경우, 사용할 파일확장자 이다.\n * ext가 설정된 값이 없는 경우는, 기본값으로 jpeg를 사용한다.\n *\n */\nexport function resize<T extends string | File>(\n image: T,\n options: cameraOptions['resize'] = { ext: 'jpeg', filesize: maxImageSize }\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Canvas context를 생성할 수 없습니다.'));\n\n return;\n }\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n img.onload = () => {\n let { width, height } = img;\n const { filesize, ext } = options;\n\n // filesize 옵션이 있는 경우 width, height 옵션을 무시하고 filesize 이하로 원본비율 축소\n if (filesize) {\n const originalSize = width * height * 4; // RGBA 4바이트\n if (originalSize > filesize) {\n const ratio = Math.sqrt(filesize / originalSize);\n width = Math.floor(width * ratio);\n height = Math.floor(height * ratio);\n }\n } else {\n // width, height 옵션 처리\n const { width: targetWidth, height: targetHeight } = options;\n\n if (targetWidth && targetHeight) {\n // width와 height가 모두 존재하는 경우 원본비율 무시하고 리사이즈\n width = targetWidth;\n height = targetHeight;\n } else if (targetWidth) {\n // width만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetWidth / width;\n width = targetWidth;\n height = Math.floor(height * ratio);\n } else if (targetHeight) {\n // height만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetHeight / height;\n height = targetHeight;\n width = Math.floor(width * ratio);\n }\n }\n\n // canvas 크기 설정\n canvas.width = width;\n canvas.height = height;\n\n // 이미지 그리기\n ctx.drawImage(img, 0, 0, width, height);\n\n // 결과 반환\n if (typeof image === 'string') {\n // base64 string인 경우\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const quality = ext === 'png' ? 1.0 : 0.8;\n const base64 = canvas.toDataURL(mimeType, quality);\n resolve(base64 as T);\n } else {\n // File인 경우\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error('Blob을 생성할 수 없습니다.'));\n\n return;\n }\n\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const fileName = image.name ? `${image.name.replace(/\\.[^/.]+$/, '') }.${ ext}` : `resized.${ ext}`;\n\n const resizedFile = new File([blob], fileName, { type: mimeType });\n resolve(resizedFile as T);\n },\n ext === 'png' ? 'image/png' : 'image/jpeg',\n ext === 'png' ? 1.0 : 0.8\n );\n }\n };\n\n img.onerror = () => {\n reject(new Error('이미지를 로드할 수 없습니다.'));\n };\n\n // 이미지 소스 설정\n if (typeof image === 'string') {\n img.src = image;\n } else {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result) {\n img.src = e.target.result as string;\n } else {\n reject(new Error('파일을 읽을 수 없습니다.'));\n }\n };\n reader.onerror = () => {\n reject(new Error('파일을 읽을 수 없습니다.'));\n };\n reader.readAsDataURL(image);\n }\n });\n}\n","import { useEffect, useState } from 'react';\n\nimport { Attachment } from './attachment';\nimport { resize } from './resize';\n\nimport type { AttachedPhoto, cameraOptions } from './camera.types';\n\nconst genImageId = () => `camera-${Date.now()}-${Math.random()}`;\n\nexport function useCamera({\n onChange,\n resize: resizeOption,\n cameraOnly,\n onDelete,\n show,\n type = 'multiple',\n buttonText\n}: Partial<cameraOptions> = {}) {\n const [attachedPhotos, setAttachedPhotos] = useState<AttachedPhoto[]>([]);\n\n const findImage = (imageId: string) => {\n return attachedPhotos.find((image) => image.id === imageId);\n };\n\n /**\n * onClick시, input File생성후 카메라 또는 파일선택 호출\n */\n const onClick = () => {\n // input을 dom으로 생성, type='file' , cameraOnly 가 true이면 카메라만 실행가능하도록 input 을 설정\n // true가 아니면 이미지확장자파일과, 카메라선택 둘다 가능하도록 설정\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n\n if (cameraOnly) {\n // 카메라만 실행 가능하도록 설정\n input.capture = 'camera';\n }\n\n // 파일 선택 이벤트 리스너 추가\n input.addEventListener('change', async (event) => {\n const target = event.target as HTMLInputElement;\n const { files } = target;\n\n if (files && files.length > 0) {\n const file = files[0];\n // onChange 콜백 호출\n if (file) {\n const resizedFile = await resize(file, resizeOption);\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: URL.createObjectURL(resizedFile),\n name: `서류사진_${attachedPhotos.length + 1}`\n };\n\n if (type === 'single') {\n setAttachedPhotos([newPhoto]);\n } else {\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n\n onChange && onChange(file);\n }\n }\n\n // input 요소 제거\n document.body.removeChild(input);\n });\n\n // input을 body에 추가하고 click 이벤트 발생\n input.style.display = 'none';\n document.body.appendChild(input);\n input.click();\n };\n\n /**\n * 선택한 이미지 삭제\n * @param imageId 이미지아이디\n */\n const deleteImage = (imageId: string) => {\n const imageIndex = attachedPhotos.findIndex((image) => image.id === imageId);\n if (imageIndex > -1) {\n const item = attachedPhotos.splice(imageIndex, 1);\n item[0] && URL.revokeObjectURL(item[0].src);\n setAttachedPhotos([...attachedPhotos]);\n onDelete && onDelete(imageId);\n }\n };\n\n const CameraComponent = () => (\n <Attachment\n show={!!show}\n onAddPhoto={onClick}\n onRemovePhoto={deleteImage}\n photos={attachedPhotos}\n type={type}\n buttonText={buttonText}\n />\n );\n\n useEffect(() => {\n return () => {\n // revoke all images url\n attachedPhotos.forEach((image) => {\n URL.revokeObjectURL(image.src);\n });\n };\n }, []);\n\n return {\n onClick,\n getImage: findImage,\n deleteImage,\n attachedPhotos,\n Attachment: CameraComponent\n };\n}\n","import { useRef, useEffect, useState, useCallback } from 'react';\n\nimport { DownloadProps, PaintProps } from './canvas-paint.types';\n\n/** undo, redo 가능한 히스토리 최대 저장 갯수 */\nconst HISTORY_SIZE = 100;\n\n/** 기본 다운로드 값 */\nconst DEFAULT_DOWNLOAD_PROPS: Required<DownloadProps> = {\n fileExtendsion: 'png',\n fileName: 'image',\n transparent: true,\n backgroundColor: 'white',\n width: 500,\n height: 500\n};\nexport function useCanvasPaint(paintProps: PaintProps = {}) {\n const { pen = { strokeWeight: 5, strokeColor: 'black' }, onChange, onStart, onEnd } = paintProps;\n const [canvasRefState, setCanvasRefState] = useState<HTMLCanvasElement | null>(null);\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const [isPainting, setIsPainting] = useState(false);\n const [history, setHistory] = useState<string[]>([]);\n const [historyIndex, setHistoryIndex] = useState(-1);\n\n const saveState = useCallback(() => {\n if (!canvasRefState) {\n return;\n }\n const dataUrl = canvasRefState.toDataURL();\n\n const newHistory = history.slice(0, historyIndex + 1);\n if (newHistory.length >= HISTORY_SIZE) {\n newHistory.shift();\n }\n newHistory.push(dataUrl);\n\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n onChange && onChange();\n }, [history, historyIndex, onChange, canvasRefState]);\n\n const restoreState = useCallback(\n (index: number) => {\n const context = contextRef.current;\n if (!canvasRefState || !context || !history[index]) {\n return;\n }\n\n const dataUrl = history[index];\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n onChange && onChange();\n },\n [history, onChange, canvasRefState]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n const context = canvasRefState.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return;\n }\n contextRef.current = context;\n\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n }, [canvasRefState]);\n\n useEffect(() => {\n const context = contextRef.current;\n if (context) {\n context.lineWidth = pen.strokeWeight;\n context.strokeStyle = pen.strokeColor;\n }\n }, [pen]);\n\n /**\n * @description canvas의 크기가 동적으로 생성되는 경우,\n * 포인터의 위치가 맞지않는 이슈를 해결하기위한,\n * scale조정하는 함수입니다.\n */\n const getEventPosition = useCallback(\n (event: MouseEvent | TouchEvent) => {\n if (!canvasRefState) {\n return null;\n }\n\n const rect = canvasRefState.getBoundingClientRect();\n const scaleX = canvasRefState.width / rect.width;\n const scaleY = canvasRefState.height / rect.height;\n\n let clientX;\n let clientY;\n\n if (event instanceof MouseEvent) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else if (event instanceof TouchEvent) {\n const touch = event.touches[0];\n if (!touch) {\n return null;\n }\n clientX = touch.clientX;\n clientY = touch.clientY;\n } else {\n return null;\n }\n\n const offsetX = (clientX - rect.left) * scaleX;\n const offsetY = (clientY - rect.top) * scaleY;\n\n return { offsetX, offsetY };\n },\n [canvasRefState]\n );\n\n const startPainting = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const context = contextRef.current;\n if (!context) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n onStart && onStart();\n const { offsetX, offsetY } = pos;\n context.beginPath();\n context.moveTo(offsetX, offsetY);\n setIsPainting(true);\n },\n [onStart, getEventPosition]\n );\n\n const stopPainting = useCallback(() => {\n const context = contextRef.current;\n if (!context || !isPainting) {\n return;\n }\n context.closePath();\n setIsPainting(false);\n onEnd && onEnd();\n saveState();\n }, [isPainting, onEnd, saveState]);\n\n const paint = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n if (!isPainting || !contextRef.current) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n const { offsetX, offsetY } = pos;\n contextRef.current.lineTo(offsetX, offsetY);\n contextRef.current.stroke();\n },\n [isPainting, getEventPosition]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n\n canvasRefState.addEventListener('mousedown', startPainting);\n canvasRefState.addEventListener('mouseup', stopPainting);\n canvasRefState.addEventListener('mousemove', paint);\n canvasRefState.addEventListener('mouseleave', stopPainting);\n\n canvasRefState.addEventListener('touchstart', startPainting);\n canvasRefState.addEventListener('touchend', stopPainting);\n canvasRefState.addEventListener('touchmove', paint);\n canvasRefState.addEventListener('touchcancel', stopPainting);\n\n return () => {\n canvasRefState.removeEventListener('mousedown', startPainting);\n canvasRefState.removeEventListener('mouseup', stopPainting);\n canvasRefState.removeEventListener('mousemove', paint);\n canvasRefState.removeEventListener('mouseleave', stopPainting);\n\n canvasRefState.removeEventListener('touchstart', startPainting);\n canvasRefState.removeEventListener('touchend', stopPainting);\n canvasRefState.removeEventListener('touchmove', paint);\n canvasRefState.removeEventListener('touchcancel', stopPainting);\n };\n }, [startPainting, stopPainting, paint, canvasRefState]);\n\n const clear = () => {\n const context = contextRef.current;\n if (canvasRefState && context) {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n onChange && onChange();\n }\n };\n\n const undo = () => {\n if (historyIndex > 0) {\n const newIndex = historyIndex - 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const redo = () => {\n if (historyIndex < history.length - 1) {\n const newIndex = historyIndex + 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const loadImage = (base64String: string) => {\n const context = contextRef.current;\n if (!canvasRefState || !context) {\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0, canvasRefState.width, canvasRefState.height);\n saveState();\n };\n img.src = base64String;\n };\n\n const getBase64String = (imageProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...imageProps };\n const { fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n return tempCanvas.toDataURL(`image/${fileExtendsion}`);\n }\n };\n\n const download = (downloadProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...downloadProps };\n const { fileName, fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n const link = document.createElement('a');\n link.download = `${fileName}.${fileExtendsion}`;\n link.href = tempCanvas.toDataURL(`image/${fileExtendsion}`);\n link.click();\n }\n };\n /**\n * canvasRef.current canvas 에 데이터가 있는지 확인후 boolean 리턴\n * @returns boolean\n */\n const isCanvasBlank = () => {\n if (!canvasRefState) {\n return true;\n }\n\n // 캔버스 크기 가져오기\n const { width, height } = canvasRefState;\n\n // 2D 렌더링 컨텍스트 가져오기\n const ctx = canvasRefState.getContext('2d');\n if (!ctx) {\n console.error('2D context not available');\n\n return true; // 컨텍스트가 없으면 비어있는 것으로 간주\n }\n\n // 캔버스 전체 영역의 픽셀 데이터 가져오기\n const imageData = ctx.getImageData(0, 0, width, height);\n const { data } = imageData;\n\n // 픽셀 데이터의 알파(alpha) 값을 순회하며 확인\n // RGBA 순서이므로 알파 값은 3, 7, 11, ... 인덱스에 위치\n for (let i = 0; i < data.length; i += 4) {\n // 알파 값이 0이 아니면 (불투명한 부분이 있으면)\n if (data[i + 3] !== 0) {\n return false; // 캔버스가 비어있지 않음\n }\n }\n\n // 모든 픽셀의 알파 값이 0이면 (모두 투명하면)\n return true; // 캔버스가 비어있음\n };\n\n return {\n clear,\n undo,\n redo,\n loadImage,\n download,\n getBase64String,\n isCanvasBlank,\n setCanvasRefState,\n canvasRefState\n };\n}\n","/**\n * 서명로드용 base64 string\n */\nexport const testSignatureBase64Data =\n 'data:image/png;base64,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';\n","import { useState, useEffect, useRef } from 'react';\n\nimport { getRemoteIdentityVerificationSystemToken } from 'sales-frontend-api/method';\nimport { Modal, useModalState, Loading, ModalUtils } from 'sales-frontend-design-system';\nimport { MessageEventManager } from 'sales-frontend-utils';\n\nimport { VerificationResponse } from './remote-identity-verification.types';\nimport {\n UseRemoteIdentityVerificationProps,\n RemoteIdentityVerificationSuccess\n} from './remote-identity-verification.types';\n\nconst VERIFICATION_CODES = {\n SUCCESS: '0000',\n USER_CANCEL: '9000',\n TOKEN_ERROR: '9001',\n CAMERA_PERMISSION: '9002',\n ATTEMPT_EXCEEDED: '9003',\n SERVER_ERROR: '9999'\n} as const;\n\n/**\n * 비대면인증시스템 기본 로직\n * @param config\n */\nexport const useRemoteIdentityVerification = ({\n rivEnv,\n rivOrigin,\n tokenRequestParams,\n apiConfig,\n onCancel,\n onError,\n onSuccess,\n rivSearchParams\n}: UseRemoteIdentityVerificationProps) => {\n const rivHost = rivOrigin ?? `https://${rivEnv === 'prd' ? '' : rivEnv === 'stg' ? 'qa' : 'dev'}riv.hanwhalife.com`;\n\n // RIV URL 생성\n const createRemoteIdentityVerificationUrl = async () => {\n const response = await getRemoteIdentityVerificationSystemToken(tokenRequestParams, apiConfig);\n const { accessToken, remoteIdentityVerificationSystemRequestId } = response.data;\n\n const urlParams = new URLSearchParams({\n authorization: accessToken,\n rivsRqstId: remoteIdentityVerificationSystemRequestId,\n ...rivSearchParams\n });\n\n return { fullUrl: `${rivHost}/?${urlParams.toString()}`, rivsRqstId: remoteIdentityVerificationSystemRequestId };\n };\n\n // PostMessage 핸들러 생성\n const createMessageHandler = ({ rivsRqstId }: RemoteIdentityVerificationSuccess, cleanup?: () => void) => {\n return (event: MessageEvent) => {\n try {\n const response: VerificationResponse =\n typeof event.data === 'string' ? JSON.parse(decodeURIComponent(event.data)) : event.data;\n\n if (response.command !== 'webClose') {\n return;\n }\n\n const { result, code } = response.args;\n\n switch (code) {\n case VERIFICATION_CODES.USER_CANCEL:\n console.log('=====사용자 종료!=====', { result, code });\n onCancel?.({ result, code });\n cleanup?.();\n break;\n\n case VERIFICATION_CODES.TOKEN_ERROR:\n case VERIFICATION_CODES.CAMERA_PERMISSION:\n case VERIFICATION_CODES.ATTEMPT_EXCEEDED:\n case VERIFICATION_CODES.SERVER_ERROR:\n console.log('=====비대면인증 실패!=====', { result, code });\n onError?.({ result, code }, { rivsRqstId });\n cleanup?.();\n break;\n\n case VERIFICATION_CODES.SUCCESS:\n console.log('=====비대면인증 성공!=====', { result, code });\n onSuccess?.({ result, code }, { rivsRqstId });\n cleanup?.();\n break;\n\n default:\n console.warn('Unknown verification code:', code);\n }\n } catch (error) {\n console.error('Failed to parse postMessage:', error);\n }\n };\n };\n\n return {\n createRemoteIdentityVerificationUrl,\n createMessageHandler\n };\n};\n\n/**\n * Iframe용 비대면인증시스템 훅\n * @param config\n * @returns\n */\nexport const useRemoteIdentityVerificationIframe = (config: UseRemoteIdentityVerificationProps) => {\n const { createMessageHandler, createRemoteIdentityVerificationUrl } = useRemoteIdentityVerification(config);\n const { isOpen, openModal, closeModal } = useModalState();\n const [remoteIdentityVerificationUrl, setRemoteIdentityVerificationUrl] = useState('');\n const [rivsRqstId, setRivsRqstId] = useState('');\n const [isCreatingUrl, setIsCreatingUrl] = useState(false);\n const [isIframeLoaded, setIsIframeLoaded] = useState(false);\n\n // iframe용 URL 생성\n const createIframeUrl = async () => {\n if (remoteIdentityVerificationUrl || isCreatingUrl) {\n return;\n }\n\n setIsCreatingUrl(true);\n setIsIframeLoaded(false);\n\n try {\n const { fullUrl, rivsRqstId } = await createRemoteIdentityVerificationUrl();\n setRemoteIdentityVerificationUrl(fullUrl);\n setRivsRqstId(rivsRqstId);\n } catch (error) {\n console.error('Failed to create URL:', error);\n throw error;\n } finally {\n setIsCreatingUrl(false);\n }\n };\n\n const openRivIframe = async () => {\n try {\n await createIframeUrl();\n openModal();\n } catch (error) {\n console.error('openRivIframe error::', error);\n\n await ModalUtils.alert('비대면 인증 URL 생성에 실패했습니다. 다시 시도해주세요.');\n config.onError?.(\n {\n result: 'N',\n code: VERIFICATION_CODES.TOKEN_ERROR\n },\n { rivsRqstId: '' }\n );\n }\n };\n\n const closeRivIframe = () => {\n setRemoteIdentityVerificationUrl('');\n setRivsRqstId('');\n setIsIframeLoaded(false);\n closeModal();\n };\n\n useEffect(() => {\n if (!remoteIdentityVerificationUrl) {\n return;\n }\n\n const messageHandler = createMessageHandler({ rivsRqstId }, closeRivIframe);\n MessageEventManager.getInstance().registerHandler('riv-iframe-handler', messageHandler);\n\n return () => MessageEventManager.getInstance().unregisterHandler('riv-iframe-handler');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [remoteIdentityVerificationUrl, rivsRqstId]);\n\n // Iframe 컴포넌트\n const RivIframe = ({\n width = '100%',\n height = '100%',\n ...iframeProps\n }: React.IframeHTMLAttributes<HTMLIFrameElement> & {\n width?: string;\n height?: string;\n }) => {\n if (!remoteIdentityVerificationUrl) {\n return null;\n }\n\n return (\n <iframe\n src={remoteIdentityVerificationUrl}\n width={width}\n height={height}\n allow=\"camera *;\"\n onLoad={() => setIsIframeLoaded(true)}\n {...iframeProps}\n />\n );\n };\n\n // Modal + Iframe 컴포넌트\n const RivModalIframe = ({\n width = '100%',\n height = '100%',\n loadingComponent,\n ...iframeProps\n }: React.IframeHTMLAttributes<HTMLIFrameElement> & {\n width?: string;\n height?: string;\n loadingComponent?: React.ReactNode;\n }) => {\n const isLoading = isCreatingUrl || (!!remoteIdentityVerificationUrl && !isIframeLoaded);\n\n return (\n <>\n <Modal.Root isOpen={isOpen}>\n {isLoading && (loadingComponent || <Loading.Wait bodyText={'불러오는 중'} />)}\n <RivIframe\n width={width}\n height={height}\n allow=\"camera *;\"\n {...iframeProps}\n style={{\n background: 'var(--sales-color-background-100, #ffffff)',\n ...iframeProps?.style\n }}\n />\n </Modal.Root>\n </>\n );\n };\n\n return {\n RivModalIframe,\n RivIframe,\n\n openRivIframe,\n closeRivIframe,\n\n remoteIdentityVerificationUrl,\n isCreatingUrl,\n isFullyLoaded: isIframeLoaded\n };\n};\n\n/**\n * 팝업용 비대면인증시스템 훅\n * @param config\n * @returns\n */\nexport const useRemoteIdentityVerificationPopup = (config: UseRemoteIdentityVerificationProps) => {\n const { createRemoteIdentityVerificationUrl, createMessageHandler } = useRemoteIdentityVerification(config);\n const [isCreatingUrl, setIsCreatingUrl] = useState(false);\n const [rivsRqstId, setRivsRqstId] = useState('');\n const popupRef = useRef<Window | null>(null);\n\n const openPopup = async (target = '_blank', features?: string) => {\n // 이전 팝업이 열려있으면 닫기\n if (popupRef.current && !popupRef.current.closed) {\n popupRef.current.close();\n }\n\n setIsCreatingUrl(true);\n try {\n const { fullUrl, rivsRqstId } = await createRemoteIdentityVerificationUrl();\n\n const popup = window.open(fullUrl, target, features);\n\n if (!popup) {\n await ModalUtils.alert('팝업이 차단되었습니다. 팝업을 허용해주세요.');\n\n return;\n }\n\n setRivsRqstId(rivsRqstId);\n popupRef.current = popup;\n } catch (error) {\n console.error('openPopup error::', error);\n await ModalUtils.alert('비대면 인증 URL 생성에 실패했습니다. 다시 시도해주세요.');\n } finally {\n setIsCreatingUrl(false);\n }\n };\n const cleanPopup = () => {\n popupRef.current = null;\n };\n\n useEffect(() => {\n const messageHandler = createMessageHandler({ rivsRqstId }, cleanPopup);\n\n MessageEventManager.getInstance().registerHandler('riv-popup-handler', messageHandler);\n\n return () => MessageEventManager.getInstance().unregisterHandler('riv-popup-handler');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rivsRqstId]);\n\n return {\n openPopup,\n isCreatingUrl\n };\n};\n"],"names":["cx","InputBox","Input","styles","chunk","filterList","TextField","rivsRqstId"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAGO,MAAM,qBAAqB,CAAkC;AAAA,EAClE,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAgH,KAAA;AAC9G,EAAM,MAAA,EAAE,OAAO,UAAW,EAAA,GAAI,cAAc,EAAE,IAAA,EAAM,OAAS,EAAA,QAAA,EAAU,CAAA;AAEvE,EACE,uBAAA,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACH,GAAG,KAAA;AAAA,MACJ,IAAI,KAAM,CAAA,IAAA;AAAA,MACV,OAAA,EAAS,MAAM,KAAS,IAAA,KAAA;AAAA,MACxB,OAAO,UAAW,CAAA,OAAA;AAAA,MAClB,QAAA,EAAU,CAAC,OAAY,KAAA;AACrB,QAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AACtB,QAAA,KAAA,CAAM,WAAW,OAAO,CAAA;AAAA,OAC1B;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;;ACxBO,MAAM,eAAe,CAAkC;AAAA,EAC5D,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAA0G,KAAA;AACxG,EAAM,MAAA,EAAE,OAAU,GAAA,aAAA,CAAc,EAAE,IAAM,EAAA,OAAA,EAAS,UAAU,CAAA;AAE3D,EAAA,uBACG,GAAA,CAAA,QAAA,EAAA,EAAU,GAAG,KAAA,EAAQ,GAAG,KAAO,EAAA,EAAA,EAAI,KAAM,CAAA,IAAA,EAAM,SAAS,KAAM,CAAA,KAAA,EAAO,QAAU,EAAA,KAAA,CAAM,UACnF,QACH,EAAA,CAAA;AAEJ;;ACXO,MAAM,iBAAiB,CAAkC;AAAA,EAC9D,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CACgC,KAAA;AAC9B,EAAM,MAAA,EAAE,KAAO,EAAA,UAAA,EAAe,GAAA,aAAA,CAAc,EAAE,IAAM,EAAA,OAAA,EAAS,QAAU,EAAA,YAAA,EAAc,CAAA;AACrF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,MAAM,QAA2B,EAAA;AAEjE,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,OAAO,KAAM,CAAA,KAAK,CAAK,IAAA,KAAA,CAAM,UAAU,QAAU,EAAA;AACnD,MAAA,WAAA,CAAY,MAAM,KAAK,CAAA;AAAA;AACzB,GACC,EAAA,CAAC,KAAM,CAAA,KAAK,CAAC,CAAA;AAEhB,EACE,uBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,CAAA;AAAA,MACT,GAAG;AAAA,QACF,GAAG,KAAA;AAAA,QACH,GAAG,KAAA;AAAA,QACH,IAAI,KAAM,CAAA,IAAA;AAAA,QAEV,YAAc,EAAA,QAAA;AAAA,QACd,OAAO,UAAW,CAAA,OAAA;AAAA,QAClB,eAAe,KAAM,CAAA;AAAA;AACvB;AAAA,GACF;AAEJ;;AC/BO,MAAM,sBAAsB,CAAkC;AAAA,EACnE,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAC+B,KAAA;AAC7B,EAAA,MAAM,EAAE,KAAA,EAAO,UAAW,EAAA,GAAI,aAAc,CAAA;AAAA,IAC1C,IAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,MAAM,QAAiC,EAAA;AAEvE,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,aAAa,KAAM,CAAA,KAAA;AAGzB,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAA,WAAA,CAAY,MAAS,CAAA;AAErB,MAAA;AAAA;AAKF,IAAA,MAAM,uBAAuB,UAAW,CAAA,SAAA,EAAW,SAAc,KAAA,QAAA,EAAU,WAAW,OAAQ,EAAA;AAC9F,IAAA,MAAM,qBAAqB,UAAW,CAAA,OAAA,EAAS,SAAc,KAAA,QAAA,EAAU,SAAS,OAAQ,EAAA;AAExF,IAAI,IAAA,CAAC,QAAY,IAAA,oBAAA,IAAwB,kBAAoB,EAAA;AAE3D,MAAA,WAAA,CAAY,UAAU,CAAA;AAAA;AACxB,GACC,EAAA,CAAC,KAAM,CAAA,KAAK,CAAC,CAAA;AAEhB,EACE,uBAAA,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,CAAA;AAAA,MACT,GAAG;AAAA,QACF,GAAG,KAAA;AAAA,QACH,GAAG,KAAA;AAAA,QACH,IAAI,KAAM,CAAA,IAAA;AAAA,QACV,YAAc,EAAA,QAAA;AAAA,QACd,OAAO,UAAW,CAAA,OAAA;AAAA,QAClB,eAAe,KAAM,CAAA;AAAA;AACvB;AAAA,GACF;AAEJ;;;;;;;;;;;;;;;;;;;;ACnDA;;AAEA,EAAA,CAAC,YAAY;;AAGb,GAAC,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc;;GAE9B,SAAS,UAAU,IAAI;IACtB,IAAI,OAAO,GAAG,EAAE;;AAElB,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,KAAG,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC;KACtB,IAAI,GAAG,EAAE;AACZ,MAAI,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9D;AACA;;AAEA,IAAE,OAAO,OAAO;AAChB;;AAEA,GAAC,SAAS,UAAU,EAAE,GAAG,EAAE;IACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;KACvD,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;AAClC;;AAEA,IAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC/B,KAAG,OAAO,EAAE;AACZ;;AAEA,IAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;KACvB,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC;AACrC;;IAEE,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AACxG,KAAG,OAAO,GAAG,CAAC,QAAQ,EAAE;AACxB;;IAEE,IAAI,OAAO,GAAG,EAAE;;AAElB,IAAE,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;AACvB,KAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1C,MAAI,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAC5D;AACA;;AAEA,IAAE,OAAO,OAAO;AAChB;;AAEA,GAAC,SAAS,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE;IACtC,IAAI,CAAC,QAAQ,EAAE;AACjB,KAAG,OAAO,KAAK;AACf;AACA;IACE,IAAI,KAAK,EAAE;AACb,KAAG,OAAO,KAAK,GAAG,GAAG,GAAG,QAAQ;AAChC;AACA;IACE,OAAO,KAAK,GAAG,QAAQ;AACzB;;GAEC,IAAqC,MAAM,CAAC,OAAO,EAAE;AACtD,IAAE,UAAU,CAAC,OAAO,GAAG,UAAU;AACjC,IAAE,iBAAiB,UAAU;AAC7B,IAAE,MAKM;AACR,IAAE,MAAM,CAAC,UAAU,GAAG,UAAU;AAChC;AACA,GAAC,EAAE,EAAA;;;;;;;;AC1EU,MAAA,wBAAA,GAA2B,CAAC,YAAA,EAAsB,YAAyB,KAAA;AACtF,EAAA,IAAI,CAAC,YAAgB,IAAA,CAAC,YAAc,EAAA,QAAA,CAAS,YAAY,CAAG,EAAA;AAC1D,IAAO,OAAA,YAAA;AAAA;AAET,EAAA,MAAM,eAAyC,EAAC;AAChD,EAAM,MAAA,SAAA,GAAY,YAAa,CAAA,KAAA,CAAM,YAAY,CAAA;AAEjD,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AACzC,IAAA,YAAA,CAAa,IAAK,CAAA,SAAA,CAAU,CAAC,CAAA,IAAK,EAAE,CAAA;AACpC,IAAI,IAAA,CAAA,GAAI,SAAU,CAAA,MAAA,GAAS,CAAG,EAAA;AAC5B,MAAa,YAAA,CAAA,IAAA;AAAA,wBACX,GAAA,CAAC,MAA4D,EAAA,EAAA,SAAA,EAAU,cACpE,EAAA,QAAA,EAAA,YAAA,EAAA,EADQ,CAA4B,yBAAA,EAAA,CAAC,CAAI,CAAA,EAAA,IAAA,CAAK,MAAO,EAAC,CAEzD,CAAA;AAAA,OACF;AAAA;AACF;AAGF,EAAO,OAAA,YAAA;AACT,CAAA;AAEa,MAAA,aAAA,GAAgB,CAAC,UAAwB,KAAA;AACpD,EAAA,QAAQ,UAAY;AAAA,IAClB,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAO,OAAA,cAAA;AAAA,IACT,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAO,OAAA,cAAA;AAAA,IACT;AACE,MAAO,OAAA,EAAA;AAAA;AAEb,CAAA;;ACrBA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAK,MAAM,CAAA;AAEjC,MAAM,YAAEC,UAAU,SAAAC,OAAA,EAAU,GAAA,QAAA;AAErB,MAAM,2BAA2B,MAAM;AAC5C,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAF,IAAA,CAAG,oBAAoB,CACrC,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,aAAa,GAAG,QAAY,EAAA,2DAAA,EAAA,CAAA;AAAA,oBAC5C,IAAA,CAAA,IAAA,EAAA,EAAG,SAAW,EAAAA,IAAA,CAAG,OAAO,CACvB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAG,QAAuB,EAAA,wHAAA,EAAA,CAAA;AAAA,sBAC3B,GAAA,CAAC,QAAG,QAAkB,EAAA,kDAAA,EAAA,CAAA;AAAA,sBACtB,GAAA,CAAC,QAAG,QAAmB,EAAA,2FAAA,EAAA,CAAA;AAAA,sBACvB,GAAA,CAAC,QAAG,QAAY,EAAA,sDAAA,EAAA,CAAA;AAAA,sBAChB,GAAA,CAAC,QAAG,QAAoB,EAAA,2GAAA,EAAA,CAAA;AAAA,sBACxB,GAAA,CAAC,QAAG,QAAe,EAAA,sBAAA,EAAA;AAAA,KACrB,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ,CAAA;AAEO,MAAM,sBAAsB,CAAC;AAAA,EAClC,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAgC,KAAA;AAC9B,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,oBAAoB,CACrC,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,aAAa,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,sBAC5B,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,4BAAkB,MAAO,EAAA,CAAA;AAAA,MAAO;AAAA,KACpE,EAAA,CAAA;AAAA,IAEC,iBAAA,CAAkB,SAAS,CAC1B,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA,iBAAA,CAAkB,GAAI,CAAA,CAAC,IAA6B,KAAA;AACzD,UAAO,OAAA;AAAA,YACL,KAAA,EAAO,IAAK,CAAA,SAAA,CAAU,IAAI,CAAA;AAAA,YAC1B,MAAA,EACE,IAAK,CAAA,mBAAA,KAAwB,eAAiB,EAAA,mBAAA,IAC9C,IAAK,CAAA,qBAAA,KAA0B,eAAiB,EAAA,qBAAA,IAChD,IAAK,CAAA,gBAAA,KAAqB,eAAiB,EAAA,gBAAA;AAAA,YAC7C,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,eAAe,CAChC,EAAA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,SAAS,GACzB,QAAyB,EAAA,wBAAA,CAAA,CAAA,EAAG,IAAK,CAAA,eAAe,CAAG,EAAA,IAAA,CAAK,gBAAgB,CAAA,CAAA,EAAI,aAAa,CAC5F,EAAA,CAAA;AAAA,8BACC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,SAAS,CAAG,EAAA,CAAA;AAAA,8BAC9B,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,cAAc,CAC/B,EAAA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,SAAS,CAC1B,EAAA,QAAA,EAAA,wBAAA;AAAA,kBACC,CAAA,EAAG,KAAK,mBAAmB,CAAA,CAAA,EAAI,KAAK,qBAAqB,CAAA,CAAA,EAAI,KAAK,gBAAgB,CAAA,CAAA;AAAA,kBAClF;AAAA,iBAEJ,EAAA,CAAA;AAAA,gCACC,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAAA,IAAA,CAAG,aAAa,CAC9B,EAAA,QAAA,EAAA,wBAAA;AAAA,kBACC,CAAG,EAAA,IAAA,CAAK,qBAAqB,CAAA,CAAA,EAAI,KAAK,uBAAuB,CAAA,CAAA;AAAA,kBAC7D;AAAA,iBAEJ,EAAA;AAAA,eACF,EAAA;AAAA,aACF,EAAA,CAAA;AAAA,YAEF,EAAA,EAAI,IAAK,CAAA,SAAA,CAAU,IAAI;AAAA,WACzB;AAAA,SACD,CAAA;AAAA,QACD,SAAA,EAAWA,KAAG,aAAa,CAAA;AAAA,QAC3B,IAAK,EAAA,gBAAA;AAAA,QACL,IAAK,EAAA,QAAA;AAAA,QACL,YAAc,EAAA,EAAA;AAAA,QACd;AAAA;AAAA,KACF;AAAA,IAGD,iBAAA,CAAkB,MAAW,KAAA,CAAA,oBAC1B,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,sBACE,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,QAAc,EAAA,aAAA,EAAA,CAAA;AAAA,MAAO;AAAA,KACxD,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ,CAAA;AAEO,MAAM,2BAA2B,CAAC;AAAA,EACvC,8BAAA;AAAA,EACA,cAAA;AAAA,EACA,IAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF,CAAqC,KAAA;AACnC,EAAM,MAAA,EAAE,IAAM,EAAA,IAAA,EAAS,GAAA,8BAAA;AAEvB,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,oBAAoB,CACrC,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,KAAM,CAAA,IAAA;AAAA,MAAN;AAAA,QACC,IAAK,EAAA,gCAAA;AAAA,QACL,IAAK,EAAA,QAAA;AAAA,QACL,YAAA,EAAc,IAAK,CAAA,SAAA,CAAU,8BAA8B,CAAA;AAAA,QAE3D,QAAA,kBAAA,GAAA;AAAA,UAAC,KAAM,CAAA,IAAA;AAAA,UAAN;AAAA,YACC,SAAA,EAAWA,KAAG,aAAa,CAAA;AAAA,YAC3B,KAAA,EAAO,IAAK,CAAA,SAAA,CAAU,8BAA8B,CAAA;AAAA,YACpD,QAAU,EAAA,uBAAA;AAAA,YAEV,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,eAAe,CAChC,EAAA,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAWA,KAAG,SAAS,CAAA;AAAA,kBACvB,aAAG,8BAA+B,CAAA,IAAA,EAAM,eAAe,CAAA,EAAG,MAAM,gBAAgB,CAAA;AAAA;AAAA,eAAG;AAAA,8BACpF,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,SAAS,CAAG,EAAA,CAAA;AAAA,8BAC9B,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,cAAc,CAC/B,EAAA,QAAA,EAAA;AAAA,gCAAC,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAAA,IAAA,CAAG,SAAS,CAAA,EAAI,QAAG,EAAA,CAAA,EAAA,IAAA,EAAM,WAAW,CAAA,CAAA,EAAI,IAAM,EAAA,aAAa,CAAG,CAAA,EAAA,CAAA;AAAA,gCAC9E,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAAA,IAAA,CAAG,aAAa,CAAA,EAAI,QAAG,EAAA,CAAA,EAAA,IAAA,EAAM,WAAW,CAAA,CAAA,EAAI,IAAM,EAAA,aAAa,CAAG,CAAA,EAAA;AAAA,eACrF,EAAA;AAAA,aACF,EAAA;AAAA;AAAA;AACF;AAAA,KACF;AAAA,oBACA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,gCACb,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,SAAA,CAAU,KAAV,EAAA,EAAgB,EAAG,EAAA,QAAA,EAAS,OAAO,EAAE,KAAA,EAAO,MAAO,EAAA,EAAG,QAEvD,EAAA,0BAAA,EAAA,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,SAAU,CAAA,SAAA;AAAA,QAAV;AAAA,UACC,SAAW,EAAA;AAAA,YACT,KAAO,EAAA;AAAA,cACL,OAAS,EAAA,MAAA;AAAA,cACT,IAAM,EAAA;AAAA;AACR,WACF;AAAA,UACA,WAAY,EAAA,uCAAA;AAAA,UACZ,QAAU,EAAA,cAAA;AAAA,UACV,IAAK,EAAA,OAAA;AAAA,UACL,KAAO,EAAA,kBAAA;AAAA,UACN,GAAI,IAAA,KAAS,cAAkB,IAAA,EAAE,WAAW,IAAK;AAAA;AAAA;AACpD,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ,CAAA;AAyBO,SAAS,gBAAiB,CAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,UAAmB,EAAA;AACrE,EAAM,MAAA;AAAA,IACJ,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,uBAAA;AAAA,IACA,8BAAA;AAAA,IACA;AAAA,MACE,gBAAiB,CAAA;AAAA,IACnB,QAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAA,GAAA,CAAA,QAAA,EAAA,EACE,+BAAC,KAAM,CAAA,IAAA,EAAN,EAAW,MAAgB,EAAA,OAAA,EAAkB,WAAU,aACtD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,oBACf,IAAA,CAAC,KAAM,CAAA,OAAA,EAAN,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,2BAAA,EAAQ,iBAAe,IAAC,EAAA,CAAA;AAAA,sBAClD,IAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EACC,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAAC,UAAA,EAAA,EAAS,SAAS,EAAA,IAAA,EAAC,UAAY,kBAAA,GAAA,CAAC,oBAAiB,OAAS,EAAA,MAAA,EAAQ,CAAI,EAAA,OAAA,EAAS,oBAC9E,EAAA,QAAA,kBAAA,GAAA;AAAA,UAACC,OAAA;AAAA,UAAA;AAAA,YACE,GAAI,iBAAA,KAAsB,cAAkB,IAAA,EAAE,WAAW,IAAK,EAAA;AAAA,YAC/D,QAAU,EAAA,QAAA;AAAA,YACV,OAAA;AAAA,YACA,KAAO,EAAA,WAAA;AAAA,YACP,WAAY,EAAA,6FAAA;AAAA,YACZ,IAAK,EAAA;AAAA;AAAA,SAET,EAAA,CAAA;AAAA,QACC,iBAAA,KAAsB,SAAa,oBAAA,GAAA,CAAC,wBAAyB,EAAA,EAAA,CAAA;AAAA,QAC7D,CAAC,SAAa,IAAA,iBAAA,KAAsB,eACnC,oBAAA,GAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YACC,QAAU,EAAA,cAAA;AAAA,YACV,iBAAA;AAAA,YACA,aAAe,EAAA,oBAAA;AAAA,YACf;AAAA;AAAA,SACF;AAAA,QAED,CAAC,SAAA,IACA,iBAAsB,KAAA,cAAA,IACtB,mBACA,8BACE,oBAAA,GAAA;AAAA,UAAC,wBAAA;AAAA,UAAA;AAAA,YACC,8BAAA;AAAA,YACA,uBAAA;AAAA,YACA,cAAgB,EAAA,SAAA;AAAA,YAChB,IAAM,EAAA,iBAAA;AAAA,YACN;AAAA;AAAA;AACF,OAEN,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,KAAA,CAAM,MAAN,EAAA,EACE,gCAAsB,SACrB,oBAAA,IAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAS,EAAA,mBAAA;AAAA,UACT,OAAQ,EAAA,SAAA;AAAA,UACR,IAAK,EAAA,QAAA;AAAA,UACL,UAAW,EAAA,QAAA;AAAA,UACX,KAAM,EAAA,MAAA;AAAA,UAGL,QAAA,EAAA;AAAA,YAAA,iBAAA,KAAsB,eAAmB,IAAA,mBAAA;AAAA,YACzC,sBAAsB,cAAkB,IAAA;AAAA;AAAA;AAAA,OAG/C,EAAA;AAAA,KACF,EAAA;AAAA,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;AC9OO,SAAS,gBAAiB,CAAA,EAAE,QAAU,EAAA,OAAA,EAAS,QAAiB,EAAA;AACrE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAiB,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAe,SAAS,CAAA;AAChD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAA6B,EAAA;AAC3E,EAAA,MAAM,CAAC,8BAAA,EAAgC,iCAAiC,CAAA,GAAI,QAAiC,EAAA;AAC7G,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,EAAE,CAAA;AACzD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAiB,EAAE,CAAA;AACvE,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAI,GAAA,QAAA,CAA+B,EAAE,CAAA;AACvE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAmC,SAAS,CAAA;AAEhF,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI,QAA+C,CAAA;AAAA,IACvG,eAAiB,EAAA,EAAA;AAAA,IACjB,gBAAkB,EAAA,EAAA;AAAA,IAClB,WAAa,EAAA,EAAA;AAAA,IACb,aAAe,EAAA,EAAA;AAAA,IACf,UAAY,EAAA;AAAA,GACb,CAAA;AAED,EAAA,MAAM,EAAE,IAAA,EAAM,WAAa,EAAA,SAAA,EAAW,kBAAqB,GAAA,qBAAA;AAAA,IACzD,EAAE,eAAe,aAAc,EAAA;AAAA,IAC/B,EAAE,OAAS,EAAA,CAAC,CAAC,aAAA,IAAiB,eAAe,SAAU;AAAA,GACzD;AAEA,EAAA,MAAM,EAAE,IAAA,EAAM,UAAY,EAAA,SAAA,EAAW,qBAAwB,GAAA,wBAAA;AAAA,IAC3D,EAAE,gBAAgB,aAAc,EAAA;AAAA,IAChC,EAAE,OAAS,EAAA,CAAC,CAAC,aAAA,IAAiB,eAAe,YAAa;AAAA,GAC5D;AAEA,EAAA,MAAM,EAAE,IAAA,EAAM,gBAAiB,EAAA,GAAI,qCAAqC,qBAAuB,EAAA;AAAA,IAC7F,OAAA,EAAS,CAAC,CAAC,qBAAuB,EAAA;AAAA,GACnC,CAAA;AAED,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAkB,KAAK,CAAA;AAC3E,EAAA,MAAM,SAAS,MAAM;AACnB,IAAI,IAAA,IAAA,KAAS,mBAAmB,kBAAoB,EAAA;AAClD,MAAW,UAAA,CAAA,KAAA;AAAA,QACT,qPAAA;AAAA,QACA,wCAAA;AAAA,QACA,EAAE,SAAS,kCAAmC;AAAA,OAChD;AAEA,MAAA;AAAA;AAGF,IAAA,IAAI,SAAS,eAAiB,EAAA;AAC5B,MAAA,OAAA,CAAQ,cAAc,CAAA;AACtB,MAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,MAAA,IAAI,eAAiB,EAAA;AACnB,QAAyB,wBAAA,CAAA;AAAA,UACvB,iBAAiB,eAAgB,CAAA,eAAA;AAAA,UACjC,kBAAkB,eAAgB,CAAA,gBAAA;AAAA,UAClC,aAAa,eAAgB,CAAA,mBAAA;AAAA,UAC7B,eAAe,eAAgB,CAAA,qBAAA;AAAA,UAC/B,UAAY,EAAA;AAAA,SACb,CAAA;AAAA;AACH,KACK,MAAA;AACL,MAAA,8BAAA,IACE,QAAS,CAAA;AAAA,QACP,GAAG,8BAAA;AAAA,QACH;AAAA,OACD,CAAA;AACH,MAAQ,OAAA,EAAA;AAAA;AACV,GACF;AAKA,EAAM,MAAA,QAAA,GAAW,CAAC,CAA2C,KAAA;AAC3D,IAAM,MAAA,OAAA,GAAU,EAAE,MAAO,CAAA,KAAA;AACzB,IAAA,cAAA,CAAe,OAAO,CAAA;AAAA,GACxB;AAKA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,gBAAgB,EAAI,EAAA;AACtB,MAAQ,OAAA,EAAA;AAER,MAAA;AAAA;AAEF,IAAI,IAAA,WAAA,IAAe,WAAY,CAAA,MAAA,GAAS,CAAG,EAAA;AACzC,MAAM,MAAA,SAAA,GAAY,UAAW,CAAA,IAAA,CAAK,WAAW,CAAA;AAC7C,MAAc,aAAA,CAAA,SAAA,GAAY,eAAe,SAAS,CAAA;AAClD,MAAA,gBAAA,CAAiB,WAAW,CAAA;AAC5B,MAAA,OAAA,CAAQ,eAAe,CAAA;AACvB,MAAA,kBAAA,CAAmB,MAAS,CAAA;AAC5B,MAAA,qBAAA,CAAsB,EAAE,CAAA;AACxB,MAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA;AAC5B,GACF;AAKA,EAAM,MAAA,OAAA,GAAU,CAAC,CAA6C,KAAA;AAI5D,IAAI,IAAA,CAAA,CAAE,QAAQ,OAAS,EAAA;AACrB,MAAO,MAAA,EAAA;AAAA;AACT,GACF;AAKA,EAAM,MAAA,cAAA,GAAiB,CAAC,CAA2C,KAAA;AACjE,IAAM,MAAA,QAAA,GAAW,EAAE,MAAO,CAAA,KAAA;AAC1B,IAAA,IAAI,QAAU,EAAA;AAKZ,MAAmB,kBAAA,CAAA,IAAA,CAAK,KAAM,CAAA,QAAQ,CAAC,CAAA;AACvC,MAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA;AAC7B,GACF;AAKA,EAAM,MAAA,uBAAA,GAA0B,CAAC,CAA2C,KAAA;AAC1E,IAAM,MAAA,QAAA,GAAW,EAAE,MAAO,CAAA,KAAA;AAC1B,IAAA,IAAI,QAAU,EAAA;AACZ,MAAkC,iCAAA,CAAA,IAAA,CAAK,KAAM,CAAA,QAAQ,CAAC,CAAA;AACtD,MAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA;AAC7B,GACF;AAKA,EAAM,MAAA,OAAA,GAAU,YAAY,MAAM;AAChC,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,kBAAA,CAAmB,MAAS,CAAA;AAC5B,IAAA,qBAAA,CAAsB,EAAE,CAAA;AACxB,IAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,GACnB,EAAG,EAAE,CAAA;AAKL,EAAM,MAAA,SAAA,GAAY,CAAC,CAA2C,KAAA;AAC5D,IAAM,MAAA,MAAA,GAAS,EAAE,MAAO,CAAA,KAAA;AACxB,IAAA,qBAAA,CAAsB,MAAM,CAAA;AAC5B,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,KACtB,MAAA;AACL,MAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA;AAC5B,GACF;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAe,KAAA,SAAA,IAAa,WAAa,EAAA,IAAA,EAAM,WAAa,EAAA;AAC9D,MAAe,cAAA,CAAA,WAAA,CAAY,KAAK,WAAW,CAAA;AAAA,KAClC,MAAA,IAAA,UAAA,KAAe,YAAgB,IAAA,UAAA,EAAY,MAAM,cAAgB,EAAA;AAC1E,MAAA,OAAA,CAAQ,GAAI,CAAA,iBAAA,EAAmB,UAAW,CAAA,IAAA,CAAK,cAAc,CAAA;AAC7D,MAAA,MAAM,kBAAwC,UAAW,CAAA,IAAA,CAAK,cAAe,CAAA,GAAA,CAAI,CAAC,CAAO,MAAA;AAAA,QACvF,iBAAiB,CAAE,CAAA,yBAAA;AAAA,QACnB,kBAAkB,CAAE,CAAA,yBAAA;AAAA,QACpB,qBAAqB,CAAE,CAAA,mBAAA;AAAA,QACvB,uBAAuB,CAAE,CAAA,qBAAA;AAAA,QACzB,uBAAuB,CAAE,CAAA,qBAAA;AAAA,QACzB,yBAAyB,CAAE,CAAA,uBAAA;AAAA,QAC3B,kBAAkB,CAAE,CAAA;AAAA,OACpB,CAAA,CAAA;AACF,MAAA,cAAA,CAAe,eAAe,CAAA;AAAA;AAChC,GACC,EAAA,CAAC,WAAa,EAAA,UAAA,EAAY,UAAU,CAAC,CAAA;AAExC,EAAA,SAAA,CAAU,MAAM;AAId,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,kBAAA,CAAmB,MAAS,CAAA;AAC5B,MAAA,qBAAA,CAAsB,EAAE,CAAA;AAExB,MAAA,OAAA,CAAQ,SAAS,CAAA;AACjB,MAAA,gBAAA,CAAiB,EAAE,CAAA;AAAA;AACrB,GACF,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,IAAO,GAAA,gBAAA,EAAkB,IAAM,EAAA,0BAAA,CAA2B,CAAC,CAAA;AACjE,IAAA,MAAM,IAAO,GAAA,gBAAA,EAAkB,IAAM,EAAA,0BAAA,CAA2B,CAAC,CAAA;AAEjE,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAkC,iCAAA,CAAA;AAAA,QAChC,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA;AACH,GACF,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAO,OAAA;AAAA,IACL,8BAAA;AAAA,IACA,uBAAA;AAAA,IACA,oBAAsB,EAAA,OAAA;AAAA,IACtB,mBAAqB,EAAA,MAAA;AAAA,IACrB,oBAAsB,EAAA,aAAA;AAAA,IACtB,iBAAmB,EAAA,WAAA;AAAA,IACnB,iBAAmB,EAAA,IAAA;AAAA,IACnB,eAAA;AAAA,IACA,0BAA4B,EAAA,cAAA;AAAA,IAC5B,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAW,gBAAoB,IAAA;AAAA,GACjC;AACF;AAEO,MAAM,sBAAsB,MAAM;AACvC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAgC,EAAA;AAEtE,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,SAAA,KAAc,aAAc,EAAA;AAExD,EAAM,MAAA,sBAAA,GAAyB,sBAC5B,GAAA,CAAA,gBAAA,EAAA,EAAiB,QAAgB,OAAS,EAAA,UAAA,EAAY,UAAU,cAAgB,EAAA,CAAA;AAGnF,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF;;AC9LO,MAAM,cAAiB,GAAA;AAAA,EAC5B;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,sBAAuB,EAAA,EAAA;AAAA,GAChC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,oBAAqB,EAAA,EAAA;AAAA,GAC9B;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,sBAAuB,EAAA,EAAA;AAAA,GAChC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,uBAAwB,EAAA,EAAA;AAAA,GACjC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,sCAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,6BAA8B,EAAA,EAAA;AAAA,GACvC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,gBAAA;AAAA,IACb,IAAA,sBAAO,2BAA4B,EAAA,EAAA;AAAA,GACrC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,cAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,+BAAgC,EAAA,EAAA;AAAA,GACzC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,qBAAsB,EAAA,EAAA;AAAA,GAC/B;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,4CAAA;AAAA,IACV,WAAa,EAAA,gBAAA;AAAA,IACb,IAAA,sBAAO,sBAAuB,EAAA,EAAA;AAAA,GAChC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,kCAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,sBAAuB,EAAA,EAAA;AAAA,GAChC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,sCAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,2BAA4B,EAAA,EAAA;AAAA,GACrC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,8BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,qBAAsB,EAAA,EAAA;AAAA,GAC/B;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,qBAAsB,EAAA,EAAA;AAAA,GAC/B;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,uBAAwB,EAAA,EAAA;AAAA,GACjC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,oBAAqB,EAAA,EAAA;AAAA,GAC9B;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,uBAAwB,EAAA,EAAA;AAAA,GACjC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,yBAA0B,EAAA,EAAA;AAAA,GACnC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,kDAAA;AAAA,IACV,WAAa,EAAA,gCAAA;AAAA,IACb,IAAA,sBAAO,6BAA8B,EAAA,EAAA;AAAA,GACvC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,cAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,wBAAyB,EAAA,EAAA;AAAA,GAClC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,uBAAwB,EAAA,EAAA;AAAA,GACjC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,kBAAA;AAAA,IACV,WAAa,EAAA,MAAA;AAAA,IACb,IAAA,sBAAO,oBAAqB,EAAA,EAAA;AAAA,GAC9B;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,kDAAA;AAAA,IACV,WAAa,EAAA,sCAAA;AAAA,IACb,IAAA,sBAAO,uBAAwB,EAAA,EAAA;AAAA,GACjC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,4CAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,sBAAuB,EAAA,EAAA;AAAA,GAChC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,oBAAA;AAAA,IACV,WAAa,EAAA,oBAAA;AAAA,IACb,IAAA,sBAAO,oBAAqB,EAAA,EAAA;AAAA,GAC9B;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,6BAAA;AAAA,IACV,WAAa,EAAA,iBAAA;AAAA,IACb,IAAA,sBAAO,uBAAwB,EAAA,EAAA;AAAA,GACjC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,IACb,IAAA,sBAAO,sBAAuB,EAAA,EAAA;AAAA,GAChC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,qBAAsB,EAAA,EAAA;AAAA,GAC/B;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,gCAAA;AAAA,IACV,WAAa,EAAA,gCAAA;AAAA,IACb,IAAA,sBAAO,yBAA0B,EAAA,EAAA;AAAA,GACnC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,wBAAyB,EAAA,EAAA;AAAA,GAClC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,gCAAA;AAAA,IACV,WAAa,EAAA,gCAAA;AAAA,IACb,IAAA,sBAAO,gCAAiC,EAAA,EAAA;AAAA,GAC1C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,gBAAA;AAAA,IACV,WAAa,EAAA,gBAAA;AAAA,IACb,IAAA,sBAAO,4BAA6B,EAAA,EAAA;AAAA,GACtC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,sCAAA;AAAA,IACV,WAAa,EAAA,sCAAA;AAAA,IACb,IAAA,sBAAO,oCAAqC,EAAA,EAAA;AAAA,GAC9C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,oCAAqC,EAAA,EAAA;AAAA,GAC9C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,iCAAkC,EAAA,EAAA;AAAA,GAC3C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,sCAAA;AAAA,IACV,WAAa,EAAA,sCAAA;AAAA,IACb,IAAA,sBAAO,qCAAsC,EAAA,EAAA;AAAA,GAC/C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,sCAAA;AAAA,IACV,WAAa,EAAA,0CAAA;AAAA,IACb,IAAA,sBAAO,qCAAsC,EAAA,EAAA;AAAA,GAC/C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,+BAAgC,EAAA,EAAA;AAAA,GACzC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,sCAAA;AAAA,IACV,WAAa,EAAA,sCAAA;AAAA,IACb,IAAA,sBAAO,gCAAiC,EAAA,EAAA;AAAA,GAC1C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,4CAAA;AAAA,IACV,WAAa,EAAA,gCAAA;AAAA,IACb,IAAA,sBAAO,oCAAqC,EAAA,EAAA;AAAA,GAC9C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,gCAAiC,EAAA,EAAA;AAAA,GAC1C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,gBAAA;AAAA,IACV,WAAa,EAAA,gBAAA;AAAA,IACb,IAAA,sBAAO,4BAA6B,EAAA,EAAA;AAAA,GACtC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,gCAAiC,EAAA,EAAA;AAAA,GAC1C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,sCAAA;AAAA,IACb,IAAA,sBAAO,oCAAqC,EAAA,EAAA;AAAA,GAC9C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,sCAAA;AAAA,IACV,WAAa,EAAA,kDAAA;AAAA,IACb,IAAA,sBAAO,0CAA2C,EAAA,EAAA;AAAA,GACpD;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,sCAAA;AAAA,IACV,WAAa,EAAA,kDAAA;AAAA,IACb,IAAA,sBAAO,oCAAqC,EAAA,EAAA;AAAA,GAC9C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,wCAAA;AAAA,IACb,IAAA,sBAAO,wCAAyC,EAAA,EAAA;AAAA,GAClD;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,sCAAA;AAAA,IACV,WAAa,EAAA,sCAAA;AAAA,IACb,IAAA,sBAAO,mCAAoC,EAAA,EAAA;AAAA,GAC7C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,gCAAA;AAAA,IACV,WAAa,EAAA,gCAAA;AAAA,IACb,IAAA,sBAAO,gCAAiC,EAAA,EAAA;AAAA,GAC1C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,4CAAA;AAAA,IACV,WAAa,EAAA,4CAAA;AAAA,IACb,IAAA,sBAAO,kCAAmC,EAAA,EAAA;AAAA,GAC5C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,4BAAA;AAAA,IACV,WAAa,EAAA,4BAAA;AAAA,IACb,IAAA,sBAAO,gCAAiC,EAAA,EAAA;AAAA,GAC1C;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,+BAAgC,EAAA,EAAA;AAAA,GACzC;AAAA,EACA;AAAA,IACE,OAAS,EAAA,KAAA;AAAA,IACT,QAAU,EAAA,0BAAA;AAAA,IACV,WAAa,EAAA,0BAAA;AAAA,IACb,IAAA,sBAAO,kCAAmC,EAAA,EAAA;AAAA;AAE9C,CAAA;;ACvXgB,SAAA,kBAAA,CAAmB,EAAE,QAAA,EAAmD,EAAA;AACtF,EAAA,MAAM,EAAE,IAAK,EAAA,GAAI,yBAAyB,EAAE,YAAA,EAAc,uBAAuB,CAAA;AACjF,EAAA,MAAM,aAAgB,GAAA,IAAA,EAAM,IAAM,EAAA,cAAA,GAAiB,CAAC,CAAG,EAAA,QAAA;AAEvD,EAAM,MAAA,YAAA,GAAe,CAAC,IAAkB,KAAA;AACtC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,GACf;AAEA,EAAM,MAAA,QAAA,GAAW,eAAe,MAAO,CAAA,CAAC,SAAS,IAAK,CAAA,OAAA,EAAS,UAAW,CAAA,GAAG,CAAC,CAAA;AAE9E,EAAM,MAAA,SAAA,GAAY,eAAe,MAAO,CAAA,CAAC,UAAU,KAAM,CAAA,OAAA,EAAS,UAAW,CAAA,GAAG,CAAC,CAAA;AAEjF,EAAO,OAAA;AAAA,IACL,QAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF;;ACTA,SAAS,KAAA,CAAS,OAAY,IAAqB,EAAA;AACjD,EAAO,OAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,KAAK,IAAK,CAAA,KAAA,CAAM,SAAS,IAAI,CAAA,IAAK,CAAC,CAAA,EAAG,MAAM,KAAM,CAAA,KAAA,CAAM,IAAI,IAAM,EAAA,CAAA,GAAI,IAAO,GAAA,IAAI,CAAC,CAAA;AAChH;AAEO,SAAS,oBAAqB,CAAA,EAAE,IAAM,EAAA,OAAA,EAAS,UAAuC,EAAA;AAC3F,EAAA,MAAM,EAAE,QAAA,EAAU,SAAW,EAAA,YAAA,KAAiB,kBAAmB,CAAA;AAAA,IAC/D;AAAA,GACD,CAAA;AAED,EAAM,MAAA,WAAA,GAAc,CAAC,IAAoB,KAAA;AACvC,IAAM,MAAA,WAAA,GAAc,KAAM,CAAA,IAAA,EAAM,CAAC,CAAA;AAEjC,IAAA,uBACG,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAC,QAAA,CAAO,gBAAgB,CACpC,EAAA,QAAA,EAAA,WAAA,CAAY,GAAI,CAAA,CAACC,QAAO,UACvB,qBAAA,IAAA,CAAC,KAAqB,EAAA,EAAA,SAAA,EAAWD,SAAO,GACrC,EAAA,QAAA,EAAA;AAAA,MAAAC,MAAAA,CAAM,GAAI,CAAA,CAAC,IAAS,KAAA;AACnB,QAAM,MAAA,QAAA,GAAW,eAAe,IAAK,CAAA,CAAC,SAAS,IAAK,CAAA,OAAA,KAAY,KAAK,OAAO,CAAA;AAM5E,QAAM,MAAA,aAAA,GAAgB,WAClB,QACA,GAAA;AAAA,UACE,IAAA,sBAAO,6BAA8B,EAAA,EAAA,CAAA;AAAA,UACrC,aAAa,IAAK,CAAA;AAAA,SACpB;AAEJ,QACE,uBAAA,IAAA,CAAC,SAA0C,SAAW,EAAAD,QAAA,CAAO,MAAM,OAAS,EAAA,MAAM,YAAa,CAAA,IAAI,CACjG,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAI,SAAW,EAAAA,QAAA,CAAO,cAAc,CAAA,EAAI,yBAAe,IAAK,EAAA,CAAA;AAAA,+BAC5D,MAAK,EAAA,EAAA,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,YAAE,aAAe,EAAA;AAAA,WAAY,EAAA;AAAA,SAAA,EAAA,EAF3B,CAAG,EAAA,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,UAAU,CAGvC,CAAA,CAAA;AAAA,OAEH,CAAA;AAAA,MACAC,MAAM,CAAA,MAAA,GAAS,CACd,IAAA,KAAA,CAAM,IAAK,CAAA,EAAE,MAAQ,EAAA,CAAA,GAAIA,MAAM,CAAA,MAAA,EAAQ,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG,CAC/C,qBAAA,GAAA,CAAC,KAA2C,EAAA,EAAA,SAAA,EAAWD,QAAO,CAAA,IAAA,EAAM,OAAO,EAAE,UAAA,EAAY,QAAS,EAAA,EAAA,EAAxF,CAAe,YAAA,EAAA,UAAU,CAAI,CAAA,EAAA,CAAC,EAA6D,CACtG;AAAA,KAzBK,EAAA,EAAA,UA0BV,CACD,CACH,EAAA,CAAA;AAAA,GAEJ;AAEA,EACE,uBAAA,IAAA,CAAC,MAAM,IAAN,EAAA,EAAW,QAAQ,IAAM,EAAA,OAAA,EAAkB,WAAU,aACpD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,oBACf,IAAA,CAAC,KAAM,CAAA,OAAA,EAAN,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,8CAAA,EAAY,iBAAe,IAAC,EAAA,CAAA;AAAA,sBACtD,GAAA,CAAC,MAAM,IAAN,EAAA,EACC,+BAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,SAAO,SACrB,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,QAAA,CAAO,OACrB,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,QAAO,CAAA,eAAe,GAAG,QAAG,EAAA,oBAAA,EAAA,CAAA;AAAA,UACzC,WAAA,CAAY,QAAY,IAAA,EAAE;AAAA,SAC7B,EAAA,CAAA;AAAA,wBACC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,QAAA,CAAO,OACrB,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,QAAO,CAAA,eAAe,GAAG,QAAG,EAAA,oBAAA,EAAA,CAAA;AAAA,UACzC,WAAA,CAAY,SAAa,IAAA,EAAE;AAAA,SAC9B,EAAA;AAAA,OAAA,EACF,CACF,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;ACtDa,MAAA,iBAAA,GAAoB,CAAC,QAA+C,KAAA;AAC/E,EAAA,MAAM,EAAE,UAAY,EAAA,MAAA,EAAQ,SAAW,EAAA,QAAA,KAAa,WAAY,EAAA;AAChE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA,CAAwB,EAAE,CAAA;AAClE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAA6B,IAAI,CAAA;AAEjF,EAAA,MAAM,EAAE,IAAK,EAAA,GAAI,2BAA2B,EAAE,YAAA,EAAc,eAAe,CAAA;AAE3E,EAAA,MAAM,SAAS,MAAM;AACnB,IAAI,IAAA,WAAA,CAAY,UAAU,CAAG,EAAA;AAC3B,MAAA,gBAAA,CAAiB,WAAW,CAAA;AAC5B,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,KACT,MAAA;AACL,MAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,MAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,GACF;AAEA,EAAM,MAAA,OAAA,GAAU,CAAC,CAA6C,KAAA;AAC5D,IAAI,IAAA,CAAA,CAAE,QAAQ,OAAS,EAAA;AACrB,MAAO,MAAA,EAAA;AAAA;AACT,GACF;AAEA,EAAM,MAAA,mBAAA,GAAsB,CAAC,CAA2C,KAAA;AACtE,IAAe,cAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAC7B,IAAA,IAAI,CAAE,CAAA,MAAA,CAAO,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AAC7B,MAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,MAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,GACF;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,GACjB;AAEA,EAAM,MAAA,gBAAA,GAAmB,CAAC,QAA0B,KAAA;AAClD,IAAA,mBAAA,CAAoB,QAAQ,CAAA;AAC5B,IAAe,cAAA,CAAA,QAAA,CAAS,gBAAgB,EAAE,CAAA;AAC1C,IAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA;AACnB,GACF;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,QAAA,GAAW,IAAM,EAAA,IAAA,EAAM,QAAU,EAAA,MAAA;AAAA,MAAO,CAAC,MAC7C,CAAE,CAAA,YAAA,EAAc,aAAc,CAAA,QAAA,CAAS,WAAY,CAAA,WAAA,EAAa;AAAA,KAClE;AACA,IAAgB,eAAA,CAAA,QAAA,IAAY,EAAE,CAAA;AAAA,GAC7B,EAAA,CAAC,IAAM,EAAA,WAAW,CAAC,CAAA;AAEtB,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;;ACxFA,MAAMH,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAEjC,MAAM,YAAEF,UAAU,SAAAC,OAAA,EAAU,GAAA,QAAA;AACf,MAAA,cAAA,GAAiB,CAAC,EAAE,gBAAA,EAAkB,aAAa,SAAW,EAAA,GAAG,OAAiC,KAAA;AAC7G,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF,GAAI,kBAAkB,gBAAgB,CAAA;AAEtC,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAF,IAAA,CAAG,WAAW,CAC5B,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAI,SAAW,EAAAA,IAAA,CAAG,YAAY,CAAA,EAC7B,8BAACC,UAAU,EAAA,EAAA,GAAG,SAAW,EAAA,UAAA,sBAAa,gBAAiB,EAAA,EAAA,OAAA,EAAS,QAAQ,CAAI,EAAA,OAAA,EAAkB,WAAS,IACrG,EAAA,QAAA,kBAAA,GAAA;AAAA,MAACC,OAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,QAAU,EAAA,mBAAA;AAAA,QACV,OAAA;AAAA,QACA,KAAO,EAAA,WAAA;AAAA,QACP,aAAa,WAAe,IAAA,iGAAA;AAAA,QAC5B,IAAK,EAAA,OAAA;AAAA,QACL,GAAK,EAAA;AAAA;AAAA,OAET,CACF,EAAA,CAAA;AAAA,IACC,UAAU,YAAa,CAAA,MAAA,GAAS,qBAC9B,GAAA,CAAA,QAAA,EAAA,EACC,8BAAC,KAAI,EAAA,EAAA,SAAA,EAAWF,IAAG,CAAA,kBAAkB,GACnC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EACE,uBAAa,GAAI,CAAA,CAAC,UAAU,KAC3B,qBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,OAAA,EAAS,MAAM,gBAAA,CAAiB,QAAQ,CAAA;AAAA,QACxC,UAAU,EAAA,IAAA;AAAA,QAEV,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,eAAe,CAChC,EAAA,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,MAAM,CAAA,EACtB,mCAAyB,QAAS,CAAA,YAAA,IAAgB,EAAI,EAAA,aAAa,CACtE,EAAA,CAAA;AAAA,0BACC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,SAAS,CAC1B,EAAA,QAAA,EAAA;AAAA,4BAAC,GAAA,CAAA,MAAA,EAAA,EACE,QAAS,EAAA,QAAA,CAAA,SAAA,IACR,iBAAkB,CAAA;AAAA,cAChB,YAAY,QAAS,CAAA,SAAA;AAAA,cACrB,UAAY,EAAA,UAAA;AAAA,cACZ,QAAU,EAAA;AAAA,aACX,CACL,EAAA,CAAA;AAAA,gCACC,MAAK,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,WAAW,GAAG,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,4BAClC,GAAA,CAAA,MAAA,EAAA,EAAM,QAAc,EAAA,aAAA,CAAA,QAAA,CAAS,UAAU,CAAE,EAAA,CAAA;AAAA,YACzC,QAAA,CAAS,+BAEN,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,WAAW,GAAG,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,8BACnC,GAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,WAAY,EAAA;AAAA,aAC9B,EAAA;AAAA,WAEJ,EAAA;AAAA,SACF,EAAA;AAAA,OAAA;AAAA,MA1BK,CAAa,UAAA,EAAA,QAAA,CAAS,UAAU,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,KA4BjD,CACH,EAAA,CAAA,EACF,CACF,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ;;AC7EA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAEjC,MAAM,YAAEF,UAAU,SAAAC,OAAA,EAAU,GAAA,QAAA;AAMrB,SAAS,mBAAoB,CAAA,EAAE,MAAQ,EAAA,UAAA,EAAY,UAAmB,EAAA;AAC3E,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF,GAAI,kBAAkB,QAAQ,CAAA;AAE9B,EACE,uBAAA,IAAA,CAAC,MAAM,IAAN,EAAA,EAAW,QAAgB,OAAS,EAAA,UAAA,EAAY,WAAU,aACzD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,oBACf,IAAA,CAAC,KAAM,CAAA,OAAA,EAAN,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,2BAAA,EAAQ,iBAAe,IAAC,EAAA,CAAA;AAAA,sBAClD,IAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EACC,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAAD,UAAA,EAAA,EAAS,4BAAa,GAAA,CAAA,gBAAA,EAAA,EAAiB,SAAS,MAAQ,EAAA,CAAA,EAAI,OAAkB,EAAA,SAAA,EAAS,IACtF,EAAA,QAAA,kBAAA,GAAA;AAAA,UAACC,OAAA;AAAA,UAAA;AAAA,YACC,QAAU,EAAA,mBAAA;AAAA,YACV,OAAA;AAAA,YACA,KAAO,EAAA,WAAA;AAAA,YACP,WAAY,EAAA,iGAAA;AAAA,YACZ,IAAK,EAAA,OAAA;AAAA,YACL,GAAK,EAAA;AAAA;AAAA,SAET,EAAA,CAAA;AAAA,QACC,iCACE,IAAA,CAAA,GAAA,EAAA,EAAE,SAAW,EAAAF,IAAA,CAAG,cAAc,CAAG,EAAA,QAAA,EAAA;AAAA,UAAA,SAAA;AAAA,0BAC7B,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,uBAAa,MAAO,EAAA,CAAA;AAAA,UAAO;AAAA,SAC/D,EAAA,CAAA;AAAA,QAED,aAAA,IAAiB,aAAa,MAAW,KAAA,CAAA,yBACvC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,eAAe,CAAG,EAAA,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,0BACjC,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,QAAc,EAAA,aAAA,EAAA,CAAA;AAAA,UAAO;AAAA,SACxD,EAAA,CAAA;AAAA,QAED,aAAA,IAAiB,aAAa,MAAS,GAAA,CAAA,wBACrC,KACE,EAAA,EAAA,QAAA,EAAA,YAAA,CAAa,MAAS,GAAA,CAAA,oBACpB,GAAA,CAAA,IAAA,EAAA,EAAK,WAAW,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,MAAO,EAAA,IACvC,QAAa,EAAA,YAAA,CAAA,GAAA,CAAI,CAAC,QAAA,EAAU,KAC3B,qBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,SAAS,MAAM;AACb,cAAA,gBAAA,CAAiB,QAAQ,CAAA;AACzB,cAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,cAAA,cAAA,CAAe,EAAE,CAAA;AACjB,cAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,cAAW,UAAA,EAAA;AAAA,aACb;AAAA,YACA,UAAU,EAAA,IAAA;AAAA,YAEV,+BAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,eAAA,EAAiB,OAAO,CACzC,EAAA,QAAA,EAAA;AAAA,8BAAC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,MAAM,CAAA,EACtB,mCAAyB,QAAS,CAAA,YAAA,IAAgB,EAAI,EAAA,aAAa,CACtE,EAAA,CAAA;AAAA,mCACC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,SAAA,EAAW,OAAO,CACnC,EAAA,QAAA,EAAA;AAAA,gCAAC,GAAA,CAAA,MAAA,EAAA,EACE,QAAS,EAAA,QAAA,CAAA,SAAA,IACR,iBAAkB,CAAA;AAAA,kBAChB,YAAY,QAAS,CAAA,SAAA;AAAA,kBACrB,UAAY,EAAA,UAAA;AAAA,kBACZ,QAAU,EAAA;AAAA,iBACX,CACL,EAAA,CAAA;AAAA,oCACC,MAAK,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,WAAW,GAAG,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,gCAClC,GAAA,CAAA,MAAA,EAAA,EAAM,QAAc,EAAA,aAAA,CAAA,QAAA,CAAS,UAAU,CAAE,EAAA,CAAA;AAAA,gBACzC,QAAA,CAAS,+BAEN,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,WAAW,GAAG,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,kCACnC,GAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,WAAY,EAAA;AAAA,iBAC9B,EAAA;AAAA,eAEJ,EAAA;AAAA,aACF,EAAA;AAAA,WAAA;AAAA,UAhCK,CAAa,UAAA,EAAA,QAAA,CAAS,UAAU,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,SAkCjD,GACH,CAEJ,EAAA;AAAA,OAEJ,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;AChGA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAEjC,MAAM,YAAEF,UAAU,SAAAC,OAAA,EAAU,GAAA,QAAA;AAW5B,MAAM,YAAyC,GAAA;AAAA,EAC7C;AAAA,IACE,eAAiB,EAAA,IAAA;AAAA,IACjB,mBAAqB,EAAA,0BAAA;AAAA,IACrB,wBAA0B,EAAA,KAAA;AAAA,IAC1B,kCAAoC,EAAA;AAAA,GACtC;AAAA,EACA;AAAA,IACE,eAAiB,EAAA,IAAA;AAAA,IACjB,mBAAqB,EAAA,cAAA;AAAA,IACrB,wBAA0B,EAAA,KAAA;AAAA,IAC1B,kCAAoC,EAAA;AAAA,GACtC;AAAA,EACA;AAAA,IACE,eAAiB,EAAA,IAAA;AAAA,IACjB,mBAAqB,EAAA,oBAAA;AAAA,IACrB,wBAA0B,EAAA,KAAA;AAAA,IAC1B,kCAAoC,EAAA;AAAA,GACtC;AAAA,EACA;AAAA,IACE,eAAiB,EAAA,IAAA;AAAA,IACjB,mBAAqB,EAAA,cAAA;AAAA,IACrB,wBAA0B,EAAA,KAAA;AAAA,IAC1B,kCAAoC,EAAA;AAAA,GACtC;AAAA,EACA;AAAA,IACE,eAAiB,EAAA,IAAA;AAAA,IACjB,mBAAqB,EAAA,oBAAA;AAAA,IACrB,wBAA0B,EAAA,KAAA;AAAA,IAC1B,kCAAoC,EAAA;AAAA;AAExC,CAAA;AAEO,MAAM,+BAA+B,CAAC;AAAA,EAC3C,cAAA;AAAA,EACA;AACF,CAAyC,KAAA;AACvC,EAAM,MAAA,GAAA,GAAM,CAAC,OAAoB,KAAA;AAC/B,IAAA,cAAA,CAAe,OAAO,CAAA;AACtB,IAAA,gBAAA,CAAiB,OAAO,CAAA;AAAA,GAC1B;AAEA,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAF,IAAA,CAAG,oBAAoB,CACrC,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,gBAAgB,GAAG,QAAQ,EAAA,wCAAA,EAAA,CAAA;AAAA,oBAC3C,GAAA,CAAA,IAAA,EAAA,EAAG,SAAW,EAAAA,IAAA,CAAG,UAAU,CAAA,EACzB,QAAa,EAAA,YAAA,CAAA,GAAA,CAAI,CAAC,IAAA,EAAM,KACvB,qBAAA,GAAA,CAAC,QAA4C,OAAS,EAAA,MAAM,GAAI,CAAA,IAAA,CAAK,mBAAmB,CAAA,EACtF,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAQ,eAAK,mBAAoB,EAAA,CAAA,EAAA,EAD3B,CAAG,EAAA,IAAA,CAAK,eAAe,CAAA,CAAA,EAAI,KAAK,CAAA,CAEzC,CACD,CACH,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ,CAAA;AAEO,MAAM,0BAA0B,CAAC,EAAE,eAAiB,EAAA,aAAA,EAAe,UAA6C,KAAA;AACrH,EAAA,MAAM,CAAC,UAAY,EAAA,aAAa,CAAI,GAAA,QAAA,CAAmC,EAAE,CAAA;AAEzE,EAAA,SAAA,CAAU,MAAM;AACd,IAAMK,MAAAA,WAAAA,GAAa,eAAgB,CAAA,MAAA,CAAO,CAAC,IAAA,KAAS,IAAK,CAAA,mBAAA,CAAoB,QAAS,CAAA,aAAa,CAAC,CAAA,IAAK,EAAC;AAC1G,IAAA,aAAA,CAAcA,WAAU,CAAA;AAAA,GACvB,EAAA,CAAC,eAAiB,EAAA,aAAa,CAAC,CAAA;AAEnC,EACE,uBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,MACb,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWL,IAAG,CAAA,gBAAgB,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,sBAC/B,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,qBAAW,MAAO,EAAA,CAAA;AAAA,MAAO;AAAA,KAC7D,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,IAAA,EAAA,EAAG,SAAW,EAAAA,IAAA,CAAG,UAAU,CAAA,EACzB,QAAW,EAAA,UAAA,CAAA,MAAA,GAAS,CACnB,IAAA,UAAA,CAAW,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AAC9B,MACE,uBAAA,GAAA,CAAC,QAA4C,OAAS,EAAA,MAAM,SAAS,IAAK,CAAA,mBAAmB,GAC3F,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAQ,mCAAyB,IAAK,CAAA,mBAAA,EAAqB,aAAa,CAAE,EAAA,CAAA,EAAA,EADpE,GAAG,KAAK,CAAA,CAAA,EAAI,IAAK,CAAA,eAAe,CAEzC,CAAA,CAAA;AAAA,KAEH,CACL,EAAA,CAAA;AAAA,IACC,UAAA,CAAW,WAAW,CACrB,oBAAA,IAAA,CAAC,SAAI,SAAW,EAAAA,IAAA,CAAG,eAAe,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,sBACjC,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,QAAc,EAAA,aAAA,EAAA,CAAA;AAAA,MAAO;AAAA,KACxD,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ,CAAA;AAoBO,SAAS,oBAAqB,CAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,UAAmB,EAAA;AACzE,EAAM,MAAA;AAAA,IACJ,MAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,MACE,oBAAqB,CAAA;AAAA,IACvB,QAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAA,GAAA,CAAA,QAAA,EAAA,EACE,+BAAC,KAAM,CAAA,IAAA,EAAN,EAAW,MAAgB,EAAA,OAAA,EAAkB,WAAU,aACtD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,oBACf,IAAA,CAAC,KAAM,CAAA,OAAA,EAAN,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,2BAAA,EAAQ,iBAAe,IAAC,EAAA,CAAA;AAAA,sBAClD,IAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAACC,UAAA;AAAA,UAAA;AAAA,YACC,SAAS,EAAA,IAAA;AAAA,YACT,4BACG,GAAA,CAAA,QAAA,EAAA,EACC,8BAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,QAAQ,CACrC,EAAA,CAAA;AAAA,YAEF,OAAA;AAAA,YACA,SAAA,EAAWD,KAAG,cAAc,CAAA;AAAA,YAE5B,QAAA,kBAAA,GAAA;AAAA,cAACE,OAAA;AAAA,cAAA;AAAA,gBACC,QAAU,EAAA,QAAA;AAAA,gBACV,OAAA;AAAA,gBACA,WAAY,EAAA,6FAAA;AAAA,gBACZ,IAAK,EAAA,OAAA;AAAA,gBACL,KAAO,EAAA;AAAA;AAAA;AACT;AAAA,SACF;AAAA,QACC,CAAC,aAAA,oBACC,GAAA,CAAA,4BAAA,EAAA,EAA6B,gBAAgC,gBAAoC,EAAA,CAAA;AAAA,QAEnG,iCACE,GAAA,CAAA,uBAAA,EAAA,EAAwB,eAAiB,EAAA,UAAA,EAAY,eAA8B,QAAoB,EAAA;AAAA,OAE5G,EAAA;AAAA,KACF,EAAA;AAAA,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;AC9KO,SAAS,oBAAqB,CAAA,EAAE,QAAU,EAAA,OAAA,EAAS,QAAiB,EAAA;AACzE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAiB,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,QAAiB,EAAA;AACvE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,EAAE,CAAA;AAEzD,EAAA,MAAM,EAAE,IAAK,EAAA,GAAI,yBAA0B,CAAA,EAAE,eAAe,CAAA;AAC5D,EAAA,MAAM,UAAa,GAAA,IAAA,EAAM,IAAK,CAAA,eAAA,IAAmB,EAAC;AAKlD,EAAM,MAAA,QAAA,GAAW,CAAC,CAA2C,KAAA;AAC3D,IAAM,MAAA,OAAA,GAAU,EAAE,MAAO,CAAA,KAAA;AACzB,IAAA,cAAA,CAAe,OAAO,CAAA;AAAA,GACxB;AAKA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,gBAAgB,EAAI,EAAA;AACtB,MAAQ,OAAA,EAAA;AAER,MAAA;AAAA;AAEF,IAAI,IAAA,WAAA,IAAe,WAAY,CAAA,MAAA,GAAS,CAAG,EAAA;AACzC,MAAA,gBAAA,CAAiB,WAAW,CAAA;AAC5B,MAAA,sBAAA,CAAuB,EAAE,CAAA;AAAA;AAC3B,GACF;AAKA,EAAM,MAAA,OAAA,GAAU,CAAC,CAA6C,KAAA;AAC5D,IAAM,MAAA,YAAA,GAAgB,EAAE,MAA4B,CAAA,KAAA;AAKpD,IAAI,IAAA,YAAA,CAAa,MAAW,KAAA,CAAA,IAAK,YAAa,CAAA,KAAA,CAAM,EAAE,CAAA,CAAE,SAAU,CAAA,KAAK,CAAE,CAAA,MAAA,GAAS,CAAG,EAAA;AACnF,MAAO,MAAA,EAAA;AAAA;AACT,GAQF;AAKA,EAAM,MAAA,OAAA,GAAU,YAAY,MAAM;AAChC,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,sBAAA,CAAuB,EAAE,CAAA;AAAA,GAC3B,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA,QAAA,GAAW,CAAC,WAAwB,KAAA;AACxC,IAAA,sBAAA,CAAuB,WAAW,CAAA;AAClC,IAAA,MAAM,QAAQ,UAAW,CAAA,IAAA,CAAK,CAAC,IAAS,KAAA,IAAA,CAAK,wBAAwB,WAAW,CAAA;AAChF,IAAA,KAAA,IAAS,SAAS,KAAK,CAAA;AACvB,IAAQ,OAAA,EAAA;AAAA,GACV;AAEA,EAAA,SAAA,CAAU,MAAM;AAId,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,sBAAA,CAAuB,EAAE,CAAA;AACzB,MAAA,gBAAA,CAAiB,EAAE,CAAA;AAAA;AACrB,GACF,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,MAAM,0BAA0B,MAAM;AAC3C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAiC,EAAA;AAEvE,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,SAAA,KAAc,aAAc,EAAA;AAExD,EAAM,MAAA,0BAAA,GAA6B,sBAChC,GAAA,CAAA,oBAAA,EAAA,EAAqB,QAAgB,OAAS,EAAA,UAAA,EAAY,UAAU,cAAgB,EAAA,CAAA;AAGvF,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF;;ACpGA,MAAM,OAAO,MAAM;AACjB,EAAA,MAAM,IAAO,GAAA,QAAA,EAAa,GAAA,MAAA,CAAO,SAAS,QAAW,GAAA,EAAA;AACrD,EAAA,IAAI,KAAK,QAAS,CAAA,WAAW,KAAK,IAAK,CAAA,QAAA,CAAS,sBAAsB,CAAG,EAAA;AACvE,IAAO,OAAA,oCAAA;AAAA;AAET,EAAI,IAAA,IAAA,CAAK,QAAS,CAAA,KAAK,CAAG,EAAA;AACxB,IAAO,OAAA,oCAAA;AAAA,GACE,MAAA,IAAA,IAAA,CAAK,QAAS,CAAA,KAAK,CAAG,EAAA;AAC/B,IAAO,OAAA,oCAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,gCAAA;AAAA;AAEX,CAAG,GAAA;AAUqB,SAAA,SAAA,CAAU,EAAE,OAAS,EAAA,QAAA,EAAU,cAAc,SAAW,EAAA,CAAA,GAAI,MAAqB,EAAA;AACvG,EAAM,MAAA,QAAA,GAAW,YAAY,MAAM;AACjC,IAAA,MAAM,SAAY,GAAA,IAAI,GAAI,CAAA,UAAA,EAAY,GAAG,CAAA;AACzC,IAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,SAAA,EAAW,OAAO,CAAA;AAC7C,IAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,UAAA,EAAY,QAAQ,CAAA;AAE/C,IAAA,IAAI,SAAW,EAAA;AACb,MAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,WAAA,EAAa,SAAS,CAAA;AAAA;AAGnD,IAAA,IAAI,CAAG,EAAA;AACL,MAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,GAAA,EAAK,CAAC,CAAA;AAAA;AAGnC,IAAA,IAAI,YAAc,EAAA;AAChB,MAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,cAAA,EAAgB,YAAY,CAAA;AAAA;AAGzD,IAAA,OAAO,UAAU,QAAS,EAAA;AAAA,KACzB,CAAC,OAAA,EAAS,UAAU,YAAc,EAAA,SAAA,EAAW,CAAC,CAAC,CAAA;AAMlD,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,MAAM,YAAY,QAAS,EAAA;AAC3B,IAAA,QAAA,CAAS,IAAO,GAAA,SAAA;AAAA,GAClB;AAgBA,EAAM,MAAA,IAAA,GAAO,OAAO,OAA6B,KAAA;AAC/C,IAAA,OAAO,IAAI,OAAA,CAAwB,CAAC,OAAA,EAAS,MAAW,KAAA;AACtD,MAAA,MAAM,YAAY,QAAS,EAAA;AAC3B,MAAQ,OAAA,CAAA,GAAA,CAAI,aAAa,SAAS,CAAA;AAClC,MAAM,MAAA,KAAA,GAAS,OAAW,IAAA,OAAA,CAAQ,UAAe,IAAA,GAAA;AACjD,MAAM,MAAA,MAAA,GAAU,OAAW,IAAA,OAAA,CAAQ,WAAgB,IAAA,GAAA;AAEnD,MAAA,MAAM,OAAQ,OAAW,IAAA,OAAA,CAAQ,cAAe,MAAO,CAAA,MAAA,CAAO,QAAQ,KAAS,IAAA,CAAA;AAC/E,MAAA,MAAM,MAAO,OAAW,IAAA,OAAA,CAAQ,aAAc,MAAO,CAAA,MAAA,CAAO,SAAS,MAAU,IAAA,CAAA;AAE/E,MAAM,MAAA,aAAA,GAAgB,SAAS,KAAK,CAAA,QAAA,EAAW,MAAM,CAAS,MAAA,EAAA,IAAI,QAAQ,GAAG,CAAA,CAAA;AAC7E,MAAM,MAAA,KAAA,GAAQ,OAAO,IAAK,CAAA,SAAA,EAAY,WAAW,OAAQ,CAAA,UAAA,IAAe,cAAc,aAAa,CAAA;AAEnG,MAAA,IAAI,CAAC,KAAO,EAAA;AACV,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,mFAAkB,CAAC,CAAA;AAEpC,QAAA;AAAA;AAKF,MAAM,MAAA,aAAA,GAAgB,CAAC,KAAwB,KAAA;AAC7C,QAAQ,OAAA,CAAA,GAAA,CAAI,uBAAuB,KAAM,CAAA,MAAA,EAAQ,IAAI,GAAI,CAAA,SAAS,EAAE,MAAM,CAAA;AAE1E,QAAA,IAAI,MAAM,MAAW,KAAA,IAAI,GAAI,CAAA,SAAS,EAAE,MAAQ,EAAA;AAC9C,UAAA;AAAA;AAOF,QAAA,IAAI,MAAM,IAAM,EAAA;AACd,UAAA,OAAA,CAAQ,MAAM,IAAI,CAAA;AAAA,SACb,MAAA;AACL,UAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yFAAmB,CAAC,CAAA;AAAA;AAGvC,QAAA,KAAA,CAAM,KAAM,EAAA;AACZ,QAAO,MAAA,CAAA,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAAA,OACrD;AACA,MAAO,MAAA,CAAA,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAAA,KACjD,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,SAAS,SAAU;AAAA,IACvB,MAAS,GAAA,GAAA;AAAA,IACT,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAU,GAAA,6CAAA;AAAA,IACV,SAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAe,GAAA;AAAA,GAWd,EAAA;AACD,IAAA,MAAM,YAAY,QAAS,EAAA;AAE3B,IAAA,SAAA,CAAU,MAAM;AACd,MAAI,IAAA,CAAC,SAAa,IAAA,CAAC,OAAS,EAAA;AAC1B,QAAA;AAAA;AAGF,MAAM,MAAA,OAAA,GAAU,CAAC,CAAoB,KAAA;AACnC,QAAQ,OAAA,CAAA,GAAA,CAAI,iBAAiB,CAAC,CAAA;AAS9B,QAAA,MAAM,IAAI,CAAE,CAAA,IAAA;AACZ,QAAA,IAAI,CAAG,EAAA;AACL,UAAI,IAAA,CAAA,CAAE,WAAW,OAAS,EAAA;AACxB,YAAA,OAAA,GAAU,CAAC,CAAA;AAAA,WACb,MAAA,IAAW,CAAE,CAAA,MAAA,KAAW,OAAS,EAAA;AAC/B,YAAA,OAAA,GAAU,CAAC,CAAA;AAAA,WACb,MAAA,IAAW,CAAE,CAAA,MAAA,KAAW,UAAY,EAAA;AAClC,YAAA,SAAA,GAAY,CAAC,CAAA;AAAA;AACf,SACK,MAAA;AACL,UAAU,OAAA,GAAA;AAAA,YACR,MAAQ,EAAA,OAAA;AAAA,YACR,SAAW,EAAA,EAAA;AAAA,YACX,WAAa,EAAA;AAAA,WACd,CAAA;AAAA;AACH,OACF;AAEA,MAAO,MAAA,CAAA,gBAAA,CAAiB,WAAW,OAAwB,CAAA;AAE3D,MAAA,OAAO,MAAM,MAAA,CAAO,mBAAoB,CAAA,SAAA,EAAW,OAAwB,CAAA;AAAA,OAC1E,CAAC,OAAA,EAAS,OAAS,EAAA,SAAA,EAAW,YAAY,CAAC,CAAA;AAE9C,IACE,uBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,SAAA;AAAA,QACL,KAAM,EAAA,MAAA;AAAA,QACN,QAAQ,OAAO,MAAA,KAAW,QAAW,GAAA,CAAA,EAAG,MAAM,CAAO,EAAA,CAAA,GAAA,MAAA;AAAA,QACrD,KAAO,EAAA,EAAE,MAAQ,EAAA,CAAA,EAAG,GAAG,KAAM,EAAA;AAAA,QAC7B,SAAA;AAAA,QACA,OAAA;AAAA,QACC,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU;AAAC;AAAA,KAC5B;AAAA,GAEJ;AAEA,EAAO,OAAA,EAAE,IAAM,EAAA,QAAA,EAAU,MAAO,EAAA;AAClC;;ACxKO,MAAM,KAA+B,GAAA;AAAA,EAC1C,OAAS,EAAA;AAAA,IACP,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,eAAiB,EAAA;AAAA,IACf,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,aAAe,EAAA;AAAA,IACb,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,kBAAoB,EAAA;AAAA,IAClB,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,sBAAwB,EAAA;AAAA,IACtB,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,2BAA6B,EAAA;AAAA,IAC3B,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,yBAA2B,EAAA;AAAA,IACzB,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,iBAAmB,EAAA;AAAA,IACjB,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,yBAA2B,EAAA;AAAA,IACzB,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,+BAAiC,EAAA;AAAA,IAC/B,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EAEA,kCAAoC,EAAA;AAAA,IAClC,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA,KACX;AAAA,IACA,GAAK,EAAA;AAAA,MACH,QAAU,EAAA,KAAA;AAAA,MACV,OAAS,EAAA;AAAA;AACX;AAEJ;AAiEO,SAAS,cAAe,CAAA;AAAA,EAC7B,SAAA,GAAY,CAAC,MAAW,KAAA;AACtB,IAAA,OAAA,CAAQ,GAAI,CAAA,YAAA,EAAc,IAAK,CAAA,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,GAClD;AAAA,EACA,OAAA,GAAU,CAAC,MAAW,KAAA;AACpB,IAAA,OAAA,CAAQ,GAAI,CAAA,UAAA,EAAY,IAAK,CAAA,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,GAChD;AAAA,EACA,OAAA,GAAU,CAAC,MAAW,KAAA;AACpB,IAAA,OAAA,CAAQ,GAAI,CAAA,UAAA,EAAY,IAAK,CAAA,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,GAChD;AAAA,EACA,SAAY,GAAA,QAAA;AAAA,EACZ,IAAO,GAAA,SAAA;AAAA,EACP,GAAM,GAAA;AACR,CAAU,EAAA;AACR,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAW,EAAA,UAAA,KAAe,aAAc,EAAA;AACxD,EAAA,MAAM,EAAE,OAAS,EAAA,QAAA,KAAa,KAAM,CAAA,IAAI,EAAE,GAAG,CAAA;AAE7C,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAK,EAAA,GAAI,SAAU,CAAA;AAAA,IACjC,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAO,OAAA;AAAA,IACL,iBAAiB,MAAM;AACrB,MAAA,MAAM,IAAO,GAAA,QAAA,EAAa,GAAA,MAAA,CAAO,SAAS,QAAW,GAAA,EAAA;AACrD,MAAA,IAAI,KAAK,QAAS,CAAA,WAAW,KAAK,IAAK,CAAA,QAAA,CAAS,sBAAsB,CAAG,EAAA;AACvE,QAAK,IAAA,CAAA,EAAE,YAAY,GAAK,EAAA,WAAA,EAAa,KAAK,CAAA,CAAE,IAAK,CAAA,CAAC,MAAW,KAAA;AAC3D,UAAA,SAAA,CAAU,MAAM,CAAA;AAAA,SACjB,CAAA;AAAA,OACI,MAAA;AACL,QAAU,SAAA,EAAA;AAAA;AACZ,KACF;AAAA,IACA,gBAAkB,EAAA,UAAA;AAAA,IAClB,iBAAmB,EAAA,MAAA;AAAA,IACnB,iBAAA,uBACG,KAAM,CAAA,IAAA,EAAN,EAAW,MAAgB,EAAA,OAAA,EAAS,YAAY,SAC/C,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,sBACf,GAAA,CAAC,MAAM,OAAN,EAAA,EACC,8BAAC,KAAM,CAAA,IAAA,EAAN,EAAW,GAAA,EAAG,IACb,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,OAAA,EAAS,CAAC,MAAW,KAAA;AACnB,YAAA,OAAA,CAAQ,MAAM,CAAA;AACd,YAAW,UAAA,EAAA;AAAA;AACb;AAAA,SAEJ,CACF,EAAA;AAAA,KACF,EAAA;AAAA,GAEJ;AACF;;ACvQA,MAAMF,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAEjC,MAAM,EAAE,QAAU,EAAA,KAAA,EAAU,GAAA,QAAA;AAKrB,MAAM,qBAAwB,GAAA,CAAC,EAAE,QAAA,EAAU,UAA2C,KAAA;AAC3F,EAAA,2BACG,KAAI,EAAA,EAAA,SAAA,EAAWH,IAAG,CAAA,oBAAoB,GACrC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAG,SAAW,EAAAA,IAAA,CAAG,UAAU,CACzB,EAAA,QAAA,EAAA,QAAA,CAAS,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AAC7B,IAAA,2BACG,IAAqD,EAAA,EAAA,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAChF,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,CAAK,0BAAyB,CADhC,EAAA,EAAA,CAAA,EAAG,KAAK,CAAI,CAAA,EAAA,IAAA,CAAK,wBAAwB,CAElD,CAAA,CAAA;AAAA,GAEH,GACH,CACF,EAAA,CAAA;AAEJ,CAAA;AAEO,MAAM,mBAAmB,CAAC,EAAE,QAAU,EAAA,aAAA,EAAe,UAAsC,KAAA;AAChG,EAAA,MAAM,CAAC,UAAY,EAAA,aAAa,CAAI,GAAA,QAAA,CAAkC,EAAE,CAAA;AAExE,EAAA,SAAA,CAAU,MAAM;AACd,IAAMK,MAAAA,WAAAA,GAAa,QAAS,CAAA,MAAA,CAAO,CAAC,IAAA,KAAS,IAAK,CAAA,wBAAA,EAA0B,QAAS,CAAA,aAAa,CAAC,CAAA,IAAK,EAAC;AACzG,IAAA,aAAA,CAAcA,WAAU,CAAA;AAAA,GACvB,EAAA,CAAC,QAAU,EAAA,aAAa,CAAC,CAAA;AAE5B,EACE,uBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,MACb,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWL,IAAG,CAAA,gBAAgB,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,sBAC/B,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,qBAAW,MAAO,EAAA,CAAA;AAAA,MAAO;AAAA,KAC7D,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,IAAA,EAAA,EAAG,SAAW,EAAAA,IAAA,CAAG,UAAU,CAAA,EACzB,QAAW,EAAA,UAAA,CAAA,MAAA,GAAS,CACnB,IAAA,UAAA,CAAW,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AAC9B,MACE,uBAAA,GAAA,CAAC,QAAqD,OAAS,EAAA,MAAM,SAAS,IAAI,CAAA,EAChF,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAQ,QAAyB,EAAA,wBAAA,CAAA,CAAA,EAAG,KAAK,wBAAwB,CAAA,CAAA,EAAI,aAAa,CAAE,EAAA,CAAA,EAAA,EAD9E,GAAG,KAAK,CAAA,CAAA,EAAI,IAAK,CAAA,wBAAwB,CAElD,CAAA,CAAA;AAAA,KAEH,CACL,EAAA,CAAA;AAAA,IACC,UAAA,CAAW,WAAW,CACrB,oBAAA,IAAA,CAAC,SAAI,SAAW,EAAAA,IAAA,CAAG,eAAe,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,sBACjC,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,QAAc,EAAA,aAAA,EAAA,CAAA;AAAA,MAAO;AAAA,KACxD,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ,CAAA;AAoBO,SAAS,aAAc,CAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,UAAmB,EAAA;AAClE,EAAM,MAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,aAAe,EAAA,OAAA,EAAS,UAAU,UAAY,EAAA,WAAA,EAAa,QAAS,EAAA,GAAI,aAAc,CAAA;AAAA,IAC7G,QAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAA,GAAA,CAAA,QAAA,EAAA,EACE,+BAAC,KAAM,CAAA,IAAA,EAAN,EAAW,MAAgB,EAAA,OAAA,EAAkB,WAAU,aACtD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,oBACf,IAAA,CAAC,KAAM,CAAA,OAAA,EAAN,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,uCAAA,EAAU,iBAAe,IAAC,EAAA,CAAA;AAAA,sBACpD,IAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAS,EAAA,IAAA;AAAA,YACT,4BACG,GAAA,CAAA,QAAA,EAAA,EACC,8BAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,QAAQ,CACrC,EAAA,CAAA;AAAA,YAEF,OAAA;AAAA,YACA,SAAA,EAAWA,KAAG,cAAc,CAAA;AAAA,YAE5B,QAAA,kBAAA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,QAAU,EAAA,QAAA;AAAA,gBACV,OAAA;AAAA,gBACA,WAAY,EAAA,+CAAA;AAAA,gBACZ,IAAK,EAAA,OAAA;AAAA,gBACL,KAAO,EAAA;AAAA;AAAA;AACT;AAAA,SACF;AAAA,QACC,CAAC,aAAiB,oBAAA,GAAA,CAAC,qBAAsB,EAAA,EAAA,QAAA,EAAU,YAAY,QAAoB,EAAA,CAAA;AAAA,QACnF,iCACE,GAAA,CAAA,gBAAA,EAAA,EAAiB,QAAU,EAAA,UAAA,EAAY,eAA8B,QAAoB,EAAA;AAAA,OAE9F,EAAA;AAAA,KACF,EAAA;AAAA,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;ACpHO,SAAS,aAAc,CAAA,EAAE,QAAU,EAAA,OAAA,EAAS,QAAiB,EAAA;AAClE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAiB,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAgC,EAAA;AACxE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,EAAE,CAAA;AAIzD,EAAA,MAAM,EAAE,IAAA,EAAM,QAAS,EAAA,GAAI,kBAAmB,EAAA;AAC9C,EAAA,MAAM,UAAsC,GAAA,QAAA,EAAU,IAAM,EAAA,cAAA,IAAkB,EAAC;AAK/E,EAAM,MAAA,QAAA,GAAW,CAAC,CAA2C,KAAA;AAC3D,IAAM,MAAA,OAAA,GAAU,EAAE,MAAO,CAAA,KAAA;AACzB,IAAA,cAAA,CAAe,OAAO,CAAA;AAAA,GACxB;AAKA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,gBAAgB,EAAI,EAAA;AACtB,MAAQ,OAAA,EAAA;AAER,MAAA;AAAA;AAEF,IAAI,IAAA,WAAA,IAAe,WAAY,CAAA,MAAA,GAAS,CAAG,EAAA;AACzC,MAAA,gBAAA,CAAiB,WAAW,CAAA;AAC5B,MAAA,eAAA,CAAgB,MAAS,CAAA;AAAA;AAC3B,GACF;AAKA,EAAM,MAAA,OAAA,GAAU,CAAC,CAA6C,KAAA;AAI5D,IAAI,IAAA,CAAA,CAAE,QAAQ,OAAS,EAAA;AACrB,MAAO,MAAA,EAAA;AAAA;AACT,GACF;AAKA,EAAM,MAAA,OAAA,GAAU,YAAY,MAAM;AAChC,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,eAAA,CAAgB,MAAS,CAAA;AAAA,GAC3B,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA,QAAA,GAAW,CAAC,IAAgC,KAAA;AAChD,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAQ,OAAA,EAAA;AAAA,GACV;AAEA,EAAA,SAAA,CAAU,MAAM;AAId,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,eAAA,CAAgB,MAAS,CAAA;AACzB,MAAA,gBAAA,CAAiB,EAAE,CAAA;AAAA;AACrB,GACF,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,MAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,QAAgC,EAAA;AAExD,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,SAAA,KAAc,aAAc,EAAA;AAExD,EAAM,MAAA,mBAAA,GAAsB,sBAAO,GAAA,CAAA,aAAA,EAAA,EAAc,QAAgB,OAAS,EAAA,UAAA,EAAY,UAAU,OAAS,EAAA,CAAA;AAEzG,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF;;AC/FA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,SAAS,uBAAwB,CAAA;AAAA,EACtC,YAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAiC,EAAA;AAC/B,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,gBAAgB,CACjC,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,cAAc,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,sBAC7B,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,uBAAa,MAAO,EAAA,CAAA;AAAA,MAAO;AAAA,KAC/D,EAAA,CAAA;AAAA,oBACA,IAAA,CAAC,KAAM,EAAA,EAAA,OAAA,EAAQ,YACb,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,OAAA,EAAA,EACC,+BAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAE,EAAA,cAAA,EAAA,CAAA;AAAA,4BAClC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAI,EAAA,gBAAA,EAAA,CAAA;AAAA,4BACpC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAG,EAAA,oBAAA,EAAA,CAAA;AAAA,4BACnC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAM,EAAA,sCAAA,EAAA,CAAA;AAAA,4BACtC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAK,EAAA,gCAAA,EAAA,CAAA;AAAA,4BACrC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAI,EAAA,0BAAA,EAAA,CAAA;AAAA,4BACpC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAE,EAAA,cAAA,EAAA;AAAA,OAAA,EACrC,CACF,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,OACE,EAAA,EAAA,QAAA,EAAA,YAAA,CAAa,MAAS,GAAA,CAAA,GACrB,YAAa,CAAA,GAAA,CAAI,CAAC,QAAA,EAAU,KAC1B,qBAAA,IAAA,CAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,OAAA;AAAA,YACL,IAAK,EAAA,UAAA;AAAA,YACL,KAAA,EAAO,SAAS,UAAc,IAAA,EAAA;AAAA,YAC9B,OAAA,EAAS,gBAAkB,EAAA,UAAA,KAAe,QAAS,CAAA,UAAA;AAAA,YACnD,QAAA,EAAU,MAAM,gBAAA,CAAiB,QAAQ;AAAA;AAAA,SAE7C,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,UAAW,EAAA,CAAA;AAAA,wBACzB,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,YAAa,EAAA,CAAA;AAAA,wBAC3B,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,cAAe,EAAA,CAAA;AAAA,wBAC7B,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,kBAAmB,EAAA,CAAA;AAAA,wBACjC,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,iBAAkB,EAAA,CAAA;AAAA,wBAChC,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,OAAQ,EAAA;AAAA,OAAA,EAAA,EAff,aAAa,QAAS,CAAA,UAAU,IAAI,KAAK,CAAA,CAAA,CAgBlD,CACD,CAED,mBAAA,GAAA,CAAC,QACC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAG,SAAS,CACX,EAAA,QAAA,kBAAA,IAAA,CAAC,SAAI,SAAW,EAAAA,IAAA,CAAG,WAAW,CAC5B,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,yBAA0B,EAAA,EAAA,CAAA;AAAA,wBAC3B,GAAA,CAAC,OAAE,QAAY,EAAA,2DAAA,EAAA,CAAA;AAAA,wBACf,GAAA,CAAC,OAAE,QAAkB,EAAA,0FAAA,EAAA;AAAA,OACvB,EAAA,CAAA,EACF,GACF,CAEJ,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;AC9DA,MAAM,aAAEM,aAAc,GAAA,SAAA;AAatB,MAAMN,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,SAAS,iBAAkB,CAAA;AAAA,EAChC,eAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAA2B,EAAA;AACzB,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,SAAS,EAAE,CAAA;AACjE,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,EAAE,CAAA;AAE/D,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,aAAA,CAAc,CAAC,qBAAA,EAAuB,oBAAoB,CAAA,EAAG,CAAC,OAAiB,KAAA;AAC7E,MAAgB,eAAA,CAAA;AAAA,QACd,mBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,KACF,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,sBAAA,CAAuB,EAAE,CAAA;AACzB,IAAA,qBAAA,CAAsB,EAAE,CAAA;AACxB,IAAgB,eAAA,EAAA;AAAA,GAClB;AAEA,EAAM,MAAA,OAAA,GAAU,CAAC,CAA6C,KAAA;AAC5D,IAAE,CAAA,CAAA,GAAA,KAAQ,WAAW,YAAa,EAAA;AAAA,GACpC;AAEA,EAAM,MAAA,SAAA,GAAY,CAAC,CAA6C,KAAA;AAE9D,IAAI,IAAA,EAAE,CAAE,CAAA,GAAA,KAAQ,WAAe,IAAA,CAAC,MAAM,QAAS,CAAA,CAAA,CAAE,GAAG,CAAC,CAAI,CAAA,EAAA;AACvD,MAAA,CAAA,CAAE,cAAe,EAAA;AAAA;AACnB,GACF;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,gBAAgB,CAAA,EACjC,+BAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,gBAAgB,CACjC,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,uBAAuB,CACxC,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAU,CAAA,KAAA,EAAV,EAAgB,SAAA,EAAU,yBAAwB,QAAK,EAAA,2BAAA,EAAA,CAAA;AAAA,wBACxD,GAAA,CAAC,UAAO,KAAM,EAAA,UAAA,EAAW,aAAY,cAAK,EAAA,QAAA,EAAQ,MAAC,KAAO,EAAA,EAAE,OAAO,OAAQ,EAAA,EACzE,8BAAC,MAAO,CAAA,MAAA,EAAP,EAAc,KAAM,EAAA,UAAA,EAAW,0BAAE,CACpC,EAAA,CAAA;AAAA,4BACC,SAAU,CAAA,KAAA,EAAV,EAAgB,SAAA,EAAU,yBAAwB,QAAM,EAAA,sCAAA,EAAA,CAAA;AAAA,wBACzD,GAAA;AAAA,UAACM,WAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,qBAAA;AAAA,YACL,KAAO,EAAA,mBAAA;AAAA,YACP,SAAW,EAAA,CAAA;AAAA,YACX,WAAY,EAAA,mCAAA;AAAA,YACZ,UAAU,CAAC,CAAA,KAAM,sBAAuB,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACtD,IAAK,EAAA,QAAA;AAAA,YACL,OAAA;AAAA,YACA,SAAA;AAAA,YACA,SAAW,EAAA;AAAA,cACT,SAAA,EAAWN,KAAG,cAAc,CAAA;AAAA,cAC5B,SAAS,MAAM;AACb,gBAAA,sBAAA,CAAuB,EAAE,CAAA;AAAA;AAC3B;AACF;AAAA,SACF;AAAA,QAAE,GAAA;AAAA,wBAEF,GAAA;AAAA,UAACM,WAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,UAAA;AAAA,YACL,IAAK,EAAA,oBAAA;AAAA,YACL,KAAO,EAAA,kBAAA;AAAA,YACP,SAAW,EAAA,CAAA;AAAA,YACX,WAAY,EAAA,mCAAA;AAAA,YAGZ,QAAS,EAAA,GAAA;AAAA,YAET,aAAc,EAAA,GAAA;AAAA,YACd,UAAU,CAAC,CAAA,KAAM,qBAAsB,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACrD,IAAK,EAAA,QAAA;AAAA,YACL,SAAA;AAAA,YACA,OAAA;AAAA,YACA,SAAW,EAAA;AAAA,cACT,SAAA,EAAWN,KAAG,cAAc,CAAA;AAAA,cAC5B,SAAS,MAAM;AACb,gBAAA,qBAAA,CAAsB,EAAE,CAAA;AAAA;AAC1B;AACF;AAAA;AACF,OACF,EAAA,CAAA;AAAA,sBACC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,gBAAgB,CACjC,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,MAAA,EAAA,EAAO,YAAW,SAAU,EAAA,IAAA,EAAK,UAAS,OAAQ,EAAA,WAAA,EAAY,OAAS,EAAA,WAAA,EAAa,QAErF,EAAA,oBAAA,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,MAAO,EAAA,EAAA,UAAA,EAAW,QAAS,EAAA,IAAA,EAAK,UAAS,OAAQ,EAAA,SAAA,EAAU,OAAS,EAAA,YAAA,EAAc,QAEnF,EAAA,cAAA,EAAA;AAAA,OACF,EAAA;AAAA,KAAA,EACF,CACF,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,SAAS,CAAG,EAAA,CAAA;AAAA,oBAC/B,GAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,YAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA;AAAA;AACF,GACF,EAAA,CAAA;AAEJ;;AC/GO,MAAM,yBAAgE,CAAC,EAAE,MAAQ,EAAA,OAAA,EAAS,QAAa,KAAA;AAC5G,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAoD,IAAI,CAAA;AACxG,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAA4C,EAAA;AAEpF,EAAA,MAAM,EAAE,IAAA,EAAM,UAAW,EAAA,GAAI,QAAS,CAAA;AAAA,IACpC,QAAA,EAAU,CAAC,mBAAA,EAAqB,YAAY,CAAA;AAAA,IAC5C,OAAA,EAAS,MAAM,wBAAA,CAAyB,YAAa,CAAA;AAAA,IACrD,OAAA,EAAS,CAAC,CAAC,YAAA;AAAA,IACX,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA,CAA+C,EAAE,CAAA;AACzF,EAAW,UAAA,EAAA;AAEX,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAM,IAAM,EAAA;AACd,MAAA,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,KACpB,MAAA;AACL,MAAA,eAAA,CAAgB,EAAE,CAAA;AAAA;AACpB,GACF,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,GAC1B,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,SAAA,CAAU,MAAM;AACd,IAAU,SAAA,EAAA;AAAA,GACZ,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA,oBAAA,GAAuB,CAAC,QAAiD,KAAA;AAC7E,IAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA,GAC9B;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,gBAAkB,EAAA;AACpB,MAAA,MAAA,CAAO,gBAAgB,CAAA;AACvB,MAAQ,OAAA,EAAA;AAAA;AACV,GACF;AAEA,EAAA,4BACG,KAAM,CAAA,IAAA,EAAN,EAAW,MAAgB,EAAA,OAAA,EAAkB,WAAU,QACtD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,oBACf,IAAA,CAAC,MAAM,OAAN,EAAA,EAAc,OAAO,EAAE,MAAA,EAAQ,SAC9B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,2BAAA,EAAQ,iBAAe,IAAC,EAAA,CAAA;AAAA,sBAClD,GAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,eAAA;AAAA,UACA,YAAA;AAAA,UACA,gBAAkB,EAAA,oBAAA;AAAA,UAClB,gBAAA;AAAA,UACA,SAAW,EAAA;AAAA;AAAA,OAEf,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,KAAM,CAAA,MAAA,EAAN,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,SAAA;AAAA,UACR,IAAK,EAAA,QAAA;AAAA,UACL,UAAW,EAAA,QAAA;AAAA,UACX,KAAM,EAAA,MAAA;AAAA,UACN,OAAS,EAAA,UAAA;AAAA,UACT,UAAU,CAAC,gBAAA;AAAA,UACZ,QAAA,EAAA;AAAA;AAAA,OAGH,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;ACvFO,MAAM,oBAA6E,GAAA;AAAA,EACxF,EAAE,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,cAAK,EAAA;AAAA,EAC7B,EAAE,KAAA,EAAO,IAAM,EAAA,KAAA,EAAO,IAAK,EAAA;AAAA,EAC3B,EAAE,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,cAAK;AAC/B,CAAA;;ACOA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,SAAS,oBAAqB,CAAA,EAAE,iBAAmB,EAAA,gBAAA,EAA+C,EAAA;AACvG,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,gBAAgB,CACjC,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,cAAc,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,sBAC7B,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,4BAAkB,MAAO,EAAA,CAAA;AAAA,MAAO;AAAA,KACpE,EAAA,CAAA;AAAA,IACC,kBAAkB,MAAS,GAAA,CAAA,mBACzB,IAAA,CAAA,KAAA,EAAA,EAAM,SAAQ,YACb,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,OAAA,EAAA,EACC,+BAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAE,EAAA,cAAA,EAAA,CAAA;AAAA,4BAClC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAI,EAAA,0BAAA,EAAA,CAAA;AAAA,4BACpC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAG,EAAA,oBAAA,EAAA,CAAA;AAAA,4BACnC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAK,EAAA,gCAAA,EAAA,CAAA;AAAA,4BACrC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAI,EAAA,0BAAA,EAAA;AAAA,OAAA,EACvC,CACF,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,OAAA,EAAA,EACE,QAAkB,EAAA,iBAAA,CAAA,GAAA,CAAI,CAAC,QAAa,KAAA;AACnC,QACE,uBAAA,GAAA,CAAA,QAAA,EAAA,EACE,+BAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAK,EAAA,OAAA;AAAA,cACL,IAAK,EAAA,UAAA;AAAA,cACL,KAAA,EAAO,SAAS,cAAkB,IAAA,EAAA;AAAA,cAClC,QAAA,EAAU,CAAC,CAAM,KAAA;AAIf,gBAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA;AAC3B;AAAA,WAEJ,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,cAAe,EAAA,CAAA;AAAA,0BAC7B,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,YAAa,EAAA,CAAA;AAAA,0BAC3B,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,gBAAiB,EAAA,CAAA;AAAA,0BAC/B,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,oBAAqB,EAAA;AAAA,SAAA,EACrC,CACF,EAAA,CAAA;AAAA,OAEH,CACH,EAAA;AAAA,KAAA,EACF,CAEA,mBAAA,IAAA,CAAC,KAAM,EAAA,EAAA,OAAA,EAAQ,YACb,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,OAAA,EAAA,EACC,+BAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAE,EAAA,cAAA,EAAA,CAAA;AAAA,4BAClC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAI,EAAA,0BAAA,EAAA,CAAA;AAAA,4BACpC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAG,EAAA,oBAAA,EAAA,CAAA;AAAA,4BACnC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAK,EAAA,gCAAA,EAAA,CAAA;AAAA,4BACrC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAI,EAAA,0BAAA,EAAA;AAAA,OAAA,EACvC,CACF,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,OAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAG,OAAS,EAAA,CAAA,EACX,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,WAAW,CAC5B,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,yBAA0B,EAAA,EAAA,CAAA;AAAA,wBAC3B,GAAA,CAAC,OAAE,QAAY,EAAA,2DAAA,EAAA,CAAA;AAAA,wBACf,GAAA,CAAC,OAAE,QAAkB,EAAA,0FAAA,EAAA;AAAA,OACvB,EAAA,CAAA,EACF,GACF,CACF,EAAA;AAAA,KACF,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ;;AC5EA,MAAM,aAAEM,aAAc,GAAA,SAAA;AAatB,MAAMN,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,SAAS,cAAe,CAAA;AAAA,EAC7B,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAwB,EAAA;AACtB,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,aAAA,CAAc,WAAW,CAAA;AAAA,GAC3B;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,cAAA,CAAe,EAAE,CAAA;AAAA,GACnB;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,gBAAgB,CAAA,EACjC,+BAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,gBAAgB,CACjC,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,uBAAuB,CACxC,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAU,CAAA,KAAA,EAAV,EAAgB,SAAA,EAAU,yBAAwB,QAAK,EAAA,2BAAA,EAAA,CAAA;AAAA,wBACxD,GAAA;AAAA,UAACM,WAAA;AAAA,UAAA;AAAA,YACC,KAAO,EAAA,WAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,cAAe,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC9C,WAAWH,QAAO,CAAA,WAAA;AAAA,YAClB,IAAK,EAAA,QAAA;AAAA,YACL,SAAS,CAAC,CAAA,KAAM,CAAE,CAAA,GAAA,KAAQ,WAAW,YAAa,EAAA;AAAA,YAClD,SAAW,EAAA;AAAA,cACT,OAAS,EAAA,WAAA;AAAA,cACT,SAAW,EAAA;AAAA;AACb;AAAA;AACF,OACF,EAAA,CAAA;AAAA,sBACC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,uBAAuB,CACxC,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAU,CAAA,KAAA,EAAV,EAAgB,SAAA,EAAU,yBAAwB,QAAK,EAAA,2BAAA,EAAA,CAAA;AAAA,wBACxD,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAO,EAAA,SAAA;AAAA,YACP,QAAU,EAAA,CAAC,KAAU,KAAA,WAAA,CAAY,KAAiC,CAAA;AAAA,YAClE,WAAWG,QAAO,CAAA,MAAA;AAAA,YAClB,IAAK,EAAA,QAAA;AAAA,YAEJ,QAAA,EAAA,oBAAA,CAAqB,IAAI,CAAC,MAAA,EAAQ,0BAChC,GAAA,CAAA,MAAA,CAAO,QAAP,EAA+C,KAAA,EAAO,OAAO,KAC3D,EAAA,QAAA,EAAA,MAAA,CAAO,SADU,CAAG,EAAA,MAAA,CAAO,KAAK,CAAI,CAAA,EAAA,KAAK,EAE5C,CACD;AAAA;AAAA;AACH,OACF,EAAA,CAAA;AAAA,sBACC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,gBAAgB,CACjC,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,MAAA,EAAA,EAAO,YAAW,SAAU,EAAA,IAAA,EAAK,UAAS,OAAQ,EAAA,WAAA,EAAY,OAAS,EAAA,WAAA,EAAa,QAErF,EAAA,oBAAA,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,MAAO,EAAA,EAAA,UAAA,EAAW,QAAS,EAAA,IAAA,EAAK,UAAS,OAAQ,EAAA,SAAA,EAAU,OAAS,EAAA,YAAA,EAAc,QAEnF,EAAA,cAAA,EAAA;AAAA,OACF,EAAA;AAAA,KAAA,EACF,CACF,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,SAAS,CAAG,EAAA,CAAA;AAAA,IAC9B,UACC,oBAAA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,iBAAmB,EAAA,YAAA;AAAA,QACnB,gBAAA;AAAA,QACA;AAAA;AAAA;AACF,GAEJ,EAAA,CAAA;AAEJ;;AChFO,MAAM,sBAA0D,CAAC,EAAE,MAAQ,EAAA,OAAA,EAAS,UAAe,KAAA;AACxG,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAmC,MAAM,CAAA;AAC3E,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAA4C,IAAI,CAAA;AAChG,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAiB,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,EAAE,CAAA;AAEzD,EAAM,MAAA,EAAE,IAAK,EAAA,GAAI,6BAA8B,CAAA;AAAA,IAC7C,UAAY,EAAA,UAAA;AAAA,IACZ,oBAAsB,EAAA;AAAA,GACvB,CAAA;AAED,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA,CAAuC,EAAE,CAAA;AAEjF,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAM,IAAM,EAAA;AACd,MAAA,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,KACpB,MAAA;AACL,MAAA,eAAA,CAAgB,EAAE,CAAA;AAAA;AACpB,GACF,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAM,MAAA,oBAAA,GAAuB,CAAC,QAAyC,KAAA;AACrE,IAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA,GAC9B;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,gBAAkB,EAAA;AACpB,MAAA,QAAA,CAAS,gBAAgB,CAAA;AACzB,MAAQ,OAAA,EAAA;AAAA;AACV,GACF;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,KAAoC,KAAA;AACvD,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,GACpB;AAEA,EAAA,4BACG,KAAM,CAAA,IAAA,EAAN,EAAW,MAAgB,EAAA,OAAA,EAAkB,WAAU,QACtD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,oBACf,IAAA,CAAC,MAAM,OAAN,EAAA,EAAc,OAAO,EAAE,MAAA,EAAQ,SAC9B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,2BAAA,EAAQ,iBAAe,IAAC,EAAA,CAAA;AAAA,sBAClD,GAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,WAAA;AAAA,UACA,UAAA;AAAA,UACA,aAAA;AAAA,UACA,WAAA;AAAA,UACA,cAAA;AAAA,UACA,YAAA;AAAA,UACA,gBAAkB,EAAA;AAAA;AAAA,OAEtB,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,KAAM,CAAA,MAAA,EAAN,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,SAAA;AAAA,UACR,IAAK,EAAA,QAAA;AAAA,UACL,UAAW,EAAA,QAAA;AAAA,UACX,KAAM,EAAA,MAAA;AAAA,UACN,OAAS,EAAA,YAAA;AAAA,UACT,UAAU,CAAC,gBAAA;AAAA,UACZ,QAAA,EAAA;AAAA;AAAA,OAGH,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;ACvFO,MAAM,eAAkB,GAAA;AAAA,EAC7B,EAAE,KAAA,EAAO,SAAW,EAAA,KAAA,EAAO,iCAAS,EAAA;AAAA,EACpC,EAAE,KAAA,EAAO,SAAW,EAAA,KAAA,EAAO,iCAAS;AACtC,CAAA;;ACKO,SAAS,eAAgB,CAAA,EAAE,kBAAoB,EAAA,sBAAA,EAAiC,EAAA;AACrF,EAAA,MAAM,EAAE,IAAA,EAAM,MAAO,EAAA,GAAI,8BAA+B,CAAA;AAAA,IACtD,sBAAA;AAAA,IACA,4BAA4B,kBAAsB,IAAA;AAAA,GACnD,CAAA;AAED,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,IAAM,EAAA;AAC3B,IAAO,OAAA,IAAA;AAAA;AAET,EAAM,MAAA;AAAA;AAAA,IAEJ,4BAAA;AAAA;AAAA,IAEA,qBAAA;AAAA;AAAA,IAEA,aAAA;AAAA;AAAA,IAEA,aAAA;AAAA;AAAA,IAEA,uBAAA;AAAA;AAAA,IAEA,mBAAA;AAAA;AAAA,IAEA,4BAAA;AAAA;AAAA,IAEA,wBAAA;AAAA;AAAA,IAEA;AAAA,MACE,MAAO,CAAA,IAAA;AAEX,EAAA,uCAEI,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA,EAAM,OAAQ,EAAA,YAAA,EACb,+BAAC,OACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAG,SAAU,EAAA,UAAA,EAAW,QAAK,EAAA,2BAAA,EAAA,CAAA;AAAA,sBAC7B,GAAA,CAAA,IAAA,EAAA,EAAG,SAAU,EAAA,UAAA,EAAY,QAA6B,EAAA,4BAAA,EAAA;AAAA,KACzD,EAAA,CAAA;AAAA,yBACC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAG,SAAU,EAAA,UAAA,EAAW,QAAK,EAAA,2BAAA,EAAA,CAAA;AAAA,sBAC7B,GAAA,CAAA,IAAA,EAAA,EAAG,SAAU,EAAA,UAAA,EAAY,QAAsB,EAAA,qBAAA,EAAA;AAAA,KAClD,EAAA,CAAA;AAAA,yBACC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAG,SAAU,EAAA,UAAA,EAAW,QAAK,EAAA,2BAAA,EAAA,CAAA;AAAA,sBAC9B,IAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAU,UACX,EAAA,QAAA,EAAA;AAAA,QAAA,aAAA;AAAA,QAAc,GAAA;AAAA,QAAE,aAAA;AAAA,QAAc;AAAA,OACjC,EAAA;AAAA,KACF,EAAA,CAAA;AAAA,yBACC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAG,SAAU,EAAA,UAAA,EAAW,QAAK,EAAA,2BAAA,EAAA,CAAA;AAAA,sBAC9B,IAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAU,UACX,EAAA,QAAA,EAAA;AAAA,QAAA,4BAAA;AAAA,QAA6B,GAAA;AAAA,QAAE,wBAAA;AAAA,QAAyB;AAAA,OAC3D,EAAA;AAAA,KACF,EAAA,CAAA;AAAA,yBACC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAG,SAAU,EAAA,UAAA,EAAW,QAAK,EAAA,2BAAA,EAAA,CAAA;AAAA,sBAC9B,IAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAU,UACX,EAAA,QAAA,EAAA;AAAA,QAAA,uBAAA;AAAA,QAAwB,GAAA;AAAA,QAAE,mBAAA;AAAA,QAAoB;AAAA,OACjD,EAAA;AAAA,KACF,EAAA;AAAA,GAAA,EACF,GACF,CACF,EAAA,CAAA;AAEJ;;AC1DA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,SAAS,iBAAkB,CAAA,EAAE,YAAc,EAAA,WAAA,EAAa,YAAsC,EAAA;AACnG,EAAA,uCAEI,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,kBAAkB,CACnC,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,cAAc,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,sBAC7B,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,uBAAa,MAAO,EAAA,CAAA;AAAA,MAAO;AAAA,KAC/D,EAAA,CAAA;AAAA,wBACC,SAAU,CAAA,IAAA,EAAV,EACC,QAAA,kBAAA,GAAA,CAAC,MAAM,IAAN,EAAA,EAAW,IAAK,EAAA,eAAA,EAAgB,MAAK,OAAQ,EAAA,SAAA,EAAWA,KAAG,gBAAgB,CAAA,EAAG,UAAU,MAAM;AAAA,KAC5F,EAAA,QAAA,EAAA,YAAA,CAAa,GAAI,CAAA,CAAC,KAAK,KACtB,qBAAA,IAAA;AAAA,MAAC,SAAU,CAAA,IAAA;AAAA,MAAV;AAAA,QACC,EAAI,EAAA,CAAA,KAAA,EAAQ,GAAI,CAAA,sBAAsB,IAAI,KAAK,CAAA,UAAA,CAAA;AAAA,QAG/C,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,SAAA,CAAU,WAAV,EACC,QAAA,kBAAA,GAAA,CAAC,SAAI,KAAO,EAAA,EAAE,IAAM,EAAA,CAAA,EAClB,EAAA,QAAA,kBAAA,IAAA,CAAC,MAAM,IAAN,EAAA,EAAW,IAAK,EAAA,OAAA,EAAQ,KAAO,EAAA,GAAA,CAAI,wBAAwB,QAAU,EAAA,MAAM,WAAY,CAAA,GAAG,CACxF,EAAA,QAAA,EAAA;AAAA,YAAyB,wBAAA,CAAA,GAAA,CAAI,wBAAwB,UAAU,CAAA;AAAA,YAAE,GAAA;AAAA,YAAE,GAAI,CAAA,sBAAA;AAAA,YAAuB;AAAA,WAAA,EACjG,GACF,CACF,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,SAAA,CAAU,OAAV,EAAA,EAAkB,SAAQ,MACzB,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,kBAAA,EAAoB,IAAI,kBAAsB,IAAA,EAAA;AAAA,cAC9C,wBAAwB,GAAI,CAAA;AAAA;AAAA,WAEhC,EAAA;AAAA;AAAA,OAAA;AAAA,MAdK,CAAQ,KAAA,EAAA,GAAA,CAAI,sBAAsB,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,KAgBnD,GACH,CACF,EAAA,CAAA;AAAA,IACC,YAAA,CAAa,MAAW,KAAA,CAAA,oBACrB,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,sBACE,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,QAAW,EAAA,UAAA,EAAA,CAAA;AAAA,MAAO;AAAA,KACrD,EAAA;AAAA,GAAA,EAEJ,CACF,EAAA,CAAA;AAEJ;;AC5CA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,SAAS,iBAAkB,CAAA,EAAE,YAAc,EAAA,WAAA,EAAuC,EAAA;AACvF,EAAA,uCAEI,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,cAAc,CAC/B,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAE,QAAQ,EAAA,wCAAA,EAAA,CAAA;AAAA,oBACX,GAAA,CAAC,UAAU,IAAV,EAAA,EACC,8BAAC,KAAM,CAAA,IAAA,EAAN,EAAW,IAAK,EAAA,eAAA,EAAgB,MAAK,OAAQ,EAAA,SAAA,EAAWA,KAAG,gBAAgB,CAAA,EACzE,uBAAa,GAAI,CAAA,CAAC,KAAK,KACtB,qBAAA,IAAA;AAAA,MAAC,SAAU,CAAA,IAAA;AAAA,MAAV;AAAA,QAEC,EAAI,EAAA,CAAA,KAAA,EAAQ,GAAI,CAAA,sBAAsB,IAAI,KAAK,CAAA,CAAA;AAAA,QAC/C,SAAA,EAAWA,KAAG,gBAAgB,CAAA;AAAA,QAE9B,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAU,SAAV,EAAA,EAAoB,SAAW,EAAAA,IAAA,CAAG,uBAAuB,CACxD,EAAA,QAAA,kBAAA,IAAA;AAAA,YAAC,KAAM,CAAA,IAAA;AAAA,YAAN;AAAA,cACC,IAAK,EAAA,OAAA;AAAA,cACL,OAAO,GAAI,CAAA,sBAAA;AAAA,cACX,QAAA,EAAU,MAAM,WAAA,CAAY,GAAG,CAAA;AAAA,cAC/B,SAAA,EAAWA,KAAG,YAAY,CAAA;AAAA,cAEzB,QAAA,EAAA;AAAA,gBAAI,GAAA,CAAA,sBAAA;AAAA,gBAAuB,GAAA;AAAA,gBAAE,GAAI,CAAA,sBAAA;AAAA,gBAAuB;AAAA;AAAA;AAAA,WAE7D,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,SAAA,CAAU,OAAV,EAAA,EAAkB,SAAQ,MACzB,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,kBAAA,EAAoB,IAAI,kBAAsB,IAAA,EAAA;AAAA,cAC9C,wBAAwB,GAAI,CAAA;AAAA;AAAA,WAEhC,EAAA;AAAA;AAAA,OAAA;AAAA,MAnBK,CAAQ,KAAA,EAAA,GAAA,CAAI,sBAAsB,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,KAqBnD,GACH,CACF,EAAA;AAAA,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;ACnCA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,SAAS,eAAgB,CAAA,EAAE,YAAc,EAAA,WAAA,EAAa,YAAsC,EAAA;AACjG,EAAA,uCAEI,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,cAAc,CAC/B,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,cAAc,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,sBAC7B,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,uBAAa,MAAO,EAAA,CAAA;AAAA,MAAO;AAAA,KAC/D,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,UAAU,IAAV,EAAA,EACC,8BAAC,KAAM,CAAA,IAAA,EAAN,EAAW,IAAK,EAAA,eAAA,EAAgB,MAAK,OAAQ,EAAA,SAAA,EAAWA,KAAG,gBAAgB,CAAA,EACzE,uBAAa,GAAI,CAAA,CAAC,KAAK,KACtB,qBAAA,IAAA;AAAA,MAAC,SAAU,CAAA,IAAA;AAAA,MAAV;AAAA,QACC,EAAA,EAAI,CAAQ,KAAA,EAAA,GAAA,CAAI,sBAAsB,CAAA,CAAA;AAAA,QAItC,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,SAAA,CAAU,WAAV,EACC,QAAA,kBAAA,GAAA,CAAC,SAAI,KAAO,EAAA,EAAE,IAAM,EAAA,CAAA,EAClB,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,KAAM,CAAA,IAAA;AAAA,YAAN;AAAA,cACC,EAAA,EAAI,CAAQ,KAAA,EAAA,GAAA,CAAI,sBAAsB,CAAA,CAAA;AAAA,cACtC,IAAK,EAAA,OAAA;AAAA,cACL,OAAO,GAAI,CAAA,sBAAA;AAAA,cACX,UAAU,MAAM;AACd,gBAAA,WAAA,CAAY,GAAG,CAAA;AAAA,eACjB;AAAA,cAEC,QAAA,EAAA,wBAAA,CAAyB,GAAI,CAAA,sBAAA,EAAwB,UAAU;AAAA;AAAA,aAEpE,CACF,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,SAAA,CAAU,OAAV,EAAA,EAAkB,SAAQ,MACzB,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,kBAAA,EAAoB,IAAI,kBAAsB,IAAA,EAAA;AAAA,cAC9C,wBAAwB,GAAI,CAAA;AAAA;AAAA,WAEhC,EAAA;AAAA;AAAA,OAAA;AAAA,MAtBK,CAAQ,KAAA,EAAA,GAAA,CAAI,sBAAsB,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAAA,KAwBnD,GACH,CACF,EAAA,CAAA;AAAA,IACC,YAAA,CAAa,MAAW,KAAA,CAAA,oBACrB,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,sBACE,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,QAAW,EAAA,UAAA,EAAA,CAAA;AAAA,MAAO;AAAA,KACrD,EAAA;AAAA,GAAA,EAEJ,CACF,EAAA,CAAA;AAEJ;;AClDA,MAAM,aAAEM,aAAc,GAAA,SAAA;AAmBtB,MAAMN,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AACjC,MAAM,EAAE,QAAW,GAAA,MAAA;AACZ,SAAS,SAAU,CAAA;AAAA,EACxB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAmB,EAAA;AAIjB,EAAM,MAAA,OAAA,GAAU,CAAC,CAA6C,KAAA;AAI5D,IAAI,IAAA,CAAA,CAAE,QAAQ,OAAS,EAAA;AACrB,MAAA,aAAA,CAAc,WAAW,CAAA;AAAA;AAC3B,GACF;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,GAAI,CAAA,IAAA;AAAA,MAAJ;AAAA,QACC,YAAc,EAAA,SAAA;AAAA,QACd,aAAe,EAAA,WAAA;AAAA,QACf,MAAO,EAAA,OAAA;AAAA,QACP,IAAK,EAAA,OAAA;AAAA,QACL,OAAQ,EAAA,KAAA;AAAA,QACR,KAAO,EAAA,EAAE,GAAK,EAAA,CAAA,EAAG,UAAU,SAAU,EAAA;AAAA,QAEpC,QAAA,EAAA,eAAA,CAAgB,IAAI,CAAC,GAAA,EAAK,0BACxB,GAAA,CAAA,GAAA,CAAI,MAAJ,EAAuC,KAAA,EAAO,IAAI,KAChD,EAAA,QAAA,EAAA,GAAA,CAAI,SADQ,CAAG,EAAA,GAAA,CAAI,KAAK,CAAI,CAAA,EAAA,KAAK,EAEpC,CACD;AAAA;AAAA,KACH;AAAA,yBACC,KACE,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA,KAAc,6BACZ,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,uBAAuB,CACxC,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAACM,WAAA;AAAA,UAAA;AAAA,YACC,WAAY,EAAA,iCAAA;AAAA,YACZ,KAAO,EAAA,WAAA;AAAA,YACP,OAAA;AAAA,YACA,UAAU,CAAC,CAAA,KAAM,cAAe,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC9C,WAAWH,QAAO,CAAA,WAAA;AAAA,YAClB,IAAK,EAAA,QAAA;AAAA,YACL,SAAW,EAAA;AAAA,cACT,4BAAa,GAAA,CAAA,gBAAA,EAAA,EAAiB,SAAS,MAAM,aAAA,CAAc,WAAW,CAAG,EAAA,CAAA;AAAA,cACzE,SAAS,MAAM;AACb,gBAAA,aAAA,CAAc,EAAE,CAAA;AAChB,gBAAA,cAAA,CAAe,EAAE,CAAA;AAAA;AACnB;AACF;AAAA,SACF;AAAA,QACC,CAAC,UAAA,oBAAe,GAAA,CAAA,iBAAA,EAAA,EAAkB,cAA4B,WAA0B,EAAA,CAAA;AAAA,QACxF,cAAc,CAAC,SAAA,wBACb,eAAgB,EAAA,EAAA,YAAA,EAA4B,aAA0B,UAAwB,EAAA;AAAA,OAEnG,EAAA,CAAA;AAAA,MAED,cAAc,SACb,oBAAA,IAAA,CAAC,SAAI,SAAW,EAAAH,IAAA,CAAG,qBAAqB,CACtC,EAAA,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,kBAAkB,CACnC,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAK,EAAA,gBAAA;AAAA,cACL,QAAA,EAAU,CAAC,KAAU,KAAA;AACnB,gBAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,gBAAA,iBAAA,CAAkB,EAAE,CAAA;AAAA,eACtB;AAAA,cACA,WAAY,EAAA,iCAAA;AAAA,cACZ,SAAW,EAAA;AAAA,gBACT,KAAO,EAAA;AAAA;AAAA;AAEP,eACF;AAAA,cACA,IAAK,EAAA,OAAA;AAAA,cACL,KAAO,EAAA,aAAA;AAAA,cAEN,4BAAkB,GAAI,CAAA,CAAC,QAAQ,KAC9B,qBAAA,GAAA,CAAC,UAAyD,KAAO,EAAA,MAAA,CAAO,sBACrE,EAAA,QAAA,EAAA,MAAA,CAAO,0BADG,CAAG,EAAA,KAAK,IAAI,MAAO,CAAA,sBAAsB,EAEtD,CACD;AAAA;AAAA,WACH;AAAA,0BACA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAK,EAAA,iBAAA;AAAA,cACL,QAAU,EAAA,iBAAA;AAAA,cACV,WAAY,EAAA,iCAAA;AAAA,cACZ,SAAW,EAAA;AAAA,gBACT,KAAO,EAAA;AAAA;AAAA;AAEP,eACF;AAAA,cACA,IAAK,EAAA,OAAA;AAAA,cACL,KAAO,EAAA,cAAA;AAAA,cACP,UAAU,CAAC,aAAA;AAAA,cAEV,6BAAmB,GAAI,CAAA,CAAC,QAAQ,KAC/B,qBAAA,GAAA,CAAC,UAAyD,KAAO,EAAA,MAAA,CAAO,sBACrE,EAAA,QAAA,EAAA,MAAA,CAAO,0BADG,CAAG,EAAA,KAAK,IAAI,MAAO,CAAA,sBAAsB,EAEtD,CACD;AAAA;AAAA;AACH,SACF,EAAA,CAAA;AAAA,QAEC,aAAA,IAAiB,kBAAkB,CAAC,SAAA,wBAClC,iBAAkB,EAAA,EAAA,YAAA,EAA4B,aAA0B,UAAwB,EAAA;AAAA,OAErG,EAAA;AAAA,KAEJ,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;ACxIA,MAAM,QAAoC,GAAA;AAAA,EACxC;AAAA,IACE,sBAAwB,EAAA,QAAA;AAAA,IACxB,sBAAwB,EAAA,oDAAA;AAAA,IACxB,kBAAoB,EAAA,IAAA;AAAA,IACpB,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA;AAAA,IACE,sBAAwB,EAAA,QAAA;AAAA,IACxB,sBAAwB,EAAA,gEAAA;AAAA,IACxB,kBAAoB,EAAA,IAAA;AAAA,IACpB,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA;AAAA,IACE,sBAAwB,EAAA,QAAA;AAAA,IACxB,sBAAwB,EAAA,0BAAA;AAAA,IACxB,kBAAoB,EAAA,IAAA;AAAA,IACpB,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA;AAAA,IACE,sBAAwB,EAAA,QAAA;AAAA,IACxB,sBAAwB,EAAA,4FAAA;AAAA,IACxB,kBAAoB,EAAA,IAAA;AAAA,IACpB,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA;AAAA,IACE,sBAAwB,EAAA,QAAA;AAAA,IACxB,sBAAwB,EAAA,8CAAA;AAAA,IACxB,kBAAoB,EAAA,IAAA;AAAA,IACpB,eAAiB,EAAA;AAAA;AAErB,CAAA;AAEA,MAAM,eAAe,MAAM;AACzB,EAAM,MAAA,CAAC,WAAW,YAAY,CAAA,GAAI,SAAiB,eAAgB,CAAA,CAAC,CAAG,EAAA,KAAA,IAAS,EAAE,CAAA;AAClF,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAuC,IAAI,CAAA;AAEjF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAiB,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,EAAE,CAAA;AACzD,EAAM,MAAA,eAAA,GAAkB,CAAC,GAA+B,KAAA;AACtD,IAAA,cAAA,CAAe,GAAG,CAAA;AAAA,GACpB;AACA,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAiB,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAiB,EAAE,CAAA;AAC/D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAkC,QAAQ,CAAA;AACxE,EAAA,MAAM,CAAC,iBAAmB,EAAA,oBAAoB,CAAI,GAAA,QAAA,CAAkC,EAAE,CAAA;AACtF,EAAA,MAAM,CAAC,kBAAoB,EAAA,qBAAqB,CAAI,GAAA,QAAA,CAAkC,EAAE,CAAA;AAExF,EAAA,MAAM,EAAE,IAAA,EAAM,MAAO,EAAA,GAAI,8BAA+B,CAAA;AAAA,IACtD,sBAAA,EAAwB,aAAa,sBAA0B,IAAA,EAAA;AAAA,IAC/D,0BAA4B,EAAA;AAAA,GAC7B,CAAA;AAED,EAAA,MAAM,oBAAoB,MAAQ,EAAA,IAAA;AAElC,EAAA,MAAM,EAAE,IAAA,EAAM,SAAU,EAAA,GAAI,wBAAyB,CAAA;AAAA,IACnD,2BAA6B,EAAA,aAAA;AAAA,IAC7B,wBAAA,EAA0B,aAAa,GAAM,GAAA,GAAA;AAAA,IAC7C,yBAA2B,EAAA,cAAA;AAAA,IAC3B,4BAA8B,EAAA;AAAA,GAC/B,CAAA;AACD,EAAA,MAAM,EAAE,IAAA,EAAM,iBAAkB,EAAA,GAAI,wBAAyB,CAAA;AAAA,IAC3D,2BAA6B,EAAA,EAAA;AAAA,IAC7B,wBAA0B,EAAA,GAAA;AAAA,IAC1B,yBAA2B,EAAA,EAAA;AAAA,IAC3B,4BAA8B,EAAA;AAAA,GAC/B,CAAA;AACD,EAAA,MAAM,EAAE,IAAA,EAAM,kBAAmB,EAAA,GAAI,wBAAyB,CAAA;AAAA,IAC5D,2BAA6B,EAAA,aAAA;AAAA,IAC7B,wBAA0B,EAAA,GAAA;AAAA,IAC1B,yBAA2B,EAAA,EAAA;AAAA,IAC3B,4BAA8B,EAAA;AAAA,GAC/B,CAAA;AAED,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,iBAAA,CAAkB,EAAE,CAAA;AAAA,GACtB;AACA,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,KAAA,EAAA;AAAA,GACR,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,cAAA,CAAe,IAAI,CAAA;AAEnB,IAAI,IAAA,IAAA,IAAQ,UAAc,IAAA,SAAA,KAAc,SAAW,EAAA;AAEjD,MAAM,MAAA,YAAA,GAAe,IAAK,CAAA,IAAA,CAAK,cAAe,CAAA,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAI,CAAA,sBAAA,CAAuB,QAAS,CAAA,UAAU,CAAC,CAAA;AAC7G,MAAA,UAAA,CAAW,YAAY,CAAA;AAAA,KACd,MAAA,IAAA,CAAC,IAAQ,IAAA,UAAA,IAAc,cAAc,SAAW,EAAA;AAEzD,MAAA,UAAA,CAAW,EAAE,CAAA;AAAA,KACJ,MAAA,IAAA,CAAC,UAAc,IAAA,SAAA,KAAc,SAAW,EAAA;AAEjD,MAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,KACV,MAAA,IAAA,SAAA,KAAc,SAAa,IAAA,aAAA,IAAiB,cAAgB,EAAA;AAErE,MAAA,UAAA,CAAW,IAAM,EAAA,IAAA,CAAK,cAAkB,IAAA,EAAE,CAAA;AAAA;AAC5C,GACF,EAAG,CAAC,UAAY,EAAA,IAAA,EAAM,eAAe,cAAgB,EAAA,kBAAA,EAAoB,SAAS,CAAC,CAAA;AAEnF,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,iBAAmB,EAAA;AACrB,MAAqB,oBAAA,CAAA,iBAAA,CAAkB,KAAK,cAAc,CAAA;AAAA;AAC5D,GACF,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAsB,qBAAA,CAAA,kBAAA,CAAmB,KAAK,cAAc,CAAA;AAAA;AAC9D,GACF,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvB,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAc,EAAA,OAAA;AAAA,IACd,WAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AAEO,SAAS,iBAAoB,GAAA;AAClC,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,MACE,YAAa,EAAA;AAEjB,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAW,EAAA,UAAA,KAAe,aAAc,EAAA;AACxD,EAAM,MAAA,WAAA,GAAc,CAAC,KAAkB,KAAA;AACrC,IAAM,KAAA,EAAA;AACN,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,GACpB;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAM,KAAA,EAAA;AACN,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,YAAA,CAAa,SAAS,CAAA;AACtB,IAAU,SAAA,EAAA;AAAA,GACZ;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAW,UAAA,CAAA,KAAA,CAAM,mKAAsC,0DAAe,EAAA;AAAA,QACpE,OAAS,EAAA;AAAA,OACV,CAAA;AAED,MAAA;AAAA;AAEF,IAAW,UAAA,EAAA;AAAA,GACb;AAEA,EAAO,OAAA;AAAA,IACL,cAAA,uBACG,KAAM,CAAA,IAAA,EAAN,EAAW,MAAgB,EAAA,OAAA,EAAS,UAAY,EAAA,SAAA,EAAU,QACzD,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,sBACf,IAAA,CAAC,MAAM,OAAN,EAAA,EAAc,OAAO,EAAE,MAAA,EAAQ,SAC9B,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,2BAAA,EAAQ,iBAAe,IAAC,EAAA,CAAA;AAAA,wBACjD,GAAA,CAAA,KAAA,CAAM,IAAN,EAAA,EAAW,KAAG,IACb,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,aAAA;AAAA,YACA,iBAAA;AAAA,YACA,kBAAA;AAAA,YACA,gBAAA;AAAA,YACA,cAAA;AAAA,YACA,SAAA;AAAA,YACA,WAAA;AAAA,YACA,UAAA;AAAA,YACA,cAAA;AAAA,YACA,YAAA,EAAc,gBAAgB,EAAC;AAAA,YAC/B,WAAa,EAAA,eAAA;AAAA,YACb,WAAA;AAAA,YACA,aAAA;AAAA,YACA,iBAAA;AAAA,YACA;AAAA;AAAA,SAEJ,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,KAAM,CAAA,MAAA,EAAN,EACC,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,SAAA;AAAA,YACR,IAAK,EAAA,QAAA;AAAA,YACL,UAAW,EAAA,QAAA;AAAA,YACX,KAAM,EAAA,MAAA;AAAA,YACN,OAAS,EAAA,mBAAA;AAAA,YAEV,QAAA,EAAA;AAAA;AAAA,SAGH,EAAA;AAAA,OACF,EAAA;AAAA,KACF,EAAA,CAAA;AAAA,IAEF,kBACE,kBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,iBAAA;AAAA,QACA,kBAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,cAAA;AAAA,QACA,iBAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA,cAAA;AAAA,QACA,YAAA,EAAc,gBAAgB,EAAC;AAAA,QAC/B,WAAa,EAAA,eAAA;AAAA,QACb,WAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IAEF,eAAiB,EAAA,MAAA;AAAA,IACjB,kBAAoB,EAAA,aAAA;AAAA,IACpB,mBAAqB,EAAA,UAAA;AAAA,IACrB,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAgB,EAAA,KAAA;AAAA,IAChB;AAAA,GACF;AACF;;AC1QA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAO1B,MAAM,qBAAwB,GAAA,CAAC,EAAE,SAAA,EAAW,sBAAuD,KAAA;AACxG,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,eAAe,CAChC,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,CAC7B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,CAAA;AAAA,sBAChB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,uBAAA,EAAwB,QAAE,EAAA,cAAA,EAAA;AAAA,KAC5C,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,GAAA,EAAA,EAAE,SAAU,EAAA,wBAAA,EAAyB,QAAyB,EAAA,qHAAA,EAAA,CAAA;AAAA,oBAE9D,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,YAAY,CAC7B,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,OAAO,CACxB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAK,QAAI,EAAA,0BAAA,EAAA,CAAA;AAAA,wBACT,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,6BAAA,EAA+B,uBAAa,GAAI,EAAA;AAAA,OAClE,EAAA,CAAA;AAAA,sBACC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,OAAO,CACxB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAK,QAAI,EAAA,0BAAA,EAAA,CAAA;AAAA,wBACT,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,6BAAA,EAA+B,kCAAwB,GAAI,EAAA;AAAA,OAC7E,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ,CAAA;;AC7BA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAO1B,SAAS,aAAc,CAAA,EAAE,QAAU,EAAA,eAAA,EAAiB,iBAAuC,EAAA;AAChG,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,wBAAwB,CACzC,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAE,QAAK,EAAA,2BAAA,EAAA,CAAA;AAAA,oBACR,GAAA;AAAA,MAAC,KAAM,CAAA,IAAA;AAAA,MAAN;AAAA,QACC,IAAK,EAAA,mBAAA;AAAA,QACL,IAAK,EAAA,OAAA;AAAA,QACL,SAAA,EAAWA,KAAG,oBAAoB,CAAA;AAAA,QAClC,YAAA,EAAc,iBAAiB,oBAAwB,IAAA,EAAA;AAAA,QAEtD,QAAS,EAAA,QAAA,CAAA,GAAA,CAAI,CAAC,OAAA,EAAS,KACtB,qBAAA,IAAA;AAAA,UAAC,KAAM,CAAA,IAAA;AAAA,UAAN;AAAA,YAEC,EAAA,EAAI,CAAQ,KAAA,EAAA,OAAA,CAAQ,oBAAoB,CAAA,CAAA;AAAA,YACxC,IAAK,EAAA,OAAA;AAAA,YACL,KAAA,EAAO,QAAQ,oBAAwB,IAAA,EAAA;AAAA,YACvC,QAAA,EAAU,CAAC,CAAM,KAAA;AACf,cAAM,MAAA,EAAE,KAAM,EAAA,GAAI,CAAE,CAAA,MAAA;AACpB,cAAA,MAAM,WAAW,QAAS,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,yBAAyB,KAAK,CAAA;AACtE,cAAA,IAAI,QAAU,EAAA;AACZ,gBAAA,eAAA,CAAgB,QAAQ,CAAA;AAAA;AAC1B,aACF;AAAA,YACA,SAAA,EAAWA,KAAG,MAAM,CAAA;AAAA,YAEnB,QAAA,EAAA;AAAA,cAAQ,OAAA,CAAA,wBAAA;AAAA,cAAyB,GAAA;AAAA,cAAE,OAAQ,CAAA,oBAAA;AAAA,cAAqB;AAAA;AAAA,WAAA;AAAA,UAb5D,CAAQ,KAAA,EAAA,OAAA,CAAQ,oBAAoB,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,SAerD;AAAA;AAAA;AACH,GACF,EAAA,CAAA;AAEJ;;ACrCO,MAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAiC,EAAA;AAC/E,EAAM,MAAA,EAAE,IAAK,EAAA,GAAI,qBAAsB,EAAA;AAGvC,EAAO,OAAA;AAAA,IACL,sBACE,kBAAA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,QAAU,EAAA,IAAA,EAAM,IAAM,EAAA,eAAA,IAAmB,EAAC;AAAA,QAC1C,eAAiB,EAAA,kBAAA;AAAA,QACjB;AAAA;AAAA,KACF;AAAA,IAEF,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAa,EAAA;AAAA,GACf;AACF,CAAA;;AChBO,MAAM,sBAAsB,MAAM;AACvC,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,WAAW,CAAA;AAChE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAiB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAAiB,EAAE,CAAA;AAC3E,EAAA,MAAM,EAAE,WAAa,EAAA,kBAAA,EAAoB,mBAAmB,cAAgB,EAAA,cAAA,KAAmB,iBAAkB,EAAA;AAEjH,EAAA,MAAM,EAAE,eAAA,EAAiB,sBAAwB,EAAA,kBAAA,KAAuB,gBAAiB,EAAA;AACzF,EAAM,MAAA,EAAE,IAAM,EAAA,aAAA,EAAkB,GAAA,uBAAA;AAAA,IAC9B;AAAA,MACE,sBAAA,EAAwB,aAAa,sBAA0B,IAAA,EAAA;AAAA,MAC/D,eAAA,EAAiB,iBAAiB,oBAAwB,IAAA;AAAA,KAC5D;AAAA,IACA;AAAA,MACE,OAAS,EAAA,CAAC,CAAC,WAAA,IAAe,CAAC,CAAC;AAAA;AAC9B,GACF;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAe,cAAA,EAAA;AACf,IAAA,kBAAA,CAAmB,MAAS,CAAA;AAC5B,IAAA,YAAA,CAAa,EAAE,CAAA;AACf,IAAA,uBAAA,CAAwB,EAAE,CAAA;AAAA,GAC5B;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,WAAA,IAAe,mBAAmB,aAAe,EAAA;AACnD,MAAA,MAAM,EAAE,aAAA,EAAe,aAAc,EAAA,GAAI,aAAc,CAAA,IAAA;AASvD,MAAA,YAAA,CAAa,CAAG,EAAA,aAAa,CAAI,CAAA,EAAA,aAAa,CAAG,CAAA,CAAA,CAAA;AACjD,MAAA,uBAAA;AAAA,QACE,CAAG,EAAA,iBAAA,EAAmB,4BAA4B,CAAA,CAAA,EAAI,mBAAmB,wBAAwB,CAAA,CAAA;AAAA,OACnG;AAAA;AACF,KACC,CAAC,WAAA,EAAa,eAAiB,EAAA,aAAA,EAAe,iBAAiB,CAAC,CAAA;AAEnE,EAAO,OAAA;AAAA,IACL,eAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAW,EAAA,kBAAA;AAAA,IACX,aAAe,EAAA,sBAAA;AAAA,IACf,SAAA;AAAA,IACA,oBAAA;AAAA,IACA,qBAAuB,EAAA;AAAA,GACzB;AACF,CAAA;;ACvDA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAI1B,SAAS,wBAA2B,GAAA;AACzC,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,MACE,mBAAoB,EAAA;AACxB,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAW,EAAA,UAAA,KAAe,aAAc,EAAA;AAExD,EAAA,MAAM,WAAW,MAAM;AACrB,IAAI,IAAA,CAAC,WAAe,IAAA,CAAC,eAAiB,EAAA;AACpC,MAAA,OAAO,UAAW,CAAA,KAAA;AAAA,QAChB,0KAAA;AAAA,QACA,yGAAA;AAAA,QACA;AAAA,UACE,SAAW,EAAA;AAAA;AACb,OACF;AAAA;AAEF,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAO,OAAA,UAAA,CAAW,KAAM,CAAA,6GAAA,EAA0B,yDAAc,EAAA;AAAA,QAC9D,SAAW,EAAA;AAAA,OACZ,CAAA;AAAA;AAEH,IAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,MAAO,OAAA,UAAA,CAAW,KAAM,CAAA,0IAAA,EAAgC,sFAAoB,EAAA;AAAA,QAC1E,SAAW,EAAA;AAAA,OACZ,CAAA;AAAA;AAEH,IAAW,UAAA,EAAA;AAAA,GACb;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAsB,qBAAA,EAAA;AACtB,IAAU,SAAA,EAAA;AAAA,GACZ;AAEA,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,oBAAA;AAAA,IACA,qBAAuB,EAAA,MAAA;AAAA,IACvB,mBAAqB,EAAA,aAAA;AAAA,IACrB,oBAAsB,EAAA,UAAA;AAAA,IACtB,8BAAA,uBACG,KAAM,CAAA,IAAA,EAAN,EAAW,MAAgB,EAAA,OAAA,EAAS,UAAY,EAAA,SAAA,EAAU,QACzD,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,sBACf,IAAA,CAAC,MAAM,OAAN,EAAA,EAAc,OAAO,EAAE,MAAA,EAAQ,SAC9B,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,uDAAA,EAAa,iBAAe,IAAC,EAAA,CAAA;AAAA,wBACvD,GAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EAAW,SAAA,EAAWH,KAAG,0BAA0B,CAAA,EAAG,GAAG,EAAA,IAAA,EACxD,QACE,kBAAA,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,CAC7B,EAAA,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,cAAc,CAC/B,EAAA,QAAA,EAAA;AAAA,8BAAA,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,WAAWA,IAAG,CAAA,WAAA,EAAa,EAAE,eAAiB,EAAA,cAAA,KAAmB,aAAa,CAAA;AAAA,kBAC9E,OAAA,EAAS,MAAM,iBAAA,CAAkB,WAAW,CAAA;AAAA,kBAE5C,QAAA,EAAA;AAAA,oCAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,CAC7B,EAAA,QAAA,EAAA;AAAA,sCAAA,GAAA,CAAC,aAAc,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,WAAW,CAAG,EAAA,CAAA;AAAA,sCAC3C,GAAA,CAAC,UAAK,SAAW,EAAAA,IAAA,CAAG,aAAa,aAAe,EAAA,WAAW,GAAG,QAAE,EAAA,cAAA,EAAA,CAAA;AAAA,0CAC/D,mBAAoB,EAAA,EAAA;AAAA,qBACvB,EAAA,CAAA;AAAA,wCACC,KAAI,EAAA,EAAA,SAAA,EAAU,0BACZ,QAAc,EAAA,WAAA,GAAA,WAAA,CAAY,yBAAyB,oBACtD,EAAA;AAAA;AAAA;AAAA,eACF;AAAA,8BACA,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,WAAWA,IAAG,CAAA,WAAA,EAAa,EAAE,eAAiB,EAAA,cAAA,KAAmB,oBAAoB,CAAA;AAAA,kBACrF,OAAA,EAAS,MAAM,iBAAA,CAAkB,kBAAkB,CAAA;AAAA,kBAEnD,QAAA,EAAA;AAAA,oCAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,CAC7B,EAAA,QAAA,EAAA;AAAA,sCAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,WAAW,CAAG,EAAA,CAAA;AAAA,sCAC/C,GAAA,CAAC,UAAK,SAAW,EAAAA,IAAA,CAAG,aAAa,aAAe,EAAA,WAAW,GAAG,QAAQ,EAAA,2CAAA,EAAA,CAAA;AAAA,0CACrE,mBAAoB,EAAA,EAAA;AAAA,qBACvB,EAAA,CAAA;AAAA,oCACA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,wBACZ,EAAA,QAAA,EAAA;AAAA,sBAAiB,eAAA,EAAA,wBAAA;AAAA,sBACjB,iBAAiB,oBAAwB,IAAA;AAAA,qBAC5C,EAAA;AAAA;AAAA;AAAA;AACF,aACF,EAAA,CAAA;AAAA,4BACA,GAAA,CAAC,qBAAsB,EAAA,EAAA,SAAA,EAAsB,oBAA4C,EAAA;AAAA,WAC3F,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,SAAI,SAAW,EAAAA,IAAA,CAAG,aAAa,CAAI,EAAA,QAAA,EAAA,cAAA,KAAmB,WAAc,GAAA,SAAA,GAAY,aAAc,EAAA;AAAA,SAAA,EACjG,CACF,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,OAAO,EAAE,SAAA,EAAW,CAAE,EAAA,EAClC,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAO,SAAQ,SAAU,EAAA,IAAA,EAAK,UAAS,UAAW,EAAA,QAAA,EAAS,OAAM,MAAO,EAAA,OAAA,EAAS,QAAU,EAAA,QAAA,EAAA,cAAA,EAE5F,CACF,EAAA;AAAA,OACF,EAAA;AAAA,KACF,EAAA;AAAA,GAEJ;AACF;;AClGA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,SAAS,wBAAyB,CAAA;AAAA,EACvC,qBAAA;AAAA,EACA;AACF,CAAkC,EAAA;AAChC,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,gBAAgB,CACjC,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,cAAc,CAAG,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,sBAC7B,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,cAAA,EAAgB,gCAAsB,MAAO,EAAA,CAAA;AAAA,MAAO;AAAA,KACxE,EAAA,CAAA;AAAA,IACC,sBAAsB,MAAS,GAAA,CAAA,mBAC7B,IAAA,CAAA,KAAA,EAAA,EAAM,SAAQ,YACb,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,OAAA,EAAA,EACC,+BAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAE,EAAA,cAAA,EAAA,CAAA;AAAA,4BAClC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAI,EAAA,0BAAA,EAAA,CAAA;AAAA,4BACpC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAG,EAAA,oBAAA,EAAA;AAAA,OAAA,EACtC,CACF,EAAA,CAAA;AAAA,0BACC,OACE,EAAA,EAAA,QAAA,EAAA,qBAAA,CAAsB,GAAI,CAAA,CAAC,cAAc,KAAU,KAAA;AAClD,QAAA,4BACG,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAK,EAAA,OAAA;AAAA,cACL,IAAK,EAAA,cAAA;AAAA,cACL,KAAA,EAAO,aAAa,gBAAoB,IAAA,EAAA;AAAA,cACxC,QAAA,EAAU,MAAM,oBAAA,CAAqB,YAAY;AAAA;AAAA,WAErD,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,YAAA,CAAa,gBAAiB,EAAA,CAAA;AAAA,0BACnC,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,YAAA,CAAa,gBAAiB,EAAA;AAAA,SAAA,EAAA,EAV5B,CAAG,EAAA,YAAA,CAAa,gBAAgB,CAAA,CAAA,EAAI,KAAK,CAWlD,CAAA,CAAA;AAAA,OAEH,CACH,EAAA;AAAA,KAAA,EACF,CAEA,mBAAA,IAAA,CAAC,KAAM,EAAA,EAAA,OAAA,EAAQ,YACb,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,OAAA,EAAA,EACC,+BAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAE,EAAA,cAAA,EAAA,CAAA;AAAA,4BAClC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAI,EAAA,0BAAA,EAAA,CAAA;AAAA,4BACpC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,YAAY,GAAG,QAAG,EAAA,oBAAA,EAAA;AAAA,OAAA,EACtC,CACF,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,OAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAG,OAAS,EAAA,CAAA,EACX,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,WAAW,CAC5B,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,yBAA0B,EAAA,EAAA,CAAA;AAAA,wBAC3B,GAAA,CAAC,OAAE,QAAY,EAAA,2DAAA,EAAA,CAAA;AAAA,wBACf,GAAA,CAAC,OAAE,QAAkB,EAAA,0FAAA,EAAA;AAAA,OACvB,EAAA,CAAA,EACF,GACF,CACF,EAAA;AAAA,KACF,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ;;ACnEA,MAAM,EAAE,WAAc,GAAA,SAAA;AAWtB,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,SAAS,kBAAmB,CAAA;AAAA,EACjC,UAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAA4B,EAAA;AAC1B,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,aAAA,CAAc,WAAW,CAAA;AAAA,GAC3B;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,cAAA,CAAe,EAAE,CAAA;AAAA,GACnB;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAH,IAAA,CAAG,gBAAgB,CAAA,EACjC,+BAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,gBAAgB,CACjC,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,uBAAuB,CACxC,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAU,CAAA,KAAA,EAAV,EAAgB,SAAA,EAAU,yBAAwB,QAAM,EAAA,iCAAA,EAAA,CAAA;AAAA,wBACzD,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAO,EAAA,WAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,cAAe,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC9C,IAAK,EAAA,QAAA;AAAA,YACL,SAAS,CAAC,CAAA,KAAM,CAAE,CAAA,GAAA,KAAQ,WAAW,YAAa,EAAA;AAAA,YAClD,SAAW,EAAA;AAAA,cACT,SAAA,EAAWA,KAAG,cAAc,CAAA;AAAA,cAC5B,SAAW,EAAA,IAAA;AAAA,cACX,OAAS,EAAA;AAAA;AACX;AAAA;AACF,OACF,EAAA,CAAA;AAAA,sBACC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,gBAAgB,CACjC,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,MAAA,EAAA,EAAO,YAAW,SAAU,EAAA,IAAA,EAAK,UAAS,OAAQ,EAAA,WAAA,EAAY,OAAS,EAAA,WAAA,EAAa,QAErF,EAAA,oBAAA,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,MAAO,EAAA,EAAA,UAAA,EAAW,QAAS,EAAA,IAAA,EAAK,UAAS,OAAQ,EAAA,SAAA,EAAU,OAAS,EAAA,YAAA,EAAc,QAEnF,EAAA,cAAA,EAAA;AAAA,OACF,EAAA;AAAA,KAAA,EACF,CACF,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAA,IAAA,CAAG,SAAS,CAAG,EAAA,CAAA;AAAA,IAC9B,UACC,oBAAA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,qBAAuB,EAAA,gBAAA;AAAA,QACvB,oBAAA;AAAA,QACA;AAAA;AAAA;AACF,GAEJ,EAAA,CAAA;AAEJ;;AChEO,MAAM,0BAAkE,CAAC,EAAE,MAAQ,EAAA,OAAA,EAAS,UAAe,KAAA;AAChH,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAA6C,IAAI,CAAA;AACzG,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAiB,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,EAAE,CAAA;AAEzD,EAAM,MAAA,EAAE,IAAK,EAAA,GAAI,0BAA2B,CAAA;AAAA,IAC1C,UAAY,EAAA;AAAA,GACb,CAAA;AAED,EAAA,MAAM,CAAC,gBAAkB,EAAA,mBAAmB,CAAI,GAAA,QAAA,CAAwC,EAAE,CAAA;AAE1F,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAM,IAAM,EAAA;AACd,MAAA,mBAAA,CAAoB,KAAK,IAAI,CAAA;AAAA,KACxB,MAAA;AACL,MAAA,mBAAA,CAAoB,EAAE,CAAA;AAAA;AACxB,GACF,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAM,MAAA,wBAAA,GAA2B,CAAC,YAA8C,KAAA;AAC9E,IAAA,uBAAA,CAAwB,YAAY,CAAA;AAAA,GACtC;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,oBAAsB,EAAA;AACxB,MAAA,QAAA,CAAS,oBAAoB,CAAA;AAC7B,MAAQ,OAAA,EAAA;AAAA;AACV,GACF;AAEA,EAAA,4BACG,KAAM,CAAA,IAAA,EAAN,EAAW,MAAgB,EAAA,OAAA,EAAkB,WAAU,QACtD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,oBACf,IAAA,CAAC,MAAM,OAAN,EAAA,EAAc,OAAO,EAAE,MAAA,EAAQ,SAC9B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,2BAAA,EAAQ,iBAAe,IAAC,EAAA,CAAA;AAAA,sBAClD,GAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,UAAA;AAAA,UACA,aAAA;AAAA,UACA,WAAA;AAAA,UACA,cAAA;AAAA,UACA,gBAAA;AAAA,UACA,oBAAsB,EAAA;AAAA;AAAA,OAE1B,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,KAAM,CAAA,MAAA,EAAN,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,SAAA;AAAA,UACR,IAAK,EAAA,QAAA;AAAA,UACL,UAAW,EAAA,QAAA;AAAA,UACX,KAAM,EAAA,MAAA;AAAA,UACN,OAAS,EAAA,YAAA;AAAA,UACT,UAAU,CAAC,oBAAA;AAAA,UACZ,QAAA,EAAA;AAAA;AAAA,OAGH,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;AClEA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAMjB,SAAA,qBAAA,CAAsB,EAAE,OAAA,EAAuC,EAAA;AAC7E,EAAA,MAAM,EAAE,eAAA,EAAiB,sBAAuB,EAAA,GAAI,gBAAiB,EAAA;AAErE,EACE,uBAAA,IAAA,CAAC,MAAM,IAAN,EAAA,EAAW,QAAQ,IAAM,EAAA,OAAA,EAAkB,WAAU,QACpD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,CAAM,SAAN,EAAc,CAAA;AAAA,oBACf,IAAA,CAAC,MAAM,OAAN,EAAA,EAAc,OAAO,EAAE,MAAA,EAAQ,SAC9B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,WAAY,EAAA,uCAAA,EAAU,iBAAe,IAAC,EAAA,CAAA;AAAA,sBACpD,GAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EAAW,SAAA,EAAWH,KAAG,0BAA0B,CAAA,EAAG,GAAG,EAAA,IAAA,EACvD,QACH,EAAA,sBAAA,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,MAAM,MAAN,EAAA,EAAa,OAAO,EAAE,SAAA,EAAW,GAChC,EAAA,QAAA,kBAAA,IAAA,CAAC,UAAO,OAAQ,EAAA,SAAA,EAAU,MAAK,QAAS,EAAA,UAAA,EAAW,UAAS,KAAM,EAAA,MAAA,EAAO,SAAS,OAAS,EAAA,QAAA,EAAA;AAAA,QAAA,eAAA;AAAA,QACrF,iBAAiB,wBAA4B,IAAA,oBAAA;AAAA,QAAM,IAAA;AAAA,QAAG,eAAiB,EAAA;AAAA,OAAA,EAC7E,CACF,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;ACvBO,MAAM,qBAAqB,CAAkC;AAAA,EAClE,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAO,GAAA,QAAA;AAAA,EACP,WAAc,GAAA,2BAAA;AAAA,EACd,aAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAIQ,KAAA;AACN,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAmC,YAAY,CAAA;AAE/E,EAAM,MAAA,EAAE,OAAO,UAAW,EAAA,GAAI,cAAc,EAAE,IAAA,EAAM,OAAS,EAAA,QAAA,EAAU,CAAA;AACvE,EAAA,MAAM,EAAE,cAAA,EAAgB,kBAAoB,EAAA,WAAA,KAAgB,iBAAkB,EAAA;AAE9E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAa,EAAA;AACf,MAAM,KAAA,CAAA,QAAA,CAAS,YAAY,sBAAsB,CAAA;AACjD,MAAA,WAAA,CAAY,EAAE,KAAO,EAAA,WAAA,CAAY,wBAAwB,KAAO,EAAA,WAAA,CAAY,wBAAwB,CAAA;AACpG,MAAA,aAAA,GAAgB,EAAE,KAAO,EAAA,WAAA,CAAY,wBAAwB,KAAO,EAAA,WAAA,CAAY,wBAAwB,CAAA;AAAA;AAC1G,GACF,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,SAAU,CAAA,QAAA;AAAA,MAAV;AAAA,QACE,GAAG,KAAA;AAAA,QACH,GAAG,KAAA;AAAA,QACJ,IAAI,KAAM,CAAA,IAAA;AAAA,QACV,KAAA,EAAO,WAAW,OAAW,IAAA,KAAA;AAAA,QAC7B,KAAA,EAAO,UAAU,KAAS,IAAA,EAAA;AAAA,QAC1B,IAAK,EAAA,QAAA;AAAA,QACL,IAAA;AAAA,QACA,WAAA;AAAA,QACA,YAAa,EAAA,KAAA;AAAA,QACb,OAAS,EAAA;AAAA;AAAA,KACX;AAAA,IACC;AAAA,GACH,EAAA,CAAA;AAEJ;;AC7CO,MAAM,mBAAmB,CAAkC;AAAA,EAChE,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAA0C,KAAA;AACxC,EAAM,MAAA,EAAE,OAAO,UAAW,EAAA,GAAI,cAAc,EAAE,IAAA,EAAM,OAAS,EAAA,QAAA,EAAU,CAAA;AAEvE,EAAA,MAAM,QAAW,GAAA,KAAA,CAAM,GAAI,CAAA,CAAC,IAAS,KAAA;AACnC,IAAO,OAAA;AAAA,MACL,GAAG,IAAA;AAAA,MACH,QAAU,EAAA,aAAA,EAAe,QAAS,CAAA,IAAA,CAAK,KAAK;AAAA,KAC9C;AAAA,GACD,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,QAAU,EAAA,CAAA;AAAA,MACV,IAAI,KAAM,CAAA,IAAA;AAAA,MACV,KAAK,KAAM,CAAA,GAAA;AAAA,MACX,cAAc,KAAM,CAAA,KAAA;AAAA,MACpB,UAAU,KAAM,CAAA,QAAA;AAAA,MAChB,OAAO,UAAW,CAAA,OAAA;AAAA,MAClB,QAAQ,KAAM,CAAA,MAAA;AAAA,MACd,KAAO,EAAA,QAAA;AAAA,MACP,aAAA,EAAe,CAAC,QAAa,KAAA;AAC3B,QAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AACvB,QAAA,KAAA,CAAM,gBAAgB,QAAQ,CAAA;AAAA;AAChC;AAAA,GACF;AAEJ;;ACxBO,MAAM,aAAa,CAAkC;AAAA,EAC1D,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAoC,KAAA;AAClC,EAAM,MAAA,EAAE,OAAO,UAAW,EAAA,GAAI,cAAc,EAAE,IAAA,EAAM,OAAS,EAAA,QAAA,EAAU,CAAA;AAEvE,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,IAAI,KAAM,CAAA,IAAA;AAAA,MACV,UAAU,KAAM,CAAA,QAAA;AAAA,MAChB,KAAA,EAAO,WAAW,OAAW,IAAA,KAAA;AAAA,MAC7B,QAAQ,KAAM,CAAA,MAAA;AAAA,MACd,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,QAAA,EAAU,CAAC,QAAa,KAAA;AACtB,QAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,OACzB;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEA,MAAM,mBAAmB,CAAC,EAAE,UAAU,KAAO,EAAA,GAAG,MAAwB,KAAA;AACtE,EAAA,2BACG,MAAO,CAAA,MAAA,EAAP,EAAc,KAAe,EAAA,GAAG,MAC9B,QACH,EAAA,CAAA;AAEJ,CAAA;AAOA,MAAM,kBAAkB,CAAkC;AAAA,EACxD,OAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAA4D,KAAA;AAC1D,EAAA,uBACG,GAAA,CAAA,UAAA,EAAA,EAAY,GAAG,KAAA,EACb,QAAQ,EAAA,OAAA,CAAA,GAAA;AAAA,IACP,CAAC,MAAA,KACC,MAAO,CAAA,KAAA,wBACJ,gBAAoC,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EAAQ,GAAG,YAAA,EAC3D,QAAO,EAAA,MAAA,CAAA,KAAA,EAAA,EADa,OAAO,KAE9B;AAAA,GAGR,EAAA,CAAA;AAEJ,CAAA;AAEA,UAAA,CAAW,MAAS,GAAA,gBAAA;AACpB,UAAA,CAAW,KAAQ,GAAA,eAAA;;AC5EZ,MAAM,gBAAgB,CAAkC;AAAA,EAC7D,IAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAO,GAAA,QAAA;AAAA,EACP,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAyG,KAAA;AACvG,EAAM,MAAA,EAAE,OAAO,UAAW,EAAA,GAAI,cAAc,EAAE,IAAA,EAAM,OAAS,EAAA,QAAA,EAAU,CAAA;AAEvE,EACE,uBAAA,GAAA;AAAA,IAAC,SAAU,CAAA,SAAA;AAAA,IAAV;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,IAAI,KAAM,CAAA,IAAA;AAAA,MACV,IAAA;AAAA,MACA,YAAa,EAAA,KAAA;AAAA,MACb,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,KAAA,EAAO,MAAM,KAAS,IAAA,EAAA;AAAA,MACtB,UAAU,KAAM,CAAA,QAAA;AAAA,MAChB,KAAA,EAAO,WAAW,OAAW,IAAA,KAAA;AAAA,MAC7B,QAAA,EAAU,CAAC,CAAM,KAAA;AACf,QAAA,KAAA,CAAM,SAAS,CAAC,CAAA;AAChB,QAAA,QAAA,GAAW,CAAC,CAAA;AAAA,OACd;AAAA,MACA,MAAA,EAAQ,CAAC,CAAM,KAAA;AACb,QAAA,KAAA,CAAM,MAAO,EAAA;AACb,QAAA,MAAA,GAAS,CAAC,CAAA;AAAA,OACZ;AAAA,MACA,SAAW,EAAA;AAAA,QACT,GAAG,SAAA;AAAA,QACH,SAAS,MAAM;AACb,UAAA,KAAA,CAAM,SAAS,EAAE,CAAA;AACjB,UAAA,SAAA,EAAW,OAAU,IAAA;AAAA;AACvB;AACF;AAAA,GACF;AAEJ;;AClCA,MAAMA,IAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAE1B,MAAM,gBAAgB,CAAC;AAAA,EAC5B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,CAAA;AAAA,EACf,YAAe,GAAA,EAAA;AAAA,EACf,QAAW,GAAA,CAAA;AAAA,EACX;AACF,CAA0B,KAAA;AACxB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,KAAM,CAAA,QAAA;AAAA,IAC9B,KAAM,CAAA,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAI,CAAA,CAAE,GAAI,CAAA,OAAO,EAAE,KAAA,EAAO,GAAK,EAAA,KAAA,EAAO,IAAK,CAAA;AAAA,GAClE;AACA,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,CAAI,GAAA,KAAA,CAAM,SAAS,YAAY,CAAA;AAEzD,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAI,IAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACpB,MAAA,QAAA,CAAS,KAAK,CAAA;AACd,MAAM,KAAA,CAAA,GAAA,CAAI,CAAC,IAAA,EAAM,GAAQ,KAAA;AACvB,QAAI,IAAA,IAAA,CAAK,UAAU,YAAc,EAAA;AAC/B,UAAA,UAAA,CAAW,GAAG,CAAA;AAAA;AAChB,OACD,CAAA;AAAA;AACH,GACC,EAAA,CAAC,KAAO,EAAA,YAAY,CAAC,CAAA;AAExB,EAAM,MAAA,eAAA,GAAkB,CAAC,IAAmB,KAAA;AAC1C,IAAM,MAAA,KAAA,GAAQ,MAAM,SAAU,CAAA,CAAC,SAAS,IAAK,CAAA,KAAA,KAAU,KAAK,KAAK,CAAA;AAEjE,IAAA,IAAI,UAAU,EAAI,EAAA;AAChB,MAAA,OAAA,CAAQ,MAAM,uBAAuB,CAAA;AAErC,MAAA;AAAA;AAGF,IAAA,IAAI,MAAM,KAAQ,GAAA,CAAA,GAAI,QAAQ,KAAQ,GAAA,CAAC,GAAG,WAAa,EAAA;AACrD,MAAA,WAAA,GAAc,IAAI,CAAA;AAAA,KACb,MAAA;AACL,MAAW,UAAA,CAAA,KAAA,CAAM,oKAAuC,mFAAkB,CAAA;AAAA;AAC5E,GACF;AAEA,EACE,uBAAA,IAAA,CAAC,SAAI,SAAW,EAAAH,IAAA,CAAG,kBAAkB,EAAE,OAAA,EAAS,SAAU,EAAC,CACzD,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,SAAS,CACzB,EAAA,QAAA,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,IAAM,EAAA,GAAA,qBACf,IAAA,CAAA,KAAA,CAAM,UAAN,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAW,EAAAA,IAAA;AAAA,YACT,QAAA;AAAA,YACA,EAAE,SAAA,EAAW,IAAK,CAAA,WAAA,IAAe,KAAM,EAAA;AAAA,YACvC,EAAE,MAAQ,EAAA,YAAA,KAAiB,IAAK,CAAA,KAAA,IAAS,YAAY,GAAI;AAAA,WAC3D;AAAA,UACA,OAAA,EAAS,MAAM,eAAA,GAAkB,IAAI,CAAA;AAAA,UAEpC,QAAA,EAAA,IAAA,CAAK,8BAAe,GAAA,CAAA,MAAA,EAAA,EAAK,WAAWA,IAAG,CAAA,gBAAgB,CAAG,EAAA,CAAA,GAAK,GAAM,GAAA;AAAA;AAAA,OACxE;AAAA,MAEC,GAAA,GAAM,KAAM,CAAA,MAAA,GAAS,CACpB,IAAA,KAAA,CAAM,IAAK,CAAA,EAAE,MAAQ,EAAA,QAAA,EAAU,CAAA,CAAE,GAAI,CAAA,CAAC,GAAG,MACvC,qBAAA,GAAA,CAAC,MAAkC,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,KAAK,CAA3C,EAAA,EAAA,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAA0B,CAC1D;AAAA,KAAA,EAAA,EAfgB,CAAO,IAAA,EAAA,GAAG,CAgB/B,CAAA,CACD,CACH,EAAA,CAAA;AAAA,oBAEA,GAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAWA,IAAG,CAAA,aAAa,GAC5B,QAAM,EAAA,KAAA,CAAA,GAAA,CAAI,CAAC,IAAA,EAAM,GAChB,qBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAW,EAAAA,IAAA;AAAA,UACT,EAAE,SAAW,EAAA,KAAA,CAAM,GAAM,GAAA,CAAA,GAAI,MAAM,GAAM,GAAA,CAAC,CAAG,EAAA,WAAA,IAAe,KAAM,EAAA;AAAA,UAClE,EAAE,MAAQ,EAAA,YAAA,KAAiB,IAAK,CAAA,KAAA,IAAS,YAAY,GAAI;AAAA,SAC3D;AAAA,QACA,OAAA,EAAS,MAAM,eAAA,GAAkB,IAAI,CAAA;AAAA,QAErC,8BAAC,MAAK,EAAA,EAAA,SAAA,EAAU,iBAAiB,QAAK,EAAA,IAAA,CAAA,KAAA,IAAS,KAAK,KAAM,EAAA;AAAA,OAAA;AAAA,MAPrD,SAAS,GAAG,CAAA;AAAA,KASpB,CACH,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;ACpFA,MAAM,EAAA,GAAK,UAAW,CAAA,IAAA,CAAKG,QAAM,CAAA;AAY1B,SAAS,UAAW,CAAA;AAAA,EACzB,MAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAO,GAAA,UAAA;AAAA,EACP;AACF,CAAoB,EAAA;AAClB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAW,UAAA,EAAA;AAAA,GACb;AAEA,EAAM,MAAA,iBAAA,GAAoB,CAAC,EAAe,KAAA;AACxC,IAAA,aAAA,CAAc,EAAE,CAAA;AAAA,GAClB;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAI,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACvB,MAAA,uBACG,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,EAAA,CAAG,qBAAqB,gBAAgB,CAAA,EACtD,QAAC,kBAAA,IAAA,CAAA,QAAA,EAAA,EAAO,SAAW,EAAA,EAAA,CAAG,yBAAyB,CAAA,EAAG,SAAS,cACzD,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,CAAA;AAAA,wBAClB,GAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAA,UAAA,IAAc,uCAAU,EAAA;AAAA,OAAA,EACjC,CACF,EAAA,CAAA;AAAA;AAIJ,IAAO,OAAA,MAAA,CAAO,IAAI,CAAC,KAAA,0BAChB,KAAmB,EAAA,EAAA,SAAA,EAAW,EAAG,CAAA,mBAAmB,CACnD,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAI,SAAW,EAAA,EAAA,CAAG,mBAAmB,CAAA,EACpC,8BAAC,KAAI,EAAA,EAAA,GAAA,EAAK,KAAM,CAAA,GAAA,EAAK,KAAK,KAAM,CAAA,IAAA,EAAM,WAAW,EAAG,CAAA,aAAa,GAAG,CACtE,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,QAAA,EAAA,EAAO,SAAW,EAAA,EAAA,CAAG,eAAe,CAAG,EAAA,OAAA,EAAS,MAAM,iBAAA,CAAkB,KAAM,CAAA,EAAE,CAAG,EAAA,YAAA,EAAW,6BAAQ,QAEvG,EAAA,MAAA,EAAA;AAAA,KANQ,EAAA,EAAA,KAAA,CAAM,EAOhB,CACD,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAM,MAAA,SAAA,GAAY,IAAS,KAAA,QAAA,GAAW,CAAI,GAAA,CAAA;AAC1C,IAAA,MAAM,YAAY,EAAC;AAEnB,IAAI,IAAA,MAAA,CAAO,SAAS,SAAW,EAAA;AAC7B,MAAU,SAAA,CAAA,IAAA;AAAA,wBACP,GAAA,CAAA,KAAA,EAAA,EAAoB,SAAW,EAAA,EAAA,CAAG,cAAc,gBAAgB,CAAA,EAC/D,QAAC,kBAAA,IAAA,CAAA,QAAA,EAAA,EAAO,SAAW,EAAA,EAAA,CAAG,kBAAkB,CAAA,EAAG,SAAS,cAClD,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,CAAA;AAAA,0BAClB,GAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAA,UAAA,IAAc,0BAAO,EAAA,CAAA;AAAA,0BAC3B,IAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,EAAA,CAAG,aAAa,CAAG,EAAA,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,gCAChC,MAAK,EAAA,EAAA,SAAA,EAAW,GAAG,oBAAoB,CAAA,EAAI,iBAAO,MAAO,EAAA,CAAA;AAAA,YAAO,GAAA;AAAA,YAAE,SAAA;AAAA,YAAU;AAAA,WAChF,EAAA;AAAA,SAAA,EACF,KAPO,WAQT;AAAA,OACF;AAAA;AAGF,IAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACxB,MAAU,SAAA,CAAA,IAAA;AAAA,wBACP,IAAA,CAAA,KAAA,EAAA,EAAmB,SAAW,EAAA,EAAA,CAAG,YAAY,CAC5C,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAI,SAAW,EAAA,EAAA,CAAG,mBAAmB,CAAA,EACpC,8BAAC,KAAI,EAAA,EAAA,GAAA,EAAK,KAAM,CAAA,GAAA,EAAK,KAAK,KAAM,CAAA,IAAA,EAAM,WAAW,EAAG,CAAA,aAAa,GAAG,CACtE,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,QAAA,EAAA,EAAO,SAAW,EAAA,EAAA,CAAG,eAAe,CAAG,EAAA,OAAA,EAAS,MAAM,iBAAA,CAAkB,KAAM,CAAA,EAAE,CAAG,EAAA,YAAA,EAAW,6BAAQ,QAEvG,EAAA,MAAA,EAAA;AAAA,SAAA,EAAA,EANQ,MAAM,EAOhB;AAAA,OACF;AAAA,KACD,CAAA;AAED,IAAO,OAAA,SAAA;AAAA,GACT;AAEA,EAAA,MAAM,SAAY,GAAA,IAAA,IAAS,CAAC,IAAA,IAAQ,OAAO,MAAS,GAAA,CAAA;AAEpD,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,IAAI,SAAS,QAAU,EAAA;AACrB,IAAA,2BAAQ,KAAI,EAAA,EAAA,SAAA,EAAW,GAAG,cAAc,CAAA,EAAI,6BAAoB,EAAA,CAAA;AAAA;AAGlE,EAAA,uBAAQ,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,EAAA,CAAG,YAAc,EAAA,EAAE,MAAQ,EAAA,IAAA,KAAS,QAAS,EAAC,CAAI,EAAA,QAAA,EAAA,eAAA,EAAkB,EAAA,CAAA;AAC7F;;ACrGA,MAAM,YAAA,GAAe,IAAI,IAAO,GAAA,IAAA;AAoBhB,SAAA,MAAA,CACd,OACA,OAAmC,GAAA,EAAE,KAAK,MAAQ,EAAA,QAAA,EAAU,cAChD,EAAA;AACZ,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAM,MAAA,GAAA,GAAM,MAAO,CAAA,UAAA,CAAW,IAAI,CAAA;AAElC,IAAA,IAAI,CAAC,GAAK,EAAA;AACR,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,0EAA6B,CAAC,CAAA;AAE/C,MAAA;AAAA;AAGF,IAAM,MAAA,GAAA,GAAM,IAAI,KAAM,EAAA;AACtB,IAAA,GAAA,CAAI,WAAc,GAAA,WAAA;AAElB,IAAA,GAAA,CAAI,SAAS,MAAM;AACjB,MAAI,IAAA,EAAE,KAAO,EAAA,MAAA,EAAW,GAAA,GAAA;AACxB,MAAM,MAAA,EAAE,QAAU,EAAA,GAAA,EAAQ,GAAA,OAAA;AAG1B,MAAA,IAAI,QAAU,EAAA;AACZ,QAAM,MAAA,YAAA,GAAe,QAAQ,MAAS,GAAA,CAAA;AACtC,QAAA,IAAI,eAAe,QAAU,EAAA;AAC3B,UAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,IAAK,CAAA,QAAA,GAAW,YAAY,CAAA;AAC/C,UAAQ,KAAA,GAAA,IAAA,CAAK,KAAM,CAAA,KAAA,GAAQ,KAAK,CAAA;AAChC,UAAS,MAAA,GAAA,IAAA,CAAK,KAAM,CAAA,MAAA,GAAS,KAAK,CAAA;AAAA;AACpC,OACK,MAAA;AAEL,QAAA,MAAM,EAAE,KAAA,EAAO,WAAa,EAAA,MAAA,EAAQ,cAAiB,GAAA,OAAA;AAErD,QAAA,IAAI,eAAe,YAAc,EAAA;AAE/B,UAAQ,KAAA,GAAA,WAAA;AACR,UAAS,MAAA,GAAA,YAAA;AAAA,mBACA,WAAa,EAAA;AAEtB,UAAA,MAAM,QAAQ,WAAc,GAAA,KAAA;AAC5B,UAAQ,KAAA,GAAA,WAAA;AACR,UAAS,MAAA,GAAA,IAAA,CAAK,KAAM,CAAA,MAAA,GAAS,KAAK,CAAA;AAAA,mBACzB,YAAc,EAAA;AAEvB,UAAA,MAAM,QAAQ,YAAe,GAAA,MAAA;AAC7B,UAAS,MAAA,GAAA,YAAA;AACT,UAAQ,KAAA,GAAA,IAAA,CAAK,KAAM,CAAA,KAAA,GAAQ,KAAK,CAAA;AAAA;AAClC;AAIF,MAAA,MAAA,CAAO,KAAQ,GAAA,KAAA;AACf,MAAA,MAAA,CAAO,MAAS,GAAA,MAAA;AAGhB,MAAA,GAAA,CAAI,SAAU,CAAA,GAAA,EAAK,CAAG,EAAA,CAAA,EAAG,OAAO,MAAM,CAAA;AAGtC,MAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAE7B,QAAM,MAAA,QAAA,GAAW,GAAQ,KAAA,KAAA,GAAQ,WAAc,GAAA,YAAA;AAC/C,QAAM,MAAA,OAAA,GAAU,GAAQ,KAAA,KAAA,GAAQ,CAAM,GAAA,GAAA;AACtC,QAAA,MAAM,MAAS,GAAA,MAAA,CAAO,SAAU,CAAA,QAAA,EAAU,OAAO,CAAA;AACjD,QAAA,OAAA,CAAQ,MAAW,CAAA;AAAA,OACd,MAAA;AAEL,QAAO,MAAA,CAAA,MAAA;AAAA,UACL,CAAC,IAAS,KAAA;AACR,YAAA,IAAI,CAAC,IAAM,EAAA;AACT,cAAO,MAAA,CAAA,IAAI,KAAM,CAAA,gEAAmB,CAAC,CAAA;AAErC,cAAA;AAAA;AAGF,YAAM,MAAA,QAAA,GAAW,GAAQ,KAAA,KAAA,GAAQ,WAAc,GAAA,YAAA;AAC/C,YAAA,MAAM,QAAW,GAAA,KAAA,CAAM,IAAO,GAAA,CAAA,EAAG,MAAM,IAAK,CAAA,OAAA,CAAQ,WAAa,EAAA,EAAE,CAAG,CAAA,CAAA,EAAM,GAAG,CAAA,CAAA,GAAK,WAAa,GAAG,CAAA,CAAA;AAEpG,YAAM,MAAA,WAAA,GAAc,IAAI,IAAA,CAAK,CAAC,IAAI,GAAG,QAAU,EAAA,EAAE,IAAM,EAAA,QAAA,EAAU,CAAA;AACjE,YAAA,OAAA,CAAQ,WAAgB,CAAA;AAAA,WAC1B;AAAA,UACA,GAAA,KAAQ,QAAQ,WAAc,GAAA,YAAA;AAAA,UAC9B,GAAA,KAAQ,QAAQ,CAAM,GAAA;AAAA,SACxB;AAAA;AACF,KACF;AAEA,IAAA,GAAA,CAAI,UAAU,MAAM;AAClB,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,8EAAkB,CAAC,CAAA;AAAA,KACtC;AAGA,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,MAAA,GAAA,CAAI,GAAM,GAAA,KAAA;AAAA,KACL,MAAA;AACL,MAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA;AAC9B,MAAO,MAAA,CAAA,MAAA,GAAS,CAAC,CAAM,KAAA;AACrB,QAAI,IAAA,CAAA,CAAE,QAAQ,MAAQ,EAAA;AACpB,UAAI,GAAA,CAAA,GAAA,GAAM,EAAE,MAAO,CAAA,MAAA;AAAA,SACd,MAAA;AACL,UAAO,MAAA,CAAA,IAAI,KAAM,CAAA,kEAAgB,CAAC,CAAA;AAAA;AACpC,OACF;AACA,MAAA,MAAA,CAAO,UAAU,MAAM;AACrB,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,kEAAgB,CAAC,CAAA;AAAA,OACpC;AACA,MAAA,MAAA,CAAO,cAAc,KAAK,CAAA;AAAA;AAC5B,GACD,CAAA;AACH;;AC5HA,MAAM,UAAA,GAAa,MAAM,CAAU,OAAA,EAAA,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,IAAK,CAAA,MAAA,EAAQ,CAAA,CAAA;AAEvD,SAAS,SAAU,CAAA;AAAA,EACxB,QAAA;AAAA,EACA,MAAQ,EAAA,YAAA;AAAA,EACR,UAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAO,GAAA,UAAA;AAAA,EACP;AACF,CAAA,GAA4B,EAAI,EAAA;AAC9B,EAAA,MAAM,CAAC,cAAgB,EAAA,iBAAiB,CAAI,GAAA,QAAA,CAA0B,EAAE,CAAA;AAExE,EAAM,MAAA,SAAA,GAAY,CAAC,OAAoB,KAAA;AACrC,IAAA,OAAO,eAAe,IAAK,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,GAC5D;AAKA,EAAA,MAAM,UAAU,MAAM;AAGpB,IAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,aAAA,CAAc,OAAO,CAAA;AAC5C,IAAA,KAAA,CAAM,IAAO,GAAA,MAAA;AACb,IAAA,KAAA,CAAM,MAAS,GAAA,SAAA;AAEf,IAAA,IAAI,UAAY,EAAA;AAEd,MAAA,KAAA,CAAM,OAAU,GAAA,QAAA;AAAA;AAIlB,IAAM,KAAA,CAAA,gBAAA,CAAiB,QAAU,EAAA,OAAO,KAAU,KAAA;AAChD,MAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,MAAM,MAAA,EAAE,OAAU,GAAA,MAAA;AAElB,MAAI,IAAA,KAAA,IAAS,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AAC7B,QAAM,MAAA,IAAA,GAAO,MAAM,CAAC,CAAA;AAEpB,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAM,WAAc,GAAA,MAAM,MAAO,CAAA,IAAA,EAAM,YAAY,CAAA;AACnD,UAAA,MAAM,QAA0B,GAAA;AAAA,YAC9B,IAAI,UAAW,EAAA;AAAA,YACf,GAAA,EAAK,GAAI,CAAA,eAAA,CAAgB,WAAW,CAAA;AAAA,YACpC,IAAM,EAAA,CAAA,yBAAA,EAAQ,cAAe,CAAA,MAAA,GAAS,CAAC,CAAA;AAAA,WACzC;AAEA,UAAA,IAAI,SAAS,QAAU,EAAA;AACrB,YAAkB,iBAAA,CAAA,CAAC,QAAQ,CAAC,CAAA;AAAA,WACvB,MAAA;AACL,YAAA,iBAAA,CAAkB,CAAC,GAAG,cAAgB,EAAA,QAAQ,CAAC,CAAA;AAAA;AAGjD,UAAA,QAAA,IAAY,SAAS,IAAI,CAAA;AAAA;AAC3B;AAIF,MAAS,QAAA,CAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,KAChC,CAAA;AAGD,IAAA,KAAA,CAAM,MAAM,OAAU,GAAA,MAAA;AACtB,IAAS,QAAA,CAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAC/B,IAAA,KAAA,CAAM,KAAM,EAAA;AAAA,GACd;AAMA,EAAM,MAAA,WAAA,GAAc,CAAC,OAAoB,KAAA;AACvC,IAAA,MAAM,aAAa,cAAe,CAAA,SAAA,CAAU,CAAC,KAAU,KAAA,KAAA,CAAM,OAAO,OAAO,CAAA;AAC3E,IAAA,IAAI,aAAa,EAAI,EAAA;AACnB,MAAA,MAAM,IAAO,GAAA,cAAA,CAAe,MAAO,CAAA,UAAA,EAAY,CAAC,CAAA;AAChD,MAAA,IAAA,CAAK,CAAC,CAAK,IAAA,GAAA,CAAI,gBAAgB,IAAK,CAAA,CAAC,EAAE,GAAG,CAAA;AAC1C,MAAkB,iBAAA,CAAA,CAAC,GAAG,cAAc,CAAC,CAAA;AACrC,MAAA,QAAA,IAAY,SAAS,OAAO,CAAA;AAAA;AAC9B,GACF;AAEA,EAAA,MAAM,kBAAkB,sBACtB,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,CAAC,CAAC,IAAA;AAAA,MACR,UAAY,EAAA,OAAA;AAAA,MACZ,aAAe,EAAA,WAAA;AAAA,MACf,MAAQ,EAAA,cAAA;AAAA,MACR,IAAA;AAAA,MACA;AAAA;AAAA,GACF;AAGF,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AAEX,MAAe,cAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AAChC,QAAI,GAAA,CAAA,eAAA,CAAgB,MAAM,GAAG,CAAA;AAAA,OAC9B,CAAA;AAAA,KACH;AAAA,GACF,EAAG,EAAE,CAAA;AAEL,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,QAAU,EAAA,SAAA;AAAA,IACV,WAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAY,EAAA;AAAA,GACd;AACF;;AC/GA,MAAM,YAAe,GAAA,GAAA;AAGrB,MAAM,sBAAkD,GAAA;AAAA,EACtD,cAAgB,EAAA,KAAA;AAAA,EAChB,QAAU,EAAA,OAAA;AAAA,EACV,WAAa,EAAA,IAAA;AAAA,EACb,eAAiB,EAAA,OAAA;AAAA,EACjB,KAAO,EAAA,GAAA;AAAA,EACP,MAAQ,EAAA;AACV,CAAA;AACgB,SAAA,cAAA,CAAe,UAAyB,GAAA,EAAI,EAAA;AAC1D,EAAM,MAAA,EAAE,GAAM,GAAA,EAAE,YAAc,EAAA,CAAA,EAAG,WAAa,EAAA,OAAA,EAAW,EAAA,QAAA,EAAU,OAAS,EAAA,KAAA,EAAU,GAAA,UAAA;AACtF,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAmC,IAAI,CAAA;AACnF,EAAM,MAAA,UAAA,GAAa,OAAwC,IAAI,CAAA;AAE/D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,CAAI,GAAA,QAAA,CAAmB,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,EAAE,CAAA;AAEnD,EAAM,MAAA,SAAA,GAAY,YAAY,MAAM;AAClC,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA;AAAA;AAEF,IAAM,MAAA,OAAA,GAAU,eAAe,SAAU,EAAA;AAEzC,IAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,EAAG,eAAe,CAAC,CAAA;AACpD,IAAI,IAAA,UAAA,CAAW,UAAU,YAAc,EAAA;AACrC,MAAA,UAAA,CAAW,KAAM,EAAA;AAAA;AAEnB,IAAA,UAAA,CAAW,KAAK,OAAO,CAAA;AAEvB,IAAA,UAAA,CAAW,UAAU,CAAA;AACrB,IAAgB,eAAA,CAAA,UAAA,CAAW,SAAS,CAAC,CAAA;AACrC,IAAA,QAAA,IAAY,QAAS,EAAA;AAAA,KACpB,CAAC,OAAA,EAAS,YAAc,EAAA,QAAA,EAAU,cAAc,CAAC,CAAA;AAEpD,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,KAAkB,KAAA;AACjB,MAAA,MAAM,UAAU,UAAW,CAAA,OAAA;AAC3B,MAAA,IAAI,CAAC,cAAkB,IAAA,CAAC,WAAW,CAAC,OAAA,CAAQ,KAAK,CAAG,EAAA;AAClD,QAAA;AAAA;AAGF,MAAM,MAAA,OAAA,GAAU,QAAQ,KAAK,CAAA;AAC7B,MAAM,MAAA,GAAA,GAAM,IAAI,KAAM,EAAA;AACtB,MAAA,GAAA,CAAI,SAAS,MAAM;AACjB,QAAA,OAAA,CAAQ,UAAU,CAAG,EAAA,CAAA,EAAG,cAAe,CAAA,KAAA,EAAO,eAAe,MAAM,CAAA;AACnE,QAAQ,OAAA,CAAA,SAAA,CAAU,GAAK,EAAA,CAAA,EAAG,CAAC,CAAA;AAAA,OAC7B;AACA,MAAA,GAAA,CAAI,GAAM,GAAA,OAAA;AACV,MAAA,QAAA,IAAY,QAAS,EAAA;AAAA,KACvB;AAAA,IACA,CAAC,OAAS,EAAA,QAAA,EAAU,cAAc;AAAA,GACpC;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA;AAAA;AAEF,IAAA,MAAM,UAAU,cAAe,CAAA,UAAA,CAAW,MAAM,EAAE,kBAAA,EAAoB,MAAM,CAAA;AAC5E,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA;AAAA;AAEF,IAAA,UAAA,CAAW,OAAU,GAAA,OAAA;AAErB,IAAM,MAAA,cAAA,GAAiB,eAAe,SAAU,EAAA;AAChD,IAAW,UAAA,CAAA,CAAC,cAAc,CAAC,CAAA;AAC3B,IAAA,eAAA,CAAgB,CAAC,CAAA;AAAA,GACnB,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,UAAW,CAAA,OAAA;AAC3B,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,OAAA,CAAQ,YAAY,GAAI,CAAA,YAAA;AACxB,MAAA,OAAA,CAAQ,cAAc,GAAI,CAAA,WAAA;AAAA;AAC5B,GACF,EAAG,CAAC,GAAG,CAAC,CAAA;AAOR,EAAA,MAAM,gBAAmB,GAAA,WAAA;AAAA,IACvB,CAAC,KAAmC,KAAA;AAClC,MAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,QAAO,OAAA,IAAA;AAAA;AAGT,MAAM,MAAA,IAAA,GAAO,eAAe,qBAAsB,EAAA;AAClD,MAAM,MAAA,MAAA,GAAS,cAAe,CAAA,KAAA,GAAQ,IAAK,CAAA,KAAA;AAC3C,MAAM,MAAA,MAAA,GAAS,cAAe,CAAA,MAAA,GAAS,IAAK,CAAA,MAAA;AAE5C,MAAI,IAAA,OAAA;AACJ,MAAI,IAAA,OAAA;AAEJ,MAAA,IAAI,iBAAiB,UAAY,EAAA;AAC/B,QAAA,OAAA,GAAU,KAAM,CAAA,OAAA;AAChB,QAAA,OAAA,GAAU,KAAM,CAAA,OAAA;AAAA,OAClB,MAAA,IAAW,iBAAiB,UAAY,EAAA;AACtC,QAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAO,EAAA;AACV,UAAO,OAAA,IAAA;AAAA;AAET,QAAA,OAAA,GAAU,KAAM,CAAA,OAAA;AAChB,QAAA,OAAA,GAAU,KAAM,CAAA,OAAA;AAAA,OACX,MAAA;AACL,QAAO,OAAA,IAAA;AAAA;AAGT,MAAM,MAAA,OAAA,GAAA,CAAW,OAAU,GAAA,IAAA,CAAK,IAAQ,IAAA,MAAA;AACxC,MAAM,MAAA,OAAA,GAAA,CAAW,OAAU,GAAA,IAAA,CAAK,GAAO,IAAA,MAAA;AAEvC,MAAO,OAAA,EAAE,SAAS,OAAQ,EAAA;AAAA,KAC5B;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAEA,EAAA,MAAM,aAAgB,GAAA,WAAA;AAAA,IACpB,CAAC,KAAmC,KAAA;AAClC,MAAA,KAAA,CAAM,cAAe,EAAA;AACrB,MAAA,MAAM,UAAU,UAAW,CAAA,OAAA;AAC3B,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAA;AAAA;AAEF,MAAM,MAAA,GAAA,GAAM,iBAAiB,KAAK,CAAA;AAClC,MAAA,IAAI,CAAC,GAAK,EAAA;AACR,QAAA;AAAA;AAEF,MAAA,OAAA,IAAW,OAAQ,EAAA;AACnB,MAAM,MAAA,EAAE,OAAS,EAAA,OAAA,EAAY,GAAA,GAAA;AAC7B,MAAA,OAAA,CAAQ,SAAU,EAAA;AAClB,MAAQ,OAAA,CAAA,MAAA,CAAO,SAAS,OAAO,CAAA;AAC/B,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,KACpB;AAAA,IACA,CAAC,SAAS,gBAAgB;AAAA,GAC5B;AAEA,EAAM,MAAA,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,MAAM,UAAU,UAAW,CAAA,OAAA;AAC3B,IAAI,IAAA,CAAC,OAAW,IAAA,CAAC,UAAY,EAAA;AAC3B,MAAA;AAAA;AAEF,IAAA,OAAA,CAAQ,SAAU,EAAA;AAClB,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,KAAA,IAAS,KAAM,EAAA;AACf,IAAU,SAAA,EAAA;AAAA,GACT,EAAA,CAAC,UAAY,EAAA,KAAA,EAAO,SAAS,CAAC,CAAA;AAEjC,EAAA,MAAM,KAAQ,GAAA,WAAA;AAAA,IACZ,CAAC,KAAmC,KAAA;AAClC,MAAA,KAAA,CAAM,cAAe,EAAA;AACrB,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,UAAA,CAAW,OAAS,EAAA;AACtC,QAAA;AAAA;AAEF,MAAM,MAAA,GAAA,GAAM,iBAAiB,KAAK,CAAA;AAClC,MAAA,IAAI,CAAC,GAAK,EAAA;AACR,QAAA;AAAA;AAEF,MAAM,MAAA,EAAE,OAAS,EAAA,OAAA,EAAY,GAAA,GAAA;AAC7B,MAAW,UAAA,CAAA,OAAA,CAAQ,MAAO,CAAA,OAAA,EAAS,OAAO,CAAA;AAC1C,MAAA,UAAA,CAAW,QAAQ,MAAO,EAAA;AAAA,KAC5B;AAAA,IACA,CAAC,YAAY,gBAAgB;AAAA,GAC/B;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA;AAAA;AAGF,IAAe,cAAA,CAAA,gBAAA,CAAiB,aAAa,aAAa,CAAA;AAC1D,IAAe,cAAA,CAAA,gBAAA,CAAiB,WAAW,YAAY,CAAA;AACvD,IAAe,cAAA,CAAA,gBAAA,CAAiB,aAAa,KAAK,CAAA;AAClD,IAAe,cAAA,CAAA,gBAAA,CAAiB,cAAc,YAAY,CAAA;AAE1D,IAAe,cAAA,CAAA,gBAAA,CAAiB,cAAc,aAAa,CAAA;AAC3D,IAAe,cAAA,CAAA,gBAAA,CAAiB,YAAY,YAAY,CAAA;AACxD,IAAe,cAAA,CAAA,gBAAA,CAAiB,aAAa,KAAK,CAAA;AAClD,IAAe,cAAA,CAAA,gBAAA,CAAiB,eAAe,YAAY,CAAA;AAE3D,IAAA,OAAO,MAAM;AACX,MAAe,cAAA,CAAA,mBAAA,CAAoB,aAAa,aAAa,CAAA;AAC7D,MAAe,cAAA,CAAA,mBAAA,CAAoB,WAAW,YAAY,CAAA;AAC1D,MAAe,cAAA,CAAA,mBAAA,CAAoB,aAAa,KAAK,CAAA;AACrD,MAAe,cAAA,CAAA,mBAAA,CAAoB,cAAc,YAAY,CAAA;AAE7D,MAAe,cAAA,CAAA,mBAAA,CAAoB,cAAc,aAAa,CAAA;AAC9D,MAAe,cAAA,CAAA,mBAAA,CAAoB,YAAY,YAAY,CAAA;AAC3D,MAAe,cAAA,CAAA,mBAAA,CAAoB,aAAa,KAAK,CAAA;AACrD,MAAe,cAAA,CAAA,mBAAA,CAAoB,eAAe,YAAY,CAAA;AAAA,KAChE;AAAA,KACC,CAAC,aAAA,EAAe,YAAc,EAAA,KAAA,EAAO,cAAc,CAAC,CAAA;AAEvD,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAM,UAAU,UAAW,CAAA,OAAA;AAC3B,IAAA,IAAI,kBAAkB,OAAS,EAAA;AAC7B,MAAA,OAAA,CAAQ,UAAU,CAAG,EAAA,CAAA,EAAG,cAAe,CAAA,KAAA,EAAO,eAAe,MAAM,CAAA;AACnE,MAAM,MAAA,cAAA,GAAiB,eAAe,SAAU,EAAA;AAChD,MAAW,UAAA,CAAA,CAAC,cAAc,CAAC,CAAA;AAC3B,MAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,MAAA,QAAA,IAAY,QAAS,EAAA;AAAA;AACvB,GACF;AAEA,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,IAAI,eAAe,CAAG,EAAA;AACpB,MAAA,MAAM,WAAW,YAAe,GAAA,CAAA;AAChC,MAAA,eAAA,CAAgB,QAAQ,CAAA;AACxB,MAAA,YAAA,CAAa,QAAQ,CAAA;AAAA;AACvB,GACF;AAEA,EAAA,MAAM,OAAO,MAAM;AACjB,IAAI,IAAA,YAAA,GAAe,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;AACrC,MAAA,MAAM,WAAW,YAAe,GAAA,CAAA;AAChC,MAAA,eAAA,CAAgB,QAAQ,CAAA;AACxB,MAAA,YAAA,CAAa,QAAQ,CAAA;AAAA;AACvB,GACF;AAEA,EAAM,MAAA,SAAA,GAAY,CAAC,YAAyB,KAAA;AAC1C,IAAA,MAAM,UAAU,UAAW,CAAA,OAAA;AAC3B,IAAI,IAAA,CAAC,cAAkB,IAAA,CAAC,OAAS,EAAA;AAC/B,MAAA;AAAA;AAGF,IAAM,MAAA,GAAA,GAAM,IAAI,KAAM,EAAA;AACtB,IAAA,GAAA,CAAI,SAAS,MAAM;AACjB,MAAA,OAAA,CAAQ,UAAU,CAAG,EAAA,CAAA,EAAG,cAAe,CAAA,KAAA,EAAO,eAAe,MAAM,CAAA;AACnE,MAAA,OAAA,CAAQ,UAAU,GAAK,EAAA,CAAA,EAAG,GAAG,cAAe,CAAA,KAAA,EAAO,eAAe,MAAM,CAAA;AACxE,MAAU,SAAA,EAAA;AAAA,KACZ;AACA,IAAA,GAAA,CAAI,GAAM,GAAA,YAAA;AAAA,GACZ;AAEA,EAAM,MAAA,eAAA,GAAkB,CAAC,UAA8B,KAAA;AACrD,IAAA,MAAM,KAAQ,GAAA,EAAE,GAAG,sBAAA,EAAwB,GAAG,UAAW,EAAA;AACzD,IAAA,MAAM,EAAE,cAAgB,EAAA,WAAA,EAAa,eAAiB,EAAA,KAAA,EAAO,QAAW,GAAA,KAAA;AACxE,IAAA,MAAM,cAAiB,GAAA,cAAA;AACvB,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA;AAAA;AAGF,IAAM,MAAA,UAAA,GAAa,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAClD,IAAA,UAAA,CAAW,KAAQ,GAAA,KAAA;AACnB,IAAA,UAAA,CAAW,MAAS,GAAA,MAAA;AACpB,IAAM,MAAA,OAAA,GAAU,UAAW,CAAA,UAAA,CAAW,IAAI,CAAA;AAE1C,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,IAAI,CAAC,WAAa,EAAA;AAChB,QAAA,OAAA,CAAQ,YAAY,eAAmB,IAAA,OAAA;AACvC,QAAA,OAAA,CAAQ,QAAS,CAAA,CAAA,EAAG,CAAG,EAAA,KAAA,EAAO,MAAM,CAAA;AAAA;AAEtC,MAAA,OAAA,CAAQ,SAAU,CAAA,cAAA,EAAgB,CAAG,EAAA,CAAA,EAAG,OAAO,MAAM,CAAA;AAErD,MAAA,OAAO,UAAW,CAAA,SAAA,CAAU,CAAS,MAAA,EAAA,cAAc,CAAE,CAAA,CAAA;AAAA;AACvD,GACF;AAEA,EAAM,MAAA,QAAA,GAAW,CAAC,aAAiC,KAAA;AACjD,IAAA,MAAM,KAAQ,GAAA,EAAE,GAAG,sBAAA,EAAwB,GAAG,aAAc,EAAA;AAC5D,IAAA,MAAM,EAAE,QAAU,EAAA,cAAA,EAAgB,aAAa,eAAiB,EAAA,KAAA,EAAO,QAAW,GAAA,KAAA;AAClF,IAAA,MAAM,cAAiB,GAAA,cAAA;AACvB,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA;AAAA;AAGF,IAAM,MAAA,UAAA,GAAa,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAClD,IAAA,UAAA,CAAW,KAAQ,GAAA,KAAA;AACnB,IAAA,UAAA,CAAW,MAAS,GAAA,MAAA;AACpB,IAAM,MAAA,OAAA,GAAU,UAAW,CAAA,UAAA,CAAW,IAAI,CAAA;AAE1C,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,IAAI,CAAC,WAAa,EAAA;AAChB,QAAA,OAAA,CAAQ,YAAY,eAAmB,IAAA,OAAA;AACvC,QAAA,OAAA,CAAQ,QAAS,CAAA,CAAA,EAAG,CAAG,EAAA,KAAA,EAAO,MAAM,CAAA;AAAA;AAEtC,MAAA,OAAA,CAAQ,SAAU,CAAA,cAAA,EAAgB,CAAG,EAAA,CAAA,EAAG,OAAO,MAAM,CAAA;AAErD,MAAM,MAAA,IAAA,GAAO,QAAS,CAAA,aAAA,CAAc,GAAG,CAAA;AACvC,MAAA,IAAA,CAAK,QAAW,GAAA,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA;AAC7C,MAAA,IAAA,CAAK,IAAO,GAAA,UAAA,CAAW,SAAU,CAAA,CAAA,MAAA,EAAS,cAAc,CAAE,CAAA,CAAA;AAC1D,MAAA,IAAA,CAAK,KAAM,EAAA;AAAA;AACb,GACF;AAKA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAO,OAAA,IAAA;AAAA;AAIT,IAAM,MAAA,EAAE,KAAO,EAAA,MAAA,EAAW,GAAA,cAAA;AAG1B,IAAM,MAAA,GAAA,GAAM,cAAe,CAAA,UAAA,CAAW,IAAI,CAAA;AAC1C,IAAA,IAAI,CAAC,GAAK,EAAA;AACR,MAAA,OAAA,CAAQ,MAAM,0BAA0B,CAAA;AAExC,MAAO,OAAA,IAAA;AAAA;AAIT,IAAA,MAAM,YAAY,GAAI,CAAA,YAAA,CAAa,CAAG,EAAA,CAAA,EAAG,OAAO,MAAM,CAAA;AACtD,IAAM,MAAA,EAAE,MAAS,GAAA,SAAA;AAIjB,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AAEvC,MAAA,IAAI,IAAK,CAAA,CAAA,GAAI,CAAC,CAAA,KAAM,CAAG,EAAA;AACrB,QAAO,OAAA,KAAA;AAAA;AACT;AAIF,IAAO,OAAA,IAAA;AAAA,GACT;AAEA,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF;AACF;;ACjVO,MAAM,uBACX,GAAA;;ACQF,MAAM,kBAAqB,GAAA;AAAA,EACzB,OAAS,EAAA,MAAA;AAAA,EACT,WAAa,EAAA,MAAA;AAAA,EACb,WAAa,EAAA,MAAA;AAAA,EACb,iBAAmB,EAAA,MAAA;AAAA,EACnB,gBAAkB,EAAA,MAAA;AAAA,EAClB,YAAc,EAAA;AAChB,CAAA;AAMO,MAAM,gCAAgC,CAAC;AAAA,EAC5C,MAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAA0C,KAAA;AACxC,EAAM,MAAA,OAAA,GAAU,aAAa,CAAW,QAAA,EAAA,MAAA,KAAW,QAAQ,EAAK,GAAA,MAAA,KAAW,KAAQ,GAAA,IAAA,GAAO,KAAK,CAAA,kBAAA,CAAA;AAG/F,EAAA,MAAM,sCAAsC,YAAY;AACtD,IAAA,MAAM,QAAW,GAAA,MAAM,wCAAyC,CAAA,kBAAA,EAAoB,SAAS,CAAA;AAC7F,IAAA,MAAM,EAAE,WAAA,EAAa,yCAA0C,EAAA,GAAI,QAAS,CAAA,IAAA;AAE5E,IAAM,MAAA,SAAA,GAAY,IAAI,eAAgB,CAAA;AAAA,MACpC,aAAe,EAAA,WAAA;AAAA,MACf,UAAY,EAAA,yCAAA;AAAA,MACZ,GAAG;AAAA,KACJ,CAAA;AAED,IAAO,OAAA,EAAE,OAAS,EAAA,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,UAAU,QAAS,EAAC,CAAI,CAAA,EAAA,UAAA,EAAY,yCAA0C,EAAA;AAAA,GACjH;AAGA,EAAA,MAAM,oBAAuB,GAAA,CAAC,EAAE,UAAA,IAAiD,OAAyB,KAAA;AACxG,IAAA,OAAO,CAAC,KAAwB,KAAA;AAC9B,MAAI,IAAA;AACF,QAAA,MAAM,QACJ,GAAA,OAAO,KAAM,CAAA,IAAA,KAAS,QAAW,GAAA,IAAA,CAAK,KAAM,CAAA,kBAAA,CAAmB,KAAM,CAAA,IAAI,CAAC,CAAA,GAAI,KAAM,CAAA,IAAA;AAEtF,QAAI,IAAA,QAAA,CAAS,YAAY,UAAY,EAAA;AACnC,UAAA;AAAA;AAGF,QAAA,MAAM,EAAE,MAAA,EAAQ,IAAK,EAAA,GAAI,QAAS,CAAA,IAAA;AAElC,QAAA,QAAQ,IAAM;AAAA,UACZ,KAAK,kBAAmB,CAAA,WAAA;AACtB,YAAA,OAAA,CAAQ,GAAI,CAAA,4CAAA,EAAqB,EAAE,MAAA,EAAQ,MAAM,CAAA;AACjD,YAAW,QAAA,GAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAC3B,YAAU,OAAA,IAAA;AACV,YAAA;AAAA,UAEF,KAAK,kBAAmB,CAAA,WAAA;AAAA,UACxB,KAAK,kBAAmB,CAAA,iBAAA;AAAA,UACxB,KAAK,kBAAmB,CAAA,gBAAA;AAAA,UACxB,KAAK,kBAAmB,CAAA,YAAA;AACtB,YAAA,OAAA,CAAQ,GAAI,CAAA,wDAAA,EAAuB,EAAE,MAAA,EAAQ,MAAM,CAAA;AACnD,YAAA,OAAA,GAAU,EAAE,MAAQ,EAAA,IAAA,EAAQ,EAAA,EAAE,YAAY,CAAA;AAC1C,YAAU,OAAA,IAAA;AACV,YAAA;AAAA,UAEF,KAAK,kBAAmB,CAAA,OAAA;AACtB,YAAA,OAAA,CAAQ,GAAI,CAAA,wDAAA,EAAuB,EAAE,MAAA,EAAQ,MAAM,CAAA;AACnD,YAAA,SAAA,GAAY,EAAE,MAAQ,EAAA,IAAA,EAAQ,EAAA,EAAE,YAAY,CAAA;AAC5C,YAAU,OAAA,IAAA;AACV,YAAA;AAAA,UAEF;AACE,YAAQ,OAAA,CAAA,IAAA,CAAK,8BAA8B,IAAI,CAAA;AAAA;AACnD,eACO,KAAO,EAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,gCAAgC,KAAK,CAAA;AAAA;AACrD,KACF;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,mCAAA;AAAA,IACA;AAAA,GACF;AACF;AAOa,MAAA,mCAAA,GAAsC,CAAC,MAA+C,KAAA;AACjG,EAAA,MAAM,EAAE,oBAAA,EAAsB,mCAAoC,EAAA,GAAI,8BAA8B,MAAM,CAAA;AAC1G,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAW,EAAA,UAAA,KAAe,aAAc,EAAA;AACxD,EAAA,MAAM,CAAC,6BAAA,EAA+B,gCAAgC,CAAA,GAAI,SAAS,EAAE,CAAA;AACrF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA;AAG1D,EAAA,MAAM,kBAAkB,YAAY;AAClC,IAAA,IAAI,iCAAiC,aAAe,EAAA;AAClD,MAAA;AAAA;AAGF,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,iBAAA,CAAkB,KAAK,CAAA;AAEvB,IAAI,IAAA;AACF,MAAA,MAAM,EAAE,OAAS,EAAA,UAAA,EAAAI,WAAW,EAAA,GAAI,MAAM,mCAAoC,EAAA;AAC1E,MAAA,gCAAA,CAAiC,OAAO,CAAA;AACxC,MAAA,aAAA,CAAcA,WAAU,CAAA;AAAA,aACjB,KAAO,EAAA;AACd,MAAQ,OAAA,CAAA,KAAA,CAAM,yBAAyB,KAAK,CAAA;AAC5C,MAAM,MAAA,KAAA;AAAA,KACN,SAAA;AACA,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA;AACxB,GACF;AAEA,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAI,IAAA;AACF,MAAA,MAAM,eAAgB,EAAA;AACtB,MAAU,SAAA,EAAA;AAAA,aACH,KAAO,EAAA;AACd,MAAQ,OAAA,CAAA,KAAA,CAAM,yBAAyB,KAAK,CAAA;AAE5C,MAAM,MAAA,UAAA,CAAW,MAAM,iJAAmC,CAAA;AAC1D,MAAO,MAAA,CAAA,OAAA;AAAA,QACL;AAAA,UACE,MAAQ,EAAA,GAAA;AAAA,UACR,MAAM,kBAAmB,CAAA;AAAA,SAC3B;AAAA,QACA,EAAE,YAAY,EAAG;AAAA,OACnB;AAAA;AACF,GACF;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,gCAAA,CAAiC,EAAE,CAAA;AACnC,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,IAAW,UAAA,EAAA;AAAA,GACb;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,6BAA+B,EAAA;AAClC,MAAA;AAAA;AAGF,IAAA,MAAM,cAAiB,GAAA,oBAAA,CAAqB,EAAE,UAAA,IAAc,cAAc,CAAA;AAC1E,IAAA,mBAAA,CAAoB,WAAY,EAAA,CAAE,eAAgB,CAAA,oBAAA,EAAsB,cAAc,CAAA;AAEtF,IAAA,OAAO,MAAM,mBAAA,CAAoB,WAAY,EAAA,CAAE,kBAAkB,oBAAoB,CAAA;AAAA,GAEpF,EAAA,CAAC,6BAA+B,EAAA,UAAU,CAAC,CAAA;AAG9C,EAAA,MAAM,YAAY,CAAC;AAAA,IACjB,KAAQ,GAAA,MAAA;AAAA,IACR,MAAS,GAAA,MAAA;AAAA,IACT,GAAG;AAAA,GAIC,KAAA;AACJ,IAAA,IAAI,CAAC,6BAA+B,EAAA;AAClC,MAAO,OAAA,IAAA;AAAA;AAGT,IACE,uBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,6BAAA;AAAA,QACL,KAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAM,EAAA,WAAA;AAAA,QACN,MAAA,EAAQ,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACnC,GAAG;AAAA;AAAA,KACN;AAAA,GAEJ;AAGA,EAAA,MAAM,iBAAiB,CAAC;AAAA,IACtB,KAAQ,GAAA,MAAA;AAAA,IACR,MAAS,GAAA,MAAA;AAAA,IACT,gBAAA;AAAA,IACA,GAAG;AAAA,GAKC,KAAA;AACJ,IAAA,MAAM,SAAY,GAAA,aAAA,IAAkB,CAAC,CAAC,iCAAiC,CAAC,cAAA;AAExE,IAAA,uBAEI,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,kBAAA,IAAA,CAAC,KAAM,CAAA,IAAA,EAAN,EAAW,MACT,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA,KAAc,oCAAqB,GAAA,CAAA,OAAA,CAAQ,IAAR,EAAA,EAAa,UAAU,iCAAU,EAAA,CAAA,CAAA;AAAA,sBACrE,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,KAAA;AAAA,UACA,MAAA;AAAA,UACA,KAAM,EAAA,WAAA;AAAA,UACL,GAAG,WAAA;AAAA,UACJ,KAAO,EAAA;AAAA,YACL,UAAY,EAAA,4CAAA;AAAA,YACZ,GAAG,WAAa,EAAA;AAAA;AAClB;AAAA;AACF,KAAA,EACF,CACF,EAAA,CAAA;AAAA,GAEJ;AAEA,EAAO,OAAA;AAAA,IACL,cAAA;AAAA,IACA,SAAA;AAAA,IAEA,aAAA;AAAA,IACA,cAAA;AAAA,IAEA,6BAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAe,EAAA;AAAA,GACjB;AACF;AAOa,MAAA,kCAAA,GAAqC,CAAC,MAA+C,KAAA;AAChG,EAAA,MAAM,EAAE,mCAAA,EAAqC,oBAAqB,EAAA,GAAI,8BAA8B,MAAM,CAAA;AAC1G,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAC/C,EAAM,MAAA,QAAA,GAAW,OAAsB,IAAI,CAAA;AAE3C,EAAA,MAAM,SAAY,GAAA,OAAO,MAAS,GAAA,QAAA,EAAU,QAAsB,KAAA;AAEhE,IAAA,IAAI,QAAS,CAAA,OAAA,IAAW,CAAC,QAAA,CAAS,QAAQ,MAAQ,EAAA;AAChD,MAAA,QAAA,CAAS,QAAQ,KAAM,EAAA;AAAA;AAGzB,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAI,IAAA;AACF,MAAA,MAAM,EAAE,OAAS,EAAA,UAAA,EAAAA,WAAW,EAAA,GAAI,MAAM,mCAAoC,EAAA;AAE1E,MAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,IAAK,CAAA,OAAA,EAAS,QAAQ,QAAQ,CAAA;AAEnD,MAAA,IAAI,CAAC,KAAO,EAAA;AACV,QAAM,MAAA,UAAA,CAAW,MAAM,yHAA0B,CAAA;AAEjD,QAAA;AAAA;AAGF,MAAA,aAAA,CAAcA,WAAU,CAAA;AACxB,MAAA,QAAA,CAAS,OAAU,GAAA,KAAA;AAAA,aACZ,KAAO,EAAA;AACd,MAAQ,OAAA,CAAA,KAAA,CAAM,qBAAqB,KAAK,CAAA;AACxC,MAAM,MAAA,UAAA,CAAW,MAAM,iJAAmC,CAAA;AAAA,KAC1D,SAAA;AACA,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA;AACxB,GACF;AACA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,QAAA,CAAS,OAAU,GAAA,IAAA;AAAA,GACrB;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,cAAiB,GAAA,oBAAA,CAAqB,EAAE,UAAA,IAAc,UAAU,CAAA;AAEtE,IAAA,mBAAA,CAAoB,WAAY,EAAA,CAAE,eAAgB,CAAA,mBAAA,EAAqB,cAAc,CAAA;AAErF,IAAA,OAAO,MAAM,mBAAA,CAAoB,WAAY,EAAA,CAAE,kBAAkB,mBAAmB,CAAA;AAAA,GAEtF,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA;AAAA,GACF;AACF;;;;","x_google_ignoreList":[4]}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/form/form-checkbox-button.tsx","../src/form/form-checkbox.tsx","../src/form/form-date-picker.tsx","../src/form/form-date-range-picker.tsx","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/modal/common.tsx","../src/modal/standard/address-search/address-search-modal.tsx","../src/modal/standard/address-search/use-search-address.tsx","../src/modal/standard/bank-stock-search/constants.tsx","../src/modal/standard/bank-stock-search/use-bank-stock-search.tsx","../src/modal/standard/bank-stock-search/bank-stock-search-modal.tsx","../src/modal/standard/customer-search/use-customer-search.tsx","../src/modal/standard/customer-search/customer-search.tsx","../src/modal/standard/customer-search/customer-search-modal.tsx","../src/modal/standard/nationality-search/nationality-search-modal.tsx","../src/modal/standard/nationality-search/use-search-nationality.tsx","../src/modal/standard/nxl-one/hook/index.tsx","../src/modal/standard/nxl-one/use-nxl-one-modal.tsx","../src/modal/standard/visa-search/visa-search-modal.tsx","../src/modal/standard/visa-search/use-search-visa.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search-result.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search-modal.tsx","../src/modal/pre-standard/employee-search-modal/constants.ts","../src/modal/pre-standard/employee-search-modal/employee-search-result.tsx","../src/modal/pre-standard/employee-search-modal/employee-search.tsx","../src/modal/pre-standard/employee-search-modal/employee-search-modal.tsx","../src/modal/pre-standard/job-search-modal/constants.ts","../src/modal/pre-standard/job-search-modal/job-search-detail.tsx","../src/modal/pre-standard/job-search-modal/job-search-category.tsx","../src/modal/pre-standard/job-search-modal/job-search-favorite.tsx","../src/modal/pre-standard/job-search-modal/job-search-result.tsx","../src/modal/pre-standard/job-search-modal/job-search.tsx","../src/modal/pre-standard/job-search-modal/use-job-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-grade.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search.tsx","../src/modal/pre-standard/vehicle-search-modal/use-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/use-job-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search.tsx","../src/modal/pre-standard/organization-search-modal/organization-search-result.tsx","../src/modal/pre-standard/organization-search-modal/organization-search.tsx","../src/modal/pre-standard/organization-search-modal/organization-search-modal.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search-modal.tsx","../src/form/form-search-job-field.tsx","../src/form/form-segment.tsx","../src/form/form-select.tsx","../src/form/form-text-field.tsx","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx","../src/canvas-paint/use-canvas-paint.ts","../src/canvas-paint/dummyData.ts","../src/remote-identity-verification/use-remote-identity-verification.tsx"],"sourcesContent":["import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { CheckboxButton, type CheckboxButtonProps } from 'sales-frontend-design-system';\n\nexport const FormCheckboxButton = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxButtonProps, 'id'>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <CheckboxButton\n {...props}\n {...field}\n id={field.name}\n checked={field.value ?? false}\n error={fieldState.invalid}\n onChange={(checked) => {\n field.onChange(checked);\n props.onChange?.(checked);\n }}\n >\n {children}\n </CheckboxButton>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { Checkbox, CheckboxProps } from 'sales-frontend-design-system';\n\nexport const FormCheckbox = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxProps, 'id'>) => {\n const { field } = useController({ name, control, disabled });\n\n return (\n <Checkbox {...props} {...field} id={field.name} checked={field.value} onChange={field.onChange}>\n {children}\n </Checkbox>\n );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, isDate, type DatePickerSingleHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [selected, setSelected] = React.useState<Date | undefined>();\n\n React.useEffect(() => {\n if (isDate(field.value) && field.value !== selected) {\n setSelected(field.value);\n }\n }, [field.value]);\n\n return (\n <DatePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n\n defaultValue: selected,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DateRangePicker, type PeriodDate, type DatePickerRangeHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDateRangePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerRangeHtmlProps) => {\n const { field, fieldState } = useController({\n name,\n control,\n disabled,\n defaultValue\n });\n const [selected, setSelected] = React.useState<PeriodDate | undefined>();\n\n React.useEffect(() => {\n const fieldValue = field.value as PeriodDate | undefined;\n\n // 1. field.value가 없을 경우, selected도 초기화\n if (!fieldValue) {\n setSelected(undefined);\n\n return;\n }\n\n // 2. selected가 없거나,\n // 3. field.value와 selected의 startDate 또는 endDate가 다를 경우에만 setSelected 실행\n const isStartDateDifferent = fieldValue.startDate?.getTime() !== selected?.startDate?.getTime();\n const isEndDateDifferent = fieldValue.endDate?.getTime() !== selected?.endDate?.getTime();\n\n if (!selected || isStartDateDifferent || isEndDateDifferent) {\n // console.warn('field.value 업데이트 감지, selected 업데이트');\n setSelected(fieldValue);\n }\n }, [field.value]);\n\n return (\n <DateRangePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: selected,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue.call(this, arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn this && this[arg] || arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(this, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, this && this[key] || key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { JSX } from 'react';\n\nexport const highlightOnSearchKeyword = (originalText: string, targetString: string) => {\n if (!targetString || !originalText?.includes(targetString)) {\n return originalText;\n }\n const replacedText: (string | JSX.Element)[] = [];\n const splitText = originalText.split(targetString);\n\n for (let i = 0; i < splitText.length; i++) {\n replacedText.push(splitText[i] || '');\n if (i < splitText.length - 1) {\n replacedText.push(\n <span key={`search-keyword-highlight-${i}-${Math.random()}`} className=\"text-primary\">\n {targetString}\n </span>\n );\n }\n }\n\n return replacedText;\n};\n\nexport const getGenderName = (genderCode?: string) => {\n switch (genderCode) {\n case '1':\n case '3':\n return '남성';\n case '2':\n case '4':\n return '여성';\n default:\n return '';\n }\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { AddressResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { Button, FormCore, Modal, ModalBaseProps, RadioGroup, FormField, Radio } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { AddressComponentProps, AddressSearchDetailInputProps, AddressSearchResultProps, Step } from './address.types';\nimport styles from './select-address.module.scss';\nimport { useSearchAddress } from './use-search-address';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\nexport const AddressSearchInitialText = () => {\n return (\n <div className={cx('search-result-list')}>\n <p className={cx('guide-title')}>이렇게 검색해 보세요.</p>\n <ul className={cx('guide')}>\n <li>도로명/지명과 건물번호를 함께 입력해주세요</li>\n <li>예) 63로 50, 여의도동 60</li>\n <li>지명은 동/읍/면/리로 입력해주세요</li>\n <li>예) 여의도동, 역삼동</li>\n <li>우편번호 다섯자리를 모두 입력해주세요</li>\n <li>예) 07345, 06232</li>\n </ul>\n </div>\n );\n};\n\nexport const AddressSearchResult = ({\n addressSearchList,\n onChange,\n searchKeyword,\n selectedAddress\n}: AddressSearchResultProps) => {\n return (\n <div className={cx('search-result-list')}>\n <p className={cx('guide-title')}>\n 총 <span className=\"text-primary\">{addressSearchList.length}</span>건의 검색결과\n </p>\n\n {addressSearchList.length > 0 && (\n <RadioGroup\n items={addressSearchList.map((item: AddressResponseDto) => {\n return {\n value: JSON.stringify(item),\n select:\n item.roadNameBaseAddress === selectedAddress?.roadNameBaseAddress &&\n item.roadNameDetailAddress === selectedAddress?.roadNameDetailAddress &&\n item.mainBuildingName === selectedAddress?.mainBuildingName,\n label: (\n <div className={cx('search-result')}>\n <div className={cx('zipcode')}>\n {highlightOnSearchKeyword(`${item.firstPostalCode}${item.secondPostalCode}`, searchKeyword)}\n </div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>\n {highlightOnSearchKeyword(\n `${item.roadNameBaseAddress} ${item.roadNameDetailAddress} ${item.mainBuildingName}`,\n searchKeyword\n )}\n </span>\n <span className={cx('old-address')}>\n {highlightOnSearchKeyword(\n `${item.landNumberBaseAddress} ${item.landNumberDetailAddress}`,\n searchKeyword\n )}\n </span>\n </div>\n </div>\n ),\n id: JSON.stringify(item)\n };\n })}\n className={cx('radio-group')}\n name=\"address-search\"\n size=\"medium\"\n defaultValue={''}\n onChange={onChange}\n />\n )}\n\n {addressSearchList.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n );\n};\n\nexport const AddressSearchDetailInput = ({\n selectedStandardizationAddress,\n onDetailChange,\n step,\n onStandardizationChange,\n detailAddressInput\n}: AddressSearchDetailInputProps) => {\n const { land, road } = selectedStandardizationAddress;\n\n return (\n <div className={cx('search-result-list')}>\n <Radio.Root\n name=\"address-search-standardization\"\n size=\"medium\"\n defaultValue={JSON.stringify(selectedStandardizationAddress)}\n >\n <Radio.Item\n className={cx('radio-group')}\n value={JSON.stringify(selectedStandardizationAddress)}\n onChange={onStandardizationChange}\n >\n <div className={cx('search-result')}>\n <div\n className={cx('zipcode')}\n >{`${selectedStandardizationAddress.land?.firstPostalCode}${land?.secondPostalCode}`}</div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>{`${road?.baseAddress} ${road?.detailAddress}`}</span>\n <span className={cx('old-address')}>{`${land?.baseAddress} ${land?.detailAddress}`}</span>\n </div>\n </div>\n </Radio.Item>\n </Radio.Root>\n <div className=\"d-flex gap-medium items-center\">\n <FormField.Label id=\"detail\" style={{ width: '90px' }}>\n 상세주소\n </FormField.Label>\n <FormField.TextField\n rootProps={{\n style: {\n display: 'flex',\n flex: 1\n }\n }}\n placeholder=\"상세주소 입력\"\n onChange={onDetailChange}\n size=\"small\"\n value={detailAddressInput}\n {...(step === 'detail-input' && { autoFocus: true })}\n />\n </div>\n </div>\n );\n};\n\nexport interface AddressSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n step: Step;\n selectedAddress: AddressResponseDto;\n addressList: AddressResponseDto[];\n filterList: AddressResponseDto[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n onNext: () => void;\n setSelectedAddress: (address: AddressResponseDto) => void;\n setDetailAddress: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onSelectChange: (value: string) => void;\n}\n\ninterface Props {\n setValue: (address: AddressComponentProps) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function AddressComponent({ isOpen, onClose, setValue }: Props) {\n const {\n onAddressSearchClear,\n addressSearchKeyword,\n addressSearchStep,\n onAddressSearchNext,\n nextButtonDisabled,\n detailAddressInput,\n addressSearchList,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n selectedAddress,\n onStandardizationChange,\n selectedStandardizationAddress,\n isLoading\n } = useSearchAddress({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"주소 검색\" showCloseButton />\n <Modal.Body>\n <InputBox clearable endElement={<IconMainUiSearch onClick={search} />} onClear={onAddressSearchClear}>\n <Input\n {...(addressSearchStep !== 'detail-input' && { autoFocus: true })}\n onChange={onSearch}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n />\n </InputBox>\n {addressSearchStep === 'initial' && <AddressSearchInitialText />}\n {!isLoading && addressSearchStep === 'search-result' && (\n <AddressSearchResult\n onChange={onSelectChange}\n addressSearchList={addressSearchList}\n searchKeyword={addressSearchKeyword}\n selectedAddress={selectedAddress}\n />\n )}\n {!isLoading &&\n addressSearchStep === 'detail-input' &&\n selectedAddress &&\n selectedStandardizationAddress && (\n <AddressSearchDetailInput\n selectedStandardizationAddress={selectedStandardizationAddress}\n onStandardizationChange={onStandardizationChange}\n onDetailChange={setDetail}\n step={addressSearchStep}\n detailAddressInput={detailAddressInput}\n />\n )}\n </Modal.Body>\n <Modal.Footer>\n {addressSearchStep !== 'initial' && (\n <Button\n onClick={onAddressSearchNext}\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n // disabled={nextButtonDisabled}\n >\n {addressSearchStep === 'search-result' && '다음(1/2)'}\n {addressSearchStep === 'detail-input' && '확인(2/2)'}\n </Button>\n )}\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport {\n AddressResponseDto,\n AddressStandardizationListRequestDto,\n useSearchAddressQuery,\n useSearchAddressStandardizationQuery,\n useSearchPostalCodeQuery\n} from 'sales-frontend-api/method';\nimport { ModalUtils, useModalState } from 'sales-frontend-design-system';\n\nimport { AddressComponent } from './address-search-modal';\nimport { AddressComponentProps, AddressStandardization, Step } from './address.types';\n\ninterface Props {\n setValue: (address: AddressComponentProps) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchAddress({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [step, setStep] = useState<Step>('initial');\n const [selectedAddress, setSelectedAddress] = useState<AddressResponseDto>();\n const [selectedStandardizationAddress, setSelectedStandardizationAddress] = useState<AddressStandardization>();\n const [searchInput, setSearchInput] = useState<string>('');\n const [detailAddressInput, setDetailAddressInput] = useState<string>('');\n const [displayList, setDisplayList] = useState<AddressResponseDto[]>([]);\n const [searchType, setSearchType] = useState<'address' | 'postalcode'>('address');\n\n const [standardizationParams, setStandardizationParams] = useState<AddressStandardizationListRequestDto>({\n firstPostalCode: '',\n secondPostalCode: '',\n baseAddress: '',\n detailAddress: '',\n roadNameYn: 'Y'\n });\n\n const { data: addressData, isLoading: isLoadingAddress } = useSearchAddressQuery(\n { searchKeyWord: searchKeyword },\n { enabled: !!searchKeyword && searchType === 'address' }\n );\n\n const { data: postalData, isLoading: isLoadingPostalCode } = useSearchPostalCodeQuery(\n { searchWordName: searchKeyword },\n { enabled: !!searchKeyword && searchType === 'postalcode' }\n );\n\n const { data: standardizedData } = useSearchAddressStandardizationQuery(standardizationParams, {\n enabled: !!standardizationParams?.baseAddress\n });\n\n const [nextButtonDisabled, setNextButtonDisabled] = useState<boolean>(false);\n const onNext = () => {\n if (step === 'search-result' && nextButtonDisabled) {\n ModalUtils.alert(\n '주소를 선택하지 않으면 다음 단계로 이동할 수 없습니다.\\n주소를 선택한 후 다시 시도해주세요.',\n '선택 주소 없음',\n { modalId: 'search-modal-address-no-selected' }\n );\n\n return;\n }\n\n if (step === 'search-result') {\n setStep('detail-input');\n setNextButtonDisabled(true);\n if (selectedAddress) {\n setStandardizationParams({\n firstPostalCode: selectedAddress.firstPostalCode,\n secondPostalCode: selectedAddress.secondPostalCode,\n baseAddress: selectedAddress.roadNameBaseAddress,\n detailAddress: selectedAddress.roadNameDetailAddress,\n roadNameYn: 'Y'\n });\n }\n } else {\n selectedStandardizationAddress &&\n setValue({\n ...selectedStandardizationAddress,\n detailAddressInput\n });\n onClose();\n }\n };\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 1) {\n const isNumeric = /^[0-9]+$/.test(searchInput);\n setSearchType(isNumeric ? 'postalcode' : 'address');\n setSearchKeyword(searchInput);\n setStep('search-result');\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n setNextButtonDisabled(true);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색결과 Radio 버튼 선택시, onChange\n */\n const onSelectChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.value;\n if (selected) {\n // const adr = displayList?.find((item) => {\n // return JSON.stringify(item) === selected;\n // });\n // setSelectedAddress(adr);\n setSelectedAddress(JSON.parse(selected));\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 표준화 검색결과 Radio 버튼 선택시,\n */\n const onStandardizationChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.value;\n if (selected) {\n setSelectedStandardizationAddress(JSON.parse(selected));\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n setStep('initial');\n }, []);\n\n /**\n * 상세주소 저장\n */\n const setDetail = (e: React.ChangeEvent<HTMLInputElement>) => {\n const detail = e.target.value;\n setDetailAddressInput(detail);\n if (detail) {\n setNextButtonDisabled(false);\n } else {\n setNextButtonDisabled(true);\n }\n };\n\n useEffect(() => {\n if (searchType === 'address' && addressData?.data?.addressList) {\n setDisplayList(addressData.data.addressList);\n } else if (searchType === 'postalcode' && postalData?.data?.postalCodeList) {\n console.log('transformedList', postalData.data.postalCodeList);\n const transformedList: AddressResponseDto[] = postalData.data.postalCodeList.map((p) => ({\n firstPostalCode: p.originalNumber1PostalCode,\n secondPostalCode: p.originalNumber2PostalCode,\n roadNameBaseAddress: p.roadNameBaseAddress,\n roadNameDetailAddress: p.roadNameDetailAddress,\n landNumberBaseAddress: p.landNumberBaseAddress,\n landNumberDetailAddress: p.landNumberDetailAddress,\n mainBuildingName: p.mainBuildingName\n }));\n setDisplayList(transformedList);\n }\n }, [addressData, postalData, searchType]);\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n\n setStep('initial');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n useEffect(() => {\n const road = standardizedData?.data?.addressStandardizationList[1];\n const land = standardizedData?.data?.addressStandardizationList[2];\n\n if (road && land) {\n setSelectedStandardizationAddress({\n land,\n road\n });\n }\n }, [standardizedData]);\n\n return {\n selectedStandardizationAddress,\n onStandardizationChange,\n onAddressSearchClear: onClear,\n onAddressSearchNext: onNext,\n addressSearchKeyword: searchKeyword,\n addressSearchList: displayList,\n addressSearchStep: step,\n selectedAddress,\n addressSearchOnValueChange: onSelectChange,\n nextButtonDisabled,\n detailAddressInput,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n isLoading: isLoadingAddress || isLoadingPostalCode\n };\n}\n\nexport const useAddressComponent = () => {\n const [fullAddress, setFullAddress] = useState<AddressComponentProps>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const AddressSearchComponent = () => (\n <AddressComponent isOpen={isOpen} onClose={closeModal} setValue={setFullAddress} />\n );\n\n return {\n fullAddress,\n openModal,\n AddressSearchComponent\n };\n};\n","import {\n IconGraphicsBankABNAMRO,\n IconGraphicsBankBusan,\n IconGraphicsBankDaegu,\n IconGraphicsBankGwangju,\n IconGraphicsBankGyeongnam,\n IconGraphicsBankHankookCity,\n IconGraphicsBankHsbc,\n IconGraphicsBankJangGiSinYong,\n IconGraphicsBankJeju,\n IconGraphicsBankJeochuk,\n IconGraphicsBankJeonbuk,\n IconGraphicsBankJiyeokNonghyeop,\n IconGraphicsBankKBank,\n IconGraphicsBankKakaoBank,\n IconGraphicsBankKebHana,\n IconGraphicsBankKiup,\n IconGraphicsBankKukmin,\n IconGraphicsBankNhNonghyeop,\n IconGraphicsBankPost,\n IconGraphicsBankSaemaulGeumgo,\n IconGraphicsBankSaneop,\n IconGraphicsBankSanlim,\n IconGraphicsBankScJeil,\n IconGraphicsBankSinhan,\n IconGraphicsBankSinhyeop,\n IconGraphicsBankSuhyeop,\n IconGraphicsBankTossBank,\n IconGraphicsBankWoori,\n IconGraphicsStockBugukJeungkwon,\n IconGraphicsStockDaesinJeungkwon,\n IconGraphicsStockDbGeumyungTujajeungkwon,\n IconGraphicsStockGyoboJeungkwon,\n IconGraphicsStockHanaGeumyungTujajeungkwon,\n IconGraphicsStockHankookTujajeungkwon,\n IconGraphicsStockHanwhaTujajeungkwon,\n IconGraphicsStockHiTujajeungkwon,\n IconGraphicsStockHochulEopsum,\n IconGraphicsStockHyundaiChaJeungkwon,\n IconGraphicsStockKakaoPayJeungkwon,\n IconGraphicsStockKbJeungkwon,\n IconGraphicsStockKiwoomJeungkwon,\n IconGraphicsStockMeritzJeungkwon,\n IconGraphicsStockMiraeAssetJeungkwon,\n IconGraphicsStockNhTujajeungkwon,\n IconGraphicsStockNhWooriTujajeungkwon,\n IconGraphicsStockSamsungJeungkwon,\n IconGraphicsStockSinhanTujajeungkwon,\n IconGraphicsStockSinyeongJeungkwon,\n IconGraphicsStockSkJeungkwon,\n IconGraphicsStockYuantaJeungkwon,\n IconGraphicsStockYujinTujajeungkwon\n} from 'sales-frontend-assets';\nexport const BANK_STOCK_SEARCH_MODAL_TABS = [\n {\n value: 'bank',\n label: '은행'\n },\n {\n value: 'stock',\n label: '증권사'\n }\n];\n\nexport const CODE_ICON_LIST = [\n {\n codeVal: '002',\n codeName: '산업은행',\n replaceName: '산업',\n icon: <IconGraphicsBankSaneop />\n },\n {\n codeVal: '003',\n codeName: '기업은행',\n replaceName: '기업',\n icon: <IconGraphicsBankKiup />\n },\n {\n codeVal: '004',\n codeName: '국민은행',\n replaceName: '국민',\n icon: <IconGraphicsBankKukmin />\n },\n {\n codeVal: '007',\n codeName: '수협은행',\n replaceName: '수협',\n icon: <IconGraphicsBankSuhyeop />\n },\n {\n codeVal: '009',\n codeName: '장기신용은행',\n replaceName: '장기신용',\n icon: <IconGraphicsBankJangGiSinYong />\n },\n {\n codeVal: '011',\n codeName: '농협은행',\n replaceName: 'NH농협',\n icon: <IconGraphicsBankNhNonghyeop />\n },\n {\n codeVal: '012',\n codeName: '농조',\n replaceName: '지역농협',\n icon: <IconGraphicsBankJiyeokNonghyeop />\n },\n {\n codeVal: '020',\n codeName: '우리은행',\n replaceName: '우리',\n icon: <IconGraphicsBankWoori />\n },\n {\n codeVal: '023',\n codeName: '스탠다드차타드',\n replaceName: 'SC제일',\n icon: <IconGraphicsBankScJeil />\n },\n {\n codeVal: '026',\n codeName: '(구)신한은행',\n replaceName: '신한',\n icon: <IconGraphicsBankSinhan />\n },\n {\n codeVal: '027',\n codeName: '한국씨티은행',\n replaceName: '한국씨티',\n icon: <IconGraphicsBankHankookCity />\n },\n {\n codeVal: '031',\n codeName: 'iM(대구)뱅크',\n replaceName: '대구',\n icon: <IconGraphicsBankDaegu />\n },\n {\n codeVal: '032',\n codeName: '부산은행',\n replaceName: '부산',\n icon: <IconGraphicsBankBusan />\n },\n {\n codeVal: '034',\n codeName: '광주은행',\n replaceName: '광주',\n icon: <IconGraphicsBankGwangju />\n },\n {\n codeVal: '035',\n codeName: '제주은행',\n replaceName: '제주',\n icon: <IconGraphicsBankJeju />\n },\n {\n codeVal: '037',\n codeName: '전북은행',\n replaceName: '전북',\n icon: <IconGraphicsBankJeonbuk />\n },\n {\n codeVal: '039',\n codeName: '경남은행',\n replaceName: '경남',\n icon: <IconGraphicsBankGyeongnam />\n },\n {\n codeVal: '045',\n codeName: '새마을금고중앙회',\n replaceName: '새마을금고',\n icon: <IconGraphicsBankSaemaulGeumgo />\n },\n {\n codeVal: '048',\n codeName: '신협',\n replaceName: '신협',\n icon: <IconGraphicsBankSinhyeop />\n },\n {\n codeVal: '050',\n codeName: '저축은행',\n replaceName: '저축',\n icon: <IconGraphicsBankJeochuk />\n },\n {\n codeVal: '054',\n codeName: 'HSBC은행',\n replaceName: 'HSBC',\n icon: <IconGraphicsBankHsbc />\n },\n {\n codeVal: '056',\n codeName: '에이비엔암로은행',\n replaceName: '에이비엔암로',\n icon: <IconGraphicsBankABNAMRO />\n },\n {\n codeVal: '064',\n codeName: '산림조합중앙회',\n replaceName: '산림조합',\n icon: <IconGraphicsBankSanlim />\n },\n {\n codeVal: '071',\n codeName: '우체국',\n replaceName: '우체국',\n icon: <IconGraphicsBankPost />\n },\n {\n codeVal: '081',\n codeName: 'KEB하나은행',\n replaceName: 'KEB하나',\n icon: <IconGraphicsBankKebHana />\n },\n {\n codeVal: '088',\n codeName: '신한은행',\n replaceName: '신한',\n icon: <IconGraphicsBankSinhan />\n },\n {\n codeVal: '089',\n codeName: '케이뱅크',\n replaceName: '케이뱅크',\n icon: <IconGraphicsBankKBank />\n },\n {\n codeVal: '090',\n codeName: '카카오뱅크',\n replaceName: '카카오뱅크',\n icon: <IconGraphicsBankKakaoBank />\n },\n {\n codeVal: '092',\n codeName: '토스뱅크',\n replaceName: '토스뱅크',\n icon: <IconGraphicsBankTossBank />\n },\n {\n codeVal: '209',\n codeName: '유안타증권',\n replaceName: '유안타증권',\n icon: <IconGraphicsStockYuantaJeungkwon />\n },\n {\n codeVal: '218',\n codeName: 'KB증권',\n replaceName: 'KB증권',\n icon: <IconGraphicsStockKbJeungkwon />\n },\n {\n codeVal: '230',\n codeName: '미래에셋증권',\n replaceName: '미래에셋증권',\n icon: <IconGraphicsStockMiraeAssetJeungkwon />\n },\n {\n codeVal: '238',\n codeName: '대우증권',\n replaceName: '대우증권',\n icon: <IconGraphicsStockMiraeAssetJeungkwon />\n },\n {\n codeVal: '240',\n codeName: '삼성증권',\n replaceName: '삼성증권',\n icon: <IconGraphicsStockSamsungJeungkwon />\n },\n {\n codeVal: '243',\n codeName: '한국투자증권',\n replaceName: '한국투자증권',\n icon: <IconGraphicsStockHankookTujajeungkwon />\n },\n {\n codeVal: '247',\n codeName: '우리투자증권',\n replaceName: 'NH(우리)투자증권',\n icon: <IconGraphicsStockNhWooriTujajeungkwon />\n },\n {\n codeVal: '261',\n codeName: '교보증권',\n replaceName: '교보증권',\n icon: <IconGraphicsStockGyoboJeungkwon />\n },\n {\n codeVal: '262',\n codeName: '하이투자증권',\n replaceName: '하이투자증권',\n icon: <IconGraphicsStockHiTujajeungkwon />\n },\n {\n codeVal: '263',\n codeName: '현대차투자증권',\n replaceName: '현대차증권',\n icon: <IconGraphicsStockHyundaiChaJeungkwon />\n },\n {\n codeVal: '264',\n codeName: '키움증권',\n replaceName: '키움증권',\n icon: <IconGraphicsStockKiwoomJeungkwon />\n },\n {\n codeVal: '266',\n codeName: 'SK증권',\n replaceName: 'SK증권',\n icon: <IconGraphicsStockSkJeungkwon />\n },\n {\n codeVal: '267',\n codeName: '대신증권',\n replaceName: '대신증권',\n icon: <IconGraphicsStockDaesinJeungkwon />\n },\n {\n codeVal: '269',\n codeName: '한화증권',\n replaceName: '한화투자증권',\n icon: <IconGraphicsStockHanwhaTujajeungkwon />\n },\n {\n codeVal: '270',\n codeName: '하나대투증권',\n replaceName: '하나금융투자증권',\n icon: <IconGraphicsStockHanaGeumyungTujajeungkwon />\n },\n {\n codeVal: '278',\n codeName: '신한금융투자',\n replaceName: '신한금융투자증권',\n icon: <IconGraphicsStockSinhanTujajeungkwon />\n },\n {\n codeVal: '279',\n codeName: '동부증권',\n replaceName: 'DB금융투자증권',\n icon: <IconGraphicsStockDbGeumyungTujajeungkwon />\n },\n {\n codeVal: '280',\n codeName: '유진투자증권',\n replaceName: '유진투자증권',\n icon: <IconGraphicsStockYujinTujajeungkwon />\n },\n {\n codeVal: '287',\n codeName: '메리츠증권',\n replaceName: '메리츠증권',\n icon: <IconGraphicsStockMeritzJeungkwon />\n },\n {\n codeVal: '288',\n codeName: '카카오페이증권',\n replaceName: '카카오페이증권',\n icon: <IconGraphicsStockKakaoPayJeungkwon />\n },\n {\n codeVal: '289',\n codeName: 'NH투자증권',\n replaceName: 'NH투자증권',\n icon: <IconGraphicsStockNhTujajeungkwon />\n },\n {\n codeVal: '290',\n codeName: '부국증권',\n replaceName: '부국증권',\n icon: <IconGraphicsStockBugukJeungkwon />\n },\n {\n codeVal: '291',\n codeName: '신영증권',\n replaceName: '신영증권',\n icon: <IconGraphicsStockSinyeongJeungkwon />\n }\n];\n","import { CodeDto, useSearchCommonCodeQuery } from 'sales-frontend-api/method';\n\nexport function useBankStockSearch({ onSelect }: { onSelect: (item: CodeDto) => void }) {\n const { data } = useSearchCommonCodeQuery({ commonCodeId: 'BANK_ORGN_DVSN_CODE' });\n const bankStockList = data?.data?.commonCodeList?.[0]?.codeList;\n\n const handleSelect = (item: CodeDto) => {\n onSelect(item);\n };\n\n const bankList = bankStockList?.filter((bank) => bank.codeVal?.startsWith('0'));\n\n const stockList = bankStockList?.filter((stock) => stock.codeVal?.startsWith('2'));\n\n return {\n bankList,\n stockList,\n handleSelect\n };\n}\n","import { IconGraphicsStockHochulEopsum } from 'sales-frontend-assets';\nimport { Modal } from 'sales-frontend-design-system';\n\nimport styles from './bank-stock-search-modal.module.scss';\nimport { CODE_ICON_LIST } from './constants';\nimport { useBankStockSearch } from './use-bank-stock-search';\n\nimport type { BankStockSearchModalProps } from './types';\nimport type { CodeDto } from 'sales-frontend-api/method';\n\nfunction chunk<T>(array: T[], size: number): T[][] {\n return Array.from({ length: Math.ceil(array.length / size) }, (v, i) => array.slice(i * size, i * size + size));\n}\n\nexport function BankStockSearchModal({ open, onClose, onSelect }: BankStockSearchModalProps) {\n const { bankList, stockList, handleSelect } = useBankStockSearch({\n onSelect\n });\n\n const renderItems = (list: CodeDto[]) => {\n const chunkedList = chunk(list, 5);\n\n return (\n <div className={styles['list-container']}>\n {chunkedList.map((chunk, chunkIndex) => (\n <div key={chunkIndex} className={styles.row}>\n {chunk.map((item) => {\n const findItem = CODE_ICON_LIST.find((icon) => icon.codeVal === item.codeVal);\n\n /**\n * 서버에서 받은 목록중 icon과 치환이름이 없는 케이스 처리\n * 기본 아이콘, 기본 이름 노출\n */\n const convertedItem = findItem\n ? findItem\n : {\n icon: <IconGraphicsStockHochulEopsum />,\n replaceName: item.codeName\n };\n\n return (\n <div key={`${item.codeVal}-${chunkIndex}`} className={styles.item} onClick={() => handleSelect(item)}>\n <div className={styles['icon-wrapper']}>{convertedItem?.icon}</div>\n <span> {convertedItem?.replaceName}</span>\n </div>\n );\n })}\n {chunk.length < 5 &&\n Array.from({ length: 5 - chunk.length }).map((_, i) => (\n <div key={`placeholder-${chunkIndex}-${i}`} className={styles.item} style={{ visibility: 'hidden' }} />\n ))}\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <Modal.Root isOpen={open} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"은행/증권사 선택\" showCloseButton />\n <Modal.Body>\n <div className={styles.container}>\n <div className={styles.section}>\n <p className={styles['section-title']}>은행사</p>\n {renderItems(bankList || [])}\n </div>\n <div className={styles.section}>\n <p className={styles['section-title']}>증권사</p>\n {renderItems(stockList || [])}\n </div>\n </div>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { useSearchCustomerListQuery, type CustomerDto } from 'sales-frontend-api/method';\nimport { useDropDown } from 'sales-frontend-design-system';\n\n// const mockCustomers: CustomerDto[] = [\n// { customerId: '1', customerName: '김한화', birthDate: '1999.01.01', genderCode: '남성' },\n// {\n// customerId: '2',\n// customerName: '김한화생명',\n// birthDate: '1989.01.01',\n// genderCode: '여성',\n// baseAddress: '서울시 마포구'\n// },\n// {\n// customerId: '3',\n// customerName: '김한화손해보험',\n// birthDate: '1999.01.01',\n// genderCode: '남성',\n// baseAddress: '서울시 마포구'\n// }\n// ];\n\nexport const useCustomerSearch = (onSelect?: (customer: CustomerDto) => void) => {\n const { triggerRef, isOpen, setIsOpen, DropDown } = useDropDown();\n const [searchKeyword, setSearchKeyword] = useState('');\n const [searchInput, setSearchInput] = useState('');\n const [customerList, setCustomerList] = useState<CustomerDto[]>([]);\n const [selectedCustomer, setSelectedCustomer] = useState<CustomerDto | null>(null);\n\n const { data } = useSearchCustomerListQuery({ customerName: searchKeyword });\n\n const search = () => {\n if (searchInput.length >= 2) {\n setSearchKeyword(searchInput);\n setIsOpen(true);\n } else {\n setCustomerList([]);\n setSearchKeyword('');\n setIsOpen(false);\n }\n };\n\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n search();\n }\n };\n\n const onSearchInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchInput(e.target.value);\n if (e.target.value.length < 2) {\n setCustomerList([]);\n setSearchKeyword('');\n setIsOpen(false);\n }\n };\n\n const onClear = () => {\n setSearchInput('');\n setSearchKeyword('');\n setCustomerList([]);\n setSelectedCustomer(null);\n setIsOpen(false);\n };\n\n const handleSelectItem = (customer: CustomerDto) => {\n setSelectedCustomer(customer);\n setSearchInput(customer.customerName || '');\n setCustomerList([]);\n setIsOpen(false);\n if (onSelect) {\n onSelect(customer);\n }\n };\n\n useEffect(() => {\n const filtered = data?.data?.custList?.filter((c) =>\n c.customerName?.toLowerCase().includes(searchInput.toLowerCase())\n );\n setCustomerList(filtered || []);\n }, [data, searchInput]);\n\n return {\n triggerRef,\n isOpen,\n DropDown,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n onKeyUp,\n search,\n onClear,\n handleSelectItem,\n selectedCustomer,\n setSearchInput,\n setCustomerList,\n setSearchKeyword,\n setIsOpen\n };\n};\n","import { JSX } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { convertDateString, FormCore, List, ListItem } from 'sales-frontend-design-system';\n\nimport { getGenderName, highlightOnSearchKeyword } from '../../common';\n\nimport styles from './customer-search.module.scss';\nimport { useCustomerSearch } from './use-customer-search';\n\nimport type { CustomerSearchProps } from 'sales-frontend-api/method';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\nexport const CustomerSearch = ({ onSelectCustomer, placeholder, rootProps, ...props }: CustomerSearchProps) => {\n const {\n triggerRef,\n isOpen,\n DropDown,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n onKeyUp,\n search,\n onClear,\n handleSelectItem\n } = useCustomerSearch(onSelectCustomer);\n\n return (\n <div className={cx('container')}>\n <div className={cx('search-bar')}>\n <InputBox {...rootProps} endElement={<IconMainUiSearch onClick={search} />} onClear={onClear} clearable>\n <Input\n {...props}\n onChange={onSearchInputChange}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder={placeholder || '고객명을 두 글자 이상 입력해주세요.'}\n size=\"large\"\n ref={triggerRef}\n />\n </InputBox>\n </div>\n {isOpen && customerList.length > 0 && (\n <DropDown>\n <div className={cx('result-container')}>\n <List>\n {customerList.map((customer, index) => (\n <ListItem\n key={`cust-item-${customer.customerId}-${index}`}\n onClick={() => handleSelectItem(customer)}\n selectable\n >\n <div className={cx('customer-item')}>\n <div className={cx('name')}>\n {highlightOnSearchKeyword(customer.customerName || '', searchKeyword)}\n </div>\n <div className={cx('details')}>\n <span>\n {customer.birthDate &&\n convertDateString({\n dateString: customer.birthDate,\n fromFormat: 'YYYYMMDD',\n toFormat: 'YYYY.MM.DD'\n })}\n </span>\n <span className={cx('separator')}>|</span>\n <span>{getGenderName(customer.genderCode)}</span>\n {customer.baseAddress && (\n <>\n <span className={cx('separator')}>|</span>\n <span>{customer.baseAddress}</span>\n </>\n )}\n </div>\n </div>\n </ListItem>\n ))}\n </List>\n </div>\n </DropDown>\n )}\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { convertDateString, FormCore, List, ListItem, Modal } from 'sales-frontend-design-system';\n\nimport { getGenderName, highlightOnSearchKeyword } from '../../common';\n\nimport styles from './customer-search.module.scss';\nimport { useCustomerSearch } from './use-customer-search';\n\nimport type { CustomerDto } from 'sales-frontend-api/method';\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\ninterface Props {\n isOpen: boolean;\n closeModal: () => void;\n onSelect?: (customer: CustomerDto) => void;\n}\nexport function CustomerSearchModal({ isOpen, closeModal, onSelect }: Props) {\n const {\n triggerRef,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n setSearchKeyword,\n setSearchInput,\n setCustomerList,\n onKeyUp,\n search,\n onClear,\n handleSelectItem\n } = useCustomerSearch(onSelect);\n\n return (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"고객 검색\" showCloseButton />\n <Modal.Body>\n <InputBox endElement={<IconMainUiSearch onClick={search} />} onClear={onClear} clearable>\n <Input\n onChange={onSearchInputChange}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"고객명을 두 글자 이상 입력해주세요.\"\n size=\"large\"\n ref={triggerRef}\n />\n </InputBox>\n {searchKeyword && (\n <p className={cx('result-count')}>\n 총 <span className=\"text-primary\">{customerList.length}</span>건의 검색결과\n </p>\n )}\n {searchKeyword && customerList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n {searchKeyword && customerList.length > 0 && (\n <div>\n {customerList.length > 0 && (\n <List rootProps={{ style: { width: '100%' } }}>\n {customerList.map((customer, index) => (\n <ListItem\n key={`cust-item-${customer.customerId}-${index}`}\n onClick={() => {\n handleSelectItem(customer);\n setSearchKeyword('');\n setSearchInput('');\n setCustomerList([]);\n closeModal();\n }}\n selectable\n >\n <div className={cx('customer-item', 'modal')}>\n <div className={cx('name')}>\n {highlightOnSearchKeyword(customer.customerName || '', searchKeyword)}\n </div>\n <div className={cx('details', 'modal')}>\n <span>\n {customer.birthDate &&\n convertDateString({\n dateString: customer.birthDate,\n fromFormat: 'YYYYMMDD',\n toFormat: 'YYYY.MM.DD'\n })}\n </span>\n <span className={cx('separator')}>|</span>\n <span>{getGenderName(customer.genderCode)}</span>\n {customer.baseAddress && (\n <>\n <span className={cx('separator')}>|</span>\n <span>{customer.baseAddress}</span>\n </>\n )}\n </div>\n </div>\n </ListItem>\n ))}\n </List>\n )}\n </div>\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { NationalityResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, Modal, ModalBaseProps } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { NationalitySearchResultProps } from './nationality.types';\nimport styles from './select-nationality.module.scss';\nimport { useSearchNationality } from './use-search-nationality';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\ninterface NationalitySearchInitialTextProps {\n setSearchKeyword: (keyword: string) => void;\n setSearchInput: (keyword: string) => void;\n}\n\n/**\n * 자주 찾는 국적 목록\n * 대한민국, 중국, 베트남, 미국, 러시아\n */\nconst favoriteList: NationalityResponseDto[] = [\n {\n nationalityCode: 'KR',\n nationalityCodeName: '대한민국',\n isoNumberNationalityCode: '410',\n nationalityEnglishAbbreviationName: 'KOR'\n },\n {\n nationalityCode: 'CN',\n nationalityCodeName: '중국',\n isoNumberNationalityCode: '156',\n nationalityEnglishAbbreviationName: 'CHN'\n },\n {\n nationalityCode: 'VN',\n nationalityCodeName: '베트남',\n isoNumberNationalityCode: '704',\n nationalityEnglishAbbreviationName: 'VNM'\n },\n {\n nationalityCode: 'US',\n nationalityCodeName: '미국',\n isoNumberNationalityCode: '840',\n nationalityEnglishAbbreviationName: 'USA'\n },\n {\n nationalityCode: 'RU',\n nationalityCodeName: '러시아',\n isoNumberNationalityCode: '643',\n nationalityEnglishAbbreviationName: 'RUS'\n }\n];\n\nexport const NationalitySearchInitialText = ({\n setSearchInput,\n setSearchKeyword\n}: NationalitySearchInitialTextProps) => {\n const set = (keyword: string) => {\n setSearchInput(keyword);\n setSearchKeyword(keyword);\n };\n\n return (\n <div className={cx('favorite-container')}>\n <p className={cx('favorite-title')}>많이 찾는 국적</p>\n <ul className={cx('favorite')}>\n {favoriteList.map((item, index) => (\n <li key={`${item.nationalityCode}-${index}`} onClick={() => set(item.nationalityCodeName)}>\n <button>{item.nationalityCodeName}</button>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport const NationalitySearchResult = ({ nationalityList, searchKeyWord, onSelect }: NationalitySearchResultProps) => {\n const [filterList, setFilterList] = useState<NationalityResponseDto[]>([]);\n\n useEffect(() => {\n const filterList = nationalityList.filter((item) => item.nationalityCodeName.includes(searchKeyWord)) || [];\n setFilterList(filterList);\n }, [nationalityList, searchKeyWord]);\n\n return (\n <div className=\"mt-4\">\n <p className={cx('favorite-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n <ul className={cx('favorite')}>\n {filterList.length > 0 &&\n filterList.map((item, index) => {\n return (\n <li key={`${index}-${item.nationalityCode}`} onClick={() => onSelect(item.nationalityCodeName)}>\n <button>{highlightOnSearchKeyword(item.nationalityCodeName, searchKeyWord)}</button>\n </li>\n );\n })}\n </ul>\n {filterList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyWord}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n </div>\n );\n};\n\nexport interface NationalitySearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n nationalityList: string[];\n filterList: string[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n setSelectedNationality: (nationality: string) => void;\n}\n\ninterface Props {\n setValue: (nationality: NationalityResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function NationalityComponent({ isOpen, onClose, setValue }: Props) {\n const {\n search,\n onClear,\n searchKeyWord,\n onKeyUp,\n onSearch,\n searchList,\n searchInput,\n onSelect,\n setSearchInput,\n setSearchKeyword\n } = useSearchNationality({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"국적 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={\n <button>\n <IconMainUiSearch onClick={search} />\n </button>\n }\n onClear={onClear}\n className={cx('search-input')}\n >\n <Input\n onChange={onSearch}\n onKeyUp={onKeyUp}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n value={searchInput}\n />\n </InputBox>\n {!searchKeyWord && (\n <NationalitySearchInitialText setSearchInput={setSearchInput} setSearchKeyword={setSearchKeyword} />\n )}\n {searchKeyWord && (\n <NationalitySearchResult nationalityList={searchList} searchKeyWord={searchKeyWord} onSelect={onSelect} />\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { NationalityResponseDto, useSearchNationalityQuery } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { NationalityComponent } from './nationality-search-modal';\ninterface Props {\n setValue: (nationality: NationalityResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function useSearchNationality({ setValue, onClose, isOpen }: Props) {\n const [searchKeyWord, setSearchKeyword] = useState<string>('');\n const [selectedNationality, setSelectedNationality] = useState<string>();\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchNationalityQuery({ searchKeyWord });\n const searchList = data?.data.nationalityList || [];\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 0) {\n setSearchKeyword(searchInput);\n setSelectedNationality('');\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const currentValue = (e.target as HTMLInputElement).value;\n\n /**\n * 음절 완성시마다 검색\n */\n if (currentValue.length === 0 || currentValue.slice(-1).normalize('NFD').length > 1) {\n search();\n }\n\n // /**\n // * 엔터키 입력시 검색\n // */\n // if (e.key === 'Enter') {\n // search();\n // }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedNationality('');\n }, []);\n\n const onSelect = (nationality: string) => {\n setSelectedNationality(nationality);\n const value = searchList.find((item) => item.nationalityCodeName === nationality);\n value && setValue(value);\n onClose();\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedNationality('');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onClear,\n searchKeyWord,\n searchList,\n selectedNationality,\n onSearch,\n onKeyUp,\n search,\n searchInput,\n onSelect,\n setSearchKeyword,\n setSearchInput\n };\n}\n\nexport const useNationalityComponent = () => {\n const [nationality, setNationality] = useState<NationalityResponseDto>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const NationalitySearchComponent = () => (\n <NationalityComponent isOpen={isOpen} onClose={closeModal} setValue={setNationality} />\n );\n\n return {\n nationality,\n openModal,\n NationalitySearchComponent\n };\n};\n","import { useCallback, useEffect } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nexport type NxlOneProps = {\n bizCode: string;\n tmplCode: string;\n ncsrInfoUuid?: string;\n nlcCtfnId?: string;\n // TYPE\n t?: string;\n};\n\nexport type NxlOneResponse = {\n action?: 'error' | 'close' | 'complete';\n redirectUrl?: string;\n nlcCtfnId?: string;\n};\n\nconst url = (() => {\n const type = isClient() ? window.location.hostname : '';\n if (type.includes('localhost') || type.includes('local.hanwhalife.com')) {\n return 'https://nxl-nlc-stg.hanwhalife.com';\n }\n if (type.includes('dev')) {\n return 'https://nxl-nlc-dev.hanwhalife.com';\n } else if (type.includes('stg')) {\n return 'https://nxl-nlc-stg.hanwhalife.com';\n } else {\n return 'https://nxl-nlc.hanwhalife.com';\n }\n})();\n\ntype OpenOptionType = {\n popupWidth?: number;\n popupHeight?: number;\n popupLeft?: number;\n popupTop?: number;\n windowName?: string;\n};\n\nexport default function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t = 'dp' }: NxlOneProps) {\n const buildUrl = useCallback(() => {\n const targetUrl = new URL('/auth/v1', url);\n targetUrl.searchParams.set('bizCode', bizCode);\n targetUrl.searchParams.set('tmplCode', tmplCode);\n\n if (nlcCtfnId) {\n targetUrl.searchParams.set('nlcCtfnId', nlcCtfnId);\n }\n\n if (t) {\n targetUrl.searchParams.set('t', t);\n }\n\n if (ncsrInfoUuid) {\n targetUrl.searchParams.set('ncsrInfoUuid', ncsrInfoUuid);\n }\n\n return targetUrl.toString();\n }, [bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t]);\n\n /**\n * NEXTLAB ONE 인증 페이지로 이동합니다.\n * 인증이 완료된 후, 관리자 페이지에서 정의한 프로세스 완료 URL로 이동합니다.\n */\n const redirect = () => {\n const targetUrl = buildUrl();\n location.href = targetUrl;\n };\n\n /**\n * NEXTLAB ONE 인증을 팝업으로 엽니다.\n * @param options 팝업의 크기, 위치, 창 이름을 정의합니다.\n * @returns 완료 URL 또는 인증 ID가 담긴 Query String이 포함된 전체 완료 URL을 반환합니다.\n *\n * @example\n * const { open } = useNxlOne();\n *\n * const handleClick = async () => {\n * try {\n * const result = await open({ popupWidth: 500, popupHeight: 500 });\n * console.log(result);\n * }\n */\n const open = async (options?: OpenOptionType) => {\n return new Promise<NxlOneResponse>((resolve, reject) => {\n const targetUrl = buildUrl();\n console.log('targetUrl', targetUrl);\n const width = (options && options.popupWidth) || 720;\n const height = (options && options.popupHeight) || 720;\n\n const left = (options && options.popupLeft) || (window.screen.width - width) / 2;\n const top = (options && options.popupTop) || (window.screen.height - height) / 2;\n\n const popupFeatures = `width=${width},height=${height},left=${left},top=${top}`;\n const popup = window.open(targetUrl, (options && options.windowName) || '_self_cert', popupFeatures);\n\n if (!popup) {\n reject(new Error('차단되거나 열리지 않았습니다.'));\n\n return;\n }\n\n const isSettled = false;\n\n const handleMessage = (event: MessageEvent) => {\n console.log('popup message event', event.origin, new URL(targetUrl).origin);\n\n if (event.origin !== new URL(targetUrl).origin) {\n return;\n }\n\n if (isSettled) {\n return;\n }\n\n if (event.data) {\n resolve(event.data);\n } else {\n reject(new Error('인증이 취소되거나 실패했습니다.'));\n }\n\n popup.close();\n window.removeEventListener('message', handleMessage);\n };\n window.addEventListener('message', handleMessage);\n });\n };\n\n const Iframe = function ({\n height = 720,\n className,\n style,\n allow,\n sandbox = 'allow-scripts allow-forms allow-same-origin',\n onSuccess,\n onError,\n onClose,\n strictOrigin = true\n }: {\n height?: number | string;\n className?: string;\n style?: React.CSSProperties;\n allow?: string;\n sandbox?: string;\n onSuccess?: (response: NxlOneResponse) => void;\n onError?: (response: NxlOneResponse) => void;\n onClose?: (response: NxlOneResponse) => void;\n strictOrigin?: boolean;\n }) {\n const targetUrl = buildUrl();\n\n useEffect(() => {\n if (!onSuccess && !onError) {\n return;\n }\n\n const handler = (e: MessageEvent) => {\n console.log('message event', e);\n\n /** 테스트를 위해 주석처리 */\n // if (strictOrigin && e.origin !== url) {\n // console.warn('Invalid origin:', e.origin);\n\n // return;\n // }\n\n const d = e.data as NxlOneResponse;\n if (d) {\n if (d.action === 'close') {\n onClose?.(d);\n } else if (d.action === 'error') {\n onError?.(d);\n } else if (d.action === 'complete') {\n onSuccess?.(d);\n }\n } else {\n onError?.({\n action: 'error',\n nlcCtfnId: '',\n redirectUrl: ''\n });\n }\n };\n\n window.addEventListener('message', handler as EventListener);\n\n return () => window.removeEventListener('message', handler as EventListener);\n }, [onClose, onError, onSuccess, strictOrigin]);\n\n return (\n <iframe\n src={targetUrl}\n width=\"100%\"\n height={typeof height === 'number' ? `${height}px` : height}\n style={{ border: 0, ...style }}\n className={className}\n sandbox={sandbox}\n {...(allow ? { allow } : {})}\n />\n );\n };\n\n return { open, redirect, Iframe };\n}\n","'use client';\n\n/**\n * @todo 추후 실제 넥스트랩 모듈로 교체필요\n */\nimport { Modal, useModalState } from 'sales-frontend-design-system';\nimport { isClient } from 'sales-frontend-utils';\n\nimport useNxlOne, { NxlOneResponse } from './hook';\n\nexport type Step =\n | 'appInit'\n | 'tabletEformInit'\n | 'tabletEformRe'\n | 'tabletEformSubInfo'\n | 'smartphoneEformSubInfo'\n | 'smartphoneEformAlimtalkInit'\n | 'smartphoneEformAlimtalkRe'\n | 'tabletNewCustomer'\n | 'tabletNewCustomerLegalRep'\n | 'tabletCustomerInfoPlanAgreement'\n | 'tabletCustomerInfoProductAgreement';\n\nexport interface CodeSet {\n dev: {\n bizCode: string;\n tmplCode: string;\n };\n stg: {\n bizCode: string;\n tmplCode: string;\n };\n}\n\n/**\n * 본인인증 템플릿코드, 비즈코드 참조객체\n */\nexport const CODES: Record<Step, CodeSet> = {\n appInit: {\n dev: {\n tmplCode: 'HST',\n bizCode: 'DPS'\n },\n stg: {\n tmplCode: 'R7Y',\n bizCode: 'DPS'\n }\n },\n\n tabletEformInit: {\n dev: {\n tmplCode: '4X2',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'NO7',\n bizCode: 'DET'\n }\n },\n\n tabletEformRe: {\n dev: {\n tmplCode: 'WJ1',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'WQF',\n bizCode: 'DET'\n }\n },\n\n tabletEformSubInfo: {\n dev: {\n tmplCode: 'GJB',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'C1D',\n bizCode: 'DET'\n }\n },\n\n smartphoneEformSubInfo: {\n dev: {\n tmplCode: 'YOQ',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'FLL',\n bizCode: 'DES'\n }\n },\n\n smartphoneEformAlimtalkInit: {\n dev: {\n tmplCode: '8YA',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'T9L',\n bizCode: 'DES'\n }\n },\n\n smartphoneEformAlimtalkRe: {\n dev: {\n tmplCode: 'NPK',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'YMV',\n bizCode: 'DES'\n }\n },\n\n tabletNewCustomer: {\n dev: {\n tmplCode: '948',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'YQM',\n bizCode: 'DIS'\n }\n },\n\n tabletNewCustomerLegalRep: {\n dev: {\n tmplCode: 'SBI',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'FB3',\n bizCode: 'DIS'\n }\n },\n\n tabletCustomerInfoPlanAgreement: {\n dev: {\n tmplCode: 'QCA',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'AST',\n bizCode: 'DIS'\n }\n },\n\n tabletCustomerInfoProductAgreement: {\n dev: {\n tmplCode: 'I7K',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'XG6',\n bizCode: 'DIS'\n }\n }\n};\n\ninterface Props {\n onSuccess?: (result: NxlOneResponse) => void;\n onError?: (result: NxlOneResponse) => void;\n onClose?: (result: NxlOneResponse) => void;\n modalSize?: 'small' | 'medium' | 'large' | 'full-screen';\n env: 'stg' | 'dev';\n /**\n * @property 'appInit'\n *\n * 업무명 : 영업지원 앱 로그인,\n * 상세업무명 : 앱 초기 설정 본인인증 (2차인증)\n * @property 'tabletEformInit'\n *\n * 업무명 : [태블릿] 전자청약(최초 진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 모두 진행)\n * @property 'tabletEformRe'\n *\n * 업무명 : [태블릿] 전자청약(재진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 모두 진행)\n * @property 'tabletEformSubInfo'\n *\n * 업무명 : [태블릿] 전자청약 [청약 부속정보 확인] 단계,\n * 상세업무명 : 지정대리청구서비스 특약신청 시 실명확인\n * @property 'smartphoneEformSubInfo'\n *\n * 업무명 : [스마트폰] 전자청약 [청약 부속정보 확인] 단계,\n * 상세업무명 : 지정대리청구서비스 특약신청 시 실명확인\n * @property 'smartphoneEformAlimtalkInit'\n *\n * 업무명 : [스마트폰] 전자청약 알림톡(최초 진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 개별 진행)\n * @property 'smartphoneEformAlimtalkRe'\n *\n * 업무명 : [스마트폰] 전자청약 알림톡(재진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 개별 진행)\n * @property 'tabletNewCustomer'\n *\n * 업무명 : [태블릿] 신규고객등록,\n * 상세업무명 : 고객정보 본인인증\n * @property 'tabletNewCustomerLegalRep'\n *\n * 업무명 : [태블릿] 신규고객등록,\n * 상세업무명 : 법정대리인 본인인증(친권자1,2 개별 진행)\n * @property 'tabletCustomerInfoPlanAgreement'\n *\n * 업무명 : [태블릿] 고객정보조회,\n * 상세업무명 : 가입설계동의갱신 인증\n * @property 'tabletCustomerInfoProductAgreement'\n *\n * 업무명 : [태블릿] 고객정보조회,\n * 상세업무명 : 상품소개동의갱신 인증\n */\n step: Step;\n}\n\n/**\n * onSuccess, onError, onClose 이벤트 핸들러 구현 필요\n * onSuccess: 인증 성공 시 호출, 결과 데이터를 부모 창으로 전달\n * onError: 인증 실패 시 호출, 에러 정보를 부모 창으로 전달\n * onClose: 인증 창이 닫힐 때 호출, 필요에 따라 추가 작업 수행\n * modalSize: 모달 크기 설정 (예: 'small', 'medium', 'large', 'full-screen')\n * bizCode 및 tmplCode: NXL ONE 서비스에서 제공하는 비즈니스 코드 및 템플릿 코드\n */\nexport function useNxlOneModal({\n onSuccess = (result) => {\n console.log('on success', JSON.stringify(result));\n },\n onError = (result) => {\n console.log('on error', JSON.stringify(result));\n },\n onClose = (result) => {\n console.log('on close', JSON.stringify(result));\n },\n modalSize = 'medium',\n step = 'appInit',\n env = 'stg'\n}: Props) {\n const { isOpen, openModal, closeModal } = useModalState();\n const { bizCode, tmplCode } = CODES[step][env];\n\n const { Iframe, open } = useNxlOne({\n bizCode,\n tmplCode\n });\n\n return {\n openNxlOneModal: () => {\n const type = isClient() ? window.location.hostname : '';\n if (type.includes('localhost') || type.includes('local.hanwhalife.com')) {\n open({ popupWidth: 500, popupHeight: 500 }).then((result) => {\n onSuccess(result);\n });\n } else {\n openModal();\n }\n },\n closeNxlOneModal: closeModal,\n isNxlOneModalOpen: isOpen,\n NxlModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize={modalSize}>\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Body raw>\n <Iframe\n onSuccess={onSuccess}\n onError={onError}\n onClose={(result) => {\n onClose(result);\n closeModal();\n }}\n />\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { VisaStatusResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, Modal, ModalBaseProps } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './select-visa.module.scss';\nimport { useSearchVisa } from './use-search-visa';\nimport { VisaSearchResultProps } from './visa.types';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\ninterface VisaSearchInitialTextProps {\n visaList: VisaStatusResponseDto[];\n onSelect: (visa: VisaStatusResponseDto) => void;\n}\nexport const VisaSearchInitialText = ({ visaList, onSelect }: VisaSearchInitialTextProps) => {\n return (\n <div className={cx('favorite-container')}>\n <ul className={cx('favorite')}>\n {visaList.map((item, index) => {\n return (\n <li key={`${index}-${item.integrationCodeValueName}`} onClick={() => onSelect(item)}>\n <button>{item.integrationCodeValueName}</button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nexport const VisaSearchResult = ({ visaList, searchKeyword, onSelect }: VisaSearchResultProps) => {\n const [filterList, setFilterList] = useState<VisaStatusResponseDto[]>([]);\n\n useEffect(() => {\n const filterList = visaList.filter((item) => item.integrationCodeValueName?.includes(searchKeyword)) || [];\n setFilterList(filterList);\n }, [visaList, searchKeyword]);\n\n return (\n <div className=\"mt-4\">\n <p className={cx('favorite-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n <ul className={cx('favorite')}>\n {filterList.length > 0 &&\n filterList.map((item, index) => {\n return (\n <li key={`${index}-${item.integrationCodeValueName}`} onClick={() => onSelect(item)}>\n <button>{highlightOnSearchKeyword(`${item.integrationCodeValueName}`, searchKeyword)}</button>\n </li>\n );\n })}\n </ul>\n {filterList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n </div>\n );\n};\n\nexport interface VisaSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n visaList: string[];\n filterList: string[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n setSelectedVisa: (visa: string) => void;\n}\n\ninterface Props {\n setValue: (visa: VisaStatusResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function VisaComponent({ isOpen, onClose, setValue }: Props) {\n const { search, onClear, searchKeyword, onKeyUp, onSearch, searchList, searchInput, onSelect } = useSearchVisa({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"체류자격 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={\n <button>\n <IconMainUiSearch onClick={search} />\n </button>\n }\n onClear={onClear}\n className={cx('search-input')}\n >\n <Input\n onChange={onSearch}\n onKeyUp={onKeyUp}\n placeholder=\"코드, 자격명 입력\"\n size=\"large\"\n value={searchInput}\n />\n </InputBox>\n {!searchKeyword && <VisaSearchInitialText visaList={searchList} onSelect={onSelect} />}\n {searchKeyword && (\n <VisaSearchResult visaList={searchList} searchKeyword={searchKeyword} onSelect={onSelect} />\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { useSearchVisaQuery, VisaStatusResponseDto } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { VisaComponent } from './visa-search-modal';\ninterface Props {\n setValue: (visa: VisaStatusResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchVisa({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [selectedVisa, setSelectedVisa] = useState<VisaStatusResponseDto>();\n const [searchInput, setSearchInput] = useState<string>('');\n\n // const { data: visaList } = useSearchModalAddressQuery({ searchKeyword });\n\n const { data: visaList } = useSearchVisaQuery();\n const searchList: VisaStatusResponseDto[] = visaList?.data?.visaStatusList || [];\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 0) {\n setSearchKeyword(searchInput);\n setSelectedVisa(undefined);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedVisa(undefined);\n }, []);\n\n const onSelect = (visa: VisaStatusResponseDto) => {\n setSelectedVisa(visa);\n setValue(visa);\n onClose();\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedVisa(undefined);\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onClear,\n searchKeyword,\n searchList,\n selectedVisa,\n onSearch,\n onKeyUp,\n search,\n searchInput,\n onSelect,\n setSearchKeyword,\n setSearchInput\n };\n}\n\nexport const useVisaComponent = () => {\n const [visa, setVisa] = useState<VisaStatusResponseDto>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const VisaSearchComponent = () => <VisaComponent isOpen={isOpen} onClose={closeModal} setValue={setVisa} />;\n\n return {\n visa,\n openModal,\n VisaSearchComponent\n };\n};\n","import classNames from 'classnames/bind';\nimport { PersonalCustomerProfileResponseDto } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './dea-customer-search-modal.module.scss';\n\ninterface DeaCustomerSearchResultProps {\n customerList: PersonalCustomerProfileResponseDto[];\n onCustomerSelect: (customer: PersonalCustomerProfileResponseDto) => void;\n selectedCustomer: PersonalCustomerProfileResponseDto | null;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function DeaCustomerSearchResult({\n customerList,\n onCustomerSelect,\n selectedCustomer\n}: DeaCustomerSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{customerList.length}</span>건의 검색결과\n </p>\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>고객ID</th>\n <th className={cx('th-padding')}>고객명</th>\n <th className={cx('th-padding')}>주민등록번호</th>\n <th className={cx('th-padding')}>직종업종명</th>\n <th className={cx('th-padding')}>전화번호</th>\n <th className={cx('th-padding')}>주소</th>\n </tr>\n </thead>\n <tbody>\n {customerList.length > 0 ? (\n customerList.map((customer, index) => (\n <tr key={`cust-item-${customer.customerId}-${index}}`}>\n <td>\n <input\n type=\"radio\"\n name=\"customer\"\n value={customer.customerId || ''}\n checked={selectedCustomer?.customerId === customer.customerId}\n onChange={() => onCustomerSelect(customer)}\n />\n </td>\n <td>{customer.customerId}</td>\n <td>{customer.customerName}</td>\n <td>{customer.residentNumber}</td>\n <td>{customer.occupationKindName}</td>\n <td>{customer.mobilePhoneNumber}</td>\n <td>{customer.address}</td>\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={7}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </Table>\n </div>\n );\n}\n","/* eslint-disable react/no-unknown-property */\nimport React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { PersonalCustomerProfileRequestDto, PersonalCustomerProfileResponseDto } from 'sales-frontend-api/method';\nimport { Button, FormField, Select } from 'sales-frontend-design-system';\nimport { getE2EDataIDs } from 'sales-frontend-utils';\n\nimport styles from './dea-customer-search-modal.module.scss';\nimport { DeaCustomerSearchResult } from './dea-customer-search-result';\n\nconst { TextField } = FormField;\n\n// ASTx2 is loaded from an external script, declare it here to inform TypeScript.\ndeclare const $ASTX2: any;\n\ninterface DeaCustomerSearchProps {\n setSearchParams: (params?: PersonalCustomerProfileRequestDto) => void;\n customerList: PersonalCustomerProfileResponseDto[];\n onCustomerSelect: (customer: PersonalCustomerProfileResponseDto) => void;\n selectedCustomer: PersonalCustomerProfileResponseDto | null;\n isLoading: boolean;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function DeaCustomerSearch({\n setSearchParams,\n customerList,\n onCustomerSelect,\n selectedCustomer\n}: DeaCustomerSearchProps) {\n const [residentNumberFront, setResidentNumberFront] = useState('');\n const [residentNumberBack, setResidentNumberBack] = useState('');\n\n const handleSearch = () => {\n getE2EDataIDs(['residentNumberFront', 'residentNumberBack'], (e2edata: any) => {\n setSearchParams({\n residentNumberFront,\n residentNumberBack,\n e2edata: e2edata.e2e_data1\n });\n });\n };\n\n const handleReset = () => {\n setResidentNumberFront('');\n setResidentNumberBack('');\n setSearchParams();\n };\n\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n e.key === 'Enter' && handleSearch();\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n //입력값이 숫자나 백스페이스가 아니면 false\n if (!(e.key === 'Backspace' || !isNaN(parseInt(e.key)))) {\n e.preventDefault();\n }\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">고객 구분</FormField.Label>\n <Select value=\"personal\" placeholder=\"개인\" disabled style={{ width: '100px' }}>\n <Select.Option value=\"personal\">개인</Select.Option>\n </Select>\n <FormField.Label className=\"subtitle3 text-body-1\">주민등록번호</FormField.Label>\n <TextField\n name=\"residentNumberFront\"\n value={residentNumberFront}\n maxLength={6}\n placeholder=\"앞 6자리 입력\"\n onChange={(e) => setResidentNumberFront(e.target.value)}\n size=\"medium\"\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n rootProps={{\n className: cx('search-input'),\n onClear: () => {\n setResidentNumberFront('');\n }\n }}\n />\n -\n <TextField\n type=\"password\"\n name=\"residentNumberBack\"\n value={residentNumberBack}\n maxLength={7}\n placeholder=\"뒤 7자리 입력\"\n /** ASTx2 e2e 설정 */\n //@ts-ignore\n e2e_type=\"1\"\n /** 숫자타입만 입력받는 설정 */\n e2e_inputtype=\"1\"\n onChange={(e) => setResidentNumberBack(e.target.value)}\n size=\"medium\"\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n rootProps={{\n className: cx('search-input'),\n onClear: () => {\n setResidentNumberBack('');\n }\n }}\n />\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n <DeaCustomerSearchResult\n customerList={customerList}\n onCustomerSelect={onCustomerSelect}\n selectedCustomer={selectedCustomer}\n />\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {\n getDspCustomerListMethod,\n PersonalCustomerProfileRequestDto,\n PersonalCustomerProfileResponseDto\n} from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\nimport { initASTX2, loadScript } from 'sales-frontend-utils';\n\nimport { DeaCustomerSearch } from './dea-customer-search';\n\ninterface DeaCustomerSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSave: (customer: PersonalCustomerProfileResponseDto) => void;\n}\n\nexport const DeaCustomerSearchModal: React.FC<DeaCustomerSearchModalProps> = ({ isOpen, onClose, onSave }) => {\n const [selectedCustomer, setSelectedCustomer] = useState<PersonalCustomerProfileResponseDto | null>(null);\n const [searchParams, setSearchParams] = useState<PersonalCustomerProfileRequestDto>();\n\n const { data, isFetching } = useQuery({\n queryKey: ['deaCustomerSearch', searchParams],\n queryFn: () => getDspCustomerListMethod(searchParams!),\n enabled: !!searchParams,\n retry: false\n });\n\n const [customerList, setCustomerList] = useState<PersonalCustomerProfileResponseDto[]>([]);\n loadScript();\n\n useEffect(() => {\n if (data?.data) {\n setCustomerList(data.data);\n } else {\n setCustomerList([]);\n }\n }, [data]);\n\n useEffect(() => {\n setSelectedCustomer(null);\n }, [customerList]);\n\n useEffect(() => {\n initASTX2();\n }, []);\n\n const handleCustomerSelect = (customer: PersonalCustomerProfileResponseDto) => {\n setSelectedCustomer(customer);\n };\n\n const handleSave = () => {\n if (selectedCustomer) {\n onSave(selectedCustomer);\n onClose();\n }\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"고객 검색\" showCloseButton />\n <Modal.Body>\n <DeaCustomerSearch\n setSearchParams={setSearchParams}\n customerList={customerList}\n onCustomerSelect={handleCustomerSelect}\n selectedCustomer={selectedCustomer}\n isLoading={isFetching}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSave}\n disabled={!selectedCustomer}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","import { EmployeeDivisionCodeType } from 'sales-frontend-api/method';\n\nexport const EMPLOYEE_SEARCH_TABS: { label: string; value: EmployeeDivisionCodeType }[] = [\n { value: 'WHOL', label: '전체' },\n { value: 'FP', label: 'FP' },\n { value: 'WKIS', label: '내근' }\n];\n","import classNames from 'classnames/bind';\nimport { EmployeeProfileResponseDto } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Checkbox, CheckboxButton, Radio, RadioGroup, Table } from 'sales-frontend-design-system';\n\nimport styles from './employee-search-modal.module.scss';\n\ninterface EmployeeSearchResultProps {\n filteredEmployees: EmployeeProfileResponseDto[];\n onEmployeeSelect: (employee: EmployeeProfileResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function EmployeeSearchResult({ filteredEmployees, onEmployeeSelect }: EmployeeSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredEmployees.length}</span>건의 검색결과\n </p>\n {filteredEmployees.length > 0 ? (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>사원번호</th>\n <th className={cx('th-padding')}>사원명</th>\n <th className={cx('th-padding')}>소속기관명</th>\n <th className={cx('th-padding')}>사원구분</th>\n </tr>\n </thead>\n <tbody>\n {filteredEmployees.map((employee) => {\n return (\n <>\n <tr>\n <td>\n <input\n type=\"radio\"\n name=\"employee\"\n value={employee.employeeNumber || ''}\n onChange={(e) => {\n /**\n * @todo Radio.Item 라디오 선택시, 현재라디오를 checked 상태로 만들수가 없다....\n */\n onEmployeeSelect(employee);\n }}\n ></input>\n </td>\n <td>{employee.employeeNumber}</td>\n <td>{employee.employeeName}</td>\n <td>{employee.organizationName}</td>\n <td>{employee.employeeDivisionCode}</td>\n </tr>\n </>\n );\n })}\n </tbody>\n </Table>\n ) : (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>사원번호</th>\n <th className={cx('th-padding')}>사원명</th>\n <th className={cx('th-padding')}>소속기관명</th>\n <th className={cx('th-padding')}>사원구분</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td colSpan={5}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n </tbody>\n </Table>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { EmployeeDivisionCodeType, EmployeeProfileResponseDto } from 'sales-frontend-api/method';\nimport { Button, FormField, Select } from 'sales-frontend-design-system';\n\nimport { EMPLOYEE_SEARCH_TABS } from './constants';\nimport styles from './employee-search-modal.module.scss';\nimport { EmployeeSearchResult } from './employee-search-result';\n\nconst { TextField } = FormField;\n\ninterface EmployeeSearchProps {\n activeTab: EmployeeDivisionCodeType;\n onTabChange: (value: EmployeeDivisionCodeType) => void;\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n searchInput: string;\n setSearchInput: (value: string) => void;\n employeeList: EmployeeProfileResponseDto[];\n onEmployeeSelect: (employee: EmployeeProfileResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function EmployeeSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchTerm,\n searchInput,\n setSearchInput,\n employeeList,\n onEmployeeSelect\n}: EmployeeSearchProps) {\n const handleSearch = () => {\n setSearchTerm(searchInput);\n };\n\n const handleReset = () => {\n setSearchTerm('');\n setSearchInput('');\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">성명/사번</FormField.Label>\n <TextField\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n onKeyUp={(e) => e.key === 'Enter' && handleSearch()}\n rootProps={{\n onClear: handleReset,\n clearable: true\n }}\n />\n </div>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">사원 구분</FormField.Label>\n <Select\n value={activeTab}\n onChange={(value) => onTabChange(value as EmployeeDivisionCodeType)}\n className={styles.select}\n size=\"medium\"\n >\n {EMPLOYEE_SEARCH_TABS.map((option, index) => (\n <Select.Option key={`${option.value}-${index}`} value={option.value}>\n {option.label}\n </Select.Option>\n ))}\n </Select>\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n {searchTerm && (\n <EmployeeSearchResult\n filteredEmployees={employeeList}\n onEmployeeSelect={onEmployeeSelect}\n searchTerm={searchTerm}\n />\n )}\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport {\n EmployeeDivisionCodeType,\n EmployeeProfileResponseDto,\n useSearchEmployeeProfileQuery\n} from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { EmployeeSearch } from './employee-search';\n\ninterface EmployeeSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSelect: (employee: EmployeeProfileResponseDto) => void;\n}\n\nexport const EmployeeSearchModal: React.FC<EmployeeSearchModalProps> = ({ isOpen, onClose, onSelect }) => {\n const [activeTab, setActiveTab] = useState<EmployeeDivisionCodeType>('WHOL');\n const [selectedEmployee, setSelectedEmployee] = useState<EmployeeProfileResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchEmployeeProfileQuery({\n searchWord: searchTerm,\n employeeDivisionCode: activeTab\n });\n\n const [employeeList, setEmployeeList] = useState<EmployeeProfileResponseDto[]>([]);\n\n useEffect(() => {\n if (data?.data) {\n setEmployeeList(data.data);\n } else {\n setEmployeeList([]);\n }\n }, [data]);\n\n const handleEmployeeSelect = (employee: EmployeeProfileResponseDto) => {\n setSelectedEmployee(employee);\n };\n\n const handleSelect = () => {\n if (selectedEmployee) {\n onSelect(selectedEmployee);\n onClose();\n }\n };\n\n const onTabChange = (value: EmployeeDivisionCodeType) => {\n setSearchTerm('');\n setSearchInput('');\n setActiveTab(value);\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"사원 검색\" showCloseButton />\n <Modal.Body>\n <EmployeeSearch\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n searchInput={searchInput}\n setSearchInput={setSearchInput}\n employeeList={employeeList}\n onEmployeeSelect={handleEmployeeSelect}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSelect}\n disabled={!selectedEmployee}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","export const JOB_SEARCH_TABS = [\n { value: 'jobName', label: '직종명 검색' },\n { value: 'jobCode', label: '분류로 검색' }\n];\n","import { useSearchOccupationDetailQuery } from 'sales-frontend-api/method';\nimport { Table } from 'sales-frontend-design-system';\n\ninterface Props {\n occupationTypeCode: string;\n occupationIndustryCode: string;\n}\n\nexport function JobSearchDetail({ occupationTypeCode, occupationIndustryCode }: Props) {\n const { data: detail } = useSearchOccupationDetailQuery({\n occupationIndustryCode,\n occupationIndustryTypeCode: occupationTypeCode || '1'\n });\n\n if (!detail || !detail.data) {\n return null;\n }\n const {\n /** @description 직종해설내용 */\n occupationExplanationContent,\n /** @description 직업예시명 */\n occupationExampleName,\n /** @description 위험등급명 */\n riskGradeName,\n /** @description 위험등급코드 */\n riskGradeCode,\n /** @description 상해위험등급코드명 */\n injuryRiskGradeCodeName,\n /** @description 상해위험등급코드 */\n injuryRiskGradeCode,\n /** @description 입원등급코드명 */\n hospitalizationGradeCodeName,\n /** @description 입원등급코드 */\n hospitalizationGradeCode,\n /** @description 상해직종코드 */\n injuryOccupationCode\n } = detail.data;\n\n return (\n <>\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th className=\"px-small\">직종 해설</th>\n <td className=\"px-small\">{occupationExplanationContent}</td>\n </tr>\n <tr>\n <th className=\"px-small\">직종 예시</th>\n <td className=\"px-small\">{occupationExampleName}</td>\n </tr>\n <tr>\n <th className=\"px-small\">위험 등급</th>\n <td className=\"px-small\">\n {riskGradeName}({riskGradeCode})\n </td>\n </tr>\n <tr>\n <th className=\"px-small\">입원 등급</th>\n <td className=\"px-small\">\n {hospitalizationGradeCodeName}({hospitalizationGradeCode})\n </td>\n </tr>\n <tr>\n <th className=\"px-small\">상해 등급</th>\n <td className=\"px-small\">\n {injuryRiskGradeCodeName}({injuryRiskGradeCode})\n </td>\n </tr>\n </tbody>\n </Table>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchCategory({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('category-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')} onToggle={() => {}}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}-${index}-accordion`}\n key={`item-${job.occupationIndustryCode}-${index}`}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item size=\"small\" value={job.occupationIndustryCode} onChange={() => onJobSelect(job)}>\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}({job.occupationIndustryCode})\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio, Table } from 'sales-frontend-design-system';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchFavorite({ filteredJobs, onJobSelect }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p>많이 찾는 직종</p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n key={`item-${job.occupationIndustryCode}-${index}`}\n id={`item-${job.occupationIndustryCode}-${index}`}\n className={cx('accordion-item')}\n >\n <Accordion.HeaderDiv className={cx('accordion-header-item')}>\n <Radio.Item\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => onJobSelect(job)}\n className={cx('radio-item')}\n >\n {job.occupationIndustryName}({job.occupationIndustryCode})\n </Radio.Item>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchResult({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}`}\n key={`item-${job.occupationIndustryCode}-${index}}`}\n // onClick={() => accordion.toggleItem(`item-${job.code}`)}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item\n id={`item-${job.occupationIndustryCode}`}\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => {\n onJobSelect(job);\n }}\n >\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import { Dispatch, SetStateAction } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { Tab, FormField, Select } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearchCategory } from './job-search-category';\nimport { JobSearchFavorite } from './job-search-favorite';\nimport styles from './job-search-modal.module.scss';\nimport { JobSearchResult } from './job-search-result';\n\nconst { TextField } = FormField;\ninterface JobSearchProps {\n activeTab: string;\n onTabChange: (value: string) => void;\n searchTerm: string;\n setSearchInput: (value: string) => void;\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchInput: string;\n setSearchTerm: (value: string) => void;\n firstCategory: string;\n setFirstCategory: Dispatch<SetStateAction<string>>;\n secondCategory: string;\n setSecondCategory: Dispatch<SetStateAction<string>>;\n firstCategoryList: OccupationResponseDto[];\n secondCategoryList: OccupationResponseDto[];\n jobList?: OccupationResponseDto[];\n isLoading: boolean;\n}\nconst cx = classNames.bind(styles);\nconst { Option } = Select;\nexport function JobSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchInput,\n filteredJobs,\n onJobSelect,\n setSearchTerm,\n searchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList,\n isLoading\n}: JobSearchProps) {\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n setSearchTerm(searchInput);\n }\n };\n\n return (\n <>\n <Tab.Root\n defaultValue={activeTab}\n onValueChange={onTabChange}\n scroll=\"fixed\"\n size=\"small\"\n variant=\"sub\"\n style={{ gap: 0, overflow: 'visible' }}\n >\n {JOB_SEARCH_TABS.map((tab, index) => (\n <Tab.Item key={`${tab.value}-${index}`} value={tab.value}>\n {tab.label}\n </Tab.Item>\n ))}\n </Tab.Root>\n <div>\n {activeTab === 'jobName' && (\n <div className={cx('favorite-jobs-section')}>\n <TextField\n placeholder=\"직종명 검색\"\n value={searchInput}\n onKeyUp={onKeyUp}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n rootProps={{\n endElement: <IconMainUiSearch onClick={() => setSearchTerm(searchInput)} />,\n onClear: () => {\n setSearchTerm('');\n setSearchInput('');\n }\n }}\n />\n {!searchTerm && <JobSearchFavorite filteredJobs={filteredJobs} onJobSelect={onJobSelect} />}\n {searchTerm && !isLoading && (\n <JobSearchResult filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n {activeTab === 'jobCode' && (\n <div className={cx('select-jobs-section')}>\n <div className={cx('category-section')}>\n <Select\n name=\"first_category\"\n onChange={(value) => {\n setFirstCategory(value);\n setSecondCategory('');\n }}\n placeholder=\"대분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={firstCategory}\n >\n {firstCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n <Select\n name=\"second_category\"\n onChange={setSecondCategory}\n placeholder=\"중분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={secondCategory}\n disabled={!firstCategory}\n >\n {secondCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n </div>\n\n {firstCategory && secondCategory && !isLoading && (\n <JobSearchCategory filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport {\n OccupationResponseDto,\n useSearchOccupationDetailQuery,\n useSearchOccupationQuery\n} from 'sales-frontend-api/method';\nimport { Button, Modal, ModalUtils, useModalState } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearch } from './job-search';\n\n/**\n * 초기값(많이 찾는 직종)\n * 회사 사무직 종사자\n * 경영지원 사무직 종사자\n * 주부\n * 주방장 및 조리사\n * 보험설계사(당사)\n */\nconst initData: OccupationResponseDto[] = [\n {\n occupationIndustryCode: '430101',\n occupationIndustryName: '회사 사무직 종사자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '400301',\n occupationIndustryName: '경영지원 사무직 관리자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '510201',\n occupationIndustryName: '전업주부',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '442501',\n occupationIndustryName: '주방장 및 조리사(선박 조리사 제외)',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '450303',\n occupationIndustryName: '보험설계사(당사)',\n occupationTypeCode: null,\n historySequence: 0\n }\n];\n\nconst useJobSearch = () => {\n const [activeTab, setActiveTab] = useState<string>(JOB_SEARCH_TABS[0]?.value ?? '');\n const [selectedJob, setSelectedJob] = useState<OccupationResponseDto | null>(null);\n // const [selectedJobDetail, setSelectedJobDetail] = useState<OccupationDetailResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n const handleJobSelect = (job: OccupationResponseDto) => {\n setSelectedJob(job);\n };\n const [firstCategory, setFirstCategory] = useState<string>('');\n const [secondCategory, setSecondCategory] = useState<string>('');\n const [jobList, setJobList] = useState<OccupationResponseDto[]>(initData);\n const [firstCategoryList, setFirstCategoryList] = useState<OccupationResponseDto[]>([]);\n const [secondCategoryList, setSecondCategoryList] = useState<OccupationResponseDto[]>([]);\n\n const { data: detail } = useSearchOccupationDetailQuery({\n occupationIndustryCode: selectedJob?.occupationIndustryCode || '',\n occupationIndustryTypeCode: '1'\n });\n\n const selectedJobDetail = detail?.data;\n\n const { data, isLoading } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: searchTerm ? '4' : '3',\n occupationSubCategoryCode: secondCategory,\n searchOccupationIndustryName: searchTerm\n });\n const { data: firstCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: '',\n occupationSearchTypeCode: '1',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n const { data: secondCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: '2',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n\n const reset = () => {\n setSearchInput('');\n setSearchTerm('');\n setFirstCategory('');\n setSecondCategory('');\n };\n useEffect(() => {\n reset();\n }, [activeTab]);\n\n useEffect(() => {\n setSelectedJob(null);\n\n if (data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 있는 경우 */\n const filteredJobs = data.data.occupationList.filter((job) => job.occupationIndustryName.includes(searchTerm));\n setJobList(filteredJobs);\n } else if (!data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 없는 경우 */\n setJobList([]);\n } else if (!searchTerm && activeTab === 'jobName') {\n /** 검색어가 없고, 검색된 데이터가 없는 경우 , 많이 찾는 직종 노출 */\n setJobList(initData);\n } else if (activeTab === 'jobCode' && firstCategory && secondCategory) {\n /** 대분류, 중분류 선택된 경우 */\n setJobList(data?.data.occupationList || []);\n }\n }, [searchTerm, data, firstCategory, secondCategory, secondCategoryData, activeTab]);\n\n useEffect(() => {\n if (firstCategoryData) {\n setFirstCategoryList(firstCategoryData.data.occupationList);\n }\n }, [firstCategoryData]);\n\n useEffect(() => {\n if (secondCategoryData) {\n setSecondCategoryList(secondCategoryData.data.occupationList);\n }\n }, [secondCategoryData]);\n\n return {\n activeTab,\n setActiveTab,\n selectedJob,\n setSelectedJob,\n searchTerm,\n setSearchTerm,\n handleJobSelect,\n filteredJobs: jobList,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n secondCategoryList,\n firstCategoryList,\n reset,\n isLoading,\n selectedJobDetail\n };\n};\n\nexport function useJobSearchModal() {\n const {\n activeTab,\n setActiveTab,\n searchTerm,\n setSearchTerm,\n filteredJobs,\n handleJobSelect,\n selectedJob,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList,\n setSelectedJob,\n selectedJobDetail,\n reset,\n isLoading\n } = useJobSearch();\n\n const { isOpen, openModal, closeModal } = useModalState();\n const onTabChange = (value: string) => {\n reset();\n setActiveTab(value);\n };\n\n const openInitModal = () => {\n reset();\n setSelectedJob(null);\n setActiveTab('jobName');\n openModal();\n };\n\n const closeModalWithCheck = () => {\n if (!selectedJob) {\n ModalUtils.alert('직종을 선택하지 않았습니다. 직종 선택 후 다시 시도해주세요.', '직종을 선택해주세요.', {\n modalId: 'job-search-alert-no-selected'\n });\n\n return;\n }\n closeModal();\n };\n\n return {\n JobSearchModal: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>\n <JobSearch\n firstCategory={firstCategory}\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n setSecondCategory={setSecondCategory}\n isLoading={isLoading}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={closeModalWithCheck}\n // disabled={!selectedJob}\n >\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n ),\n JobSearchComponent: (\n <JobSearch\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n firstCategory={firstCategory}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n setSecondCategory={setSecondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n isLoading={isLoading}\n />\n ),\n isJobSearchOpen: isOpen,\n openJobSearchModal: openInitModal,\n closeJobSearchModal: closeModal,\n selectedJob,\n selectedJobDetail,\n resetJobSearch: reset,\n setSelectedJob\n };\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { IconIllustGrade } from 'sales-frontend-assets';\n\nimport styles from './job-vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\n\ninterface JobVehicleSearchGradeProps {\n riskGrade?: string | number;\n hospitalizationGrade?: string | number;\n}\n\nexport const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }: JobVehicleSearchGradeProps) => {\n return (\n <div className={cx('grade-section')}>\n <div className={cx('icon-title')}>\n <IconIllustGrade />\n <span className=\"typo-title5 text-body\">등급</span>\n </div>\n <p className=\"typo-body2 text-body_3\">직종, 운전 여부 선택시 자동으로 산정됩니다.</p>\n\n <div className={cx('grade-list')}>\n <div className={cx('grade')}>\n <span>위험등급</span>\n <span className=\"text-primary typo-subtitle3\">{riskGrade || '-'}</span>\n </div>\n <div className={cx('grade')}>\n <span>입원등급</span>\n <span className=\"text-primary typo-subtitle3\">{hospitalizationGrade || '-'}</span>\n </div>\n </div>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { VehicleTypeResponseDto } from 'sales-frontend-api/method';\nimport { Radio } from 'sales-frontend-design-system';\n\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface VehicleSearchProps {\n vehicles: VehicleTypeResponseDto[];\n onVehicleSelect: (vehicle: VehicleTypeResponseDto) => void;\n selectedVehicle?: VehicleTypeResponseDto;\n}\n\nexport function VehicleSearch({ vehicles, onVehicleSelect, selectedVehicle }: VehicleSearchProps) {\n return (\n <div className={cx('vehicle-search-section')}>\n <p>운전 차종</p>\n <Radio.Root\n name=\"vehicle-selection\"\n size=\"small\"\n className={cx('vehicle-radio-root')}\n defaultValue={selectedVehicle?.integrationCodeValue || ''}\n >\n {vehicles.map((vehicle, index) => (\n <Radio.Item\n key={`item-${vehicle.integrationCodeValue}-${index}`}\n id={`item-${vehicle.integrationCodeValue}`}\n size=\"small\"\n value={vehicle.integrationCodeValue || ''}\n onChange={(e) => {\n const { value } = e.target;\n const selected = vehicles.find((v) => v.integrationCodeValue === value);\n if (selected) {\n onVehicleSelect(selected);\n }\n }}\n className={cx('item')}\n >\n {vehicle.integrationCodeValueName}({vehicle.integrationCodeValue})\n </Radio.Item>\n ))}\n </Radio.Root>\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport { useSearchVehicleQuery, VehicleTypeResponseDto } from 'sales-frontend-api/method';\n\nimport { VehicleSearch } from './vehicle-search';\n\nexport const useVehicleSearch = () => {\n const [selectedVehicle, setSelectedVehicle] = useState<VehicleTypeResponseDto>();\n const { data } = useSearchVehicleQuery();\n\n // useSearchVehicleQuery\n return {\n VehicleSearchComponent: (\n <VehicleSearch\n vehicles={data?.data?.vehicleTypeList || []}\n onVehicleSelect={setSelectedVehicle}\n selectedVehicle={selectedVehicle}\n />\n ),\n selectedVehicle,\n setSelectedVehicle,\n vehicleList: data\n };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useSearchRiskGradeQuery } from 'sales-frontend-api/method';\n\nimport { useJobSearchModal } from '../job-search-modal/use-job-search';\nimport { useVehicleSearch } from '../vehicle-search-modal/use-vehicle-search';\n\nexport const useJobVehicleSearch = () => {\n const [rightPanelView, setRightPanelView] = useState('jobSearch'); // 'jobSearch' or 'vehicleSelection'\n const [riskGrade, setRiskGrade] = useState<string>('');\n const [hospitalizationGrade, setHospitalizationGrade] = useState<string>('');\n const { selectedJob, JobSearchComponent, selectedJobDetail, resetJobSearch, setSelectedJob } = useJobSearchModal();\n\n const { selectedVehicle, VehicleSearchComponent, setSelectedVehicle } = useVehicleSearch();\n const { data: riskGradeData } = useSearchRiskGradeQuery(\n {\n occupationIndustryCode: selectedJob?.occupationIndustryCode || '',\n vehicleTypeCode: selectedVehicle?.integrationCodeValue || ''\n },\n {\n enabled: !!selectedJob && !!selectedVehicle\n }\n );\n\n const reset = () => {\n setSelectedJob(null);\n resetJobSearch();\n setSelectedVehicle(undefined);\n setRiskGrade('');\n setHospitalizationGrade('');\n };\n\n useEffect(() => {\n if (selectedJob && selectedVehicle && riskGradeData) {\n const { riskGradeCode, riskGradeName } = riskGradeData.data;\n /**\n * 직종,차종이 모두 선택된 경우 등급 계산 API 호출\n * @todo 입원등급 조회 불가한 상태라 고정값으로 일단 노출합니다.\n * RiskGradeResponseDto\n riskGradeCode?: string;\n riskGradeName?: string;\n */\n\n setRiskGrade(`${riskGradeName}(${riskGradeCode})`);\n setHospitalizationGrade(\n `${selectedJobDetail?.hospitalizationGradeCodeName}(${selectedJobDetail?.hospitalizationGradeCode})`\n );\n }\n }, [selectedJob, selectedVehicle, riskGradeData, selectedJobDetail]);\n\n return {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch: JobSearchComponent,\n VehicleSearch: VehicleSearchComponent,\n riskGrade,\n hospitalizationGrade,\n resetJobVehicleSearch: reset\n };\n};\n","import classNames from 'classnames/bind';\nimport { IconIllustJob, IconIllustVehicle, IconSubUiArrowRight } from 'sales-frontend-assets';\nimport { ModalUtils, useModalState } from 'sales-frontend-design-system';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { JobVehicleSearchGrade } from './job-vehicle-search-grade';\nconst cx = classNames.bind(styles);\nimport styles from './job-vehicle-search-modal.module.scss';\nimport { useJobVehicleSearch } from './use-job-vehicle-search';\n\nexport function useJobVehicleSearchModal() {\n const {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch,\n VehicleSearch,\n riskGrade,\n hospitalizationGrade,\n resetJobVehicleSearch\n } = useJobVehicleSearch();\n const { isOpen, openModal, closeModal } = useModalState();\n\n const validate = () => {\n if (!selectedJob && !selectedVehicle) {\n return ModalUtils.alert(\n '직종과 운전 여부·차종을 모두 선택해야 등급 산정이 가능합니다.',\n '직종과 운전 여부·차종을 선택해주세요',\n {\n modalSize: 'small'\n }\n );\n }\n if (!selectedJob) {\n return ModalUtils.alert('직종을 선택해야 등급 산정이 가능합니다.', '직종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n if (!selectedVehicle) {\n return ModalUtils.alert('운전 여부·차종을 선택해야 등급 산정이 가능합니다.', '운전 여부·차종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n closeModal();\n };\n\n const openInitModal = () => {\n resetJobVehicleSearch();\n openModal();\n };\n\n return {\n selectedJob,\n selectedVehicle,\n riskGrade,\n hospitalizationGrade,\n isOpenJobVehicleModal: isOpen,\n openJobVehicleModal: openInitModal,\n closeJobVehicleModal: closeModal,\n JobVehicleSearchModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종·운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n <>\n <div className={cx('left-panel')}>\n <div className={cx('card-section')}>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'jobSearch' })}\n onClick={() => setRightPanelView('jobSearch')}\n >\n <div className={cx('card-title')}>\n <IconIllustJob className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>직종</span>\n <IconSubUiArrowRight />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedJob ? selectedJob.occupationIndustryName : '미선택'}\n </div>\n </div>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'vehicleSelection' })}\n onClick={() => setRightPanelView('vehicleSelection')}\n >\n <div className={cx('card-title')}>\n <IconIllustVehicle className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>운전 여부·차종</span>\n <IconSubUiArrowRight />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedVehicle?.integrationCodeValueName}\n {selectedVehicle?.integrationCodeValue || '미선택'}\n </div>\n </div>\n </div>\n <JobVehicleSearchGrade riskGrade={riskGrade} hospitalizationGrade={hospitalizationGrade} />\n </div>\n <div className={cx('right-panel')}>{rightPanelView === 'jobSearch' ? JobSearch : VehicleSearch}</div>\n </>\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={validate}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import classNames from 'classnames/bind';\nimport { OrganizationProfileResponse } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './organization-search-modal.module.scss';\n\ninterface OrganizationSearchResultProps {\n filteredOrganizations: OrganizationProfileResponse[];\n onOrganizationSelect: (organization: OrganizationProfileResponse) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function OrganizationSearchResult({\n filteredOrganizations,\n onOrganizationSelect\n}: OrganizationSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredOrganizations.length}</span>건의 검색결과\n </p>\n {filteredOrganizations.length > 0 ? (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>기관코드</th>\n <th className={cx('th-padding')}>기관명</th>\n </tr>\n </thead>\n <tbody>\n {filteredOrganizations.map((organization, index) => {\n return (\n <tr key={`${organization.organizationCode}-${index}`}>\n <td>\n <input\n type=\"radio\"\n name=\"organization\"\n value={organization.organizationCode || ''}\n onChange={() => onOrganizationSelect(organization)}\n />\n </td>\n <td>{organization.organizationCode}</td>\n <td>{organization.organizationName}</td>\n </tr>\n );\n })}\n </tbody>\n </Table>\n ) : (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>기관코드</th>\n <th className={cx('th-padding')}>기관명</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td colSpan={3}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n </tbody>\n </Table>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OrganizationProfileResponse } from 'sales-frontend-api/method';\nimport { Button, FormField } from 'sales-frontend-design-system';\n\nimport styles from './organization-search-modal.module.scss';\nimport { OrganizationSearchResult } from './organization-search-result';\n\nconst { TextField } = FormField;\n\ninterface OrganizationSearchProps {\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n searchInput: string;\n setSearchInput: (value: string) => void;\n organizationList: OrganizationProfileResponse[];\n onOrganizationSelect: (organization: OrganizationProfileResponse) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function OrganizationSearch({\n searchTerm,\n setSearchTerm,\n searchInput,\n setSearchInput,\n organizationList,\n onOrganizationSelect\n}: OrganizationSearchProps) {\n const handleSearch = () => {\n setSearchTerm(searchInput);\n };\n\n const handleReset = () => {\n setSearchTerm('');\n setSearchInput('');\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">기관명/코드</FormField.Label>\n <TextField\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n size=\"medium\"\n onKeyUp={(e) => e.key === 'Enter' && handleSearch()}\n rootProps={{\n className: cx('search-input'),\n clearable: true,\n onClear: handleReset\n }}\n />\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n {searchTerm && (\n <OrganizationSearchResult\n filteredOrganizations={organizationList}\n onOrganizationSelect={onOrganizationSelect}\n searchTerm={searchTerm}\n />\n )}\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { OrganizationProfileResponse, useSearchOrganizationQuery } from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { OrganizationSearch } from './organization-search';\n\ninterface OrganizationSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSelect: (organization: OrganizationProfileResponse) => void;\n}\n\nexport const OrganizationSearchModal: React.FC<OrganizationSearchModalProps> = ({ isOpen, onClose, onSelect }) => {\n const [selectedOrganization, setSelectedOrganization] = useState<OrganizationProfileResponse | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchOrganizationQuery({\n searchWord: searchTerm\n });\n\n const [organizationList, setOrganizationList] = useState<OrganizationProfileResponse[]>([]);\n\n useEffect(() => {\n if (data?.data) {\n setOrganizationList(data.data);\n } else {\n setOrganizationList([]);\n }\n }, [data]);\n\n const handleOrganizationSelect = (organization: OrganizationProfileResponse) => {\n setSelectedOrganization(organization);\n };\n\n const handleSelect = () => {\n if (selectedOrganization) {\n onSelect(selectedOrganization);\n onClose();\n }\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"기관 검색\" showCloseButton />\n <Modal.Body>\n <OrganizationSearch\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n searchInput={searchInput}\n setSearchInput={setSearchInput}\n organizationList={organizationList}\n onOrganizationSelect={handleOrganizationSelect}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSelect}\n disabled={!selectedOrganization}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { useVehicleSearch } from './use-vehicle-search';\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface JobVehicleSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function JobVehicleSearchModal({ onClose }: JobVehicleSearchModalProps) {\n const { selectedVehicle, VehicleSearchComponent } = useVehicleSearch();\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n {VehicleSearchComponent}\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={onClose}>\n 확인({selectedVehicle?.integrationCodeValueName || '미선택'})-{selectedVehicle?.integrationCodeValue}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n\nimport { useEffect, useState } from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField, type SegmentItems } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from '../modal';\n\nexport const FormSearchJobField = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n size = 'medium',\n placeholder = '직종 검색',\n onValueChange,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> &\n Omit<FormField.TextFieldProps, 'defaultValue'> & {\n onValueChange?: (value?: SegmentItems) => void;\n defaultValue?: SegmentItems;\n }) => {\n const [selected, setSelected] = useState<SegmentItems | undefined>(defaultValue);\n\n const { field, fieldState } = useController({ name, control, disabled });\n const { JobSearchModal, openJobSearchModal, selectedJob } = useJobSearchModal();\n\n useEffect(() => {\n if (selectedJob) {\n field.onChange(selectedJob.occupationIndustryName);\n setSelected({ label: selectedJob.occupationIndustryName, value: selectedJob.occupationIndustryCode });\n onValueChange?.({ label: selectedJob.occupationIndustryName, value: selectedJob.occupationIndustryCode });\n }\n }, [selectedJob]);\n\n return (\n <>\n <FormField.ComboBox\n {...props}\n {...field}\n id={field.name}\n error={fieldState.invalid || error}\n value={selected?.label ?? ''}\n icon=\"search\"\n size={size}\n placeholder={placeholder}\n autoComplete=\"off\"\n onClick={openJobSearchModal}\n />\n {JobSearchModal}\n </>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { SegmentGroup, type SegmentGroupHtmlProps } from 'sales-frontend-design-system';\n\nexport interface FormSegmentGroupProps<TFormValues extends FieldValues>\n extends Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'>,\n Omit<SegmentGroupHtmlProps, 'defaultValue'> {\n disabledItems?: string[];\n}\n\nexport const FormSegmentGroup = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n disabledItems,\n items,\n ...props\n}: FormSegmentGroupProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const itemList = items.map((item) => {\n return {\n ...item,\n disabled: disabledItems?.includes(item.value)\n };\n });\n\n return (\n <SegmentGroup\n {...props}\n tabIndex={0}\n id={field.name}\n ref={field.ref}\n defaultValue={field.value}\n disabled={field.disabled}\n error={fieldState.invalid}\n onBlur={field.onBlur}\n items={itemList}\n onValueChange={(selected) => {\n field.onChange(selected);\n props.onValueChange?.(selected);\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OptionProps, Select, SelectProps } from 'sales-frontend-design-system';\n\nimport type { SegmentItems } from 'sales-frontend-design-system';\n\n/**\n * 영업지원 시스템 셀렉트필드\n * @param param0\n * @returns\n */\n\ntype FormSelectProps<TFormValues extends FieldValues> = Pick<\n UseControllerProps<TFormValues>,\n 'name' | 'control' | 'disabled'\n> &\n Omit<SelectProps, 'defaultValue'>;\n\nexport const FormSelect = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n children,\n ...props\n}: FormSelectProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <Select\n {...props}\n id={field.name}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onBlur={field.onBlur}\n value={field.value}\n onChange={(selected) => {\n field.onChange(selected);\n }}\n >\n {children}\n </Select>\n );\n};\n\nconst FormSelectOption = ({ children, value, ...rest }: OptionProps) => {\n return (\n <Select.Option value={value} {...rest}>\n {children}\n </Select.Option>\n );\n};\n\ninterface IFormSelectGroupProps<TFormValues extends FieldValues> extends FormSelectProps<TFormValues> {\n options: SegmentItems[];\n optionsProps?: Omit<OptionProps, 'children' | 'value'>;\n}\n\nconst FormSelectGroup = <TFormValues extends FieldValues>({\n options,\n optionsProps,\n ...props\n}: Omit<IFormSelectGroupProps<TFormValues>, 'children'>) => {\n return (\n <FormSelect {...props}>\n {options.map(\n (option) =>\n option.label && (\n <FormSelectOption key={option.value} value={option.value} {...optionsProps}>\n {option.label}\n </FormSelectOption>\n )\n )}\n </FormSelect>\n );\n};\n\nFormSelect.Option = FormSelectOption;\nFormSelect.Group = FormSelectGroup;\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField } from 'sales-frontend-design-system';\n\nexport const FormTextField = <TFormValues extends FieldValues>({\n name,\n control,\n size = 'medium',\n disabled,\n error,\n onBlur,\n onChange,\n rootProps,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & FormField.TextFieldProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <FormField.TextField\n {...props}\n id={field.name}\n size={size}\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { ModalUtils } from 'sales-frontend-design-system';\n\nimport styles from './step-indicator.module.scss';\n\nimport type { StepIndicatorProps, StepItem } from './step-indicator.types';\n\nconst cx = classNames.bind(styles);\n\nexport const StepIndicator = ({\n items,\n onClickItem,\n currentIndex = 0,\n defaultValue = '',\n dotCount = 3,\n isLoading\n}: StepIndicatorProps) => {\n const [steps, setSteps] = React.useState<StepItem[]>(\n Array.from({ length: 10 }).map(() => ({ label: '-', value: '' }))\n );\n const [current, setCurrent] = React.useState(currentIndex);\n\n React.useEffect(() => {\n if (items.length > 0) {\n setSteps(items);\n items.map((item, idx) => {\n if (item.value === defaultValue) {\n setCurrent(idx);\n }\n });\n }\n }, [items, defaultValue]);\n\n const handleClickStep = (item: StepItem) => {\n const index = steps.findIndex((step) => step.value === item.value);\n\n if (index === -1) {\n console.error('error not found index');\n\n return;\n }\n\n if (steps[index < 1 ? index : index - 1]?.isCompleted) {\n onClickItem?.(item);\n } else {\n ModalUtils.alert('이전 단계를 모두 완료해야 선택한 단계로\\n이동할 수 있습니다.', '이전 단계를 먼저 진행해주세요');\n }\n };\n\n return (\n <div className={cx('stepper-layout', { loading: isLoading })}>\n <div className={cx('stepper')}>\n {steps.map((item, idx) => (\n <React.Fragment key={`num-${idx}`}>\n <div\n className={cx(\n 'circle',\n { completed: item.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n {item.isCompleted ? <span className={cx('completed-icon')} /> : idx + 1}\n </div>\n {/* 다음 단계가 있을 때만 dot 렌더링 */}\n {idx < steps.length - 1 &&\n Array.from({ length: dotCount }).map((_, dotIdx) => (\n <span key={`dot-${idx}-${dotIdx}`} className={cx('dot')} />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n <ul className={cx('step-labels')}>\n {steps.map((item, idx) => (\n <li\n key={`label-${idx}`}\n className={cx(\n { completed: steps[idx < 1 ? idx : idx - 1]?.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n <span className=\"text-ellipsis\">{item.label ?? item.value}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { IconIllustCamera } from 'sales-frontend-assets';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './camera.module.scss';\nimport { AttachedPhoto, cameraItemType } from './camera.types';\n\nconst cx = classNames.bind(styles);\n\nexport interface AttachmentProps {\n photos: AttachedPhoto[];\n onAddPhoto: () => void;\n onRemovePhoto: (id: string) => void;\n /* false이면 사진이 1장 이상일 때만 표시 */\n show: boolean;\n type?: cameraItemType;\n buttonText?: string;\n}\n\nexport function Attachment({\n photos,\n onAddPhoto,\n onRemovePhoto,\n show,\n type = 'multiple',\n buttonText\n}: AttachmentProps) {\n const handleAddPhoto = () => {\n onAddPhoto();\n };\n\n const handleRemovePhoto = (id: string) => {\n onRemovePhoto(id);\n };\n\n const renderPhotoSingle = () => {\n if (photos.length === 0) {\n return (\n <div className={cx('single-photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button-single')} onClick={handleAddPhoto}>\n <IconIllustCamera />\n <span>{buttonText || '사진 첨부하기'}</span>\n </button>\n </div>\n );\n }\n\n return photos.map((photo) => (\n <div key={photo.id} className={cx('single-photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n ));\n };\n\n const renderPhotoGrid = () => {\n const maxPhotos = type === 'single' ? 1 : 4;\n const gridItems = [];\n\n if (photos.length < maxPhotos) {\n gridItems.push(\n <div key=\"add-photo\" className={cx('photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button')} onClick={handleAddPhoto}>\n <IconIllustCamera />\n <span>{buttonText || '첨부하기'}</span>\n <span className={cx('photo-count')}>\n (<span className={cx('photo-count-number')}>{photos.length}</span>/{maxPhotos})\n </span>\n </button>\n </div>\n );\n }\n\n photos.forEach((photo) => {\n gridItems.push(\n <div key={photo.id} className={cx('photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n );\n });\n\n return gridItems;\n };\n\n const isVisible = show || (!show && photos.length > 0);\n\n if (!isVisible) {\n return null;\n }\n\n if (type === 'single') {\n return <div className={cx('photo-single')}>{renderPhotoSingle()}</div>;\n }\n\n return <div className={cx('photo-grid', { linear: type === 'linear' })}>{renderPhotoGrid()}</div>;\n}\n","import { cameraOptions } from './camera.types';\n\n// 3mb\nconst maxImageSize = 3 * 1024 * 1024;\n/**\n *\n * 이미지를 파라미터로 전달하고, 설정한 리사이즈 옵션에 따라 이미지를 리사이징하고 리턴한다.\n * 리턴하는 데이터타입은 전달받은 데이터 타입과 동일하게 한다.\n * base64 string을 전달받은 경우는 base64 string을 리턴하고\n * file 타입을 전달받은 경우는 file 타입을 리턴한다.\n *\n * options 규칙\n * width 와 height 중 1개가 존재하는 경우 해당 사이즈에 맞게 원본비율유지하여 축소한다.\n * width 와 height 가 모두 존재하는 경우 해당 사이즈에 맞게 원본비율을 무시하고 리사이즈한다.\n *\n * filesize 옵션이 존재하는 경우는 width,height 옵션을 무시하고, filesize 이하로 원본비율 축소한다.\n *\n * width, height 의 단위는 px 이다.\n *\n * ext는 리턴데이터 타입이 파일인 경우, 사용할 파일확장자 이다.\n * ext가 설정된 값이 없는 경우는, 기본값으로 jpeg를 사용한다.\n *\n */\nexport function resize<T extends string | File>(\n image: T,\n options: cameraOptions['resize'] = { ext: 'jpeg', filesize: maxImageSize }\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Canvas context를 생성할 수 없습니다.'));\n\n return;\n }\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n img.onload = () => {\n let { width, height } = img;\n const { filesize, ext } = options;\n\n // filesize 옵션이 있는 경우 width, height 옵션을 무시하고 filesize 이하로 원본비율 축소\n if (filesize) {\n const originalSize = width * height * 4; // RGBA 4바이트\n if (originalSize > filesize) {\n const ratio = Math.sqrt(filesize / originalSize);\n width = Math.floor(width * ratio);\n height = Math.floor(height * ratio);\n }\n } else {\n // width, height 옵션 처리\n const { width: targetWidth, height: targetHeight } = options;\n\n if (targetWidth && targetHeight) {\n // width와 height가 모두 존재하는 경우 원본비율 무시하고 리사이즈\n width = targetWidth;\n height = targetHeight;\n } else if (targetWidth) {\n // width만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetWidth / width;\n width = targetWidth;\n height = Math.floor(height * ratio);\n } else if (targetHeight) {\n // height만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetHeight / height;\n height = targetHeight;\n width = Math.floor(width * ratio);\n }\n }\n\n // canvas 크기 설정\n canvas.width = width;\n canvas.height = height;\n\n // 이미지 그리기\n ctx.drawImage(img, 0, 0, width, height);\n\n // 결과 반환\n if (typeof image === 'string') {\n // base64 string인 경우\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const quality = ext === 'png' ? 1.0 : 0.8;\n const base64 = canvas.toDataURL(mimeType, quality);\n resolve(base64 as T);\n } else {\n // File인 경우\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error('Blob을 생성할 수 없습니다.'));\n\n return;\n }\n\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const fileName = image.name ? `${image.name.replace(/\\.[^/.]+$/, '') }.${ ext}` : `resized.${ ext}`;\n\n const resizedFile = new File([blob], fileName, { type: mimeType });\n resolve(resizedFile as T);\n },\n ext === 'png' ? 'image/png' : 'image/jpeg',\n ext === 'png' ? 1.0 : 0.8\n );\n }\n };\n\n img.onerror = () => {\n reject(new Error('이미지를 로드할 수 없습니다.'));\n };\n\n // 이미지 소스 설정\n if (typeof image === 'string') {\n img.src = image;\n } else {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result) {\n img.src = e.target.result as string;\n } else {\n reject(new Error('파일을 읽을 수 없습니다.'));\n }\n };\n reader.onerror = () => {\n reject(new Error('파일을 읽을 수 없습니다.'));\n };\n reader.readAsDataURL(image);\n }\n });\n}\n","import { useEffect, useState } from 'react';\n\nimport { Attachment } from './attachment';\nimport { resize } from './resize';\n\nimport type { AttachedPhoto, cameraOptions } from './camera.types';\n\nconst genImageId = () => `camera-${Date.now()}-${Math.random()}`;\n\nexport function useCamera({\n onChange,\n resize: resizeOption,\n cameraOnly,\n onDelete,\n show,\n type = 'multiple',\n buttonText\n}: Partial<cameraOptions> = {}) {\n const [attachedPhotos, setAttachedPhotos] = useState<AttachedPhoto[]>([]);\n\n const findImage = (imageId: string) => {\n return attachedPhotos.find((image) => image.id === imageId);\n };\n\n /**\n * onClick시, input File생성후 카메라 또는 파일선택 호출\n */\n const onClick = () => {\n // input을 dom으로 생성, type='file' , cameraOnly 가 true이면 카메라만 실행가능하도록 input 을 설정\n // true가 아니면 이미지확장자파일과, 카메라선택 둘다 가능하도록 설정\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n\n if (cameraOnly) {\n // 카메라만 실행 가능하도록 설정\n input.capture = 'camera';\n }\n\n // 파일 선택 이벤트 리스너 추가\n input.addEventListener('change', async (event) => {\n const target = event.target as HTMLInputElement;\n const { files } = target;\n\n if (files && files.length > 0) {\n const file = files[0];\n // onChange 콜백 호출\n if (file) {\n const resizedFile = await resize(file, resizeOption);\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: URL.createObjectURL(resizedFile),\n name: `서류사진_${attachedPhotos.length + 1}`\n };\n\n if (type === 'single') {\n setAttachedPhotos([newPhoto]);\n } else {\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n\n onChange && onChange(file);\n }\n }\n\n // input 요소 제거\n document.body.removeChild(input);\n });\n\n // input을 body에 추가하고 click 이벤트 발생\n input.style.display = 'none';\n document.body.appendChild(input);\n input.click();\n };\n\n /**\n * 선택한 이미지 삭제\n * @param imageId 이미지아이디\n */\n const deleteImage = (imageId: string) => {\n const imageIndex = attachedPhotos.findIndex((image) => image.id === imageId);\n if (imageIndex > -1) {\n const item = attachedPhotos.splice(imageIndex, 1);\n item[0] && URL.revokeObjectURL(item[0].src);\n setAttachedPhotos([...attachedPhotos]);\n onDelete && onDelete(imageId);\n }\n };\n\n const CameraComponent = () => (\n <Attachment\n show={!!show}\n onAddPhoto={onClick}\n onRemovePhoto={deleteImage}\n photos={attachedPhotos}\n type={type}\n buttonText={buttonText}\n />\n );\n\n useEffect(() => {\n return () => {\n // revoke all images url\n attachedPhotos.forEach((image) => {\n URL.revokeObjectURL(image.src);\n });\n };\n }, []);\n\n return {\n onClick,\n getImage: findImage,\n deleteImage,\n attachedPhotos,\n Attachment: CameraComponent\n };\n}\n","import { useRef, useEffect, useState, useCallback } from 'react';\n\nimport { DownloadProps, PaintProps } from './canvas-paint.types';\n\n/** undo, redo 가능한 히스토리 최대 저장 갯수 */\nconst HISTORY_SIZE = 100;\n\n/** 기본 다운로드 값 */\nconst DEFAULT_DOWNLOAD_PROPS: Required<DownloadProps> = {\n fileExtendsion: 'png',\n fileName: 'image',\n transparent: true,\n backgroundColor: 'white',\n width: 500,\n height: 500\n};\nexport function useCanvasPaint(paintProps: PaintProps = {}) {\n const { pen = { strokeWeight: 5, strokeColor: 'black' }, onChange, onStart, onEnd } = paintProps;\n const [canvasRefState, setCanvasRefState] = useState<HTMLCanvasElement | null>(null);\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const [isPainting, setIsPainting] = useState(false);\n const [history, setHistory] = useState<string[]>([]);\n const [historyIndex, setHistoryIndex] = useState(-1);\n\n const saveState = useCallback(() => {\n if (!canvasRefState) {\n return;\n }\n const dataUrl = canvasRefState.toDataURL();\n\n const newHistory = history.slice(0, historyIndex + 1);\n if (newHistory.length >= HISTORY_SIZE) {\n newHistory.shift();\n }\n newHistory.push(dataUrl);\n\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n onChange && onChange();\n }, [history, historyIndex, onChange, canvasRefState]);\n\n const restoreState = useCallback(\n (index: number) => {\n const context = contextRef.current;\n if (!canvasRefState || !context || !history[index]) {\n return;\n }\n\n const dataUrl = history[index];\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n onChange && onChange();\n },\n [history, onChange, canvasRefState]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n const context = canvasRefState.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return;\n }\n contextRef.current = context;\n\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n }, [canvasRefState]);\n\n useEffect(() => {\n const context = contextRef.current;\n if (context) {\n context.lineWidth = pen.strokeWeight;\n context.strokeStyle = pen.strokeColor;\n }\n }, [pen]);\n\n /**\n * @description canvas의 크기가 동적으로 생성되는 경우,\n * 포인터의 위치가 맞지않는 이슈를 해결하기위한,\n * scale조정하는 함수입니다.\n */\n const getEventPosition = useCallback(\n (event: MouseEvent | TouchEvent) => {\n if (!canvasRefState) {\n return null;\n }\n\n const rect = canvasRefState.getBoundingClientRect();\n const scaleX = canvasRefState.width / rect.width;\n const scaleY = canvasRefState.height / rect.height;\n\n let clientX;\n let clientY;\n\n if (event instanceof MouseEvent) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else if (event instanceof TouchEvent) {\n const touch = event.touches[0];\n if (!touch) {\n return null;\n }\n clientX = touch.clientX;\n clientY = touch.clientY;\n } else {\n return null;\n }\n\n const offsetX = (clientX - rect.left) * scaleX;\n const offsetY = (clientY - rect.top) * scaleY;\n\n return { offsetX, offsetY };\n },\n [canvasRefState]\n );\n\n const startPainting = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const context = contextRef.current;\n if (!context) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n onStart && onStart();\n const { offsetX, offsetY } = pos;\n context.beginPath();\n context.moveTo(offsetX, offsetY);\n setIsPainting(true);\n },\n [onStart, getEventPosition]\n );\n\n const stopPainting = useCallback(() => {\n const context = contextRef.current;\n if (!context || !isPainting) {\n return;\n }\n context.closePath();\n setIsPainting(false);\n onEnd && onEnd();\n saveState();\n }, [isPainting, onEnd, saveState]);\n\n const paint = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n if (!isPainting || !contextRef.current) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n const { offsetX, offsetY } = pos;\n contextRef.current.lineTo(offsetX, offsetY);\n contextRef.current.stroke();\n },\n [isPainting, getEventPosition]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n\n canvasRefState.addEventListener('mousedown', startPainting);\n canvasRefState.addEventListener('mouseup', stopPainting);\n canvasRefState.addEventListener('mousemove', paint);\n canvasRefState.addEventListener('mouseleave', stopPainting);\n\n canvasRefState.addEventListener('touchstart', startPainting);\n canvasRefState.addEventListener('touchend', stopPainting);\n canvasRefState.addEventListener('touchmove', paint);\n canvasRefState.addEventListener('touchcancel', stopPainting);\n\n return () => {\n canvasRefState.removeEventListener('mousedown', startPainting);\n canvasRefState.removeEventListener('mouseup', stopPainting);\n canvasRefState.removeEventListener('mousemove', paint);\n canvasRefState.removeEventListener('mouseleave', stopPainting);\n\n canvasRefState.removeEventListener('touchstart', startPainting);\n canvasRefState.removeEventListener('touchend', stopPainting);\n canvasRefState.removeEventListener('touchmove', paint);\n canvasRefState.removeEventListener('touchcancel', stopPainting);\n };\n }, [startPainting, stopPainting, paint, canvasRefState]);\n\n const clear = () => {\n const context = contextRef.current;\n if (canvasRefState && context) {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n onChange && onChange();\n }\n };\n\n const undo = () => {\n if (historyIndex > 0) {\n const newIndex = historyIndex - 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const redo = () => {\n if (historyIndex < history.length - 1) {\n const newIndex = historyIndex + 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const loadImage = (base64String: string) => {\n const context = contextRef.current;\n if (!canvasRefState || !context) {\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0, canvasRefState.width, canvasRefState.height);\n saveState();\n };\n img.src = base64String;\n };\n\n const getBase64String = (imageProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...imageProps };\n const { fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n return tempCanvas.toDataURL(`image/${fileExtendsion}`);\n }\n };\n\n const download = (downloadProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...downloadProps };\n const { fileName, fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n const link = document.createElement('a');\n link.download = `${fileName}.${fileExtendsion}`;\n link.href = tempCanvas.toDataURL(`image/${fileExtendsion}`);\n link.click();\n }\n };\n /**\n * canvasRef.current canvas 에 데이터가 있는지 확인후 boolean 리턴\n * @returns boolean\n */\n const isCanvasBlank = () => {\n if (!canvasRefState) {\n return true;\n }\n\n // 캔버스 크기 가져오기\n const { width, height } = canvasRefState;\n\n // 2D 렌더링 컨텍스트 가져오기\n const ctx = canvasRefState.getContext('2d');\n if (!ctx) {\n console.error('2D context not available');\n\n return true; // 컨텍스트가 없으면 비어있는 것으로 간주\n }\n\n // 캔버스 전체 영역의 픽셀 데이터 가져오기\n const imageData = ctx.getImageData(0, 0, width, height);\n const { data } = imageData;\n\n // 픽셀 데이터의 알파(alpha) 값을 순회하며 확인\n // RGBA 순서이므로 알파 값은 3, 7, 11, ... 인덱스에 위치\n for (let i = 0; i < data.length; i += 4) {\n // 알파 값이 0이 아니면 (불투명한 부분이 있으면)\n if (data[i + 3] !== 0) {\n return false; // 캔버스가 비어있지 않음\n }\n }\n\n // 모든 픽셀의 알파 값이 0이면 (모두 투명하면)\n return true; // 캔버스가 비어있음\n };\n\n return {\n clear,\n undo,\n redo,\n loadImage,\n download,\n getBase64String,\n isCanvasBlank,\n setCanvasRefState,\n canvasRefState\n };\n}\n","/**\n * 서명로드용 base64 string\n */\nexport const testSignatureBase64Data =\n 'data:image/png;base64,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';\n","import { useState, useEffect, useRef } from 'react';\n\nimport { getRemoteIdentityVerificationSystemToken } from 'sales-frontend-api/method';\nimport { Modal, useModalState, Loading, ModalUtils } from 'sales-frontend-design-system';\nimport { MessageEventManager } from 'sales-frontend-utils';\n\nimport { VerificationResponse } from './remote-identity-verification.types';\nimport {\n UseRemoteIdentityVerificationProps,\n RemoteIdentityVerificationSuccess\n} from './remote-identity-verification.types';\n\nconst VERIFICATION_CODES = {\n SUCCESS: '0000',\n USER_CANCEL: '9000',\n TOKEN_ERROR: '9001',\n CAMERA_PERMISSION: '9002',\n ATTEMPT_EXCEEDED: '9003',\n SERVER_ERROR: '9999'\n} as const;\n\n/**\n * 비대면인증시스템 기본 로직\n * @param config\n */\nexport const useRemoteIdentityVerification = ({\n rivEnv,\n rivOrigin,\n tokenRequestParams,\n apiConfig,\n onCancel,\n onError,\n onSuccess,\n rivSearchParams\n}: UseRemoteIdentityVerificationProps) => {\n const rivHost = rivOrigin ?? `https://${rivEnv === 'prd' ? '' : rivEnv === 'stg' ? 'qa' : 'dev'}riv.hanwhalife.com`;\n\n // RIV URL 생성\n const createRemoteIdentityVerificationUrl = async () => {\n const response = await getRemoteIdentityVerificationSystemToken(tokenRequestParams, apiConfig);\n const { accessToken, remoteIdentityVerificationSystemRequestId } = response.data;\n\n const urlParams = new URLSearchParams({\n authorization: accessToken,\n rivsRqstId: remoteIdentityVerificationSystemRequestId,\n ...rivSearchParams\n });\n\n return { fullUrl: `${rivHost}/?${urlParams.toString()}`, rivsRqstId: remoteIdentityVerificationSystemRequestId };\n };\n\n // PostMessage 핸들러 생성\n const createMessageHandler = ({ rivsRqstId }: RemoteIdentityVerificationSuccess, cleanup?: () => void) => {\n return (event: MessageEvent) => {\n try {\n const response: VerificationResponse =\n typeof event.data === 'string' ? JSON.parse(decodeURIComponent(event.data)) : event.data;\n\n if (response.command !== 'webClose') {\n return;\n }\n\n const { result, code } = response.args;\n\n switch (code) {\n case VERIFICATION_CODES.USER_CANCEL:\n console.log('=====사용자 종료!=====', { result, code });\n onCancel?.({ result, code });\n cleanup?.();\n break;\n\n case VERIFICATION_CODES.TOKEN_ERROR:\n case VERIFICATION_CODES.CAMERA_PERMISSION:\n case VERIFICATION_CODES.ATTEMPT_EXCEEDED:\n case VERIFICATION_CODES.SERVER_ERROR:\n console.log('=====비대면인증 실패!=====', { result, code });\n onError?.({ result, code }, { rivsRqstId });\n cleanup?.();\n break;\n\n case VERIFICATION_CODES.SUCCESS:\n console.log('=====비대면인증 성공!=====', { result, code });\n onSuccess?.({ result, code }, { rivsRqstId });\n cleanup?.();\n break;\n\n default:\n console.warn('Unknown verification code:', code);\n }\n } catch (error) {\n console.error('Failed to parse postMessage:', error);\n }\n };\n };\n\n return {\n createRemoteIdentityVerificationUrl,\n createMessageHandler\n };\n};\n\n/**\n * Iframe용 비대면인증시스템 훅\n * @param config\n * @returns\n */\nexport const useRemoteIdentityVerificationIframe = (config: UseRemoteIdentityVerificationProps) => {\n const { createMessageHandler, createRemoteIdentityVerificationUrl } = useRemoteIdentityVerification(config);\n const { isOpen, openModal, closeModal } = useModalState();\n const [remoteIdentityVerificationUrl, setRemoteIdentityVerificationUrl] = useState('');\n const [rivsRqstId, setRivsRqstId] = useState('');\n const [isCreatingUrl, setIsCreatingUrl] = useState(false);\n const [isIframeLoaded, setIsIframeLoaded] = useState(false);\n\n // iframe용 URL 생성\n const createIframeUrl = async () => {\n if (remoteIdentityVerificationUrl || isCreatingUrl) {\n return;\n }\n\n setIsCreatingUrl(true);\n setIsIframeLoaded(false);\n\n try {\n const { fullUrl, rivsRqstId } = await createRemoteIdentityVerificationUrl();\n setRemoteIdentityVerificationUrl(fullUrl);\n setRivsRqstId(rivsRqstId);\n } catch (error) {\n console.error('Failed to create URL:', error);\n throw error;\n } finally {\n setIsCreatingUrl(false);\n }\n };\n\n const openRivIframe = async () => {\n try {\n await createIframeUrl();\n openModal();\n } catch (error) {\n console.error('openRivIframe error::', error);\n\n await ModalUtils.alert('비대면 인증 URL 생성에 실패했습니다. 다시 시도해주세요.');\n config.onError?.(\n {\n result: 'N',\n code: VERIFICATION_CODES.TOKEN_ERROR\n },\n { rivsRqstId: '' }\n );\n }\n };\n\n const closeRivIframe = () => {\n setRemoteIdentityVerificationUrl('');\n setRivsRqstId('');\n setIsIframeLoaded(false);\n closeModal();\n };\n\n useEffect(() => {\n if (!remoteIdentityVerificationUrl) {\n return;\n }\n\n const messageHandler = createMessageHandler({ rivsRqstId }, closeRivIframe);\n MessageEventManager.getInstance().registerHandler('riv-iframe-handler', messageHandler);\n\n return () => MessageEventManager.getInstance().unregisterHandler('riv-iframe-handler');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [remoteIdentityVerificationUrl, rivsRqstId]);\n\n // Iframe 컴포넌트\n const RivIframe = ({\n width = '100%',\n height = '100%',\n ...iframeProps\n }: React.IframeHTMLAttributes<HTMLIFrameElement> & {\n width?: string;\n height?: string;\n }) => {\n if (!remoteIdentityVerificationUrl) {\n return null;\n }\n\n return (\n <iframe\n src={remoteIdentityVerificationUrl}\n width={width}\n height={height}\n allow=\"camera *;\"\n onLoad={() => setIsIframeLoaded(true)}\n {...iframeProps}\n />\n );\n };\n\n // Modal + Iframe 컴포넌트\n const RivModalIframe = ({\n width = '100%',\n height = '100%',\n loadingComponent,\n ...iframeProps\n }: React.IframeHTMLAttributes<HTMLIFrameElement> & {\n width?: string;\n height?: string;\n loadingComponent?: React.ReactNode;\n }) => {\n const isLoading = isCreatingUrl || (!!remoteIdentityVerificationUrl && !isIframeLoaded);\n\n return (\n <>\n <Modal.Root isOpen={isOpen}>\n {isLoading && (loadingComponent || <Loading.Wait bodyText={'불러오는 중'} />)}\n <RivIframe\n width={width}\n height={height}\n allow=\"camera *;\"\n {...iframeProps}\n style={{\n background: 'var(--sales-color-background-100, #ffffff)',\n ...iframeProps?.style\n }}\n />\n </Modal.Root>\n </>\n );\n };\n\n return {\n RivModalIframe,\n RivIframe,\n\n openRivIframe,\n closeRivIframe,\n\n remoteIdentityVerificationUrl,\n isCreatingUrl,\n isFullyLoaded: isIframeLoaded\n };\n};\n\n/**\n * 팝업용 비대면인증시스템 훅\n * @param config\n * @returns\n */\nexport const useRemoteIdentityVerificationPopup = (config: UseRemoteIdentityVerificationProps) => {\n const { createRemoteIdentityVerificationUrl, createMessageHandler } = useRemoteIdentityVerification(config);\n const [isCreatingUrl, setIsCreatingUrl] = useState(false);\n const [rivsRqstId, setRivsRqstId] = useState('');\n const popupRef = useRef<Window | null>(null);\n\n const openPopup = async (target = '_blank', features?: string) => {\n // 이전 팝업이 열려있으면 닫기\n if (popupRef.current && !popupRef.current.closed) {\n popupRef.current.close();\n }\n\n setIsCreatingUrl(true);\n try {\n const { fullUrl, rivsRqstId } = await createRemoteIdentityVerificationUrl();\n\n const popup = window.open(fullUrl, target, features);\n\n if (!popup) {\n await ModalUtils.alert('팝업이 차단되었습니다. 팝업을 허용해주세요.');\n\n return;\n }\n\n setRivsRqstId(rivsRqstId);\n popupRef.current = popup;\n } catch (error) {\n console.error('openPopup error::', error);\n await ModalUtils.alert('비대면 인증 URL 생성에 실패했습니다. 다시 시도해주세요.');\n } finally {\n setIsCreatingUrl(false);\n }\n };\n const cleanPopup = () => {\n popupRef.current = null;\n };\n\n useEffect(() => {\n const messageHandler = createMessageHandler({ rivsRqstId }, cleanPopup);\n\n MessageEventManager.getInstance().registerHandler('riv-popup-handler', messageHandler);\n\n return () => MessageEventManager.getInstance().unregisterHandler('riv-popup-handler');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rivsRqstId]);\n\n return {\n openPopup,\n isCreatingUrl\n };\n};\n"],"names":["cx","InputBox","Input","styles","chunk","filterList","TextField","rivsRqstId"],"mappings":"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","x_google_ignoreList":[4]}